PHP 9 는 출시가 계속 미뤄져서 내년은 PHP 8.6 이라고해요
PHP 8.5 11월 20일 출시예요
큰 특징은 파이프 연산자가 생겼다는거네요
함수형프로그래밍의 방식을 도입한것입니다.
$input = ' Some kind of string. '; $temp = trim($input); $temp = str_replace(' ', '-', $temp); $temp = str_replace(['.', '/', '…'], '', $temp); $output = strtolower($temp);
이런 코드가 있다고하면
$output = $input |> trim(...) |> fn (string $string) => str_replace(' ', '-', $string) |> fn (string $string) => str_replace(['.', '/', '…'], '', $string) |> strtolower(...);
이렇게요.
|> 는 opcode 에서 일반 변수할당으로 컴파일되기때문에
성능하락은 없다고 하네요.
PHP 8.4 에서는 LazyObject 가 도입되서 관련해서 성능향상이있었는데
PHP 8.5 는 눈에띄는 성능향상은 없네요.
https://php.watch/versions/8.5
라피
Lv. 2
댓글 9
파이프 연산자와 관련해서 "와~ 편리하겠다!" 라는 느낌이 팍 오는 예제를 찾기가 힘드네요.
위에 쓰신 코드처럼 오히려 더 길고 복잡해지는 경우가 많아서... ㅎㅎ
다른 언어들처럼 $str->trim()->replace(...)->toLower() 이거나 좀 되면 좋겠습니다.
기본적인 것이 안 되니까 자꾸 이상한 방식으로 때우려고 하는 것 같아요.
아무튼 약간의 syntactic sugar 외에는 큰 변화가 없는 업데이트여서
라이믹스도 PHP 8.5에서 유닛 테스트 돌리니까 별다른 문제 없이 다 호환되더군요.^^
그건하려면 string 을 객체로 만들어야되서요
기존 함수들은 c api 처럼 그냥 두고
Text 인가하는 문자열 클래스 만든다고했다가 거절당한거로 기억나네요.
파이프는 같은 클래스에 없어도 되죠.
유닉스/리눅스에 파이프연산처럼 완전 다른거끼리도 그냥 주고받는 역할이니까요
PFA 라고 부분함수 어플리케이션 문법도 8.6에 도입한다네요
파이프랑 PFA 랑 모두 PHP 에 함수형 프로그래밍들 강화예요.
파이프안에서 fn 써야되는게 php 엔진에서 클로저에서 외부변수 캡쳐가 제대로 안되는 문제때문이라는데요.
이게 PHP 8.5 고
PFA 통과하면
PFA까지 되면 좀더 쓸만하겠네요. 아직은 fn 때문에 가독성이 영 안 좋아서...
Text 클래스 도입관련 내부메일이예요
https://externals.io/message/119149
작성자는 Xdebug 만든 데릭이라는 사람인데
내용은 mb_ 접두사랑 그냥 str 함수들이랑 나뉘어있어서 유니코드를 기본으로하는
문자열 클래스였어요.
반대하는 사람들 의견을 libicu 를 php 가 쓰는데 유니코드를 기본으로 하려면
저 라이브러리가 리눅스에 있거나 익스텐션으로 설치되어야한다면서 의존성문제로 반대하는 의견도있고...
세부 구현 메서드에서 Text->getPositionOfFirstOccurrence, getCodePointCount 나 이런게 있어서 이름이 길고, 메서드명 이상하다, subString 이냐 substring 이냐 이야기하다가 차라리 파이프연산이 있는게 더 좋겠다는 의견이 오갔네요.
그뒤로는 이야기가없는데 오늘날 파이프 연산자가 나온거보면 완전히 중단된게 아닌가 싶어요.
개인적으로 파이프 연산자는 코드 가독성을 해치는 것 같아요.
지금처럼 한줄 한줄 변수에 할당하면서 실행하는 방식은, 읽을때도 하나하나 짚어가면서 이해해나갈 수 있죠.
그런데 리눅스쉘도 그렇고 파이프 연산자가 들어가면, 쉼표없는 긴 문장을 읽는 것 같다는 느낌이 드네요..
복잡한 문법만 늘어나는 것 같아서 PHP의 개발 방향성이 좀 아쉽습니다.
PHP 는 방향이없어요 커뮤니티 주도라서 주체가 따로있지도않고(PHP재단이있긴하지만...)
각각의 사람들이 RFC 올리면 인기에 따라 투표를 하고 추가되죠 서로 의견은 나누기는 한데...
아무튼 그래요.
https://externals.io 를 보면 내부소식을 알 수있어요.
오늘도 보니까 누가 Python 에 있는 컨텍스트매니저 추가하는거 어떻냐는 RFC 올려서 한창이야기 중이네요
컨텍스트 관리자 RFC
https://externals.io/message/129077
Arnaud와 저는 고려해야 할 또 다른 RFC를 제시하고 싶습니다.
https://wiki.php.net/rfc/context-managers
Tim과 Seifeddine의 최근 제안과 매우 유사하다는 점에 유의하십시오. 두 제안 모두 몇 달 전에 우연한 토론에서 시작되었습니다. 나는 어느 팀도 다른 팀이 그러한 제안에 적극적으로 노력하고 있다는 것을 알고 있다고 생각하지 않으므로 이제 두 가지가 있습니다. C'est la vie. :-)
당연히 Arnaud와 나는 우리의 접근 방식이 더 낫다고 생각합니다. 특히 Arnaud가 이전 응답에서 언급했듯이 __destruct()는 타이밍이 중요한 경우 신뢰할 수 없습니다. 또한 성공 또는 실패 종료 조건 간의 차별화를 허용하지 않으며, 많은 사용 사례의 경우 절대적으로 필수( 컨텍스트 관리자 RFC의 예에서와 같이).
컨텍스트 관리자 제안은 파이썬의 접근 방식의 거의 직접 포트이며, 일반적으로 매우 잘 생각됩니다. 그러나 RFC에 나열된 몇 가지 공개 질문이 있습니다. 피드백을 찾고 있습니다.
"PHP 는 방향이 없어요 커뮤니티 주도라서"
좋게 말하면 의사결정을 민주적으로 하고 있다는 건데... 반대로 어느 누구도 장기적인 비전을 가지고 꾸준히 개선해 나가기는 힘든 환경이죠.
PHP 언어뿐 아니라 프레임워크 만드는 사람들도 마찬가지로 콩가루 집안인 것이... PSR-1, PSR-2, PSR-12를 작성할 때 중괄호 위치나 공백 사용 여부 등에 대해 K&R, BSD, GNU 등 몇 가지 잘 알려진 후보를 두고 투표한 것이 아니라, 각각의 위치마다 따로 투표를 했어요. 그래서 어떤 중괄호는 줄 바꿔서 쓰고 어떤 중괄호는 안 바꾸고, 어디에는 공백을 넣고 어디에는 안 넣고, 도무지 일관성이라고는 찾아볼 수 없는 결과가 나와 버렸습니다. ㅋㅋㅋ
개인적으로 현 시점에 가장 중요하다고 생각하는 것은 비동기 지원인데, 이것도 확실한 추진력을 얻지 못하고 어딘가 만들다 만 것 같은 Fiber 방식, 몬테크리스토 백작님의 코루틴 RFC, 그리고 이미 프로덕션에서 활용 가능한 ReactPHP 방식이 뒤섞여 있지요. 이럴 때는 교통정리를 해 줄 BDFL이나 막강한 기업 스폰서가 있는 언어가 부럽기도 합니다.
개인적으로는 파이프 연산자 보다는 기진님이 말씀하신것처럼 -> 으로 여러번 호출하는 방식이 좀 더 나은것 같아요.
클래스 속 함수 안에 다음 함수를 호출하는 방법이 없다보니.. c# C 와 같은 형태로는 나오기가 어렵겠지요 ㅠ
그걸 해결할려고 파이프 연산자 방식으로 만들었다 하는것 같은데 규칙을 외워야하고, | <- 짝대기 특문쓰기가 여간 쉽지도 않고 손가락 운동 방향이 좀 위아래로 극단적이라 오른손 쉬프트활용하는 저로써는 쓰기에도 불편한듯하네요 ㅠㅠ..
보통은 왼손 쉬프트를 많이 쓰긴하죠
|> 이거 엘릭서인가 함수형언어들에서 가져온거네요