Development Tip

Perl 5.20과 스마트 매칭의 운명은 언제인가?

yourdevel 2020. 11. 28. 12:34
반응형

Perl 5.20과 스마트 매칭의 운명은 언제인가?


방금 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에서 추가되고 v5.10.1에서 대폭 수정 된 스마트 매치는 일반적인 불만 사항이었습니다. 유용한 방법은 여러 가지가 있지만 Perl의 사용자와 구현 자 모두에게 문제가 있고 혼란 스러움이 입증되었습니다. 문제를 가장 잘 해결하는 방법에 대한 많은 제안이있었습니다. 스마트 매치는 거의 확실히 미래에 변경되거나 사라질 것임이 분명합니다. 현재 동작에 의존하지 않는 것이 좋습니다. 이제 파서가 ~~, 주어진 또는 언제를 볼 때 경고가 발행됩니다.

지난 10 년 동안 Perl에서 가장 큰 변화를 가져올 수있는 방법이 혼란 스럽습니다. 내가 사용하기 시작했습니다 given, when그리고 smartmatch여기 저기. 이 미래에 대한 더 많은 정보가 있습니까? 어떻게 "혼란 스러울까요?" 이러한 기능은 어떻게 변경 될까요? 모듈로 이러한 기능을 구현할 계획이 있습니까?


스마트 매칭 디자인에 문제가 있습니다. 어떤 주어진 TYPE ~~ TYPE것이 무엇을해야하는지에 대한 결정 은 대부분 불분명하고 일관성이없고 / 또는 논쟁의 여지가 있습니다. 아이디어는 스마트 매칭을 제거하는 것이 아닙니다. 그것을 고치는 것입니다.

특히 5.18 pumpking ~~제안 에서 볼 수 있듯이 크게 단순화됩니다 . 두 가지가 어떻게 일치해야하는지에 대한 결정은 Smart :: Match 에 이미 존재하는 것과 같은 도우미를 사용하여 수행됩니다 .

... ~~ any(...)

훨씬 더 읽기 쉽고 (완전히 확장 가능) 많은 문제를 해결합니다 (예 : "X는 언제 숫자로 간주되어야하며 언제 문자열로 간주되어야합니까?").


rjbs가 제안한 smartmatch 변경 사항을 읽어 보면 일부 통찰력을 얻을 수 있습니다 . 결국 그는 pumpking (Perl 릴리스 관리자)이므로 그의 의견과 미래에 대한 그의 견해는 대부분의 것보다 더 관련이 있습니다. 이 문제에 대한 커뮤니티 댓글도 많이 있습니다 . 예를 들어 여기참조 하세요 . '실험적'상태는 유효합니다. 왜냐하면 미래에 상황이 바뀔 가능성이 있기 때문에 우리가 그 변화가 무엇인지 알지 못하더라도 사용자에게 그 사실을 알리는 책임이 있기 때문입니다.


이 기능 세트를 실험용으로 다운 그레이드 한 패치 에 대한 설명 은 다음과 같습니다.

given / when / ~~의 동작은 perl 5.20.0에서 변경 될 가능성이 있습니다. 스마트 매치가 제거되거나 제거됩니다. 이를 고려하여 이러한 기능의 사용자에게 경고해야합니다. 이러한 기능이 사용될 때 카테고리 "experimental :: smartmatch"경고가 발행되어야합니다.

따라서 다음과 같이 실제로 이러한 경고를 끌 수 있습니다 ( source ).

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

... 문제에서 눈을 돌리는 것뿐입니다.

참고 URL : https://stackoverflow.com/questions/16927024/perl-5-20-and-the-fate-of-smart-matching-and-given-when

반응형