The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз Python-компилятора Shed Skin 0.8

06.07.2011 22:13

Представлен релиз проекта Shed Skin 0.8, в рамках которого развивается экспериментальный компилятор Python-скриптов в представление на языке C++. Поддерживается генерация как обособленных исполняемых программ, так и модулей, которые после компиляции можно импортировать в Python-проекты с целью оптимизации производительности. В новой версии Shed Skin добавлена поддержка новых модулей (array, struct), решены проблемы с работой на 64-разрядных системах, добавлены новые оптимизации и исправлены ошибки. Код Shed Skin распространяется в рамках лицензии GPLv3.

Для компилируемых скриптов обязательным требованием является использование статической типизации (в процессе работы скрипта тип переменной не должен изменяться). Дополнительные ограничения вносятся на возможности использования стандартной библиотеки модулей - в настоящее время поддерживается только 22 базовых модуля. Из языковых конструкций не поддерживаются вложенные функции и функции с переменным числом аргументов.

Отдельный интерес представляет тестовый комплект, используемый для оценки совместимости с базовой реализацией CPython и для измерения производительности. Для тестов используется специально созданный в рамках проекта эмулятор платформы c64 (около 3500 строк кода) и около 60 различных скриптов, охватывающих различные особенности языка Python. При запуске под управлением CPython эмулятор обеспечивает вывод всего нескольких кадров в секунду, после компиляции с использованием Shed Skin производительность возросла до 50 FPS. В среднем, по утверждению разработчиков, Shed Skin обеспечивает прирост производительности от 2 до 200 раз, в зависимости от используемых задач.

При оценке работы при помощи тестового комплекта plb, в тесте "sudoku" Shed Skin оказался быстрее Jython в 31 раз, CPython в 25 раз, IronPython в 22 раза, PyPy в 4 раза. В тесте обработки строковых данных Shed Skin израсходовал в три раза больше памяти чем CPython, уступив только Jython, но в тесте умножения матриц потребление памяти в Shed Skin оказалось почти в два раза ниже CPython.

Из других проектов по созданию компиляторов для языка Python упоминается проект Gccpy, основанный студентом в рамках программы Google Summer Of Code 2010. Gccpy развивается под впечатлением от проекта PHC (фронтэнд к GCC для языка PHP). Как и PHC проект Gccpy реализован в виде фронтэнда к GCC. Разработка Gccpy еще далека от завершения, но позавчера был преодолен важный рубеж - подготовлен пригодный для сборки набор исходных текстов.

  1. Главная ссылка к новости (http://shed-skin.blogspot.com/...)
  2. OpenNews: Релиз PyPy 1.5, реализации Python, написанной на языке Python
  3. OpenNews: PHP-транслятор HipHop позволил Facebook использовать в разы меньше оборудования
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31099-python
Ключевые слова: python, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (47) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, anonymous (??), 22:53, 06/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для компилируемых скриптов обязательным требованием является использование статической типизации

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

     
     
  • 2.2, all_glory_to_the_hypnotoad (ok), 23:05, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Таких компиляторов просто нет, нельзя анализировать динамический код и заменять его типизированными вставками. По крайней мере для ЯП типа питона.
     
     
  • 3.3, anonymous (??), 23:16, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Таких компиляторов просто нет, нельзя анализировать динамический код и заменять его типизированными
    > вставками. По крайней мере для ЯП типа питона.

    автор Stalin'а очень удивлён: он, оказывается, сделал то, что сделать нельзя.

     
     
  • 4.31, all_glory_to_the_hypnotoad (ok), 21:26, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    питон значительно отличается от хаскеля, нет в яп достаточной интроспецкии в сишные потраха. Даже ципкл в питоне формально нельзя развернуть в статический код.
     
     
  • 5.33, chinarulezzz (ok), 01:13, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    бред щас сказал. К тому же Stalin - схема. Хотя какая разница, да.
     
     
  • 6.34, all_glory_to_the_hypnotoad (ok), 08:47, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ну конечно. Разверни вот такой код детерминированно в статик

    from math import fabs

    print reduce(lambda x,y: x + fabs(y), xrange(10))

    и подумай зачем, например, в некоторых PL/SQL есть атрибуты у храминок типа IMMUTABLE,
    STABLE, VOLATILE. Зачем похожие вещи есть в inline ассемблерах, в сях/поюсах const и т.п.

    > К тому же Stalin - схема. Хотя какая разница, да.

    в общем то да, в данном случае разница не велика. всё одинаково далеко от питона

     
     
  • 7.36, anonymous (??), 11:05, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > ну конечно. Разверни вот такой код детерминированно в статик

    и что? очевидно, что это работа с числами.

    > всё одинаково далеко от питона

    гвидобейсик такой гвидобейсик.

     
     
  • 8.38, Аноним (-), 13:30, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе с твоим человечьим мозгом может быть, и то не очевидно, ты просто догадывае... текст свёрнут, показать
     
     
  • 9.39, anonymous (??), 14:16, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    даже такому альтернативно развитому, как ты должно быть ясно, что библиотечные ф... текст свёрнут, показать
     
     
  • 10.40, anonymous (??), 14:17, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ах, да конечно, JIT не для гвидобейсика недоязыки меня не интересуют ... текст свёрнут, показать
     
  • 10.41, all_glory_to_the_hypnotoad (ok), 20:19, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    компилятор не знает что такое fabs , _не_ знает что такое reduce Да и в конт... текст свёрнут, показать
     
     
  • 11.43, anonymous (??), 10:04, 09/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    это очень, очень глупый компилятор значит детсадовский впрочем, гвидобейсик же... текст свёрнут, показать
     
  • 3.12, Аноним (-), 01:33, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Анализировать динамический код и выводить по возможности типы переменных умеет любая современная IDE, посмотри что ли на продукты JetBrains.
     
     
  • 4.29, pro100master (ok), 20:58, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не в обиду, но - не умеет. Вернее умеет, но только то, что задана в её внутренностях. Реально, где она рулит - джава. Надо понимать за счет рефлексии и реверса - это для неё нативно.
     
  • 4.30, all_glory_to_the_hypnotoad (ok), 21:21, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    это всё "эвристический" вероятностный анализ. Для формального детерминированного выполнения он совсем не подходит, а для разбора в первом приближении вполне.
     
  • 2.25, Аноним (-), 18:16, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > потому что компилятор дурачок

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

     
     
  • 3.27, anonymous (??), 18:21, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Вообще, господин Тюринг выдвинул довольно интересную теорию: одна программа никогда не
    > сможет полностью проанализировать работу другой программы.

    и поэтому анализаторы вообще не нужны, ага.

     

  • 1.4, tavaaver (?), 23:22, 06/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странно, что в тесте Sudoku компилятор оказался в 31 раза быстрее CPython и в 4 раза быстрее PyPy.
    Если прочитать это предложение в обратную сторону, то получится, что на PyPy этот тест выполняется в разы быстрее, чем на CPython.

    Это не очень логично — CPython изначально должен быть быстрее всех остальных интерпретаторов, кроме Jython (поскольку там JIT).

    Или я чего-то не понимаю? Может в PyPy оптимизации какие хитрые есть?
    Кто-нибудь из знатоков Питона может объяснить?

     
     
  • 2.5, tavaaver (?), 23:24, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Я ошибся — в 25 раз быстрее, чем в CPython.
     
     
  • 3.9, Stax (ok), 23:37, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    В PyPy есть JIT. Собственно, для этого он и делался, чтобы быть быстрее CPython.
     
     
  • 4.14, bw (ok), 06:03, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не для этого он делался.
    Это площадка для экспериментов, на Python (PyPy) писать проще чем на C (CPython). И JIT здесь можно считать очередным экспериментом, который появился достаточно быстро (ну в CPython его ещё нет и будет ли) именно благодаря выбранному языку реализации.

    ..bw

     
     
  • 5.15, Имя (?), 08:01, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >Не для этого он делался.

    Для этого.

    >Это площадка для экспериментов, на Python (PyPy) писать проще чем на C (CPython).

    Он не на Python а на RPython написан.

     
  • 2.7, Аноним (-), 23:33, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    CPython самый медленный так как интерпретатор, а PyPy - быстрый так как использует JIT-компиляцию.

    "Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, минуя фазу интерпретации байткода в виртуальной машине, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python на языке Си - при выполнении 20 тестов производительности PyPy в среднем опережает CPython в 3.6 раз."
    http://www.opennet.me/opennews/art.shtml?num=30422

     

  • 1.6, szh (ok), 23:29, 06/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вот здесь: http://snowplow.org/martin/rebench/ хороший Regular expression speed comparison для perl, python, ruby

    У меня python 2.6.5 проигрывает по скорости perl 5.10.1 от 2х до 8 раз (в одном тесте в 20) (Ubuntu 10.04).
    IronPython 2.6 проигрывает обычному python в ~10 раз.
    PyPy 1.2.0 проигрывает обычному python от 2 до 20 раз.

    Интересно как в этой штуке.

     
     
  • 2.8, anonymous (??), 23:33, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > У меня python 2.6.5 проигрывает по скорости perl 5.10.1 от 2х до
    > 4х раз (в одном тесте в 20) (Ubuntu 10.04). IronPython 2.6
    > проигрывает обычному python в ~10 раз.

    в синтетических тестах? слабый показатель. мой доморощеный скриптовый язык, например, в синтетических тестах перл обгоняет. а на самом деле -- тормозит.

     
     
  • 3.10, szh (ok), 23:40, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это тесты на регекспы. Там хорошо обыграны разные комбинации.

     
     
  • 4.11, anonymous (??), 23:43, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Это тесты на регекспы.

    что вообще имеет мало отношения к скорости языка. вон, на многих часто используемых (и умно составленых) регэкспах tre раскатывает катком и перл, и pcre. если я заменю pcre на tre — я ведь не ускорю язык этим.

     
     
  • 5.13, szh (ok), 01:46, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    у меня некоторый функционал большую часть времени занимается split'ами и регекспами, так что если ускорятся регекспы, то скорость программы ускорится ощутимо.

    попробовал http://cpansearch.perl.org/src/DGL/re-engine-RE2-0.08/README

    RE2 от в 2 раза медленнее, до в 4 раза быстрее

     
  • 4.16, Имя (?), 08:04, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Это тесты на регекспы. Там хорошо обыграны разные комбинации.

    У Яндекса какая-то библиотека есть которая делает перл как стоячий обгоняя его в 35 раз на регекспах. К языку синтетические тесты не имеют отношения.

     
     
  • 5.17, iNode (?), 09:17, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://github.com/dprokoptsev/pire
     
     
  • 6.19, Имя (?), 11:19, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Да, спасибо оно.
     
  • 5.21, anonymous (??), 13:35, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > У Яндекса какая-то библиотека есть которая делает перл как стоячий обгоняя его
    > в 35 раз на регекспах. К языку синтетические тесты не имеют
    > отношения.

    «Pire does not have any Perlish conditional regexps, lookaheads & backtrackings, greedy/nongreedy matches; neither has it any capturing facilities.»

    кастраты не интересны.

     
     
  • 6.22, Имя (?), 14:08, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >«Pire does not have any Perlish conditional regexps, lookaheads & backtrackings, greedy/nongreedy matches; neither has it any capturing facilities.»

    А прочитать README.RU не судьба

    >кастраты не интересны.

    Анонимы не интересны.

     
  • 5.32, szh (ok), 21:57, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > У Яндекса какая-то библиотека есть которая делает перл как стоячий обгоняя его в 35 раз на регекспах. К языку синтетические тесты не имеют отношения.

    Эта библиотека почти ничего из функционала регекспов не умеет, только самое простое. Не умеет даже greedy/nongreedy matches, так что не важно во сколько раз, когда неюзабельно.

     
  • 3.26, Аноним (-), 18:18, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > в синтетических тестах? слабый показатель.

    Нихрена себе синтетика - регэкспы. Они и в реальных программах там и тут :)

     
     
  • 4.28, anonymous (??), 18:22, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Нихрена себе синтетика - регэкспы. Они и в реальных программах там и
    > тут :)

    ты не в курсе, что тесты регэкспов тоже бывают синтетические?

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

     
  • 2.24, Макс (??), 16:14, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    1.2 это ооочень старая версия - практически без всяких оптимизаций.  В 1.3 или 1.4 они  как-раз подкрутили регулярки, если мне память не изменяет.
     
     
  • 3.47, anonym (?), 15:55, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    perl там тоже древний, в 5.14 сильно их ускорили
     

  • 1.18, Аноним (-), 10:01, 07/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А почему для perl никто компиляторы не пишет? Неуловимый Джо?
     
     
  • 2.20, anonymous (??), 13:34, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А почему для perl никто компиляторы не пишет? Неуловимый Джо?

    пишут, parrot. кучу лет уже пишут. ну, это ж перлисты — они ещё долго писать будут.

     
     
  • 3.35, Аноним (-), 08:59, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А транслятор в C или С++ не существует?
     
     
  • 4.37, anonymous (??), 11:23, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А транслятор в C или С++ не существует?

    а зачем? O_O

     
     
  • 5.42, Аноним (-), 08:31, 09/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Дык для PHP вон HipHop сделали, а для Perl ничего?
     
     
  • 6.44, anonymous (??), 10:11, 09/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Дык для PHP вон HipHop сделали, а для Perl ничего?

    livejournal работает и без хипхопа.

     
  • 4.46, anonym (?), 20:15, 11/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А транслятор в C или С++ не существует?

    Кстати да. Зачем?
    Критичные участки кожа можно переписать на C\C++ и подключить через XS.

     
     
  • 5.48, Аноним (-), 14:05, 15/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вспоминается история Rambler почты, когда выкинули perl и переписали всё на Си.
    Было 80 серверов, стало 5. Это я к чему, имеет ли смысл писать проекты с высокой нагрузкой на перл или сразу начинать с Си?
     
  • 3.45, anonym (?), 20:13, 11/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    parrot - он для всего, в первую очередь для perl6, а потом уже питон, перл5, руби и т.п.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру