LINUX.ORG.RU

Релиз компилятора Python — Nuitka 0.4.2

 , ,


0

5

Вышла новая версия транслятора из языка Python в представление на C++. Данное представление компилируется в исполняемый файл, использующий библиотеку libpython для управления объектами (аналогично CPython).

На данный момент Nuitka — хорошая замена интерпретатору Python, она поддерживает совместимость на уровне компиляции с CPython 2.6, 2.7 и 3.2.

В данной версии Nuitka на тесте pystone производительнее CPython на 258%, несмотря на то, что еще не сделаны все планируемые оптимизации.

Основные изменения:

  • поддержка FreeBSD;
  • опция для выявления исключений на этапе компиляции;
  • базовая поддержка Python 3.3;
  • исправления ошибок.

>>> Подробности

Наверное, в мини-новость было бы лучше оформить, только как, я не нашел.

Virtuos86 ★★★★★ ()

А компилятор, что транслирует, разве не транслятор?

Spirit_of_Stallman ★★★ ()
Ответ на: комментарий от Spirit_of_Stallman

ЕМНИП, компилятор == транслятор

P.S.: у меня, кстати, простенький хелловорлд не скомпилился

root@home:~/python# cat foo.py
#!/usr/lib/env python

import sys
print 1
sys.exit(1)

root@home:~/python# nuitka --exe foo.py
OSError: msvcrt: cannot open shared object file: No such file or directory:
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/SingleExe.scons", line 39:
    VariantDir( static_src, nuitka_src, 0 )
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Script/SConscript.py", line 612:
    env = self.factory()
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Script/SConscript.py", line 592:
    default_env = SCons.Defaults.DefaultEnvironment()
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Defaults.py", line 88:
    _default_env = SCons.Environment.Environment(*args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Environment.py", line 991:
    apply_tools(self, tools, toolpath)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Environment.py", line 105:
    env.Tool(tool)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Environment.py", line 1692:
    tool(self)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 180:
    self.generate(env, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/default.py", line 40:
    for t in SCons.Tool.tool_list(env['PLATFORM'], env):
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 642:
    cxx_compiler = FindTool(cxx_compilers, env) or cxx_compilers[0]
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 540:
    t = Tool(tool)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 94:
    module = self._tool_module()
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 138:
    module = imp.load_module(full_name, file, path, desc)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/msvc.py", line 43:
    import SCons.Platform.win32
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Platform/win32.py", line 47:
    _get_osfhandle = ctypes.cdll.msvcrt._get_osfhandle
  File "/usr/lib/python2.7/ctypes/__init__.py", line 423:
    dll = self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 353:
    self._handle = _dlopen(self._name, mode)
root@home:~/python# 
Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

только как, я не нашел

Это делается модераторами и не подвластно автору новости.

necroposter ()
Ответ на: комментарий от Virtuos86

ЕМНИП, компилятор == транслятор

Решил погуглить.
Если опираться на вики:
Компиля́тор — программа или техническое средство, выполняющее компиляцию.
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.


Я не программист, и мои догадки только догадки, но тогда это таки транслятор, что транслирует код в другой язык, а уж потом только компилятор кода, что оттранслировал.
Интересно было бы услышать специалистов в вопросе.

Spirit_of_Stallman ★★★ ()

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

вероятно, «исполняемых»?

das_tier ★★★★★ ()
Последнее исправление: das_tier (всего исправлений: 1)
Ответ на: комментарий от Spirit_of_Stallman

Интересно было бы услышать специалистов в вопросе.

Ну, таких на ЛОР достаточно ;). Ждем-с.

Но это всё-таки компилятор. Сходите хотя бы на сайт сабжа. А трансляторами раньше часто называли компиляторы, пусть это и неточно.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от das_tier

Это же цитата. Из песни слов не выкинешь, и цитируемый текст как-то не принято вычитывать. Там и запятой не хватает.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86
File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/__init__.py", line 138:
    module = imp.load_module(full_name, file, path, desc)
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Tool/msvc.py", line 43:
    import SCons.Platform.win32
  File "/usr/local/lib/python2.7/dist-packages/nuitka/build/inline_copy/lib/scons-2.0.1/SCons/Platform/win32.py", line 47:
    _get_osfhandle = ctypes.cdll.msvcrt._get_osfhandle

Мне непонятно, почему оно «вендовые» файлы решило дергать. Естественно, их не нашлось. У кого-нибудь завелось?

Virtuos86 ★★★★★ ()

Поправил новость и добавил changelog. Ссылка на opennet была уж слишком некрасивой :)

unfo ★★★★★ ()
Ответ на: комментарий от unfo

Поправил новость

258%

Да, так куда «горячее» :}.

Ссылка на opennet была уж слишком некрасивой :)

Как знаете, мне неудобно было использовать копипастой без ссылки на источник.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

Копипаста — это вообще плохо, тут ее не одобряют. Лучше переписать своими словами :)

unfo ★★★★★ ()

Оно сейчас пригодно для использования, или пока в стадии демо?

firestarter ★★★☆ ()
Ответ на: комментарий от Virtuos86

Юморина. Поставил с сайта девелоперскую версию, 0.4.3, пакет для дебьяна на убунту встал нормально. Пришлось еще g++ установить и dev-пакеты Python.

Экзешник создался... для винды. Запускал по докам:

root@home:~/python# nuitka-python --execute --python-version='3.2' ~/python
и
root@home:~/python# nuitka --exe --python-version='3.2' ~/python

Также, судя по докам, есть три юзкейса использования:

- исполняемый бинарник, но

Note

The resulting binary still depends on CPython and used C extension modules being installed. Sorry about that, it's not yet a «py2exe» replacement. Please come and help to add that functionality if you would like to see it in Nuitka.

То есть понятно.

- модуль-расширение из питон-модуля;

- компиляция пакета (как это выглядит?)

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

OSError: msvcrt: cannot open shared object file: No such file or directory:

Ахахахахахахахахаха

quiet_readonly ★★★★ ()
Ответ на: комментарий от Virtuos86

Экзешник создался... для винды. Запускал по докам:

Нет, это я лоханулся. Посмотрел в mc содержимое, обычный elf.

Работает. В общем, если у кого не заведется pip'овская версия, рекомендую последовать моим путем.

Virtuos86 ★★★★★ ()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от Spirit_of_Stallman

Интересно было бы услышать специалистов в вопросе.

Не специалист, но, по-моему, этот спор яйца выеденного не стоит. Моё видение: компилятор это то что выдаёт машинный код. Но большинство компиляторов на самом деле трансляторы в asm, llvm или ещё что-то промежуточное. Так что корректнее называть это всё трансляторами.

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

Я бы сказал так: всё что транслирует в asm и llvm это компиляторы. То что транслирует в более высокоуровневые ЯП это трансляторы.

true_admin ★★★★★ ()

Это не первоапрельская шутка?

Ttt ☆☆☆☆☆ ()
Ответ на: комментарий от true_admin

Тогда связку транслятора в ASM или LLVM и компилятора ASM и LLVM можно назвать компилятором.
А с помощью Nuitka можно создать машинный код без виртуальной машины (даже built-in)?

Darth_Revan ★★★★★ ()
Ответ на: комментарий от Darth_Revan

А с помощью Nuitka можно создать машинный код без виртуальной машины (даже built-in)?

Ему нужен python C library.

С моей точки зрения питон это

1) парсер и интерпретатор (виртмашина) который дёргает сишную либу

2) Сама либа /usr/lib/libpython3.so

true_admin ★★★★★ ()

ИХМО лучше бы Jit пилили. Т.к:

1) есть уже более менее работающий Cthon

2) компиляторы не всё откомпилировать могут.

Rodegast ★★★★★ ()
Последнее исправление: Rodegast (всего исправлений: 1)

«Нюитка», гы.
А если с PyPy сравнить?

Nanodesu ()
Ответ на: комментарий от Nanodesu

простенький тест

# cat test.py

код
b = 0
for i in range(100):
       for x in range(100):
               b += i * x
print "Done"

# nuitka --exe test.py

# time ./test.exe

Done

real 0m0.064s
user 0m0.044s
sys 0m0.020s

# time python test.py

Done

real 0m0.028s
user 0m0.020s
sys 0m0.004s

меняем 100 на 10000 и перезапускаем

# time ./test.exe

Done

real 0m14.777s
user 0m14.773s
sys 0m0.000s

# time python test.py

Done

real 0m28.759s
user 0m28.722s
sys 0m0.012s

GoTLiuM ()

Оно только новые под него заточенные проекты собирать может или тот же Gajim осилит?

Quasar ★★★★★ ()
Ответ на: простенький тест от GoTLiuM

Есть подозрение, что в случае использования map результат будет не в пользу Nuitka.

Quasar ★★★★★ ()
Ответ на: комментарий от Nanodesu

А если с PyPy сравнить?

Вопрос риторический? (ибо проверка - две строчки), pypy порвет пистонами вашу нюитку

anonymous ()

Тред не читал. На чём-нибудь серьёзном, типа Gajim, проверяли?

P.S.: название прочитал правильно только с третьего раза, когда мозг совсем отказался верить глазам...

dhameoelin ★★★★★ ()
Последнее исправление: dhameoelin (всего исправлений: 1)
Ответ на: простенький тест от GoTLiuM

for i in range(100): for x in range(100):

Python такие простые циклы емнип оптимизирует, это не показательный тест.

У меня, кстати, Python выиграл в этом тесте, скрипты быстрее бинарников отработали :}.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Так «компилятор Python» — это и есть шутка.

Ttt ☆☆☆☆☆ ()
Ответ на: комментарий от Spirit_of_Stallman

Компиляция - с ЯВУ в машкоды.
Трансляция - с одного языка на другой. Но при этом скажем компиляцию ассемблерного листинга тоже называют трансляцией.

Я бы сказал, что трансляция это взаимно однозначное преобразование текста программы, а компиляция в общем случае нет.
Т.е. в случае с асмом каждой мнемонике соответствует 1-2 машкода (да, они могут отличаться в зависимости от размерности операнда, но в каждый момент времени используется только один), а один оператор ЯВУ может компилироваться в простыню машкодов совершенно различным образом

marvin_yorke ★★★ ()

Ребятки, я не вкурю - это же шутка, верно?

th3m3 ★★★★★ ()
Ответ на: комментарий от th3m3

нед... вчерась была новость что был релиз, а программа появилась не вчера

но говорят что оно не всегда дает выигрышь, скорее всего PyPy более целесообразен

но может как standalone-софт может nuitka и полезна может быть

I-Love-Microsoft ★★★★★ ()

Он type inference умеет или только планирует уметь?

tailgunner ★★★★★ ()

Нютка он называется, потому, что жену автора зовут Аня. Вы лучше расскажите, чем оно лучше Cython который уже есть, поддерживает C++ и неплохо таки работает.

В последний раз когда я на него смотрел, там сайта как такового и документации не было, а была какая-то презентация, где автор объяснял как круто делать компилятор, но не объяснял, чем он лучше Cython, ShedSkin и т.п.

anonymous ()
Ответ на: комментарий от tailgunner

tailgunner

Он type inference умеет или только планирует уметь?

Второе:

Future

In the future, Nuitka will be able to use type inference and guessing by doing whole program analysis and then applying the results to perform as many calculations as possible. It will do this - where possible - without accessing «libpython» but in C++ with its native data types.

It will also be possible to integrate «ctypes» based bindings without the normal speed penalty (the compiled program will call the C++ library in C++ directly).

And finally you will be able to use a «hints» module to tell Nuitka about type information that it cannot guess.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Spirit_of_Stallman

Так и есть. Транслятор переводит с одного языка на другой (в данном случае полученный код можно скомпилировать GCC). Компилятор считывает сразу всю программу и генерирует машинный код, интерпретатор же делает это построчно

anonymous ()
Ответ на: комментарий от Virtuos86

Эту страницу я читал. Но на ней же написано «first steps have been undertaken to achieve „type inference“».

tailgunner ★★★★★ ()
Ответ на: комментарий от Spirit_of_Stallman

Транслятор - общее понятие. Подразделяется на компиляторы и интерпретаторы.
Компилятор на самом деле тоже преобразует код на одном языке (высокого уровня) в код на другом языке (машинном). Принципиальной разницы с преобразованием инструкций одного ЯВУ в инструкции другого ЯВУ в данном случае нет.

Xellos ★★★★★ ()
Ответ на: комментарий от Xellos

Транслятор - общее понятие. Подразделяется на компиляторы и интерпретаторы.

double_facepalm.jpg

tailgunner ★★★★★ ()
Ответ на: комментарий от Virtuos86

ЕМНИП, компилятор == транслятор

ЕМНИП, трансляторы делятся на компиляторы и интерпретаторы.

segfault ★★★★★ ()
Ответ на: комментарий от tailgunner

То, что там написано, скорее подходит под «кое-что сделано», а не «есть в наличии». То есть все-таки нет.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от segfault

По-моему, кто-то мается фигней. Вам так важно установить точную терминологию?

Virtuos86 ★★★★★ ()

c PyQt кто-нибудь пробовал? Линкуется? Сейчас пишу под pyqt, но установка написанного софта под винду выглядит страшно. Надо запускать несколько инсталяторов на сотни мегов. ехе-шник + пара длл-ок были бы в тыщу раз лучшим решением. Пусть даже этот ехе-шник бы вышел в 50мб размером

anonymoos ★★★★ ()
Последнее исправление: anonymoos (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.