Perl 5.20 и судьба умных сопоставлений и данных - когда?

57

Я только что установил Perl 5.18, и я получаю много предупреждений, подобных этому,

given is experimental at .\[...].pl line [...].
when is experimental at .\[...].pl line [...].
Smartmatch is experimental at C:/strawberry/perl/site/lib/[...] line [...].

Взглянув на эти предупреждения, о которых я никогда не слышал нигде, я мог найти это только в двух местах,

Perl Delta по-прежнему делает все возможное, чтобы упомянуть о том, что происходит с этими функциями, на полпути вниз, погруженным в стручок,

Интеллектуальное совпадение, добавленное в v5.10.0 и значительно переработанное в версии 5.10.1, является регулярной жалобой. Хотя есть несколько способов, в которых это полезно, он также оказался проблематичным и запутанным как для пользователей, так и для разработчиков Perl. Был предложен ряд предложений о том, как наилучшим образом решить эту проблему. Понятно, что smartmatch почти наверняка либо изменится, либо уйдет в будущем. Опираясь на его текущее поведение не рекомендуется. Предупреждения будут теперь выдаваться, когда парсер увидит ~~, данный или когда.

Я смущен тем, как можно было потянуть самые значительные изменения в Perl за последние 10 лет. Я начал использовать given, when и smartmatch повсюду. Есть ли больше информации об этих фьючерсах? Как кто-то находит их "запутанными"? Как эти функции могут измениться? Есть ли план для реализации этих функций с помощью модуля?

  • 3
    Неверный файл. У вас есть 5.18, так что прочитайте perldelta для 5.18. metacpan.org/module/RJBS/perl-5.18.0/pod/... domm.plix.at/perl/2013_05_given_smartmatch.html
  • 0
    Я прочитал это на Perlbuzz на днях.
Показать ещё 5 комментариев
Теги:
perl5
smartmatch

3 ответа

36

Существуют проблемы с дизайном интеллектуального сопоставления. Решение о том, что должен делать любой данный TYPE ~~ TYPE, является наиболее часто неочевидным, непоследовательным и/или спорным. Идея заключается не в том, чтобы удалить интеллектуальное сопоставление; это исправить.

В частности, ~~ будет значительно упрощен, как вы можете видеть в предложении с помощью насоса 5.18. Решения о том, как должны соответствовать две вещи, будут выполняться с помощниками, такими как те, которые уже существуют в Smart:: Match.

... ~~ any(...)

Гораздо более читаемый, гораздо более гибкий (полностью расширяемый) и решает ряд проблем (например, "Когда X следует считать числом и когда его следует считать строкой?" ).

  • 6
    Ух, я не видел Smart :: Match! Это потрясающе! ++ Леонтьев
  • 0
    (По крайней мере, это мое понимание положения вещей. Ничего из этого не заложено в камень, конечно.)
Показать ещё 6 комментариев
22

Некоторые идеи могут быть получены путем чтения rjbs, предложенных изменений в smartmatch. В конце концов, он является насосом (менеджером релиза Perl), поэтому его комментарии и его взгляд на будущее более актуальны, чем большинство. Существует также много комментариев сообщества по этому вопросу, например, здесь. "Экспериментальный" статус действует, потому что, поскольку в будущем ситуация может измениться, он обязан информировать пользователей об этом факте, даже если мы не знаем, какие эти изменения будут.

9

Хорошо, это то, что сказано в описании патча, который понизил этот набор возможностей до эксперимента:

Поведение данных /, когда/~~, вероятно, изменится в perl 5.20.0: либо умное совпадение будет удалено или удалено. В свете этого, пользователи этих функций должны быть предупреждены. Категория Для этих функций должно быть выдано предупреждение "experimental:: smartmatch" когда они используются.

Итак, если вы действительно можете отключить эти предупреждения, что-то вроде этого (источник):

no if $] >= 5.018, warnings => "experimental::smartmatch";

... это просто отводит глаза от проблемы.

  • 8
    Речь идет не о том, как отключить эти предупреждения, а о том, что не так с Smartmatch / дали / когда и как они будут решать проблему. Дорожная карта - это просто «впереди перемены» без уверенности в направлении.
  • 0
    Ну, я ответил на ту часть вопроса, которую смог. why it's confusing часть, я могу только отослать вас к этому (чрезвычайно недооцененному) ответу - по моему мнению, он описывает черту проблемы довольно чертовски хорошо. ) Но опять же, ТАК не о мнениях, я полагаю.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню