Почему никто принципиально не хочет писать компилятор для Python?

Модератор: Модераторы разделов

fnkhk1
Сообщения: 9
ОС: linux

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение fnkhk1 » 21.03.2016 13:45

/dev/random писал(а):
21.03.2016 13:28
Хорошо, без eval.

Код: Выделить всё

a = input()
b = input()
c = input()
setattr(__import__(a), b, getattr(__import__(a), c))
for i in range(1, 100):
  ...

Подменяется здесь range или нет?



вот это и должен устанавливать компилятор автоматически(а не человек вручную), может он подменяться потенциально или нет, если может, то компиляция в динамический код, если нет то в обычный аналогичный c++(цикл со счетчиком)
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4695
ОС: Gentoo

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение /dev/random » 21.03.2016 14:07

fnkhk1 писал(а):
21.03.2016 13:45
вот это и должен устанавливать компилятор автоматически(а не человек вручную), может он подменяться потенциально или нет, если может, то компиляция в динамический код, если нет то в обычный аналогичный c++(цикл со счетчиком)

И в большинстве случаев ответом будет "не могу гарантировать, что не может". Каким бы качественным ни был анализатор. Хотите убедиться? Посчитайте количество eval'ов, __import__'ов и других потенциально опасных функций в установленных у вас питоновских модулях. И если программа импортирует хоть один из них, всю программу придётся интерпретировать, "на всякий случай". Толку тогда от этого компилятора? К тому же, качественный JIT ничуть не хуже обычного компилятора.
Спасибо сказали:

fnkhk1
Сообщения: 9
ОС: linux

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение fnkhk1 » 21.03.2016 16:57

/dev/random писал(а):
21.03.2016 14:07
И в большинстве случаев ответом будет "не могу гарантировать, что не может". Каким бы качественным ни был анализатор. Хотите убедиться? Посчитайте количество eval'ов, __import__'ов и других потенциально опасных функций в установленных у вас питоновских модулях. И если программа импортирует хоть один из них, всю программу придётся интерпретировать, "на всякий случай". Толку тогда от этого компилятора? К тому же, качественный JIT ничуть не хуже обычного компилятора.



jit -компилятор даже качественный приводит к значительным задержкам при старте(секунд на 10) и увеличению использования памяти в несколько раз, либо к резкому замедлению выполнения. Достаточно посмотреть на жабу с дотнетом, так что толк есть.

eval в самой программе может не вызываться, если он даже вызывается во многих случаях его можно статически скомпилить(если на вход подается строковая константа). за исключением самого крайнего случая когда строка вводится с клавиатуры или из файла как в приведенном Вами случае:)

существует компилятор питона shedskin, он компилит без подключения всяких jit-ов и рантаймов питона, переводя питоновскую программу в чистый c++, только он недоделанный до конца и немножко с глюками
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4695
ОС: Gentoo

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение /dev/random » 21.03.2016 17:20

fnkhk1 писал(а):
21.03.2016 16:57
jit -компилятор даже качественный приводит к значительным задержкам при старте(секунд на 10) и увеличению использования памяти в несколько раз, либо к резкому замедлению выполнения. Достаточно посмотреть на жабу с дотнетом, так что толк есть.

Где-то я встречал jit-компилятор, умеющий кэшировать код на диске и подгружать при следующем запуске, избегая этих задержек. В GNU LibJIT, кажется, была такая возможность.

fnkhk1 писал(а):
21.03.2016 16:57
eval в самой программе может не вызываться, если он даже вызывается во многих случаях его можно статически скомпилить(если на вход подается строковая константа). за исключением самого крайнего случая когда строка вводится с клавиатуры или из файла как в приведенном Вами случае:)

А какая разница, вызывается ли он в модуле или в самой программе? Забраковывать в любом случае придётся ВЕСЬ код.

fnkhk1 писал(а):
21.03.2016 16:57
существует компилятор питона shedskin, он компилит без подключения всяких jit-ов и рантаймов питона, переводя питоновскую программу в чистый c++, только он недоделанный до конца и немножко с глюками

Видел я его. Он просто-напросто не поддерживает динамических конструкций. Совсем. Ни eval, ни getattr/setattr, ни подмены методов, ничего. Даже списков с элементами разного типа в нём нет. Питоном это назвать нельзя. Поэтому и работает.
Спасибо сказали:

fnkhk1
Сообщения: 9
ОС: linux

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение fnkhk1 » 21.03.2016 17:59

/dev/random писал(а):
21.03.2016 17:20
А какая разница, вызывается ли он в модуле или в самой программе? Забраковывать в любом случае придётся ВЕСЬ код.


имеют значение только вызовы достижимые при выполнении из компилируемого файла скрипта, если например в модуле eval вызывается в какой-то процедуре, но саму эту процедуру мы не вызываем, то компилить его не надо если цель создать exe-файл
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4695
ОС: Gentoo

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение /dev/random » 21.03.2016 18:36

fnkhk1 писал(а):
21.03.2016 17:59
имеют значение только вызовы достижимые при выполнении из компилируемого файла скрипта, если например в модуле eval вызывается в какой-то процедуре, но саму эту процедуру мы не вызываем, то компилить его не надо если цель создать exe-файл

Ну, может, вы и отфильтруете несколько процентов динамики. В любом случае, получается, что если она останется хоть в одном месте, интерпретировать придётся всё, и компилятор станет бесполезен.
Спасибо сказали:

fhrbc
Сообщения: 1
ОС: win7

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение fhrbc » 21.09.2017 15:51

Вырезка из https://stackoverflow.com/questions/1205950...-python-project

PyInstaller: Supports: Python 2.7 and Python 3.3 - 3.6 on Windows, Mac, and Linux.
cx_Freeze: Supports: Python 2.7 and 3.0 (?) - 3.6 on Windows, Mac, and Linux.
pyapp: Supports: Python 2.7 and 3.3 - 3.4 (?) on Mac only.
py2exe: Supports: Windows only. Version 0.6.9 supports Python 2.4 - 2.7, and version 0.9.2.2 supports Python 3.3 - 3.4 (?).
bbfreeze: Supports: Python 2.4 - 2.7 but not Python 3 on Windows and Linux.
===== Of course, that's not the only way of doing things:
pynsist: Supports: All Python versions? Note -- will create Windows installers only.
Nuitka: Supports: Python 2.6 - 2.7 and Python 3.2 - 3.6 on Windows, Mac, and Linux.
cython: Supports: Python 2.6 - 2.7 and Python 3.2 - 3.6 (?) on Windows, Mac, and Linux.

PyInstaller:
В отличии от py2exe PyInstaller поддерживает Windows (32-bit and 64-bit), Linux (32-bit and 64-bit), Mac OS X (32-bit and 64-bit)
и меньше проблем при переносе собранного экзешника между различными версиями винды.
Если вы планируете использовать py2exe для создания исполняемых файлов из *.py, одумайтесь!
Данная практика порочна. У данного расширения множество проблем: подключение библиотек, переносимость exe-файла...


Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 14675
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Почему никто принципиально не хочет писать компилятор для Python?

Сообщение Bizdelnick » 21.09.2017 16:10

fhrbc писал(а):
21.09.2017 15:51
Если вы планируете использовать py2exe для создания исполняемых файлов из *.py, одумайтесь!

Если вы планируете создавать всё-в-одном-файле помойки из питоновских проектов, одумайтесь!
Дрянь редкостная этот pyinstaller, пользовал я его. Да и смысла в таких штуках не понимаю: чем типа один файл (который вообще-то самораспаковывающийся архив) принципиально лучше каталога с virtualenv (который всё равно имеет место быть внутри означенного архива)? Только хуже тем, что при каждом запуске тратится время на распаковку. А переносимость теряется уже при создании virtualenv, когда внутрь помойки пихается бинарный интерпретатор.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали: