Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

4 страниц V  « < 2 3 4  
Reply to this topic Start new topic
> Почему никто принципиально не хочет писать компилятор для Python?
fnkhk1
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 13:45
Сообщение #91


Прохожий
Иконка группы

Сообщений: 9

Вставить имя   :   Цитата

ОС: linux
Город: vn

Группа: Участники

Цитата(/dev/random @ Mar 21 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++(цикл со счетчиком)
Go to the top of the page
 
+Quote Post
/dev/random
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 14:07
Сообщение #92



Иконка группы

Сообщений: 4362

Вставить имя   :   Цитата

ОС: Gentoo
Город: Волгоград

Группа: Админы

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

И в большинстве случаев ответом будет "не могу гарантировать, что не может". Каким бы качественным ни был анализатор. Хотите убедиться? Посчитайте количество eval'ов, __import__'ов и других потенциально опасных функций в установленных у вас питоновских модулях. И если программа импортирует хоть один из них, всю программу придётся интерпретировать, "на всякий случай". Толку тогда от этого компилятора? К тому же, качественный JIT ничуть не хуже обычного компилятора.
Go to the top of the page
 
+Quote Post
fnkhk1
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 16:57
Сообщение #93


Прохожий
Иконка группы

Сообщений: 9

Вставить имя   :   Цитата

ОС: linux
Город: vn

Группа: Участники

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



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

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

существует компилятор питона shedskin, он компилит без подключения всяких jit-ов и рантаймов питона, переводя питоновскую программу в чистый c++, только он недоделанный до конца и немножко с глюками
Go to the top of the page
 
+Quote Post
/dev/random
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 17:20
Сообщение #94



Иконка группы

Сообщений: 4362

Вставить имя   :   Цитата

ОС: Gentoo
Город: Волгоград

Группа: Админы

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

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

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

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

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

Видел я его. Он просто-напросто не поддерживает динамических конструкций. Совсем. Ни eval, ни getattr/setattr, ни подмены методов, ничего. Даже списков с элементами разного типа в нём нет. Питоном это назвать нельзя. Поэтому и работает.
Go to the top of the page
 
+Quote Post
fnkhk1
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 17:59
Сообщение #95


Прохожий
Иконка группы

Сообщений: 9

Вставить имя   :   Цитата

ОС: linux
Город: vn

Группа: Участники

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


имеют значение только вызовы достижимые при выполнении из компилируемого файла скрипта, если например в модуле eval вызывается в какой-то процедуре, но саму эту процедуру мы не вызываем, то компилить его не надо если цель создать exe-файл
Go to the top of the page
 
+Quote Post
/dev/random
bookmark
gyfbbdvkffmrljmmmwd
Mar 21 2016, в 18:36
Сообщение #96



Иконка группы

Сообщений: 4362

Вставить имя   :   Цитата

ОС: Gentoo
Город: Волгоград

Группа: Админы

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

Ну, может, вы и отфильтруете несколько процентов динамики. В любом случае, получается, что если она останется хоть в одном месте, интерпретировать придётся всё, и компилятор станет бесполезен.
Go to the top of the page
 
+Quote Post
fhrbc
bookmark
gyfbbdvkffmrljmmmwd
Sep 21 2017, в 15:51
Сообщение #97


Прохожий
Иконка группы

Сообщений: 1

Вставить имя   :   Цитата

ОС: win7

Группа: Участники

Вырезка из 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-файла...


Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Sep 21 2017, в 16:10
Сообщение #98


grammatikführer
Иконка группы

Сообщений: 12811

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

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

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

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


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 21st October 2017 - в 03:43




Rating@Mail.ru