Читая "Perl6". Часть 1
Читаю книжку "Perl 6 and Parrot Essentials" и не перестаю поражаться элегантности нового перла.
Сначала рассказано про принципы дизайна языка:
- Principle of Simplicity - что простое решение лучше сложного
- Huffman Coding - часто употребляемое должно занимать меньше места
- Principle of Adaptability - если надо будет - Перл легко расширить!
- Principle of Prominence - важные структуры должны сами бросаться в глаза
- Principle of End Weight - простые и важные вещи должны быть в начале
- Principle of Context - люди мыслят в контекстах, так пусть и Перл тоже использует контексты
- Principle of DWIM - Do What I Mean, язык должен быть интуитивным (для людей с правильной интуицией)
- Principle of Reuse - не надо плодить лишние сущности и правила, если можно использовать старые в новом контексте
- Principle of Distinction - действительно разные вещи должны выглядеть разными
- Principle of Freedom - свободу программисту в его самовыражении! (ну и TMTOWTDI)
- Principle of Borrowing - хорошую фичу и из другого языка позаимствовать не грех
Ну приятно же когда умные люди заботливо пишут язык для других умных людей!
Ну в каком ещё языке бывают такие изящные конструкции:
my $pi is constant = 3.14159; my @range = 3...; # бесконечный диапазон my %hash is Hash of Array of Int; # при том, что это необязательно
Красивые гипер-операторы с "»" и "«", применяющие оператор поэлементно к спискам.
my @sum = @first »+« @second; my @pay = @money »*« @rate;
Просто шикарный оператор switch given:
given $bugblatter {
when Beast::Trall { close_eyes(); }
when 'ravenous' { toss( 'steak' ); }
when .feeding { sneak_past(); }
when /grrr+/ { cover_ears(); }
when 2 { run_between(); }
when (3..10) { run_away(); }
}
Такие вот занятные сравнения:
if( 24 < $age < 42 ) { ... }
if( $whale // $petunia ) { ... } # сравнение на OR по критерию definedness
Мощнейшая концепция matching'a. Матчится почти всё почти ко всему:
$string ~~ "Ford" # сравнение строк $number ~~ 42 # сравнение чисел $string ~~ /towel/ $string ~~ s/weapon/towel/ # RegExp'ы $name ~~ ( "Zaphod", "Ford", "Trillian" ) # поиск значения в списке $name ~~ ( "Zaphod", 42, /petunias/ ) # или такой поиск по списку ( "Zaphod", "Ford", "Trillian" ) ~~ ( "Zaphod", "Ford", "Trillian" ) # сравнение списков @array ~~ /illi/ # OR-match по всем элементам массива $key ~~ %hash # проверка значения хэша по ключу %vogons ~~ %humans # поиск пересечения по ключам хэшей
А как вам такие итераторы?
for %ages.kv -> $name, $age {
print "$name is now $age";
}
for zip( @animals, @things, :by(2) ) -> $a1, $a2, $t1, $t2 {
print "The animals, they came, they came in twosies, twosies: ";
print "$a1 and $a2";
print "Two things. And I call them, $t1 and $t2.";
}
for @useful_things -> $item {
next when 'towel';
redo when .try_again;
last when 'bomb';
print "Are you sure you need your $item?";
}
И это я ещё не дошёл до классов, свойств, особенностей (traits) и прочего богатства! Продолжаю читать...
Бородатый дядька Larry Wall - форева!


no subject
no subject
Ðде можно ÑкаÑаÑÑ Ð´Ð¸ÑÑÑибÑÑив ?
no subject
ÐÐ¾Ñ Ð² Ñем полÑза ÐÐ. :)
Так Ð±Ñ Ð¸ жил в неведении!
СпаÑибо. :)
no subject
ТепеÑÑ Ð² обÑÑждении вÑÑкие ÑÐµÑ Ð½Ð¸ÑеÑкие вопÑоÑÑ - как вÑÑ Ð¿ÑавилÑно опÑимизиÑоваÑÑ, поÑÑиÑоваÑÑ, и Ñ.д.
no subject
no subject
Ðе Ñ Ð¾ÑелоÑÑ Ð±Ñ Ð½Ð°ÑинаÑÑ holy war, но ÑодеÑжимое ÑкобоÑек задело Ð¼ÐµÐ½Ñ Ð·Ð° живое.
ÐеÑл - ÑзÑк ниÑÑÑÑ Ð½Ðµ Ñ Ñже C. Ð ÑÐ¾Ñ Ð¸ дÑÑгой позволÑÑÑ ÑÑÑÑаиваÑÑ obfuscated contests, но и ÑÐ¾Ñ Ð¸ дÑÑгой пÑедоÑÑавлÑÑÑ ÑÑедÑÑва пиÑаÑÑ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑнÑй, ÑÑÑекÑивнÑй и пеÑеноÑимÑй код.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ Ð¸ поÑÑвÑÑвоваÑÑ ÑзÑк - ÑÑо Perl, ÑÑо C - надо пÑоÑÑо ÑазобÑаÑÑÑÑ, ÑÑо ÑÑанÑлÑÑÐ¾Ñ Ð´ÐµÐ»Ð°ÐµÑ Ñ ÑзÑком. Ðак ÑолÑко ÑÑ Ð¿Ð¾Ð½Ñл, как из C-кода полÑÑаеÑÑÑ Asm-код или как ÑолÑко ÑÑ Ð¿Ð¾Ð½Ñл, как Perl ÑабоÑÐ°ÐµÑ Ñ ÑаблиÑами Ñимволов - вÑÑ ÑÑÐ°Ð·Ñ ÑÑановиÑÑÑ Ð¾ÑевиднÑм.
Рв ÑеÑÑом ÐеÑле вовÑе не нагоÑодили огоÑода, а внеÑли в ÑзÑк конÑÑÑÑкÑии ÑеÑаÑÑие ÑипиÑнÑе задаÑи, возникаÑÑие пÑи ÑазÑабоÑке ÑеÑÑÑзнÑÑ Ð¿Ñиложений. ÐÑиÑÑм Ñделано ÑÑо не Ñак, как делалÑÑ Object Pascal из обÑÑного ÐаÑкалÑ, а оÑÐµÐ½Ñ Ð¸Ð·ÑÑно.
no subject
Ðлавное - имеÑÑ Ð¿ÑавилÑнÑÑ Ð¸Ð½ÑÑиÑиÑ, как ÑÑÑ ÐºÑо-Ñо моÑно завеÑнÑл. :)
ÐÐ¾Ñ Ð»Ð¸Ñно Ñ ÐеÑл Ð¾Ð±Ð¾Ð¶Ð°Ñ Ð·Ð° Ñо, ÑÑо Ñ Ð¿Ð¸ÑÑ Ð²ÑÑкÑÑ Ñ ÑÐµÐ½Ñ - а он Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸ пÑавилÑно делаеÑ! %))