Увидел свет (https://perl6advent.wordpress.com/2015/12/25/christmas-is-here/) компилятор Rakudo 2015.12 (http://rakudo.org/) "коледа", который отмечен (https://twitter.com/TimToady/status/680511168713064448) Ларри Уоллом (Larry Wall) как первый релиз языка программирования Perl 6 (http://www.perl6.org/). Rakudo является одним из компиляторов Perl 6, преобразующих программы в байткод, который затем выполняется в специальной виртуальной машине. По умолчанию предлагается виртуальная машина MoarVM (http://moarvm.org/), в качестве опций могут использоваться (http://perl6.org/compilers/features) виртуальные машины JVM (ранее используемая универсальная виртуальная машина Parrot (http://parrot.org/) в последних выпусках Rakudo не поддерживается).Perl 6 развивается более 15 лет, причём из них около 10 лет продолжалось ожидание финального релиза - на протяжении этих лет, на вопросы о дате релиза Ларри Уолл ежегодно отшучивался, что дата релиза давно известна – это канун Рождества, в тайне пока остается год этого события. Язык Perl 6 кардинально отличается от Perl 5 и может рассматриваться как созданный с нуля отдельный язык программирования, обладающий средствами метапрограммирования (возможность определения собственных синтаксических конструкций для расширения языка, в том числе создания новых инфиксных операторов) и встроенными объектно-ориентированными возможностями.
С особенностями Perl 6 можно познакомиться в обзорах (http://pragmaticperl.com/authors/2) Андрея Шитова. Ключевые отличия от Perl 5:- Возможность определения типизированных переменных ("my Int $i;" или "sub count(Int $i){", если присвоить $i строковое значение будет выведена ошибка). Поддерживаются типы Bool, Int, Str, Array, Hash, Complex, Num, Pair;
- Полноценная система классов для объектно-ориентированного программирования (определение "class A {has $.i; method test($what)...}" и вызов "my $a = A.new(i => 1); say $a.i;"). Для наследования при объявлении класса следует указать родительский класс ("class B is A {" или "class C is A is B {").
- Упрощение определения переменных ("my @list = 1, 2, 3;" или "my %hash = 'test1' => 1, 'test2' => 2;") и возможность использования Unicode в именах переменных ("my $переменная = 1;");
- Определение области видимости переменной и элементов классов при помощи "твиглов" (%*ENV, $?FILE, $!a, $.b);
- Возможность указания необязательных аргументов функции и значений по умолчанию ("sub func(Int $i?)", "sub func(Int $i = 1)");
- Поддержка передачи аргументов функции по именам (определение "sub power(:$base, :$exponent)", вызов "power(:base(2), :exponent(3))");
- Возможность создания вложенных функций и определения нескольких функций с одним именем (разделение по типам аргументов);
- Методы параллельного программирования: каналы (http://pragmaticperl.com/issues/24/pragmaticperl-24-%D0...) и механизмы синхронизации (http://pragmaticperl.com/issues/26/pragmaticperl-26-%D0...);
- Анонимные блоки-замыкания (http://pragmaticperl.com/issues/25/pragmaticperl-25-%D0...) ("my $cube = -> $x {$x ** 3};") и динамические переменные ("my $*var = 'Alpha'");
- Изменённый (http://pragmaticperl.com/issues/26/pragmaticperl-26-%D0...) синтаксис регулярных выражений и возможность определения грамматик;
- Широкий набор метаоператоров (http://pragmaticperl.com/issues/27/pragmaticperl-27-%D0...);
- Метод ".WHAT" для быстрого определения типа переменной ($scalar.WHAT) и оператор "===" для сравнения объектов типов ("if ($value.WHAT === Int)");
- Переменная "$/" для записи результата сопоставления в регулярном выражении (совпавшую строку можно получить через $/.Str, для подстрок используется синтаксис $/[1] идентичный $1);
- Переменная "$!" для доступа к сообщению об ошибке.
URL: https://6guts.wordpress.com/2015/12/26/reflecting-celebratin.../
Новость: http://www.opennet.me/opennews/art.shtml?num=43593
все, пропали празники, буду тестить и кодить
Пока ждал Perl6, выучил C++. Не зря они NativeCall предусмотрели =) Имхо, C++ и Perl6 будут отличной связкой для решения абсолютно любых задач, тем более Perl6 очень продуман в плане параллелизма.Праздники действительно пропали, отличная новость =)
Перл как был языком однострочников в консоли так и остался. Писать на нем что-либо более серьезное - идиотизм.
Писал на Perl5 серьезные проекты. Писались быстро, но было нереально сложно поддерживать и развивать дальше после определенного уровня развития. В итоге перешел на C++. Писать намного дольше, но поддерживать очень легко и практически неограниченная свобода по изменению интерфейса без серьезных последствий.К чему все это сказано? К тому, что Perl6 добавляет все то, из-за отсутствия чего и пришлось в свое время перейти на C++. Если сохранится относительная простота и гибкость Perl5 и плюсы типизированных ОО языков разумно будут интегрированы, то Perl6 как раз имеет шанс стать инструментом для достаточно серьезных решений.
Просто для тех, кто думает, что Perl6 - это продолжение Perl5: это не так. Perl6 - полностью переписанное с нуля решение и с Perl5 имеет только косвенную связь. Мне Perl6 видится, из первых впечатлений, как что-то более близкое к C++ и Java, чем к Perl5 или python.
Переходить с перла на плюсы из-за более легкой поддержки это пипец. Для этого есть питон, или на крайний ява с шарпами.
Для перловика плюсы - довольно удобная штука, идеология очень похожа в плане гибкости, желания оставить конечные решения за программистом и того самого TIMTOWDI.
Судя по написанному, Вам нужно попробывать RUST lang:
https://doc.rust-lang.org/nightly/book/getting-started.htmlт.к в нём есть как элементы функционального програмирования, позволяющие достаточно быстро программировать, так и высокая скорость работы скомпилированных приложений, по тому что язык системный, с хорошей кроссплатформенной поддержкой.
Так же у RUST хорошая поддержка для embedded платформ:https://twitter.com/SamsungOSG/status/679017493265031168
https://twitter.com/VIAmkt/status/679837274754781184
а что Perl претендует на что-то большее? по твоей логике есть ЯП истинные для корпоративных порталов, а есть ЯП для одностраничек? если да тогда мне тебя жаль( все решают фреймворки а не ЯП!
Зачем нужен Perl,Ruby.., когда современные низкоуровневые языки вроде RUST предоставляют конструкции по удобству сравнимые с высоуровнемыми языками, но работающие со скоростью близкой к C(иногда быстрее)Вот, к примеру, библиотека позволяющая распаралеливать выполнения вычислений по ядрам CPU:
/// Increment all values in slice.
fn increment_all(slice: &mut [i32]) {
if slice.len() < 1000 {
for p in slice { *p += 1; }
} else {
let mid_point = slice.len() / 2;
let (left, right) = slice.split_at_mut(mid_point);
rayon::join(|| increment_all(left), || increment_all(right));
}
}https://github.com/nikomatsakis/rayon
и куча других подобных в репозитарии пакетов: https://crates.io/
> Зачем нужен Perl,Ruby.., когда современные низкоуровневые языкиЗа всё тем же: работа со сложными структурами данных обозримым количеством кода.
Ну… не всё так плохо.
За этим и придумали библиотеки классов/шаблонов/этк. Одна проблема — они не носят характер стандарта, но всё меняется.зыж
есть и другой аргумент — кросс-платформенное выполнение кода.
Именно выполнение, не компиляция. Но и тут есть прогресс (когда компиляция часть выполнения) — llvm, libgccjit (для примера https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial0...)
Да на шелле то поди ещё удобней? >_<
> конструкции по удобству сравнимые с высоуровнемыми языками, но работающие со скоростью
> близкой к C(иногда быстрее)Неужто они и такие конструкции умеют:
{ a=>'asdf',
b=>[
{t=>'f',
v=>\&some_func,
},
{t=>'a'
v=>[7,8],
},
34,
'dsf',
[5,6,'a','b'],
],
io=>file_handler
}
Как подобное будет выглядеть в RUST?
А зачем такие конструкции? Легко совершить ошибку и все рушится с NoMethodError.
Они ошибку в названии пропустили, назвали "колЕда" вместо "колЯда", хотя ссылку на wikipedia именно на коляду поставили и пояснение указывает, что имели в виду коляду.
Толковый словарь Даля допускает "коледа" как вариант.
Это, скорее всего, означает, что в каком-то регионе в конце 19века использовалось оба слова. Впрочем, стыдно, что в 21 веке это слово до сих пор существует не только в головах историков и любителей старой литературы.
Ну почему имели?
Литва до сихпор так и говорит: Kaleda.
И Болгария: Коледа...
http://cdn.allfun.md/2014/12/19/16/549435f266800.jpgИ судя по этимологии(от лат. Календар), то "Каледа" более логичное и верное название, чем "Коляда", в которой уже произошло несколько замен звуков...
Даль разве интересовался болгарским или латышским? Я про словарь, его актуальность и конкретное слово в конкретном современном языке.
> Даль разве интересовался болгарским или латышским? Я про словарь, его актуальность и
> конкретное слово в конкретном современном языке.Слово-то заимствованное.
Распространенное изменение en -> ę -> Ѧ. То же самое в ментосе, которая мята.
> Впрочем, стыдноНу идите, покайтесь на площади, что у Вас какая-то душа ещё осталась. Не положено потребителю!
PS: а вот ныть по поводу и без повода, сложа белы ручки -- разумеется, самое оно.
Стыдно, что некоторые до сих пор решают, что и кому можно и нужно помнить.
> Стыдно, что некоторые до сих пор решают, что и кому можно и
> нужно помнить.и не говорите, но самое стыдное, что кто-то еще устанавливает рамки чего нужно стыдиться...))) запрещать знания все гаразды...
стыдно такие посты читать...
Возможно, используется болгарский термин - он пишется через Е. В анонсе сказано только то, что использовано славянское слово, а из какого именно языка/диалекта оно взято - не сказано: "The tag for this release is “коледа”[^2], a slavic word for an ancient winter festival that has been incorporated into Christmas."
А написать, как в оригинале, Rakudo Star что мешало? по ссылке на релиз "коледа" нет, место этой хрени - разве что где-то глубоко в примечаниях
логотип perl 6 - https://perl6.org/camelia-logo.png
.. наркоманы
Но судя по посту и плюсам детей у вас нет ...
И дети есть, и пузо есть, но логотип всё равно отвратный. Второе место после gnu'шных черепашек-гомосеков, но с отрывом опережая golang'овского хомячка.
Не трож хомяка!
> .. наркоманыТо ли дело розового^W небесного/солнечного цвета слоники!
http://hadoop.apache.org/images/hadoop-logo.jpgИли розовая белочка c радужным хвостом
https://flink.apache.org/img/logo/png/500/flink_squirrel_500...
вокруг одни наркоманы
> вокруг одни наркоманыодин лишь ты стоишь со шпагой, в плаще мушкетёра.
Это же рождественская бабочка!!!
нет, рождественская вот - https://perl6.org/camelia-advent.png
Ларри, таки сдержал своё слово. На рождество. :-)
Да уж, последние времена наступают -- что там ещё не вышло из долгостроев?
GNU Hurd? Тоже ведь зашевелился...
И Реактось спустя сколько времени готова мифическим релизом 0.4 разродиться...
> Да уж, последние времена наступают -- что там ещё не вышло из долгостроев?Hurd? Half-Life 3?
А Half-Life 3 тут каким боком? Это не долгострой. Его не строят. И никогда не будут. Забудь уже об этой штуке. Я уж не говорю о нелепости ожидания третьей части после того, что вышло в качестве второй.
> после того, что вышло в качестве второй.Э...
> Stahl
А, ну да.
Джвадцать лет ждал! (нет)
Мёртворождественский релиз
> Мёртворождественский релизПочему?
PS: наш комайнтейнер перлов пишет:
---
Правда за прошедший месяц с прошлого релиза они умудрились перевернуть
установку модулей с ног на голову, поэтому пока Perl 6 вроде и можно
поставить, но далеко на нём без модулей не уедешь… Думаю пока как это
починить.
--- http://lists.altlinux.org/pipermail/devel/2015-December/2006...
>> Мёртворождественский релиз
> Почему?Да потому что весь язык мёртворождённый. Шуму много , а толку ноль.
Потому что поломали всю семантику perl'а, без явных на то оснований:if ($value.WHAT === Int)
в идеоматичном наследнике это выглядело бы так:
if (typeof($value) eq 'int') # по аналогии с ref
Я не знаю кто проектировал наркоманию выше, но он был явно ушиблен на всю голову "эффектом второй системы". В результате получился совершенно другой язык, который лично я не вижу смысла изучать.
Дык так и утверждалось, что Perl6 совершенно другой язык, нежели Perl5.
use Inline::Perl5 qw(CPAN)
Хех) жду оптимизаций.
Пятый перл им не заменить, а вот нишу еще предстоит открыть/занять. Интересно.
для Вас: http://www.opennet.me/openforum/vsluhforumID3/106131.html#33
> для Вас: http://www.opennet.me/openforum/vsluhforumID3/106131.html#33у perl хоть синтаксис получше.
У perl получше?!!!
мда, я конечно как человек долгое время работавший с python, не рад что в RUST многое привнесли из хаскеля и с влиянием рубистов, но сорцы читать весьма проще чем у С++ и того же perl-а!
> долгое время работавший с python,
def unique(_, __ = type({( )})):
__ = type("""
.-=-. .--.
__ .' '. / " )
_ .' '. / .-. \ / .-'\
( \ / .-. \ / / \ \ / / ^
\ `-` / \ `-' / \ `-` /
jgs`-.-` '.____.' `.____.'""", (__,),
{'_' : __.__dict__[filter(lambda _: '_' not in _,
sorted(__.__dict__))[::-1].pop()]})( {( )} )
return [_ for _ in _ if _ not in __ and not __._(_)]
Если что: это питон. Сильно легче читается? =)
Это как раз код Перловика который первый раз решил что-то написать на Питоне!
Нимано наглядно показал, что лёгкость чтения сорцов не зависит особо от языка, а больше от носителя языка.
Чо уж, свинья грязи найдёт )))Штатно пишется как-то так:
def unique(iterable):
return sorted(set(iterable))
> Штатно пишется как-то так:
> def unique(iterable):
> return sorted(set(iterable))
def unique(iterable):
s = set()
return [iterable for iterable in iterable if iterable not in s and not s.add(iterable)]
(да-да, вот такие пироги с котятами ) )
<==>
def unique(iterable):
s = set()
return [elem for elem in iterable if elem not in s and not s.add(elem)]
s.add(elem) всегда возвращает None.
Незнание этого факта - еще не диагноз,
а вот написание каментов вроде ваших
выставляет вас идиотом.Зачем вы так делаете?
> s.add(elem) всегда возвращает None.И что?
> Незнание этого факта - еще не диагноз,Ванга в треде?
Ну тогда угадайте, зачем там вообще "and not".
Подсказки:
list comprehension, statement, expression
"not None" == True
ну и
> The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the
> resulting value is returned.а то ведь стыдно должно быть, с таким ником, нести чепуху.
> а вот написание каментов вроде ваших
> выставляет вас идиотом.
> Зачем вы так делаете?Что сказать-то хотели?
Почитайте дзен питона и не пишите плохой код лишь для того, чтобы похвастаться своей способностью так писать.
Никто этого не оценит.
Вот вам утешительный призfrom collections import OrderedDict
def unique(iterable):
return list(OrderedDict.fromkeys(iterable).keys())
> Пятый перл им не заменитьВ смысле пятый CPAN? :)
>> Пятый перл им не заменить
> В смысле пятый CPAN? :)Да. К тому же, 5-й в базовой поставке всех неспециализированных дистров.
perlgolf
когда все дистрибутивы *nix перейдут на perl6 ?
> когда все дистрибутивы *nix перейдут на perl6 ?Ларри никуда не спешил -- и мы не торопимся. :)
причём тут дистрибутивы к perl ?
Да он просто в криокамере с 1999 был.
Ещё не в курсе что перловку из дистрибов выпилили, и везде всунули питон.Кстати - чё то мне не верится, что теперь питон выкинут и впилят перло 6 :-)
Скорее всего никогда. Perl6 просто не годится для этой ниши.
Решили раздробить малочисленное сообщество.
Для web и Perl5 достаточно.
Языков сейчас слишком много, по сути они дублируют друг друга, и кто-то должен быть вытеснен. Perl и Python кандидаты номер 1. Все последние новости по ним не что иное, как конвульсирования.
и на чём писать например системные скрипты?
За тебя уже подумал Леня, не надо больше ничего писать, просто потребляй.
> Языков сейчас слишком много, по сути они дублируют друг друга,Это так вот уже лет 15, а то и больше ...
> и кто-то должен быть вытеснен. Perl и Python кандидаты номер 1.
ORLY?! :) А спорим - ты девственник? Или и того хуже 8-\
> Все последние новости по ним не что иное, как конвульсирования.
Чаво-чаво? Кон ... куда .. вания? Шёл бы ты уроки делать. А чёрд, каникулы же ...
Первый абзац навёл на мысль, что давно пора разделить разработку языков/компиляторов и виртуальных мойшин для них, разделить более серьёзно.