LINUX.ORG.RU

Parrot 0.8

 , ,


0

0

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

Среди изменений стоит отметить:

  • Переменные с плавающей точкой расширены с 6 до 15 значащих цифр.
  • Большие целочисленные значения автоматические преобразуются для сохранения точности.
  • Увеличена точность комплексного квадратного корня.
  • Обработчик исключений теперь может регистрировать тип пойманого исключения.
  • Множество исправлений и улучшений в реализации Perl6 (Rakudo).
Также приятной новостью стало присоединение к Parrot Foundation компании ActiveState, известной своими кросс-платформенными инструментами для динамических языков.

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

★★★★★

Проверено: JB ()

Ответ на: комментарий от Ravana

> Вот с бородой [...] всё нормально, а на голове того...

Не стану даже предполагать, где в таком случае у Вас борода :]

COTOHA
()

D - вас помирит. <quote>D - объектно-ориентированный компилируемый кросс-платформенный язык программирования высокого уровня с С-подобным синтаксисом, отличающийся от С++ системой модулей (наподобие Python) вместо #include, сборкой мусора, одиночным наследованием + наследованием интерфейсов, очень быстрой компиляцией исходников, встроенными делегатами и простыми контейнерами, контрактами и встроенными тестами модулей (перечислены лишь основные особенности).</quote> Ждем развития библиотек.

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

>Динамически типизированные языки никогда не догонят по скорости статически типизируемые.

Если задаться только этой целью, то догнать можно. Отставание будет, но совсем небольшим. Я лет 8 назад играл с динамическим объектным механизмом для SP-Forth. Получалось падение производительности по сравнению со статикой процентов в 30, ЕМНИП. Это уже производительность одного порядка :)

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

> BTW, Parrot Beta и Perl6 обещали к рождеству.

Если к рождеству, то уже сейчас должна быть бета perl6 (и не всякие там детсадовские развлекушки-недоделки типа pugs и rakudo, а настоящая реализация perl6 на C). Вот Python 3.0 выходит в конце октября, а в конце сентября стал доступен RC1. Тот факт, что беты нет, и о ней никто даже не заикается, говорит о том, что фига будет к рождеству.

Ну, может, parrot beta и будет. Однако, кому нужен этот parrot без perl6?

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

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

class A:
    def some_method(self):
        print "Class A"

class B:
    def some_method(self):
        print "Class B"

mylist = [A(), B()]

for item in mylist:
    item.some_method()

(фактически тут используется duck typing, но, насколько я понимаю, именно такая схема и используется в большинстве динамических языков)

Отметьте, что метод some_method объявлен в классах A и B независимо друг от друга. 
Чтобы это работало, требуется поиск имени some_method в словаре при каждом обращении к этому имени. 
И именно это и есть основное узкое место всех динамически типизированных языков. И никакая JIT компилляция тут не поможет.

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

>Чтобы это работало, требуется поиск имени some_method в словаре при каждом обращении к этому имени.

Именно так и было. Просто у меня была глобальная таблица индексов методов и у каждого класса - соответствующая разряженная таблица адресов. Т.е. вся выборка динамического метода сводилась к косвенному чтению адреса. Метод -> смещение метода -> адрес процедуры в таблице методов. Всего одна лишняя операция чтения из памяти при вызове метода. Это и давало те процентов 30 потери производительности на простых вызовах (на сложных потери были меньше).

...

Кстати, надо бы на эту тему подумать в рамках JVM. Вдруг на JBForth2 удастся реализовать эту схему? :)

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

Перловая каша, (от)Ruby и зеленый змий не нужны. Лягушачьи бобы и все что с ними связано, тоже не нужны. пых-пых - вот что глобально и надежно. ;)

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

тебе-то конечно не нужны. тебе кроме пхп с его глобальными и надежными addslashes & htmlspecialchars уже ничего не поможет =).

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

> Всего одна лишняя операция чтения из памяти при вызове метода. Это и давало те процентов 30 потери производительности на простых вызовах (на сложных потери были меньше).

можно закешировать и сделать PIC, http://www.smalltalk.ru/2008/09/smalltalk.html "применение PIC вместо IC дало ускорение 25%, а применение адаптивной оптимизации еще 25%."

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

>можно закешировать и сделать PIC

Я, видно, сильно с своей колокольни оцениваю, так что или не понял, как оно работает, или мне бы оно не помогло :)

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

>>Можно даже бyдет вставлять куcки Perl5 в программах на Perl6.
>Ну и где пруфлинк?

Пруфлинка нету. Не собираю.
Читал год или 2 назад обсуждение или эксодус, не поню чесно говоря.
В текуще версии этого нет, но обещали добавить конструкцию для этого.
Для плавного перехода.

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

>уже сейчас должна быть бета perl6 (и не всякие там детсадовские развлекушки-недоделки типа pugs и rakudo, а настоящая реализация perl6 на C)
FYI Rakudo это и есть компилятор Perl6.

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

При чём тут PHP? Речь шла о Форте, машинных кодах и динамической типизации.

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

>Pugs is an implementation of Perl 6, written in Haskell.

>Иногда страшно за этот мир.

Вот когда оно будет написано на Jaskell, исполняемом под ikvm... :D

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

> Просто у меня была глобальная таблица индексов методов и у каждого класса - соответствующая разряженная таблица адресов. Т.е. вся выборка динамического метода сводилась к косвенному чтению адреса. Метод -> смещение метода -> адрес процедуры в таблице методов.

Как всё просто, оказывается - глобальная незаряженная^W таблица методов %) А народ старается, dynamic inline caches изобретает :D

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

>тебя в детстве покусал питон-программер? теперь ты боишься питона? хочешь об этом поговорить?

Убери в штаны своего питона.

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

Отметьте, что метод some_method объявлен в классах A и B независимо друг от друга. Чтобы это работало, требуется поиск имени some_method в словаре при каждом обращении к этому имени. И именно это и есть основное узкое место всех динамически типизированных языков. И никакая JIT компилляция тут не поможет.

сравни с virtual объявлениями в типизируемых языках и убедись, что это тоже самое.

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

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

Вы небось и гвозди мобильников забиваете. Ламерство это диагноз ;))

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.