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

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

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

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

Сообщение awua »

Суть в том, что никто принципиально не хочет писать настоящий компилятор для Python.
Запаковать интерпретатор с исходниками в EXE'шник - это не компилятор. Если язык так успешен и так распространён, почему же нет компилятора? Попахивает принципами...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

Сообщение awua »

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 »

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

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

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

Сообщение awua »

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 »

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
Сообщения: 594

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

Сообщение awua »

А если нужно скрыть исходники программы, написанной на Питоне, можно эту программу скомпилировать в PYC и таким образом распространять, делая пометку, что для её работы нужен установленный интерпретатор Питона?
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo
Контактная информация:

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

Сообщение Brainsburn »

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

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

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

Сообщение watashiwa_daredeska »

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

Brainsburn писал(а):
17.01.2012 20:22
Если нужно скрыть исходники, вы ошиблись форумом =)
Это точно :) Вообще, google://python obfuscator
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

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

Сообщение serzh-z »

Долго думал... Зачем ещё один язык, который необходимо компилировать в машинный код? Чтобы мучаться с кроссплатформенностью? Чтобы иметь проблемы с чтением исходного кода? Короче... и мне отсыпьте, а?
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

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

Сообщение rm_ »

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

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

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

Сообщение plustilino »

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

Почему до абсурда? Другой способ "работы" с памятью, насколько понимаю.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

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

Сообщение serzh-z »

rm_ писал(а):
18.01.2012 00:54
Видимо автор уже понял, что интерпретируемый язык слишком медленнен для его задачи
Ну, я тут посмотрел на посты автора в соседних темах... =) Мне кажется, нет у него никакой задачи.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5281
ОС: Gentoo

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

Сообщение /dev/random »

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

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

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

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

Сообщение korvin »

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

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

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

Сообщение /dev/random »

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

Формально компиляция в машинный код возможна для любого языка. Но для динамически типизируемых прироста производительности вы не заметите.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

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

Сообщение eddy »

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

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

Сообщение taaroa »

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

http://www.comeaucomputing.com/faqs/ccshfaq.html
:wq
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

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

Сообщение frp »

PyPy - JIT-компилятор питона. Раньше еще был Unladen Swallow (или как-то так) - тоже JIT, только на LLVM. А статический компилятор не существует за ненадобностью, наверное.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

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

Сообщение eddy »

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 »

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

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

Сообщение Gineaser »

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

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

Сообщение korvin »

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

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

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

Опять же, не обязательно. Коммерческие реализации CL позволяют при компиляции не включать неиспользуемые функции в исполняемый образ.
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

Речь не об этом. Перечитайте, что писал /dev/random.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
korvin
Сообщения: 39
ОС: >_<

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

Сообщение korvin »

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

А я ему даже ответил...
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

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

Сообщение watashiwa_daredeska »

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

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

Сообщение frp »

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

Да не в том суть. Как без полного интерпретатора или JIT-компилятора ты будешь делать eval, например? Да и при компиляции динамического ЯП все равно половину интерпретатора придется вкомпиливать.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

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

Сообщение diesel »

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

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

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