Доступен выпуск проекта Nuitka 1.6, развивающего компилятор для трансляции скриптов на языке Python в представление на языке C, которое затем можно скомпилировать в исполняемый файл, использующий libpython для обеспечения максимальной совместимости с CPython (используются штатные средства CPython для управления объектами). Обеспечена полная совместимость с актуальными выпусками Python 2.6, 2.7, 3.3 - 3.11. По сравнению с CPython скомпилированные скрипты демонстрируют в тестах pystone повышение производительности на 335%. Код проекта распространяется под лицензией Apache...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59280
На С делаем Python , потом libpython чтобы поддерживать представление на С , полученном с компилятором из Python , чтобы сделать совместимость с CPython - шизофазия .
На самом деле идея не плохая, хотя бы тем, что доказывает возможность применения автоматического управления жизнью объекта на языках низкого уровня, а вместе с этим таких плюшек как проверка доступа к несуществующему элементу массива, внятный дамп стека при падении и т.п. Хотя конкретно Нуитку использовал когда то у себя, но столкнулся с катастрофическим падением производительности, по сравнению с интерпретатором, и пришлось отказаться от неё, но это было давно и возможно уже не актуально.
Всегда использовал нуитку как способ дистрибуции, а не ускорялку. Никаких супер пупер ускорений не замечал с нуиткой.
Она ощутимо замедляет. Интерпретатор у меня собран с пго и интересными флагами, в итоге в 2 раза быстрее исполняется на ряде задач (6 секунд вместо 12), а сабж мало того что гигабайты блобов в память подгружает, так и исполняет код на скорости дефолтного -O2, если не медленнее. Время запуска каждый раз куда больше, опять же.
> возможность применения автоматического управления жизнью объекта на языках низкого уровня
> доказывает возможность применения
> автоматического управления жизнью объекта на языках низкого уровняНе доказывает, а показывает.
Си - это не "низкий" уровень, а "высокий" (или "средний").
"На ассемблере" тоже можно управлять.
Вполне себе такая нормальная шизофрения.
libpython нужен не для этого. Такое впечатление, что ты вообще не представляешь, о чём говоришь.
Зачем тогда писать на Python? Пишите уж сразу на Си, а то какой-то TypeScript для Си получился...
На си нет pytorch и остального. Может, ты напишешь?
Вообще-то pytorch на C++ написан, а python биндинг...
Вообще тип того, да. Но это обрекать себя на лишнюю боль непонятно ради чего. А если мне надо spacy/thinc? Поверх tensorflow оно не очень работало тоже, когда я в прошлый раз интересовался, нужен torch. Я, кстати, не слышал, чтобы торч кто-нибудь использовал без питона, там всё больше тензорфлоу. Но это не замена, слишком разные.
Может ты сделаешь чтобы си работал как интерпретатор? В интерактивном режиме.
root
может сразу на Julia писать?
> Может ты сделаешь чтобы си работал как интерпретатор? В интерактивном режиме.А почему нет, вполне работает
#!/usr/local/bin/tcc -run
#include <stdio.h>
int main() {
printf("Hello, AnonimoNet!");
return 0;
}
А теперь сделай так, чтобы:
1. tcc умел вычислять отдельные выражения как gdb.
2. во время работы программы можно было бы заменять функции.
> 2. во время работы программы можно было бы заменять функции.Если так сделать, получится другой язык.
5.1.1.2 Translation phases
1 The precedence among the syntax rules of translation is specified by the following phases.
...
8. All external object and function references are resolved. Library components are linked to
satisfy external references to functions and objects not defined in the current translation. All
such translator output is collected into a program image which contains information needed
for execution in its execution environment.
Тогда берем gcc, и задача сводится к предыдущей.-----
#!/bin/sh
tail -n +4 $0 | gcc -Wall -o /tmp/cscript.$$ -x c - && /tmp/cscript.$$ "$@"
ret=$? ; rm -f /tmp/cscript.$$ ; exit $ret#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}-----
Под Windows погаже выглядит, но быстрее же питонов, сишарпов и яваскриптов. И может всё!
-----
@ECHO OFF
set PATH=d:\Programs\@Develop\codeblocks-17.12mingw\MinGW\bin;d:\usr\bin\;%PATH%
SET ONAME=%TEMP%\tmp_script
rm -f %ONAME%.exe %ONAME%.c %ONAME%.log
tail -n +10 %0 > %ONAME%.c
gcc -Wall -o %ONAME%.exe %ONAME%.c 2>%ONAME%.log || type %ONAME%.log && pause && exit
%ONAME%.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
echo ..... && echo "Press key to close" && pause
rm -f %ONAME%.exe %ONAME%.c %ONAME%.log#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}:)
Настоящий geek-way. Два чая!
Зачем вообще писать ни C, когда есть ассемблер. Какой-то TypeScript для ассемблера получился..
Когда-то я делал программы напрямую в машинных кодах в шестнадцатиричных числах. Приходилось высчитывать смещение каждый раз при изменении программы. В ассемблере это делать гораздо удобнее, компилятор высчитывает сам. Си - это невероятная роскошь, позволяющая делать что угодно.
Пожалуйста, следите за руками: Машинные коды, Ассемблер, Си. Это эволюция.
Дальше пошли не туда...
А как дальше должна была идти эта эволюция? Очень интересно.
Что-то ближе к естественному языку. Например:
"Прочитать данные из файла/сети, вычислить среднее арифметическое значение, вернуть результат в графическом виде в формате jpg".
Вот для этого ChatGPT и сделали.
А Дельфи для чего сделали?
perl?
да, да. Прочитать файл смогли, а разобрать нет. Как глянешь в питоновский код, так там сплошное преобразование двоичных данных в строки и противоестественное жонглирование ими. А если надо не среднее, а что то посложнее посчитать, то понеслось..
Кстати, задачи подобные примеру, решаются экселем, вообще без велосипедостроения на питонах.
Г-ди, спаси нас от автоматизаторов-на-эхеле, а уж с остальным мы как-нибудь сами...
Видел я последствия этого "невелосипедостроения", причем не однократно - в диапазоне от "прибьем книгу гвоздями к источникам данных на файловом сервере по относительным, а местами и абсолютным путям" до "а давайте мы ехель заэмбеддим в качестве репорт-сервера для нашего ПРОДУХТА и съэкономим на BI!" через "а тут мы подцепим pi-datalink, и нимнощька вижлвасика" - равнофигово получалось, если честно. Сейчас просто рефлекторно бью по рукам автоматизаторам-от-сохи, питонисты (даже датасатанистского-я-МАТЕМАТИК-а-не-порограммист!!111-изводу) по сравнению с эхелизаторами прям Ъ-программисты. ЪЪ-даже.
> Г-ди, спаси нас от автоматизаторов-на-эхелеСмотря что автоматизировать. Если одноразово по быстрому посчитать/сгенерировать, то уметь это надо.
> ехель заэмбеддимЭто конечно уже маразмы. Ну, меру знать надо. :)
>Смотря что автоматизировать. Если одноразово по быстрому посчитать/сгенерировать, то уметь это надо.Да как бы уже и... нет? В том же Юпитере делается не сложнее, результат выглядит не хуже. Вот БигБоссам 40+ из ынтырпрайз-ынтырпрайза результат показать там да, безальтернативно, там ехель-головного-моска в терминальной стадии, а для себя - вот на...зачем?
>Это конечно уже маразмы. Ну, меру знать надо. :)А там learning curve спесфисский. Порог вхождения нулевой, тут легко, тут все еще можно, тут почти-совсем-похоже-ща-загуглю, там вижвалвасик появился - начальству-нужен-ехель - других-молотков-у-нас-для-вас-нет - "Бжемой, как такой ЗВИЗДЕЦ появился?!"
К решению задач,а не миллионный раз переписывать одно и тоже с нулевым кпд.
Селекция почему-то до сих пор не объявлена лженаукой (если не считать ГМО). При том что окружающая среда за тысячи лет изменилась не столь сильно, как устройства для исполнения кода.
Роль селекции в IT сейчас выполняет маркетинг и хайп, а не технические достоинства продукта. По сути это отрицательный отбор, который останавливает, а кое-где и разворачивает эволюцию.
Из этого следует, что переписывают "не в ту сторону". Но никак не "переписывать не стоит". Вот например различные оптимизации двоичного поиска https://gitflic.ru/project/erthink/bsearch-try
> Писать что Си надо уметь, а на Питоне любая обезьяна уже через неделю может писать.И это плюс Питону. А на Си ты и через десять лет будешь память ронять.
Ну смотри, есть софт на С, написан в 2010, в реалтайме с 2014, память на месте, ничего не утекло. Интересно почему так, может потому, что проверки везде стоят, а код не на "отвали" написан?-))
Сколько стоит такой код по сравнению с питонячим? Так отож.
> Сколько стоит такой код по сравнению с питонячим? Так отож.Если говорить про стоимость владения, то ниже, чем на питоне-))) Если говорить про единовременные вложения, то выше.
"Питонокод - дешёвка". А чо, новое слово в питонорхейте.
... ну или по тому, что не тестил никто - работает себе конечный автомат на детерминированном наборе данных и работает - ничего интересного, а стоит два ведра рандома на вход отгрузить - и "ой, штайта?!" 100% покрытие проверками чего-нибудь отличного от хеллоуворлда обычно только на opennet'е и существует - где-то по соседству с "настоящими c-шниками"(ТМ)
> Писать что Си надо уметь, а на Питоне любая обезьяна уже через неделю может писать.Чтобы на питоне хоть что-то эффективно работающее написать, надо освоить довольно увесистую документацию по библиотекам. Без знания реализованных для него структур данных ничего путного не получится. А это уже далеко не неделя. Это на C, имея знания об алгоритмах, можно через неделю что угодно писать.
Ну, я предполагаю, что "имение" "знаний об алгоритмах", позволяющее реализовывать на C алгоритмы и структуры данных с эффективностью уровня "стандартной библиотеки python'а" занимает несколько большее время, нежели ознакомление с этой самой библиотекой - но это конечно же не точно, да?
Есть SBCL, в котором именно асмовставки, но утята не любят скобочки.
На C нет классов.
Вот дорогой аноним, ошибся ты - ООП это парадигма программирования, писать с классами можно и на С, и весьма успешно, просто первый параметр всегда должен быть ссылкой на структуру. На С нет RAII, что было реализовано уже в С++ с его создания. Впрочем RAII реализуется на С макросами - на гитхабе полно и примеров и библиотек.
struct это class с открытыми членами.
Ну пиши на С++. Какая разница. Более того в одном проекте можно мешать части на си и с++ как угодно и без лишних телодвижений.
Значит, синтаксис питона в разы лучше, раз люди готовы так заморачиваться.
Точнее, писать на нем в целом удобнее, а не один лишь синтаксис.
Кстати, если ограничить типы данных программы, например, использовать только int и float, то транспилятор Python -> С можно написать минут за десять и строк 100-200 кода python, если знать, что и как делать, и для написания boilerplate code использовать ChatGPT. (Необходимо воспользоваться модулем ast для парсинга кода python и ,например, использовать трансформеры из этого модуля.)
А если выкинуть list, dict, tuple, плюнуть полностью на ООП, еще пару таких мелких упрощений и можно вопросить - зачем нужен питон если есть С?
>А если выкинуть list, dict, tuple ...1) поддержку list, dict, tuple можно легко добавить. (Необходимость ООП спорный вопрос, при неумелом использовании скорее вред)
>зачем нужен питон если есть С?
2) мне, например, нужно держать свою кодовую базу на одном языке и транспилировть по необходимости в C++/JavaScript/... специальные DSL
3) у питона огромное community и куча кода-библиотек.
Для меня сейчас особенно актуальны модули для тестирования (pytest, unittest, hypothesis)
Pyston'утый?
Если "огромное community" само по себе аргумент, то "огромное community" питонохейтеров - очень весомый повод не кодить на питоне.
Мне как-то высказал свое фи по поводу питона поддатый кодер на пхп. Как бы намекает...
На самом деле, я считаю, что можно нормально писать и на python, и на PHP, и на js. Достаточно вынуть руки из задницы...
А ты уже написал транслятор со своего языка в Си?
Моя гошка и так хороша для моих целей.- писать быстро (быстрее чем на питоне)
- тестировать легко
- отлаживать без проблем
- ясно и просто с пакетами
etcа вы и дальше любите языки мамонта.
Go такой же язык мамонта, только выплюнутый в мир попозже
дубовость на месте или скоро подвезут всяких скобочек?
- гошка
- ясно и просто с пакетами
Понятно, расходимся.
Писать на Go не быстрее. Python просто завален синтаксическим сахаром. Превращает функцию в генератор одним yield, в одну строку преобразуем кучу списков в один с фильтрацией [list comprehensions], либо в функцию, поменяв лишь скобки на круглые (generator expressions), любую шляпу заворачиваем в декоратор и пихаем везде наглядной строкой @text, превращаем любую функцию в бесконечный поток данных функцией iter, 0b1111, 0o17, 15, 0xF, b'\xde\xad\xbe\xef'.hex() и вообще всё - объект первого порядка и можно пихать в любое место в коде.Ваш ответ, Go'шники?
А go'шникам написанное еще и саппортить приходится обычно, а за диабетиками - проще переписать, чем разобраться почему goody-beauty "однострочник на три строки" вывалил стектрейс при попытке запустить его где-то кроме когда-то собранного контейнера. Такое себе.
Легко запускается то, что написал сам. А со сторонней прогой не всегда все очевидно. Даже собранный бинарь может дать сегфолт, и иди, разбирайся, что ему не нравится. Как по мне, стектрейс лучше - он хотя бы сразу выводит источник проблемы перед глазами.
Ну опять про скорость... Лучше кросскомпиляция под разные системы со всеми зависимостями в одном бинарнике (как в Go).
Crystal