[Moscow.pm] Дайджест списка рассылки Moscow-pm; том 114, выпуск 3

Андрей Еньшин and.enshin на gmail.com
Ср Апр 19 04:30:14 PDT 2017


Привет! Я тут на япси рассказывал про это, но все спали(  https://www.youtube.com/watch?v=17Lo_QLcid4&feature=youtu.be&t=27395   )
однако рассказчик из меня так себе, к тому же это был вольный перевод статьи:
http://shadow.cat/blog/matt-s-trout/madness-with-methods/




>Среда, 19 апреля 2017, 11:03 +03:00 от moscow-pm-request на pm.org:
>
>Сообщения, предназначенные для списка
>рассылки Moscow-pm, отправляйте по адресу
>moscow-pm на pm.org
>
>Для изменения параметров подписки или
>отписки используйте веб-страницу
>http://mail.pm.org/mailman/listinfo/moscow-pm
>или отправьте письмо, в теле или теме
>которого будет слово 'help', по адресу
>moscow-pm-request на pm.org
>
>Адрес администратора этого списка
>рассылки:
>moscow-pm-owner на pm.org
>
>При ответе, пожалуйста, измените тему
>письма на более содержательную чем "Re:
>Содержание дайджеста списка рассылки
>Moscow-pm..."
>
>
>В этом номере:
>
>   1. Soft call operator (Оператор мягкого
>      вызова): ~> (KES)
>   2. Re:  Soft call operator (Оператор мягкого
>      вызова): ~> (Alexander Q)
>   3. Re:  Soft call operator (Оператор мягкого
>      вызова): ~> (Alexander Q)
>
>
>----------------------------------------------------------------------
>
>Message: 1
>Date: Wed, 19 Apr 2017 10:17:49 +0300
>From: KES < kes-kes на yandex.ru >
>To: Moscow.pm group < moscow-pm на pm.org >
>Cc: Kiev. pm group < kiev-pm на pm.org >
>Subject: [Moscow.pm] Soft call operator (Оператор
>мягкого вызова): ~>
>Message-ID: < 2654291492586269 на web57g.yandex.ru >
>Content-Type: text/plain; charset=utf-8
>
>Привет.
>
>А у меня вот давно витает идея "мягкого вызова". 
>Даже ещё когда писал на ассемблере всегда раздражали исключения при `CALL 0`
>
>ну вот снова вернулся к этой теме.
>
>1. Что не так?
>Очень часто приходится писать следующий код:
>my $x; my $y;
>if( ($x =  $obj->method)   &&  $y =  $x->another_method ) {
>     $y = ...;
>}
>
>Пример из жизни:
>
>if( $db->query( ... )->hash->{ value } ) { ... }
>if( $db->resultset( 'table' )->search( ... )->related_resultset( 'table2' ) { ... }
>
>
>тут если запрос вернул пустой результат, то код упадёт.
>
>А если использовать оператор мягкого вызова, то можно будет не бояться исключений и код станет проще:
>
>use pragma 'soft_call';
>if( my $x =  $obj->method~>another_method ) { ... }
>if( $db->query( ... )~>hash->{ value } ) { ... }
>if( $db->resultset( 'table' )->search( ... )~>related_resultset( 'table2' ) { ... }
>
>И вроде как всё выразительно получается.
>
>Даже сама реализация прагмы в десяток строк:
>1. делаем плагин для keyword, Наподобие  Syntax::Keyword::Try 
>2. цепляемся на  http://perldoc.perl.org/perlguts.html#Pluggable-runops
>3. Псевдокод:
>sub soft_call_operator {
>    my( $left_operand, $right_operand ) =  @_;
>
>    return undef    if !defined $left_operand;
>
>    '->'( $left_operand, $right_operand ); # делаем обычную обработку вызова функции
>}
>
>
>Комментарии wellcome
>
>
>------------------------------
>
>Message: 2
>Date: Wed, 19 Apr 2017 07:42:03 +0000
>From: Alexander Q < qalexx на gmail.com >
>To: "Moscow.pm group" < moscow-pm на pm.org >
>Cc: KES < kes-kes на yandex.ru >, "Kiev. pm group" < kiev-pm на pm.org >
>Subject: Re: [Moscow.pm]  Soft call operator (Оператор
>мягкого вызова): ~>
>Message-ID:
>< CAEJuZgeq8BP9uZ+TahvOHzsjXHYb+nyn4ioXORnSNjZ-hQG=pg на mail.gmail.com >
>Content-Type: text/plain; charset="utf-8"
>
>Это монада
>
>On Wed, 19 Apr 2017, 10:21 KES via Moscow-pm, < moscow-pm на pm.org > wrote:
>
>> Привет.
>>
>> А у меня вот давно витает идея "мягкого вызова".
>> Даже ещё когда писал на ассемблере всегда раздражали исключения при `CALL
>> 0`
>>
>> ну вот снова вернулся к этой теме.
>>
>> 1. Что не так?
>> Очень часто приходится писать следующий код:
>> my $x; my $y;
>> if( ($x =  $obj->method)   &&  $y =  $x->another_method ) {
>>      $y = ...;
>> }
>>
>> Пример из жизни:
>>
>> if( $db->query( ... )->hash->{ value } ) { ... }
>> if( $db->resultset( 'table' )->search( ... )->related_resultset( 'table2'
>> ) { ... }
>>
>>
>> тут если запрос вернул пустой результат, то код упадёт.
>>
>> А если использовать оператор мягкого вызова, то можно будет не бояться
>> исключений и код станет проще:
>>
>> use pragma 'soft_call';
>> if( my $x =  $obj->method~>another_method ) { ... }
>> if( $db->query( ... )~>hash->{ value } ) { ... }
>> if( $db->resultset( 'table' )->search( ... )~>related_resultset( 'table2'
>> ) { ... }
>>
>> И вроде как всё выразительно получается.
>>
>> Даже сама реализация прагмы в десяток строк:
>> 1. делаем плагин для keyword, Наподобие  Syntax::Keyword::Try
>> 2. цепляемся на  http://perldoc.perl.org/perlguts.html#Pluggable-runops
>> 3. Псевдокод:
>> sub soft_call_operator {
>>     my( $left_operand, $right_operand ) =  @_;
>>
>>     return undef    if !defined $left_operand;
>>
>>     '->'( $left_operand, $right_operand ); # делаем обычную обработку
>> вызова функции
>> }
>>
>>
>> Комментарии wellcome
>> --
>> Moscow.pm mailing list
>>  moscow-pm на pm.org |  http://moscow.pm.org
>>
>----------- следущая часть -----------
>Вложение в формате HTML было извлечено…
>URL: < http://mail.pm.org/pipermail/moscow-pm/attachments/20170419/c7accc8c/attachment-0001.html >
>
>------------------------------
>
>Message: 3
>Date: Wed, 19 Apr 2017 07:56:39 +0000
>From: Alexander Q < qalexx на gmail.com >
>To: "Moscow.pm group" < moscow-pm на pm.org >
>Cc: KES < kes-kes на yandex.ru >, "Kiev. pm group" < kiev-pm на pm.org >
>Subject: Re: [Moscow.pm]  Soft call operator (Оператор
>мягкого вызова): ~>
>Message-ID:
>< CAEJuZgcwfhDer0z52x74-CdNvPOX2L1FjJJCWWSbkot-cA6CBQ на mail.gmail.com >
>Content-Type: text/plain; charset="utf-8"
>
>Чтоб быть точным, монада Maybe в терминах хаскеля.
>
>из пары функций типов f :: a -> Maybe b, g :: b -> Maybe c вы составляете
>функцию a -> Maybe c оператором bind ("мягкого вызова" в ваших терминах)
>следующим образом:
>
>(f a) >>= g
>
>или можете сделать функцию новую просто с новым типом
>u :: a -> Maybe c
>u = f >> g
>
>и применять её
>u a
>
>Вообще, монады не просто так возникли. Это хорошая, мощная абстракция,
>которая работает не только для "мягких вызовов". Нет ничего плохого в
>придумывании велосипедов, но прежде чем запускать их массовое производство,
>имеет смысл изучить опыт конкурентов.
>
>
>
>On Wed, Apr 19, 2017 at 10:42 AM Alexander Q < qalexx на gmail.com > wrote:
>
>> Это монада
>>
>> On Wed, 19 Apr 2017, 10:21 KES via Moscow-pm, < moscow-pm на pm.org > wrote:
>>
>>> Привет.
>>>
>>> А у меня вот давно витает идея "мягкого вызова".
>>> Даже ещё когда писал на ассемблере всегда раздражали исключения при `CALL
>>> 0`
>>>
>>> ну вот снова вернулся к этой теме.
>>>
>>> 1. Что не так?
>>> Очень часто приходится писать следующий код:
>>> my $x; my $y;
>>> if( ($x =  $obj->method)   &&  $y =  $x->another_method ) {
>>>      $y = ...;
>>> }
>>>
>>> Пример из жизни:
>>>
>>> if( $db->query( ... )->hash->{ value } ) { ... }
>>> if( $db->resultset( 'table' )->search( ... )->related_resultset( 'table2'
>>> ) { ... }
>>>
>>>
>>> тут если запрос вернул пустой результат, то код упадёт.
>>>
>>> А если использовать оператор мягкого вызова, то можно будет не бояться
>>> исключений и код станет проще:
>>>
>>> use pragma 'soft_call';
>>> if( my $x =  $obj->method~>another_method ) { ... }
>>> if( $db->query( ... )~>hash->{ value } ) { ... }
>>> if( $db->resultset( 'table' )->search( ... )~>related_resultset( 'table2'
>>> ) { ... }
>>>
>>> И вроде как всё выразительно получается.
>>>
>>> Даже сама реализация прагмы в десяток строк:
>>> 1. делаем плагин для keyword, Наподобие  Syntax::Keyword::Try
>>> 2. цепляемся на  http://perldoc.perl.org/perlguts.html#Pluggable-runops
>>> 3. Псевдокод:
>>> sub soft_call_operator {
>>>     my( $left_operand, $right_operand ) =  @_;
>>>
>>>     return undef    if !defined $left_operand;
>>>
>>>     '->'( $left_operand, $right_operand ); # делаем обычную обработку
>>> вызова функции
>>> }
>>>
>>>
>>> Комментарии wellcome
>>> --
>>> Moscow.pm mailing list
>>>  moscow-pm на pm.org |  http://moscow.pm.org
>>>
>>
>----------- следущая часть -----------
>Вложение в формате HTML было извлечено…
>URL: < http://mail.pm.org/pipermail/moscow-pm/attachments/20170419/fe63f691/attachment.html >
>
>------------------------------
>
>Subject: Нижний колонтитул дайджеста
>
>_______________________________________________
>Moscow-pm mailing list
>Moscow-pm на pm.org
>http://mail.pm.org/mailman/listinfo/moscow-pm
>
>
>------------------------------
>
>Конец Дайджест списка рассылки Moscow-pm; том 114, выпуск 3
>***********************************************************************************************


С уважением,
Андрей Еньшин
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20170419/13339755/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm