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

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

awua
Сообщения: 471

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

Сообщение awua » 17.01.2012 18:31

Суть в том, что никто принципиально не хочет писать настоящий компилятор для Python.
Запаковать интерпретатор с исходниками в EXE'шник - это не компилятор. Если язык так успешен и так распространён, почему же нет компилятора? Попахивает принципами...
Спасибо сказали:

Аватара пользователя
taaroa
Сообщения: 1319

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

Сообщение taaroa » 17.01.2012 18:42

http://code.google.com/p/shedskin/

p.s. вопрос не читал.
:wq
Спасибо сказали:

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

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

Сообщение Bizdelnick » 17.01.2012 19:03

Вообще-то он благополучно компилируется в байт-код (файлы *.pyc). А если Вы имеете в виду компиляцию в машинный код, то Python изначально создавался без рассчёта на это.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

awua
Сообщения: 471

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

Сообщение awua » 17.01.2012 19:10

taaroa писал(а):
17.01.2012 18:42
http://code.google.com/p/shedskin/

p.s. вопрос не читал.

Поэтому и не ответили по нему. Про конвертирование кода в C++ (да ещё с ограничениями) я знаю. Опять же - это не компиляция кода Питона. Это очередной костыль.

Bizdelnick писал(а):
17.01.2012 19:03
Вообще-то он благополучно компилируется в байт-код (файлы *.pyc).

Но для их выполнения всё равно нужен интерпретатор Питона.

Bizdelnick писал(а):
17.01.2012 19:03
А если Вы имеете в виду компиляцию в машинный код, то Python изначально создавался без рассчёта на это.

То есть есть какие-то архитектурные особенности, принципиально лишающие код Питона возможности полноценной компиляции (типа компиляции C/C++)?
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska » 17.01.2012 19:29

awua писал(а):
17.01.2012 19:10
есть какие-то архитектурные особенности, принципиально лишающие код Питона возможности полноценной компиляции (типа компиляции C/C++)?
Да.

awua писал(а):
17.01.2012 18:31
Про конвертирование кода в C++ (да ещё с ограничениями) я знаю. Опять же - это не компиляция кода Питона. Это очередной костыль.
Даже C/C++ современными компиляторами компилируется через промежуточный язык. Почему C++ не может быть промежуточным языком для компиляции Python? Первый компилятор C++, фактически, компилировал C++ в C.
Спасибо сказали:

awua
Сообщения: 471

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

Сообщение awua » 17.01.2012 19:36

watashiwa_daredeska писал(а):
17.01.2012 19:29
awua писал(а):
17.01.2012 19:10
есть какие-то архитектурные особенности, принципиально лишающие код Питона возможности полноценной компиляции (типа компиляции C/C++)?
Да.

Можно поподробнее?

watashiwa_daredeska писал(а):
17.01.2012 19:29
Даже C/C++ современными компиляторами компилируется через промежуточный язык. Почему C++ не может быть промежуточным языком для компиляции Python? Первый компилятор C++, фактически, компилировал C++ в C.

То есть GCC не компилирует C/C++ в бинарный код?
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska » 17.01.2012 19:46

awua писал(а):
17.01.2012 19:36
Можно поподробнее?
Подробнее написано в литературе по компиляторам. Если кратко, то Python слишком динамический язык, чтобы было возможно сделать нормальный компилятор. А учитывая наличие eval() (и exec statement), скомпилированная программа должна, по хорошему, таскать с собой тот же компилятор или полноценный интерпретатор.

awua писал(а):
17.01.2012 19:36
То есть GCC не компилирует C/C++ в бинарный код?
Компилирует, но через промежуточный «язык». Через тот же промежуточный язык компилируются все языки, компиляторы которых входят в семейство GCC.

watashiwa_darede... писал(а):
17.01.2012 19:46
Через тот же промежуточный язык компилируются все языки, компиляторы которых входят в семейство GCC.
Хотя с другой стороны… Формально, компилятор g++ состоит, грубо, из двух частей: фронтенд (C++ → промежуточный язык) и бекенд (промежуточный язык → нативный код). Бекенд един для всех компиляторов семейства GCC. Таким образом, компиляторы семейства GCC не генерируют нативный код. Нативный код генерирует общий для них всех компилятор синтетического языка. :)
Спасибо сказали:

awua
Сообщения: 471

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

Сообщение awua » 17.01.2012 20:04

А если нужно скрыть исходники программы, написанной на Питоне, можно эту программу скомпилировать в PYC и таким образом распространять, делая пометку, что для её работы нужен установленный интерпретатор Питона?
Спасибо сказали:

Аватара пользователя
Brainsburn
Сообщения: 949
Статус: /
ОС: LFS,Gentoo

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

Сообщение Brainsburn » 17.01.2012 20:22

awua писал(а):
17.01.2012 20:04
А если нужно скрыть исходники программы, написанной на Питоне, можно эту программу скомпилировать в PYC и таким образом распространять, делая пометку, что для её работы нужен установленный интерпретатор Питона?

Если нужно скрыть исходники, вы ошиблись форумом =)
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska » 17.01.2012 20:56

awua писал(а):
17.01.2012 20:04
если нужно скрыть исходники программы, написанной на Питоне, можно эту программу скомпилировать в PYC
Распространять в .pyc можно, но… .pyc можно восстановить в исходник почти без потерь (потеряются комментарии). .pyo чуть более оптимизирован (вырезаются еще и docstring'и, возможно еще что-то оптимизируется), но некоторая часть библиотек рассчитывает на наличие docstring'ов (PLY, например).

Brainsburn писал(а):
17.01.2012 20:22
Если нужно скрыть исходники, вы ошиблись форумом =)
Это точно :) Вообще, google://python obfuscator
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7305
Статус: Маньяк
ОС: Android, GNU/Linux, Windows

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

Сообщение serzh-z » 18.01.2012 00:18

Долго думал... Зачем ещё один язык, который необходимо компилировать в машинный код? Чтобы мучаться с кроссплатформенностью? Чтобы иметь проблемы с чтением исходного кода? Короче... и мне отсыпьте, а?
Scio me nihil scire.
Спасибо сказали:

Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

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

Сообщение rm_ » 18.01.2012 00:54

serzh-z писал(а):
18.01.2012 00:18
Долго думал... Зачем ещё один язык, который необходимо компилировать в машинный код? Чтобы мучаться с кроссплатформенностью? Чтобы иметь проблемы с чтением исходного кода? Короче... и мне отсыпьте, а?

Видимо автор уже понял, что интерпретируемый язык слишком медленнен для его задачи, но ещё не понял, что компиляцией этого не исправить (т.к. полноценной компиляции для Питона нету, и из-за доведённой до абсурда динамичности быть не может). :)
Спасибо сказали:

plustilino
Сообщения: 106
ОС: Xubuntu, Windows

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

Сообщение plustilino » 18.01.2012 14:13

rm_ писал(а):
18.01.2012 00:54
... из-за доведённой до абсурда динамичности быть не может). :)

Почему до абсурда? Другой способ "работы" с памятью, насколько понимаю.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7305
Статус: Маньяк
ОС: Android, GNU/Linux, Windows

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

Сообщение serzh-z » 18.01.2012 15:52

rm_ писал(а):
18.01.2012 00:54
Видимо автор уже понял, что интерпретируемый язык слишком медленнен для его задачи
Ну, я тут посмотрел на посты автора в соседних темах... =) Мне кажется, нет у него никакой задачи.
Scio me nihil scire.
Спасибо сказали:

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

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

Сообщение /dev/random » 18.01.2012 17:55

plustilino писал(а):
18.01.2012 14:13
rm_ писал(а):
18.01.2012 00:54
... из-за доведённой до абсурда динамичности быть не может). :)

Почему до абсурда? Другой способ "работы" с памятью, насколько понимаю.

Этот "другой способ" требует вставки динамических проверок типов данных в каждую операцию. И даже если собрать нативный бинарник, то эти проверки всё равно будут неизбежны. Если вы представите себе такой бинарник со всеми необходимыми проверками, и интерпретатор байткода, то увидите, что они почти идентичны. И скорость будет практически одинаковая.
Спасибо сказали:

Аватара пользователя
korvin
Сообщения: 39
ОС: >_<

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

Сообщение korvin » 20.01.2012 18:22

/dev/random писал(а):
18.01.2012 17:55
Этот "другой способ" требует вставки динамических проверок типов данных в каждую операцию. И даже если собрать нативный бинарник, то эти проверки всё равно будут неизбежны. Если вы представите себе такой бинарник со всеми необходимыми проверками, и интерпретатор байткода, то увидите, что они почти идентичны. И скорость будет практически одинаковая.

Что-то я не совсем понял, как связаны типизация, сборка мусора (если под «другим способом работы с памятью» подразумевалась она) и возможность реализации компилятора в машинный код.
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:

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

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

Сообщение /dev/random » 20.01.2012 18:25

korvin писал(а):
20.01.2012 18:22
Что-то я не совсем понял, как связаны типизация, сборка мусора (если под «другим способом работы с памятью» подразумевалась она) и возможность реализации компилятора в машинный код.

Формально компиляция в машинный код возможна для любого языка. Но для динамически типизируемых прироста производительности вы не заметите.
Спасибо сказали:

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

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

Сообщение Bizdelnick » 20.01.2012 18:25

korvin писал(а):
20.01.2012 18:22
Что-то я не совсем понял, как связаны типизация, сборка мусора (если под «другим способом работы с памятью» подразумевалась она) и возможность реализации компилятора в машинный код.

Вам и говорят, что теоретическая возможность есть. Но при этом скомпилированный бинарник будет включать в себя почти полностью интерпретатор байт-кода. Кому оно надо?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

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

Сообщение eddy » 20.01.2012 19:39

Вопрос из разряда: "почему никто не хочет написать компилятор для bash?" ☺
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:

Аватара пользователя
taaroa
Сообщения: 1319

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

Сообщение taaroa » 20.01.2012 20:30

eddy писал(а):
20.01.2012 19:39
"почему никто не хочет написать компилятор для bash?" ☺

http://www.comeaucomputing.com/faqs/ccshfaq.html
:wq
Спасибо сказали:

Аватара пользователя
frp
Сообщения: 1445
ОС: Debian Squeeze

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

Сообщение frp » 20.01.2012 22:51

PyPy - JIT-компилятор питона. Раньше еще был Unladen Swallow (или как-то так) - тоже JIT, только на LLVM. А статический компилятор не существует за ненадобностью, наверное.
QSQLiteBrowser - моя утилита для просмотра и изменения баз данных SQLite (пока 0.0.2-prealpha).
Блог
Спасибо сказали:

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

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

Сообщение eddy » 21.01.2012 01:34

taaroa писал(а):
20.01.2012 20:30
eddy писал(а):
20.01.2012 19:39
"почему никто не хочет написать компилятор для bash?" ☺

http://www.comeaucomputing.com/faqs/ccshfaq.html

Подозреваю, что оно вместо нормального кода просто пихает кучу system()
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska » 21.01.2012 01:39

eddy писал(а):
21.01.2012 01:34
Подозреваю, что оно вместо нормального кода просто пихает кучу system()
Ну, не system(), конечно, потому что их еще надо пайпами связать, но что-то подобное, вроде popen*. В принципе, это ведь то, что и требуется от shell-скрипта.
Спасибо сказали:

Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

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

Сообщение Gineaser » 22.01.2012 09:09

все вопросы отпадут после прочтения первых глав книги Лутц: Изучаем Python издательства o'Reilly )
Обезьянка видит - Обезьянка делает...
Спасибо сказали:

Аватара пользователя
korvin
Сообщения: 39
ОС: >_<

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

Сообщение korvin » 26.01.2012 20:16

/dev/random писал(а):
20.01.2012 18:25
Формально компиляция в машинный код возможна для любого языка. Но для динамически типизируемых прироста производительности вы не заметите.

Как показали мои давние опыты с CL, производительность скомпилированной функции заметно выше, чем у интерпретированной

Bizdelnick писал(а):
20.01.2012 18:25
Вам и говорят, что теоретическая возможность есть. Но при этом скомпилированный бинарник будет включать в себя почти полностью интерпретатор байт-кода. Кому оно надо?

Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:

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

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

Сообщение Bizdelnick » 26.01.2012 22:59

korvin писал(а):
26.01.2012 20:16
Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.

Речь не об этом. Перечитайте, что писал /dev/random.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
korvin
Сообщения: 39
ОС: >_<

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

Сообщение korvin » 26.01.2012 23:25

Bizdelnick писал(а):
26.01.2012 22:59
Речь не об этом. Перечитайте, что писал /dev/random.

А я ему даже ответил...
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska » 27.01.2012 00:47

korvin писал(а):
26.01.2012 20:16
Как показали мои давние опыты с CL, производительность скомпилированной функции заметно выше, чем у интерпретированной
Прелесть в том, что CL несколько совсем другой язык с совсем другим устройством, нежели Python. CL еще хоть как-то можно по-человечески скомпилировать, а Python — нет.
Спасибо сказали:

Аватара пользователя
frp
Сообщения: 1445
ОС: Debian Squeeze

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

Сообщение frp » 27.01.2012 20:22

korvin писал(а):
26.01.2012 20:16
Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.

Да не в том суть. Как без полного интерпретатора или JIT-компилятора ты будешь делать eval, например? Да и при компиляции динамического ЯП все равно половину интерпретатора придется вкомпиливать.
QSQLiteBrowser - моя утилита для просмотра и изменения баз данных SQLite (пока 0.0.2-prealpha).
Блог
Спасибо сказали:

Аватара пользователя
diesel
Модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

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

Сообщение diesel » 27.01.2012 20:42

frp писал(а):
27.01.2012 20:22
korvin писал(а):
26.01.2012 20:16
Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.

Да не в том суть. Как без полного интерпретатора или JIT-компилятора ты будешь делать eval, например? Да и при компиляции динамического ЯП все равно половину интерпретатора придется вкомпиливать.

по-сути eval - меньшее из зол, его можно и убрать. Facebook для PHP так и сделал. И кстати, велика вероятность, что даже если оставить за бортом всю "динамику", а-ля генерацию классов, методов в рантайме, и тому подобное - очень много всякого написанного на Python вполне себе скомпилируется. Другое дело что для этого нужен свой Facebook, который вложит в это время и деньги. Поэтому ответ на изначальный вопрос, скорее в области "никому это нафиг нужно", чем в отговорках про динамический язык и прочее.
Спасибо сказали:

Вернуться в «Программирование для начинающих»