LINUX.ORG.RU

Вышел дистрибутив компилятора Perl 6: Rakudo Star

 , , , ,


0

1

Состоялся первый официальный выпуск компилятора Perl 6 Rakudo.
Rakudo Star - это полноценный дистрибутив Perl 6 достаточный для начала работы и включает в себя выпуск #31 компилятора Rakudo Perl 6 , Parrot Virtual Machine версии 2.6.0, дополнительные модули и документацию.

Rakudo Star доступен в виде исходных кодов(tar.gz) и сборки для Windows(msi)

Возможности Perl 6, включённые в первую версию Rakudo Star:

  • грамматика и регулярные выражения Perl 6;
  • списки и признаки формальных параметров (formal parameter lists and signatures);
  • метаоператоры;
  • постепенная типизация (gradual typing);
  • мощная объектная модель, включающая роли и классы;
  • отложенная интерпретация списков (lazy list evaluation);
  • множественный вызов (multiple dispatch);
  • умное сопоставление (smart matching);
  • соединения и автоматические потоки (junctions and autothreading);
  • перегрузка операторов (в данный момент не полностью реализовано);
  • рефлексия (introspection);
  • каррирование;
  • обширная библиотека встроенных операторов, функций и типов;
  • интерактивная командная оболочка;
  • поддержка Unicode (неполная);
  • возобновляемые исключения (resumable exceptions).

Неполный список модулей Perl 6, включённых в Rakudo Star:

  • Blizkost — позволяет использовать модули Perl 5;
  • MiniDBI — простой интерфейс к БД для Rakudo Perl 6;
  • Zavolaj — вызов библиотек C из Rakudo Perl 6;
  • SVG и SVG::Plot — создание SVG;
  • HTTP::Daemon — простой HTTP-сервер;
  • XML::Writer — запись XML;
  • YAML — вывод объектов Perl 6 как YAML;
  • Test::Mock — создание имитации объектов;
  • Math::Model — описание и исполнение математических моделей;
  • Config::INI — разбор и запись конфигурационных файлов;
  • File::Find — поиск файлов;
  • LWP::Simple — загрузка данных из Интернета.

В Rakudo Star отсутствуют следующие особенности Perl 6:

  • вложенное определение пакетов (nested package definitions);
  • двоичные объекты, «родные» типы, pack и unpack;
  • типизированные массивы;
  • макросы;
  • переменные состояния (state variables);
  • потоки и параллелизм;
  • предварительные и последующие ограничения (pre and post constraints, and some other phasers);
  • интерактивное чтение вводимых строк с поддержкой Unicode(readline);
  • управляющие последовательности символов в регулярных выражениях (backslash escapes in regex <[...]> character classes);
  • неблокирующий ввод/вывод;
  • значительная часть Synopsis 9;
  • утилиты манипуляции документацией perl6doc (pod).

Rakudo Star также содержит черновик книги о Perl 6.

>>> Анонс

★★☆☆

Проверено: catap ()
Последнее исправление: grim (всего исправлений: 8)

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

Вернусь с дачи - буду искать книгу по Perl 6.

да надо бы полистать

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

Удивительно сколько разного дерьма впихнуто в этот пёрл. На каждый случай свое черезжопное выражение. 6я версия недалеко ушла. Понятно почему у перлистов кроме пёрла в черепную коробку больше ничего помещается.

как же толсто

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

> ML-языки (Ocaml/F#) сравнятся и по читабельности и по краткости, причем они статически типизированные, в отличие от питона.

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

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

> Тут можно сокращать comprehen*, например: my @a = '10' => 20, '20' => 30; print [max] @a>>.values;

таки поставил, пишет 30. эка невидаль. в питоне:

a = {'10':20,'20':30} print max(a.values())

где понятнее?

где короче?

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

поправка:
a = {'10':20,'20':30}
print max(a.values())

:)

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

И, в любом случае, это другой класс языков.

Кстати, вариант использования F# в качестве скриптового языка вполне имеет смысл. Есть соответствующая поддержка на уровне пускалки (совмещенной с REPL) и на уровне компилятора. Эту тему широко освещают в учебниках.

К этому списку я бы прибавил еще и Скалу, но она менее краткая, чем F#, хотя все же остается на уровне питона по-моему. Скрипто-писательство поддерживается тоже.

В общем, скрипты вполне можно писать не на питоне.

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

Ни разу. Вопрос подготовки среднестатистического прогера.

Среднестатистическая читабельность? :)

dave ★★★★★
()
Ответ на: Посмотрел код модулей от anonymous

>> Посмотрел код модулей

Выглядит дико - коряво и непонятно. Нет, не него я ruby менять точно >> не буду.

Потому что в модулях используются инструкции PIR. Это как ассемблерные вставки в С.

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

> Кстати, вариант использования F# в качестве скриптового языка вполне имеет смысл. Есть соответствующая поддержка на уровне пускалки (совмещенной с REPL) и на уровне компилятора.

REPL - далеко не главное из того, что требуется от скриптовго языка.

В общем, скрипты вполне можно писать не на питоне.

Ага, и пускать их в тяжелой JVM. Прекрасная мысль.

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

REPL - далеко не главное из того, что требуется от скриптовго языка.

Совмещенный с REPL, а не сам REPL.

Ага, и пускать их в тяжелой JVM. Прекрасная мысль.

Тоже мне проблема. Это же не CGI :)

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

>К этому списку я бы прибавил еще и Скалу, но она менее краткая, чем F#, хотя все же остается на уровне питона по-моему. Скрипто-писательство поддерживается тоже

Для скриптописательства Scala слишком долго стартует.

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

Для скриптописательства Scala слишком долго стартует.

Ну, пожалуй, не для всякой задачи сгодится (тот же CGI), но в некоторых случаях вполне подойдет, особенно где нужно быстро подправить и тут же запустить без ручной компиляции.

dave ★★★★★
()

> и включает в себя выпуск #31 компилятора

Как уже достала эта тупость. Вы сами понимаете, зачем пишите решетку перед цифрой? Может быть уже пора по-человечески начать писать «выпуск компилятора №31»?

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

> ML-языки (Ocaml/F#) сравнятся и по читабельности и по краткости,

Синтаксис окамла весьма грязен.

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

> где понятнее? кому?

где короче?

В Perl6 можно сокращать более сложные выражения, где в python понадобились бы map/compreh.

например

print [max] @a>>.keys>>.chars;

В python

print max(map(len, a.keys));

А я и не говорил, что perl6 лучше. Я говорил, что не хуже.

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

>А я и не говорил, что perl6 лучше. Я говорил, что не хуже.
Он «не хуже», пока вы не пользуетесь новыми средствами
Но как только в ход идут multis, roles, gramma и прочие нововведения - становится понятно, что Perl 6 это язык новго поколения.

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

А так же паттерн матчинг и еще куча всяких няшек.

Я даже иногда думаю, что я не достоин пока писать на Perl6. Слишком хороший язык для такого кодеришки как я

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

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

модификатор @a - в питоне просто а

- явно какой-то конвейер.

отказались от простых круглых скобок и ввели новые, квадратные скобки.

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

> нишу Бейсика и Делфи (в качестве дибильных, но почемуто популярных языков) — уже понемножку занимает 1C-язык [незнай как он там прально называется] :-)

Где занимает? В России? Есть остальной мир, где об 1С слыхом не слыхивали.

josephson ★★
()

ну вот осталось еще 10 лет подождать и будет полноценный perl6

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

@ нужно чтоб отличить использовался list context, не понимаю, в чем трабла?

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

> Да и kranky говорил о нише python в unix/linux; тут 1С и в России никаких ниш занимает.

ну в чомто оно Вы с Kranky *правы* разумеется... да и 1C-программульки нунжы только внутри конторок [когда как Visual Basic и Delphi — были явно более шире]

...но сёравно для более корректного ответа нада понять чем являлось Visaul-Basic-и-Delphi _с_ _точки_ _зрения_ _тех_ _людей_ кому они в большенстве требовались

для них это было RAD-средство, обладающее свойствами:
* не требующее полного обучения, чтобы уже чтото сделать работающее
* визуальное проектирование и побольше мышкотыканий

в отличие от этого в Python:
* сам Python хоть и не долго изучать — но всё же изучить нада довольно полно, чтобы свободно делать чтото на нём... ведь даже если не прочитать про метаклассы, то уже будет непонятно почему может-неполучиться динамически перегрузить операторы у экземпляров классов (в соответствии с новой концепцией модели объектов в Python-3)
* чтото визуальное конешно есть.. но явно не в таком виде как было в Visaul_Basic/Delphi...

----------------------------------------

у меня даж есть щаз такая проблема (если кто подскажет советом буду очень рад) :
незнаю какой визуальный инструмент-Python — подобрать чтобы человеку который знает кое-как Visual Basic — и чтобы было довольно комфортно чтото GUI-шное сделать и на Python

[но подобрать неполучается! так как таки или иначе требуется сначало узнать Python, потом узнать GUI-тулкит, а потом узнать и тот Visual-инструмент!
тоесть — никак баз базиса начальных знаний — нельзя поработать на них. а Visaul Basic *позвалял* , и это было его главным мативатором!!]

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

> Но как только в ход идут multis, roles, gramma и прочие нововведения - становится понятно, что Perl 6 это язык новго поколения.

А вот можно об этом немного подробнее, с примерами? Причем желательно с примерами на Perl6 и Python.

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

>А вот можно об этом немного подробнее, с примерами? Причем желательно с примерами на Perl6 и Python.
Примеры:
http://en.wikipedia.org/wiki/Perl_6
там и объяснения есть
Моё слабое знание питона, говорит мне, что всего этого в Питоне нет

grim ★★☆☆
() автор топика
Ответ на: комментарий от mkfifo

> незнаю какой визуальный инструмент-Python — подобрать чтобы человеку который знает кое-как Visual Basic — и чтобы было довольно комфортно чтото GUI-шное сделать и на Python

Python - насколько критично? Про Gambas в курсе?

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

> Python - насколько критично? Про Gambas в курсе?

нащёт критичности трудно сказать :-) ..: Python-программы довольно хорошо кросплатформенны (на оченку «хорошо» :)), а сам язык не сложный для понимания.

[[[[зачем реч о кросплатформенности(?). потомучто если не рассматривать кросплатформенность, то можно и дальше пользоваться обычным Microsoft Visual Basic. а кросплатформенность именно и мотивирует перейти на чтото другое :-) ]]]

Gambas кстате видимо отличная штука!! (спасибо что рассказали про него!), правда Википедия напугала сказала "Gambas включён во многие репозитории операционных систем. Полноценной версии Gambas для Windows не существует."

.....вообще — как альтернативу всему этому я рассматриваю — MonoDevelop/C#.. [как это может показаться не странным] :-) ,
так как MonoDevelop — это ж «Визуальный редактор, с интергрированной функцией рисования GUI... почти как Visual Basic :-D» (но незнаю, стоит ли человеку забивать голову этим C# %) %). лично мне не очень нравиться C#.. но ведь и не для меня.. %) )

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

> К логопеду!

я ходил в детстве :-)

...теперь я здоров :-) моя дикция ну просто идеальна!

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

Непонятно. Роли ~= миксины? Что тут зачем и каковы реальные юзкейсы? Почему надо отделять роль от класса? Ну и тд

amix ★★★
()

по-поводу чего взаимная ненависть питонистов к перлерам? Если мне понадобится что-нибудь вроде «подключиться к UNIX-сокету демона и пообщаться о жизни», «собрать данные, обработать и добавить в human-readable-формате в лог» или скажем написать веб-морду приложению — я первым же делом вспомню о перле. У меня есть огромное количество скриптов на нем, которые облегчают жизнь и работу. Можно смело назвать меня перлистом. Но дорогие мои соратники, вы правда сядете писать простое GUI-приложение на перле??? Вы это серьезно?

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

Только в случае крайней необходимости - есть какой-то скрипт, который со временем оброс функционалом, или его вывод проще смотреть через гуй. В таком случае POE+wxPerl меньшее зло, нежели переписывание с нуля.

Пытался использовать связку pyqt+py2exe для гуя - те же грабли, что и у перла - слишком большой оверехед в лице qt и медленной скорости запуска, хотя qt designer - несомненный плюс.

Для себя решил использовать для гуя - лазарус. Быстро, сердито, кроссплатофрменно, нативный бинарник, хотя сам и не сторонник паскаля.

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

> будет непонятно почему может-неполучиться динамически перегрузить операторы у экземпляров классов (в соответствии с новой концепцией модели объектов в Python-3)

Можете пояснить?

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

ну например — в новом Пайсоне:

$ python3
>>> class C: pass
... 
>>> obj = C()
>>> obj.__mul__ = lambda other: "*" * other
>>> 
>>> obj * 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'C' and 'int'
(перегрузка оператора <*> не вышла.. . а в старом Пайсоне — такое-бы прокатило... результат был-бы:
$ python2
[quote][quote][quote] class C: pass[br][/quote][/quote][/quote]... 
[quote][quote][quote] obj = C()[br] obj.__mul__ = lambda other: "*" * other[br] [br] obj * 10[br][/quote][/quote][/quote]'**********'
[quote][quote][quote][[/code]] , хотя там тоже не рекомендуется так делать)[br][/quote][/quote][/quote]
а суть новой модели в том что при вызове функции-для-оператора -- вызывается НЕ тупо функция экземпляра объекта.. а функция класса этого объекта

...при этом существует два способа чтобы объявить функцию класса: [br]
* при описании класса (в этом случае функция-класса становитсья и функцией-экземпляра)[br]
* при описании метакласса (в этом случае получемая функция не будет являться функцией-экземпляра. тоесть транзитивности нет)

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

New-style классы появились в питоне 2.2, тогда же a + b стало преобразовываться в type(a).__add__(a, b)

Казалось бы, при чем здесь питон 3 и тем более метаклассы?

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

> Казалось бы, при чем здесь питон 3 и тем более метаклассы?

при том что методы-классов — это напрямую из теории матаклассов

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

Не-не-не, вы объясните каким образом метаклассы соотносятся с перегрузкой операторов в питоне 2.2+.

И почему «если не прочитать про метаклассы, то уже будет непонятно почему может-неполучиться динамически перегрузить операторы у экземпляров классов»

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

ну я не претендую на первоклассное объяснение:

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

...а что можно привести в качестве примера <поведения-класса>(?), — можно привести пример то <что-же-необходимо-сделать-чтобы-перегрузить-операторы> (вот то что необходимо сделать — это и есть <поведение-класса>)

ну сумбурно я конешно выразился, да согласин. но как... КАК можно объяснить то что:
type(a).__add__(a, b)
это НЕ тоже самое что и
a.__add__(b)
???

чтобы это объяснить нада принять для себя что не только <экземпляры> имеют поведение, но и <классы>.

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

Можно, скажем, определить оператор сложения для классов (для этого как раз нужны метаклассы). Но нужно это очень редко и, надеюсь, я этого никогда не увижу в продакшене. Я считаю, что лучше начинающим программистам вообще об этом не знать.

class AddableMetaclass(type):
	def __add__(cls, other_cls):
		return type('%s_%s' % (cls.__name__, other_cls.__name__), (cls, other_cls), {})

class ClassA(object):
	__metaclass__ = AddableMetaclass

class ClassB(object):
	__metaclass__ = AddableMetaclass

print ClassA + ClassB

А можно определить оператор сложения для экземпляров:

class MyClass(object):
	def __init__(self, value):
		self.value = value
	
	def __add__(self, other):
		return self.__class__(self.value + other.value)

	def __repr__(self):
		return 'MyClass(value=%s)' % self.value

print MyClass(1) + MyClass(2)

Зачем во втором случае нужно описывать поведение классов, да еще через метаклассы?

КАК можно объяснить то что: type(a).__add__(a, b) это НЕ тоже самое что и a.__add__(b)

Не одно и то же? Да ну?

class MyClass(object):
	def __add__(self, other):
		return "It's the same thing!"

a = MyClass()
b = MyClass()

print a + b
print a.__add__(b)
print a.__class__.__add__(a, b)
print type(a).__add__(a, b)

А вот почему не работает такой манки-патчинг (и очень хорошо, что это не работает!)

class MyClass(object):
	pass

a = MyClass()
a.__add__ = lambda self, other: '__add__'

# NOT WORKS
print a + MyClass()

но (к сожалению) работает такой:

class MyClass(object):
	pass

a = MyClass()
a.__class__.__add__ = lambda self, other: '__add__'

print a + MyClass()

объясняет документация:

http://docs.python.org/reference/datamodel.html#special-method-names

For instance, if a class defines a method named __getitem__(), and x is an instance of this class, then x[j] is roughly equivalent to <...> type(x).__getitem__(x, j) for new-style classes.

Чтобы это понять не надо ничего знать про метаклассы. Вообще ничего.

Достаточно знать, чем class attributes отличаются от data attributes. А это объясняет любая книжка по питону.

Если человек этого не знает, то о каких, нафиг, метаклассах и о каком поведении классов может вообще может идти речь?

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

Еще раз: метаклассы тут ни при чем. Достаточно знать различие между class attributes и data attributes (а это азы питона).

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

>Роли ~= миксины?
да

Почему надо отделять роль от класса?

:) это вопрос философсий
Наверное чтобы избежать пугающего слабых духом, ужасного множественного наследования

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