Комментарии 11
Не понравилось. Язык неоправданно сложный получился. Например:
loop (my $i=0; $i < 4; $i++)
{
LEAVE {
say «Test leave»;
}
say «Another loop entry»;
}
Почему не просто
foreach (0..3)
{
say «Another loop entry»;
}
say «Test leave»;
Добавлена конструкция, которая не нужна. И остальные конструкции как-то не очень понятно зачем введены. Перл и так специфический язык, а тут ещё больше его будет тянуть в сторону от майнстрима (ну это, конечно, если мы представим что его кто-то будет использовать :)))))
loop (my $i=0; $i < 4; $i++)
{
LEAVE {
say «Test leave»;
}
say «Another loop entry»;
}
Почему не просто
foreach (0..3)
{
say «Another loop entry»;
}
say «Test leave»;
Добавлена конструкция, которая не нужна. И остальные конструкции как-то не очень понятно зачем введены. Перл и так специфический язык, а тут ещё больше его будет тянуть в сторону от майнстрима (ну это, конечно, если мы представим что его кто-то будет использовать :)))))
0
Потому что TIMTOWTDI — конструкция с форичем тоже есть, и если она нравится больше — используешь её, нет — юзаешь луп. А вообще, так посмотришь на коммент, и либо это какой-то очень жалкий троллинг, либо приперся какой-то рьяный питонист/рубист/{подставь название своего любимого языка}, который только и умеет на этом самом языке говнокодить, и во всех остальных языках ищет те конструкции которые и выучил.
-1
Комент и правда несколько похож на троллинг. Но ваш (с маленькой буквы) ответ — банальное хамство.
0
Хамство? Возможно, но по моему мнению такой коммент ничего другого не заслуживает. Троллить первым же комментом в посте?
0
Человек высказал свое мнение — выразил сомнение по поводу полезности конструкции языка (причем не
Ну вот и объясните, зачем может понадобится
foreach
). Более того, ваша персона никак не была охарактеризована (нету даже упоминания оной).Ну вот и объясните, зачем может понадобится
LEAVE
. Причем не прикриваясь принципом TIMTOWTDI — покажите примеры, когда вышеназванные фичи могут сделать код чище, компактнее или быстрее. Пока этого не сделано — ответ выглядит в стиле «ты не осилил», только в более грубой форме.0
Я написал такой «хамский» комментарий не из-за того что он не смог осилить конструкцию LEAVE, а из-за того, в какой форме этот комментарий был написан. Выражать свои мысли можно по разному — можно как Вы, указывая на то что не нравится, но при этом не перегибая палки, а можно как я или как в первом комменте.
Конкретно насчет блока LEAVE — он должен выполняться при любом выходе из блока, даже в случае исключений. Пример — если действия, которые должны быть обязательно выполнены для освобождения какого-либо ресурса поставить просто в конец блока, и вдруг произойдет исключение до этих самых действий, то выполнений данного блока остановится, и ресурс так и останется занятым. Поэтому все действия по освобождению блока можно перенести в LEAVE. Понимаю что я не описал такого в статье, так как не смог скомпилировать пример, но и нельзя говоить о том, что что-то в языке бесполезно, если не знаешь как именно это что-то должно работать.
Конкретно насчет блока LEAVE — он должен выполняться при любом выходе из блока, даже в случае исключений. Пример — если действия, которые должны быть обязательно выполнены для освобождения какого-либо ресурса поставить просто в конец блока, и вдруг произойдет исключение до этих самых действий, то выполнений данного блока остановится, и ресурс так и останется занятым. Поэтому все действия по освобождению блока можно перенести в LEAVE. Понимаю что я не описал такого в статье, так как не смог скомпилировать пример, но и нельзя говоить о том, что что-то в языке бесполезно, если не знаешь как именно это что-то должно работать.
0
Лучше бы вы вообще не писали о LEAVE — обхамили и ладно, я бы промолчал. Ну раз написали… Не так он работает как вы написали. Вообще интересный стиль изложения — «вот есть такой прекрасный блок, он делает кажется то-то, но так ли это я не знаю, потому что запустить компилятор не смог, но я всё равно напишу свой представление о нём а кто не согласен тот дурак»! Первый раз встречаю такое в технической литературе… А то что в действительности делает конструкция — не важно, главное тиснуть статейку. Вот из таких и вырастают те самые говнокодеры.
Я не поленился почитать документацию и скомпилировать примеры — естественно правильные, всё отлично компилируется, и теперь я почти знаю что такое LEAVE и знаю что оно не делает то что вы описали. Почти — так как в документации по LEAVE явно опущены некоторые подробности, а тестирование на примерах, кроме знания как в конкретных случаях работает конструкция, малопродуктивно.
На всякий случай ссылки:
perlcabal.org/syn/S04.html#Phasers — путеводитель по тестам
raw.github.com/perl6/specs/master/S04-control.pod — описание
rakudo.org/how-to-get-rakudo/ — как скомпилировать rakudo (именно скомпилировать, так как в некоторых репозиториях лежит не очень свежий вариант)
Прошу прощения за грубость, но вы сами напросились.
Я не поленился почитать документацию и скомпилировать примеры — естественно правильные, всё отлично компилируется, и теперь я почти знаю что такое LEAVE и знаю что оно не делает то что вы описали. Почти — так как в документации по LEAVE явно опущены некоторые подробности, а тестирование на примерах, кроме знания как в конкретных случаях работает конструкция, малопродуктивно.
На всякий случай ссылки:
perlcabal.org/syn/S04.html#Phasers — путеводитель по тестам
raw.github.com/perl6/specs/master/S04-control.pod — описание
rakudo.org/how-to-get-rakudo/ — как скомпилировать rakudo (именно скомпилировать, так как в некоторых репозиториях лежит не очень свежий вариант)
Прошу прощения за грубость, но вы сами напросились.
+1
Насчет LEAVE — я так же изучаю все по этому сайту — perlcabal.org. Признаю свою ошибку — неправильно понял фразу про раскручивание стека при исключениях. Но опять же, я не с потолка говорил, как он должен работать, а хоть и ошибочно, но читал про этот вопрос. Вобщем да, с LEAVE мой косяк.
Насчет же «вот есть такой прекрасный блок, он делает кажется то-то, но так ли это я не знаю, потому что запустить компилятор не смог, но я всё равно напишу свой представление о нём а кто не согласен тот дурак» и «А то что в действительности делает конструкция — не важно, главное тиснуть статейку» — все что я описываю в статьях проверяется лично мною на примерах, и если что-то не компилируется, то лишь упоминаю о существовании этого (в статье я не стал писать свое предположение о LEAVE, так как сам понимаю что это не проверено, и так делать нельзя).
Насчет грубости — грубость не так страшна если всё аргументировано.
Насчет же «вот есть такой прекрасный блок, он делает кажется то-то, но так ли это я не знаю, потому что запустить компилятор не смог, но я всё равно напишу свой представление о нём а кто не согласен тот дурак» и «А то что в действительности делает конструкция — не важно, главное тиснуть статейку» — все что я описываю в статьях проверяется лично мною на примерах, и если что-то не компилируется, то лишь упоминаю о существовании этого (в статье я не стал писать свое предположение о LEAVE, так как сам понимаю что это не проверено, и так делать нельзя).
Насчет грубости — грубость не так страшна если всё аргументировано.
-1
Покинуть блок можно по-разному. В вашем контр-примере строка будет выведена только при обычном выходе из цикла. Если я сделаю return внутри, то ваш контрпример не сработает. То есть он не аналогичен блоку LEAVE.
Вообще, попытки ввести такие блоки это попытка контролировать поток выполнения, в каком бы направлении он ни пошёл. Смысл в этом есть.
Вообще, попытки ввести такие блоки это попытка контролировать поток выполнения, в каком бы направлении он ни пошёл. Смысл в этом есть.
0
Может быть и есть, но описание одного LEAVE должно быть на хорошую статью. Например, что происходит, когда я вызываю return внутри LEAVE?
Например, что выведет x1() и x2() и почему?
sub x1{
{
LEAVE {
say 'LEAVE x1';
return 'x1 LEAVE';
}
return 'x1';
}
}
sub x2{
LEAVE {
say 'LEAVE x2';
return 'x1 LEAVE';
}
return 'x2';
}
say x1();
say x2();
Например, что выведет x1() и x2() и почему?
sub x1{
{
LEAVE {
say 'LEAVE x1';
return 'x1 LEAVE';
}
return 'x1';
}
}
sub x2{
LEAVE {
say 'LEAVE x2';
return 'x1 LEAVE';
}
return 'x2';
}
say x1();
say x2();
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Perl6 — Ещё немного о блоках (Phasers)