"Perl in 2025"FOSDEM 비디오 리뷰

7388 단어 perlfosdemvideofuture
다시 한 번 Paul "Leonerd" Evans에 대해 이야기해야합니다 😃

그는 내가 지금 검토할 비디오의 저자이며 먼저 Perl 커뮤니티에 이렇게 훌륭한 사람이 있다는 것은 행운이라고 생각합니다 👍 💪

비디오 제목은 Perl in 2025이며 가까운 장래에 Perl의 새로운 연산자에 대한 공개 질문 목록입니다.

Leonerd는 조금 빨리 진행되지만 비디오를 정말 즐겼습니다.

이사, 서명



이 부분은 언급하지 않겠습니다. 안정적이고 곧 코어에 들어오는데, 이런 것들을 설명해주셨고, 아주 분명했습니다.

스마트 매치



나는 스마트 매치(~~)가 이미 주변에 있었을 때(그리고 이미 사용에 권장되지 않았을 때) Perl을 시작했습니다.


나는 그것들을 조금 사용했고 (그 당시 나는 젊고 대담했습니다 😀) 권장 사항을 빨리 따르고 사용을 금지했습니다.

하지만 스마트매치를 사용해야 하는 이유는 무엇이었습니까?

첫째, "is in"("이 값이 이 배열에 있습니까?")을 에뮬레이션하는 것이었습니다. 예, 다른 오퍼레이터나 CPAN 모듈로 수행할 수 있지만 ~~가 너무 짧고 우아해 보였습니다...

둘째, Paul이 설명했듯이 ~~의 또 다른 숨겨진 사용법은 내부적으로 given/when 구성에 있습니다(결국 그렇게 많이 사용하지 않음).

저는 실제로 스마트매치를 계속 사용하고 싶었지만 저는 신중한 프로그래머이기 때문에 한 번의 경고만으로도 이 구성을 완전히 잊어버리고 도망칠 수 있었습니다 😂

날카로운 평등



그런 다음 Leonerd는 새로운 연산자equ===에 대해 일방적으로 "신경 평등"또는 "예리한 평등"이라고 이름을 지정하기로 결정했습니다(매우 나쁘게 들릴 수도 있지만 저는 영어 원어민이 아닙니다 😀).

이들에 대한 필요성은 스마트 매치에서 비롯되지만(이유를 알아보려면 비디오를 보십시오!) 기본 비교를 단순화하기 위해 확장됩니다( if(defined $var and $var eq "perl") ).

처음에는 매우 날카롭게 사용하는 것처럼 보였지만 결국에는 매우 멋져 보입니다.

if("" eq undef) { # it is true
    ...
}
if("" equ undef) { # it will be false
    ...
}


숫자와 같은 방식===:

if(0 == undef) { # it is true
    ...
}
if(0 === undef) { # it will be false
    ...
}


임의의


anyin는 이전에 언급한 요구 사항(목록 파헤치기)을 처리합니다.

Leonerd는 작동 방식을 선택하기 위해 "매개변수화"할 수 있는 가능한 메타 연산자로 제시합니다(Raku way에서 약간 미쳤음).
any , in , given/when 및 친구들을 자세히 설명함으로써 스마트매치를 제대로 구현하는 것이 어렵다는 것을 이해합니다(이 모든 것을 포함).

멀티 디스패치



같은 방식으로 "멀티 디스패치"는 이것에 놀라운 Raku를 다시 생각하게 만듭니다.

우리는 이미 Method Resolution Order 이라는 개념을 가지고 있기 때문에 어떤 디스패치 메커니즘이 Perl에 이미 구현되어 있는지 궁금했습니다. 대답은 디스패치 메커니즘이 있지만 지향 객체 프로그래밍으로 제한된다는 것입니다.

동일한 패키지에서 다중 서브 디스패치를 ​​시도하면 어떻게 됩니까?

프로토타입으로 다음과 같은 것을 시도한다면:

sub a() { print "a\n"; }
sub a($) { print "aa\n"; }


불행히도 다음과 같은 오류가 발생합니다.

Prototype mismatch: sub main::a () vs ($) at multi.pl line 2.


서명을 사용하면 다음과 같이 시도할 수 있습니다.

use v5.20;
use feature qw(signatures);
no warnings qw(experimental::signatures);

sub b() { print "b\n"; }
sub b($arg) { print "bb\n"; }

b();
b("myarg");


최신 선언이 이전 선언보다 우선하며 Too few arguments for subroutine를 선언한 순서에 따라 Too many arguments for subroutine 또는 sub b를 얻을 수 있습니다.


(그리고 다른 사람들은) 저를 바로잡는 것을 주저하지 마십시오. 당신은 이 모든 것을 나보다 더 잘 마스터합니다.

여전히 Perl의 유연성을 사용하고 sub 내에서 디스패치를 ​​처리할 수 있지만 제대로 된 기본 디스패치는 아닙니다.

MRO(Method Resolution Order)로 돌아가서, Perl MRO은 기본적으로 DFS (Depth First Search)을 사용하여 구현되지만 C3에서 CPAN module C3을 사용하도록 구성할 수 있습니다.
Python 또는 Raku는 C3 알고리즘을 기본 구현으로 사용합니다.

그런 다음 요약으로 Paul은 다중 디스패치(즉, 동일한 패키지에서 메서드 재정의 또는 다형성)를 추가하는 것에 대해 논의하고 signatures , isais를 기반으로 구현을 제안합니다. 가능한 새로운 작전의 일부).

내 생각은...좋겠다! 😃

모든 것을 함께



이것은 토론과 구현의 문을 여는 훌륭한 강연입니다.



결론적으로 Leonard에게 다시 한 번 감사드립니다!

그게 내가 당신에 대해 마지막으로 말한 시간이었습니다... 오늘은 😀

좋은 웹페이지 즐겨찾기