Почему никто принципиально не хочет писать компилятор для Python?
Модератор: Модераторы разделов
Почему никто принципиально не хочет писать компилятор для Python?
Суть в том, что никто принципиально не хочет писать настоящий компилятор для Python.
Запаковать интерпретатор с исходниками в EXE'шник - это не компилятор. Если язык так успешен и так распространён, почему же нет компилятора? Попахивает принципами...
Запаковать интерпретатор с исходниками в EXE'шник - это не компилятор. Если язык так успешен и так распространён, почему же нет компилятора? Попахивает принципами...
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Вообще-то он благополучно компилируется в байт-код (файлы *.pyc). А если Вы имеете в виду компиляцию в машинный код, то Python изначально создавался без рассчёта на это.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Почему никто принципиально не хочет писать компилятор для Python?
Поэтому и не ответили по нему. Про конвертирование кода в C++ (да ещё с ограничениями) я знаю. Опять же - это не компиляция кода Питона. Это очередной костыль.
Bizdelnick писал(а): ↑17.01.2012 19:03Вообще-то он благополучно компилируется в байт-код (файлы *.pyc).
Но для их выполнения всё равно нужен интерпретатор Питона.
Bizdelnick писал(а): ↑17.01.2012 19:03А если Вы имеете в виду компиляцию в машинный код, то Python изначально создавался без рассчёта на это.
То есть есть какие-то архитектурные особенности, принципиально лишающие код Питона возможности полноценной компиляции (типа компиляции C/C++)?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Да.
Даже C/C++ современными компиляторами компилируется через промежуточный язык. Почему C++ не может быть промежуточным языком для компиляции Python? Первый компилятор C++, фактически, компилировал C++ в C.
Мои розовые очки
Re: Почему никто принципиально не хочет писать компилятор для Python?
Можно поподробнее?
watashiwa_daredeska писал(а): ↑17.01.2012 19:29Даже C/C++ современными компиляторами компилируется через промежуточный язык. Почему C++ не может быть промежуточным языком для компиляции Python? Первый компилятор C++, фактически, компилировал C++ в C.
То есть GCC не компилирует C/C++ в бинарный код?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Подробнее написано в литературе по компиляторам. Если кратко, то Python слишком динамический язык, чтобы было возможно сделать нормальный компилятор. А учитывая наличие eval() (и exec statement), скомпилированная программа должна, по хорошему, таскать с собой тот же компилятор или полноценный интерпретатор.
Компилирует, но через промежуточный «язык». Через тот же промежуточный язык компилируются все языки, компиляторы которых входят в семейство GCC.
Хотя с другой стороны… Формально, компилятор g++ состоит, грубо, из двух частей: фронтенд (C++ → промежуточный язык) и бекенд (промежуточный язык → нативный код). Бекенд един для всех компиляторов семейства GCC. Таким образом, компиляторы семейства GCC не генерируют нативный код. Нативный код генерирует общий для них всех компилятор синтетического языка. :)watashiwa_darede... писал(а): ↑17.01.2012 19:46Через тот же промежуточный язык компилируются все языки, компиляторы которых входят в семейство GCC.
Мои розовые очки
Re: Почему никто принципиально не хочет писать компилятор для Python?
А если нужно скрыть исходники программы, написанной на Питоне, можно эту программу скомпилировать в PYC и таким образом распространять, делая пометку, что для её работы нужен установленный интерпретатор Питона?
- Brainsburn
- Сообщения: 950
- Статус: /
- ОС: Gentoo
- Контактная информация:
Re: Почему никто принципиально не хочет писать компилятор для Python?
Если нужно скрыть исходники, вы ошиблись форумом =)
Спасибо сказали:
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Распространять в .pyc можно, но… .pyc можно восстановить в исходник почти без потерь (потеряются комментарии). .pyo чуть более оптимизирован (вырезаются еще и docstring'и, возможно еще что-то оптимизируется), но некоторая часть библиотек рассчитывает на наличие docstring'ов (PLY, например).
Это точно :) Вообще, google://python obfuscator
Мои розовые очки
- serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
- Контактная информация:
Re: Почему никто принципиально не хочет писать компилятор для Python?
Долго думал... Зачем ещё один язык, который необходимо компилировать в машинный код? Чтобы мучаться с кроссплатформенностью? Чтобы иметь проблемы с чтением исходного кода? Короче... и мне отсыпьте, а?
Re: Почему никто принципиально не хочет писать компилятор для Python?
Видимо автор уже понял, что интерпретируемый язык слишком медленнен для его задачи, но ещё не понял, что компиляцией этого не исправить (т.к. полноценной компиляции для Питона нету, и из-за доведённой до абсурда динамичности быть не может).
-
- Сообщения: 106
- ОС: Xubuntu, Windows
- Контактная информация:
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: Почему никто принципиально не хочет писать компилятор для Python?
plustilino писал(а): ↑18.01.2012 14:13
Почему до абсурда? Другой способ "работы" с памятью, насколько понимаю.
Этот "другой способ" требует вставки динамических проверок типов данных в каждую операцию. И даже если собрать нативный бинарник, то эти проверки всё равно будут неизбежны. Если вы представите себе такой бинарник со всеми необходимыми проверками, и интерпретатор байткода, то увидите, что они почти идентичны. И скорость будет практически одинаковая.
Re: Почему никто принципиально не хочет писать компилятор для Python?
/dev/random писал(а): ↑18.01.2012 17:55Этот "другой способ" требует вставки динамических проверок типов данных в каждую операцию. И даже если собрать нативный бинарник, то эти проверки всё равно будут неизбежны. Если вы представите себе такой бинарник со всеми необходимыми проверками, и интерпретатор байткода, то увидите, что они почти идентичны. И скорость будет практически одинаковая.
Что-то я не совсем понял, как связаны типизация, сборка мусора (если под «другим способом работы с памятью» подразумевалась она) и возможность реализации компилятора в машинный код.
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: Почему никто принципиально не хочет писать компилятор для Python?
Формально компиляция в машинный код возможна для любого языка. Но для динамически типизируемых прироста производительности вы не заметите.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Вам и говорят, что теоретическая возможность есть. Но при этом скомпилированный бинарник будет включать в себя почти полностью интерпретатор байт-кода. Кому оно надо?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Почему никто принципиально не хочет писать компилятор для Python?
Вопрос из разряда: "почему никто не хочет написать компилятор для bash?" ☺
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Re: Почему никто принципиально не хочет писать компилятор для Python?
PyPy - JIT-компилятор питона. Раньше еще был Unladen Swallow (или как-то так) - тоже JIT, только на LLVM. А статический компилятор не существует за ненадобностью, наверное.
Re: Почему никто принципиально не хочет писать компилятор для Python?
Подозреваю, что оно вместо нормального кода просто пихает кучу system()
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Ну, не system(), конечно, потому что их еще надо пайпами связать, но что-то подобное, вроде popen*. В принципе, это ведь то, что и требуется от shell-скрипта.
Мои розовые очки
Re: Почему никто принципиально не хочет писать компилятор для Python?
все вопросы отпадут после прочтения первых глав книги Лутц: Изучаем Python издательства o'Reilly )
Обезьянка видит - Обезьянка делает...
Re: Почему никто принципиально не хочет писать компилятор для Python?
/dev/random писал(а): ↑20.01.2012 18:25Формально компиляция в машинный код возможна для любого языка. Но для динамически типизируемых прироста производительности вы не заметите.
Как показали мои давние опыты с CL, производительность скомпилированной функции заметно выше, чем у интерпретированной
Bizdelnick писал(а): ↑20.01.2012 18:25Вам и говорят, что теоретическая возможность есть. Но при этом скомпилированный бинарник будет включать в себя почти полностью интерпретатор байт-кода. Кому оно надо?
Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Почему никто принципиально не хочет писать компилятор для Python?
А я ему даже ответил...
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Почему никто принципиально не хочет писать компилятор для Python?
Прелесть в том, что CL несколько совсем другой язык с совсем другим устройством, нежели Python. CL еще хоть как-то можно по-человечески скомпилировать, а Python — нет.
Мои розовые очки
Re: Почему никто принципиально не хочет писать компилятор для Python?
Да не в том суть. Как без полного интерпретатора или JIT-компилятора ты будешь делать eval, например? Да и при компиляции динамического ЯП все равно половину интерпретатора придется вкомпиливать.
Re: Почему никто принципиально не хочет писать компилятор для Python?
по-сути eval - меньшее из зол, его можно и убрать. Facebook для PHP так и сделал. И кстати, велика вероятность, что даже если оставить за бортом всю "динамику", а-ля генерацию классов, методов в рантайме, и тому подобное - очень много всякого написанного на Python вполне себе скомпилируется. Другое дело что для этого нужен свой Facebook, который вложит в это время и деньги. Поэтому ответ на изначальный вопрос, скорее в области "никому это нафиг нужно", чем в отговорках про динамический язык и прочее.