После 10 месяцев разработки анонсирован (http://docs.topazruby.com/en/latest/blog/announcing-topaz/) первый выпуск проекта Topaz (http:/www.topazruby.com), в рамках которого создана новая реализация языка Ruby, написанная на языке RPython (http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html#re...) (подмножество языка Python со статической типизацией) и использующая наработки проекта PyPy (http://pypy.org/). Код Topaz распространяется (https://github.com/topazproject/topaz) под лицензией BSD. Ключевыми целями проекта является обеспечение высокой производительности и простота реализации. Готовые бинарные сборки созданы для Mac OS X, Linux и Windows.
Topaz базируется на идее использования JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, в сочетании с эффективным сборщиком мусора. Указанные элементы позволили добиться значительного прироста производительности и заметно обогнать по скорости традиционный интерпретатор Ruby. Topaz нацелен на обеспечение совместимости с Ruby 1.9.3, но пока реализация не является полной и проект позиционируется как экспериментальная разработка, ещё не готовая для использования в реальных проектах.
Из недостающих компонентов отмечается отсутствие многих модулей стандартной библиотеки и встроенных методов, нет поддержки приватных методов, FFI и многопоточности. Тем не менее уже доступны почти все базовые возможности языка, включая классы, блоки, различные встроенные типы, методы и многое другое. Следующие несколько месяцев планируется посвятить обеспечению работы стандартных модулей и классов, а также добиться совместимости с модулями, написанными на языке Си, что позволит довести Topaz до пригодности к выполнению пользовательских Ruby-приложений.
URL: http://docs.topazruby.com/en/latest/blog/announcing-topaz/
Новость: http://www.opennet.me/opennews/art.shtml?num=36050
Вот и встретились два тормоза! :)
Ждём PHP на JavaScript.
Всё правильно. Готовится же пилотируемый полет на Марс, надо, значит, космонавтам затормозить у Марса да топливо сэкономить. Вот руби, написанный на питоне, написанный на жаваскрипте, написанный на пхп, написанный на васике, пригодится.
да чота както не смешно, ведь это была шутка да?
Для тех, кто в танке, RPython по сути ближе к C++/D и компилируемый, но с Python-like синтаксисом, так-что троллинг про тормоза не к месту.А сама идея - прикольная, поработав над проектом, можно прокачаться и в Ruby и в Python, еще бы практическое применение ему найти.
> Для тех, кто в танке, RPython по сути ближе к C++/DПро яву жабисты тоже так говорят. Ну да, по сравнению с классическим питоном ява быстрая: сливает сям всего в 3-4 раза. На фоне питона - быстро, не отнять.
За счет allocator действительно java быстрее C/C++ при частом выделении освобождении небольших обьемов динамической памяти
для тех кто в танке, в реализациях аллокатора, алгоритм сводится к тому, что после освобождения конкретной памяти, физически она висит в пространстве и ждёт очередную порцию мелких аллоков внутри этого самого куска, дабы избежать фрагментации. Задолбали со своими криками про "жаба быстрее С/С++", будто бы жаба написана на чём-то сферическом.
В C++ аллокатор'ы можно свои понаписать, и оптимизировать их под свои нужды.
Более того, любой уважающий себя, нагруженный проект на сях к этому рано или поздно приходит.
Вот собственно и получается что вдля мелких программ жаба только память жрет и воздух обогревает, а с крупными спорить все рано не может... ни один жаб никогда не сказал что его программа обогнала аналог на си (засмеют), все у них теоретически....
> В C++ аллокатор'ы можно свои понаписать, и оптимизировать их под свои нужды.И в си. Ну а жабисты понятное дело вынуждены кушать то что спустили божки свыше и нахваливать.
> За счет allocator действительно java быстрее C/C++ при частом выделении освобождении небольших
> обьемов динамической памятиНа сях и плюсах ВНЕЗАПНО можно использовать свой кастомный алокатор. Любой. Вплоть до fully static распределения памяти (применяется в эмбеддовке и ответственных применениях, где сбой выделения памяти просто недопустим).
> ява быстрая: сливает сям всего в 3-4 разав специально подогнанных под нее тестах. в реальности 30-40 раз будет
> в специально подогнанных под нее тестах. в реальности 30-40 раз будетДа не, это в обычных. Вон бенч на quicklz.com например - алгоритм сжатия, один и тот же, на сях, яве, сишарпе и прочая. Ну, авторы пишут либу и им никакого интереса кого-то специально чмырить. Вот ява там как раз раза в три и сливает.
> Для тех, кто в танке, RPython по сути ближе к C++/D и
> компилируемый, но с Python-like синтаксисом, так-что троллинг про тормоза не к
> месту.
> А сама идея - прикольная, поработав над проектом, можно прокачаться и в
> Ruby и в Python, еще бы практическое применение ему найти.Да "мерзость" Явы не в ее медлительности - это даже почти не грех, тем более, что вычисления, например, она делает вполне быстро...
> тем более, что вычисления, например, она делает вполне быстро...Зато пока офисный пакет с явой взлетит чтобы открыть один ср@ный CSVшник на 5 кило - выбешивает весьма конкретно.
Тесты показывают, что на JS возможна производительность близкая к C (V8 в основном в 2 раза медленнее, но иногда выдаёт код даже более быстрый, чем на C). Ещё учти, что PyPy (компилятор питона на питоне) в основном в 10 раз более быстрый код генерирует, чем CPython (компилятор питона на си).
Так что PHP на JS может внезапно оказаться быстрее того, что есть сейчас. Такие дела. Другое дело, что скорость PHP особой роли обычно не играет кроме очень динамичных сайтов. В остальных случаях достаточно хорошего кэширования.
> Тесты показывают, что на JS возможна производительность близкая к C (V8 в основном в 2 раза медленнее, но иногда выдаёт код даже более быстрый, чем на C).Синтетические - может быть. В реальной жизни он медленнее на порядки и всегда будет.
На порядки медленнее Питон. PyPy на порядок, CPython на все два порядка. Всё зависит от прямоты рук — плохой и крайне медленный код можно написать на любом языке и это не вина языка если программа сортирует пару миллионов строк методом пузырька. Вот памяти он всегда будет жрать в несколько раз больше C, но память сейчас обычно не проблема даже на относительно дешёвых планшетах.
> можно написать на любом языке...но на JS написать медленный код - как делать нефиг, а вот быстрый - надо долго изгаляться. Потому что динамическая типизация подразумевает массу лишних проверок "а не изменился ли у нас тип". Что распостраняется даже на самые простые операции.
>Потому что динамическая типизация подразумевает массу лишних проверокЕсли ты специально не пытаешься использовать одну переменную для всех мыслимых целей, то V8 присваивает ей определённый тип и дальше все эти проверки не выполняет. Если ты не клинический идиот, то как минимум это проблемой не станет.
> Ещё учти, что PyPy (компилятор питона на питоне) в основном в 10 раз более быстрый код генерирует, чем CPython (компилятор питона на си).И что ты этим хотел сказать? Хотел нам пояснить принципиальную невозможность генерации быстрого "змеиного" кода компилятором написанным на "С"?
> И что ты этим хотел сказать? Хотел нам пояснить принципиальную невозможность генерации
> быстрого "змеиного" кода компилятором написанным на "С"?То, что компилятор написанный на высокоуровневом языке может позволить выполнять оптимизации, которые на чистом С реализовать на несколько порядков сложнее. PyPy это крайне наглядно доказал.
> PyPy это крайне наглядно доказал.А что, сам pypy при выполнении питонятины уже обгоняет си? Или уже не является кастрированной реализацией питона, с запретом использовать ряд функционала?
> А что, сам pypy при выполнении питонятины уже обгоняет си?Вероятно ты не понял, но PyPy компилирует код в бинарный и ничего не исполняет. Собственно и CPython делает то же самое. Если нужный код вынести в модули, то при первом исполненни будут даже созданы бинарные файлы на диске, которые будут использованы при следующем запуске вместо пересборки питонятины ещё раз.
Код собранный из питонятины работает медленнее Си. Собранный PyPy — на порядок, собранный CPython на два порядка. Собственно тут поднимался вопрос о реализации компилятора PHP на JS и я указал именно на то, что написать компилятор на высокоуровневом языке может оказаться более выгодным, чем писать его на низкоуровневом с точки зрения скорости выполнения собранного кода после его оптимизации компилятором. Сам компилятор при этом наверняка будет работать медленнее даже при ограничении на использование одинакового набора оптимизаций, но это ведь и не важно — в случае компиляции нам ведь важно как быстро мы побежим, а не как долго мы к этому будем готовиться.
Другое дело, что на высокоуровневом языке наверняка будет невыгодно писать интерпретатор или JIT-компилятор с точки зрения времени затрачиваемого на интерпретацию и JIT-компиляцию, так-как это время уже реально будет влиять на скорость работы приложения. В случае PHP использование компилятора действительно проблематично и приведёт к невозможности реализации некоторых его возможностей. Вообще чего уже только ни придумали для ускорения пыха. И конвертер в C++, и компилятор в байткод .NET…
> Или уже не является кастрированной реализацией питона, с запретом использовать ряд функционала?
Не являлся. Там есть некоторые различия в риализаци некоторых вещей, но в основном они связаны со сборщиком мусора, некоторыми стратегиями оптимизации исполнимого кода и изначально недокументированным поведением. Всего таких различий мало и их довольно легко избежать. Может не хватать некоторых модулей, но лишь потому, что их нужно переписать на самом же питоне и это ещё не сделано, а не потому, что это невозможно.
Подробности по ссылке, ничего ужасного принципиально неразрешимого там нет: http://pypy.readthedocs.org/en/latest/cpython_differences.html
> Вероятно ты не понял, но PyPy компилирует код в бинарный и ничего не исполняет. Собственно и CPython делает то же самое.Путаете CPython и Cython. В машинный код компилируется последний. Первый — это образцовая реализация питона. Он является интерпретатором и компилируется в байткод.
> Путаете CPython и Cython. В машинный код компилируется последний. Первый — это
> образцовая реализация питона. Он является интерпретатором и компилируется в байткод.Ты прав, путаю, но всё же CPython это интерпретатор и компилятор — он ведь компилирует то, что разобрал, в байткод, а не выполняет команды последовательно, так ведь? PyPy же вообще собирает и оптимизирует байткод по-мере надобности используя JIT-компилятор.
>> Путаете CPython и Cython. В машинный код компилируется последний. Первый — это
>> образцовая реализация питона. Он является интерпретатором и компилируется в байткод.
> Ты прав, путаю, но всё же CPython это интерпретатор и компилятор —
> он ведь компилирует то, что разобрал, в байткод, а не выполняет
> команды последовательно, так ведь? PyPy же вообще собирает и оптимизирует байткод
> по-мере надобности использую JIT-компилятор.... кони, люди...
Ну ладно, ладно, CPython это интерпретатор байт-кода. Легче стало?
ага отлегло прям
> Вероятно ты не понял, но PyPy компилирует код в бинарный и ничего не исполняет.IIRC он умеет только урезанный субсет питона с уймой ограничений.
> Собственно и CPython делает то же самое.
Ага, понятно, FAIL засчитан. Cpython может компилировать в некий промежуточный байткод. Но эпикфэйл состоит в том что далее этот байткод ... ИНТЕРПРЕТИРУЕТСЯ.
Но да, спасибо, я заметил - питонисты настолько тупые, что вообще не способны понять что нет никакой разницы, будут ли интерпретироваться слова или какие-то байткоды. Спасибо что подтвердили мой тезис.
> код вынести в модули, то при первом исполненни будут даже созданы
> бинарные файлы на диске, которые будут использованы при следующем запуске вместо
> пересборки питонятины ещё раз.Вот только в модулях опять же некий абстрактный байткод, который CPU напрямую выполнять не может. И поэтому питон его интерпретирует. Трабла в том что полезная логика программы оказывается густо разбавлена логикой интерпретера. По поводу чего интерпритаторы тормознее компиляторов, которые перегоняют все в нативный машинный код 1 раз, а потом в коде остается только логика программы. Так что разбавление кода интерпретаторским - пропадает. Интерпретеры тормознее компилеров by design. В счет чего cpython (который интерпретер) - без шансов vs компилеров или хотя-бы умеющих JIT. Pypy в этом плане лучше, но он IIRC умеет только урезаный субсет питона и совсем не факт что обгонит си на одном и том же алгоритме, так что громкие тезисы о супер-оптимизации как-то не выглядят доказанными.
>> PyPy это крайне наглядно доказал.
> А что, сам pypy при выполнении питонятины уже обгоняет си? Или уже
> не является кастрированной реализацией питона, с запретом использовать ряд функционала?Да вроде как да
> Ждём PHP на JavaScript.Накаркаешь ведь :)
Тонкий троллинг Ruby со стороны Python
То ли еще будет, когда эту штуку на самом pypy запустят
> То ли еще будет, когда эту штуку на самом pypy запустятТак они практически это и сделали.
> То ли еще будет, когда рубисты в отместку напишут интерпретатор питона :)
>> То ли еще будет, когда рубисты в отместку напишут интерпретатор питона :)Точнее когда. Еще точнее - никогда. Писалка не выросла.
>>> То ли еще будет, когда рубисты в отместку напишут интерпретатор питона :)
> Точнее когда. Еще точнее — никогда. Писалка не выросла.писалка-то на месте, только нафига им змей-кастрат? руби как-то помощней и покрасивей будет, хотя тоже далеко не торт.
> Точнее когда. Еще точнее - никогда. Писалка не выросла.Пипитонисты все меряются пипи? :)
На чём?
на веществах. питонисты отсыпят.
Ну, почему сразу толлинг... Просто теперь рекурсивно можно создавать Ruby и Python с любым быстродействием. Сейчас на топазе перепишут питон.
Еще большим троллингом будет написть питон на Ruby, чтобы продемонстрировать питонистам, как написать код в 3 раза компактнее, чем PyPy.
>>> Из недостающих компонентов отмечается отсутствие многих модулей стандартной библиотеки и встроенных методов, нет поддержки приватных методов, FFI и многопоточности.А где же потребление оперативной памяти?
>> высокопроизводительной реализации Ruby, написанной на языке Pythonржал в голос
"улыбайтесь шире - шеф любит идиотов" ©
Ну не все шефы такие же как и твой шеф =) Повезло тебе с ним =)
> высокопроизводительной реализации Ruby, написанной на языке PythonУ меня когнитивный диссонанс. Столько взаимоисключающих параграфов в 6-ти словах.
кретины, способные лишь на повторение шаболонных фраз к месту и без, продолжают называть наборы слов параграфами. нафсед
У вас запятая после предлога.
У него все верно, предлог относится к причастному обороту.
фейл, оборот не причастный, и ошибка в шаболонности, посыпаю голову пеплом. В любом случае запятая стоит на своем месте ))
> У меня когнитивный диссонанс. Столько взаимоисключающих параграфов в 6-ти словах.Да ладно вам, просто у питонистов свои понятия о высокой производительности.
PyPy уже года три как всё не могут Python 3 реализовать. Хотя хвалились, что за счёт высокоуровневости на PyPy новые плюшки и сахарок пишутся и реализуются в разы проще, чем на CPython.Неужели руби проще написать, чем py3k?
> PyPy уже года три как всё не могут Python 3 реализовать. Хотя
> хвалились, что за счёт высокоуровневости на PyPy новые плюшки и сахарок
> пишутся и реализуются в разы проще, чем на CPython.
> Неужели руби проще написать, чем py3k?потому не могут, что стандарт 3.x меняется
> Неужели руби проще написать, чем py3k?Так они и руби реализовали 1.9, тогда как там уже 2.0 есть...
напишите в заголовке RPython вместо Python
Поглумились в жесткой форме над питоном? Язык, пригодный для написания Ruby? :)))
> Поглумились в жесткой форме над питоном? Язык, пригодный для написания Ruby? :)))Ну да, а создатели Ruby поглумились над C. А создатели JRuby — над Java. А природа — над тобой.
В JRuby по крайней мере есть очевидный смысл - простота размещения Ruby-приложений на сервере приложений. А вот в реализации на питоне со смыслом явно проблемы. Тем более, что 2-й Ruby имеет весьма сходные возможности с питоном по кодогенерации на целевых машинах.
> с питоном по бредогенерации на целевых машинах.//fixed
Оставлю в сторонке желание поупражняться в остроумии и задамся простым вопросом: а смысл?
На питоне относительно проще, чем на си, напейсать годный интерпритатор. Ну и потому, что могут
То есть все предыдущие - негодные?
> Оставлю в сторонке желание поупражняться в остроумии и задамся простым вопросом: а
> смысл?Кто спасёт хипстеров-рубильников от тормозов? Только бравые питонисты!
> Кто спасёт хипстеров-рубильников от тормозов? Только бравые питонисты!спасение утопающих - дело рук других утопающих?
> Кто спасёт хипстеров-рубильников от тормозов? Только бравые питонисты!Гадюки спасают рубильники. Новое слово в науке и технике.
Если оно получилось шустрее чем не смысл?
We need to go deeper.
> I’m extraordinarily pleased to today announce Topaz, a project I started 10 months ago, to create a brand new implementation of the Ruby programming language (version 1.9.3)Откуда, ну откуда у людей столько свободного времени ?! Они уже умеют питаться лучами из космоса и выробатывать деньги из воздуха ? Ну не верю я что сидя по вечерам , после тяжкого дня по укладке кирпичей он садился и писал, писал писал ..
> выробатыватьКто в школе хорошо учился кирпичи не укладывает
> Кто в школе хорошо учился кирпичи не укладываетпетросянщина
> Кто в школе хорошо учился кирпичи не укладываетВот вы в школе учились плохо. Судя по отсутствию знаков препинания.
>> Кто в школе хорошо учился кирпичи не укладывает
> Вот вы в школе учились плохо. Судя по отсутствию знаков препинания.Ну-ка профессор, поделись, где тут запятая нужна?
>>> Кто в школе хорошо учился кирпичи не укладывает
>> Вот вы в школе учились плохо. Судя по отсутствию знаков препинания.
> Ну-ка профессор, поделись, где тут запятая нужна?вот ты, например, как раз запятую пропустил. а выше — тире надо. которое тоже знак препинания.
>>>> Кто в школе хорошо учился кирпичи не укладывает
>>> Вот вы в школе учились плохо. Судя по отсутствию знаков препинания.
>> Ну-ка профессор, поделись, где тут запятая нужна?
> вот ты, например, как раз запятую пропустил.Я специально, раздельно как-то не то.
> а выше — тире надо. которое тоже знак препинания."А" надо с заглавной писать, да и "которое" тоже, иль точки и запятые не путать :-P
> «А» надо с заглавной писать, да и «которое» тоже, иль точки и
> запятые не путать :-Pне надо: это не важно, да вдобавок поддаётся автоматической починке. а вот скрипт для верной расстановки знаков препинания написать несколько… сложнее.
Хорошая шутка.
Странные ребята комментаторы. "встретились два тормоза", "Си рвут питон по скорости" и т.д.
Напоминает ситуацию на дороге: Mercedes SLK едет по городу 60 км/ч и останавливается на красном, а его обгоняет пионер на Запоре и кричит: г*** твоя машина, еле ездит. (Потом с перекрёстка доносится бабах).
Скажите, какой смысл в производительности *кода*, скажем, в кодировщике видео? Ну и что, что он будет кодировать 100500ГБ/с, если винт (или даже ССД) больше 200МБ/с не запишет? Что вы его на Си напишете, что на АСМе, что на бейсике -- ничего не изменится.
Куда вы торопитесь? На красный свет? Или на тот свет???
Смотрите реально на вещи, господа комментаторы.
ЗЫ
Как вы догадались, Си -- это Запор по сравнению с Питоном-мерседесом по удобству разработки. По крайней мере, в той сфере, где Питон применим.
По удобству разработки это питон - Запор по сравнению с Ruby-мерседесом.
Ездите на своих мерседесах, а мы поставим в таёту двигатель от сушки, и прикрутим шасси от Б-29. И поедим быстро и с комфортом.
> И поедим быстро и с комфортом.Не знаю что вы там съесть собрались, а вот городские легенды о мужике с пороховым ускорителем в драндулете на сайте у дарвинистов есть. По легенде проблема состояла в том что управляемость в воздухе у автомобиля - чуть менее чем никакая.
Ну и примерчик вы выбрали.Действительно - ну какая разница, смогу я в реальном времени жать видео на корке или на атоме... Ещё ладно, если б привели в пример цикл обработки пользовательского ввоода - и то часто потом с этим вводом надо что-то быстро сделать, чтобы пользователь не ждал железку. Вот прототипы на питоне - это хорошо и правильно.
Им надо написать Ruby на Jython, причем саму JVM запускать в виде JavaScript приложения поверх браузера... а браузер, конечно же, пускать поверх ОС, которая живет на виртуальном сервера, сам сервер в виртуальной машине.Кул-хацкеры атакуэ!!!
> Кул-хацкеры атакуэ!!!Для полноты картины надо сначала в браузере операционку загрузить.
> Для полноты картины надо сначала в браузере операционку загрузить.В кему-ляторе на js. //Полнота дополнена.