Size: a a a

2020 December 16

a

allter in Modern::Perl
Sergey Zhmylove
Если у тебя на сране планируется только документация с указанной страницы, то это уг. Ты хоть что-то в ридми напиши. А вообще рекомендую pod2markdown, тогда документацию придется писать только в одном месте (коде).
Из ридми на пару предложений вообще не понятно, что за модуль и как он может кому-то пригодиться в жизни.

Не понятно, что такое _dop когда читаешь сверху вниз. Добавь хотя бы однострочный коммент чтобы было понятно.
В стр.54 для старых перлов нужно добавить явное определение sub _dop;
Ещё может сразу уйти от dclone?
В чём смысл: unless ( $cb_chainer ) {
 unshift @_, $promise;
? Что если то, что попало в $promise не умеет в then?
Типа async as {bless [13], "main"};
> unless ( $cb_chainer ) {
нужен для  того, что бы можно было не только промисы запихивать. Когда чейнишь промисы в then можно возвращать как thenable, так и простые значения. Этот случай как раз распространяет синтаксис на простые значения. Там в пределе вообще ни одного промиса может и не быть, при этом в качестве результата вернётся простое значение. Это довольно удобно при отладке (заменить шаг с созданием промиса на хардкодное значение).
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
> unless ( $cb_chainer ) {
нужен для  того, что бы можно было не только промисы запихивать. Когда чейнишь промисы в then можно возвращать как thenable, так и простые значения. Этот случай как раз распространяет синтаксис на простые значения. Там в пределе вообще ни одного промиса может и не быть, при этом в качестве результата вернётся простое значение. Это довольно удобно при отладке (заменить шаг с созданием промиса на хардкодное значение).
Так а что вернет это?
async as {bless [13], "main"};
источник

IB

Ivan Bessarabov in Modern::Perl
Sergey Zhmylove
Затем что перл добавляет определение функции только когда доходит до конца выражения. А у тебя _dop используется из неё же. Поскольку перл ещё не дошел до }, он не будет знать, что такое _dop
Можешь показать пример. Что-то я не понимаю как вопрозвести проблему. Пытался так — работает https://perlbanjo.com/90aa6ad9dd
источник

a

allter in Modern::Perl
Sergey Zhmylove
Затем что перл добавляет определение функции только когда доходит до конца выражения. А у тебя _dop используется из неё же. Поскольку перл ещё не дошел до }, он не будет знать, что такое _dop
Не, даже в 5.005 перл сначала компилирует весь исходник. Не нужно, что бы процедура объявлялась выше места её использования.
источник

SZ

Sergey Zhmylove in Modern::Perl
Ivan Bessarabov
Можешь показать пример. Что-то я не понимаю как вопрозвести проблему. Пытался так — работает https://perlbanjo.com/90aa6ad9dd
Этого и не увидишь в современных версиях :)
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
Не, даже в 5.005 перл сначала компилирует весь исходник. Не нужно, что бы процедура объявлялась выше места её использования.
Да, уже давно можно объявлять функции ниже.
источник

SZ

Sergey Zhmylove in Modern::Perl
Но это же неправильно, карл!
источник

IB

Ivan Bessarabov in Modern::Perl
Sergey Zhmylove
Этого и не увидишь в современных версиях :)
я пробовал на 5.8 — тоже не получислось поймать ошибку
источник

a

allter in Modern::Perl
Sergey Zhmylove
Так а что вернет это?
async as {bless [13], "main"};
оно сразу ругнётся, что надо хотя бы один await {} аргумент.
источник

a

allter in Modern::Perl
Sergey Zhmylove
Но это же неправильно, карл!
Почему? Мы же не в C :)
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
оно сразу ругнётся, что надо хотя бы один await {} аргумент.
Не вижу, где это?
источник

a

allter in Modern::Perl
Sergey Zhmylove
Не вижу, где это?
в sub async { ... }
источник

SZ

Sergey Zhmylove in Modern::Perl
Ivan Bessarabov
я пробовал на 5.8 — тоже не получислось поймать ошибку
Ну да, оно и должно работать :)
Просто хороший стиль, по-моему :р
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
в sub async { ... }
Не вижу
источник

SZ

Sergey Zhmylove in Modern::Perl
sub async ( @ )
{
my $as_ref = pop;
croak "No arguments to 'async'" unless $as_ref;
croak "Last argument to 'async' must be 'as { ... }'" unless UNIVERSAL::isa( $as_ref, 'Promise::Syntax::_As' );

foreach ( @_ ) {
 croak "Arguments to 'async' must be await { <sym1> => promise1() }, await { <symN> => promiseN(); }, as { ... }"
  unless UNIVERSAL::isa( $_, 'Promise::Syntax::_Await' );
}

return _dop( {}, @_, $as_ref );
}
источник

SZ

Sergey Zhmylove in Modern::Perl
Где?
источник

SZ

Sergey Zhmylove in Modern::Perl
Ivan Bessarabov
я пробовал на 5.8 — тоже не получислось поймать ошибку
Единственный side-effect сейчас, думаю, это вот такой способ вызова: https://perlbanjo.com/38be7adf25
Попробуй закомменить forward declaration
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
в sub async { ... }
Ку-ку :)
Так а что вернет это?
async as {bless [13], "main"};
источник

IB

Ivan Bessarabov in Modern::Perl
Sergey Zhmylove
Единственный side-effect сейчас, думаю, это вот такой способ вызова: https://perlbanjo.com/38be7adf25
Попробуй закомменить forward declaration
Понял, спасибо.
источник

a

allter in Modern::Perl
Sergey Zhmylove
Ку-ку :)
Так а что вернет это?
async as {bless [13], "main"};
А немного не дочитал. Он вернёт
bless [13], "main"

, что бы это не значило. :)
источник