새 취미코딩 (PHP 정적 타입체커 😨)

새 취미코딩을 시작했다. 내용은 무려 PHP 타입체커(!)다.

도대체 왜?

왜 좋은 언어들 놔두고 PHP에 타입을 달려고 하느냐.

최근에 끈닷넷에서 PHP를 버리고 다른 좋은 언어를 써 보려는 노력(이라 쓰고 삽질이라 읽는다)을 좀 했었다. PHP만큼 가볍게 웹페이지를 만들 수 있는 언어는 못 찾았다. 페이스북 같은 큰 기업은 PHP에 타입을 단 새 언어를 만들고, 이를 돌리는 VM을 만들고, 세상 누구도 도와 주지 않아도 이를 유지보수 할 인력이란 게 있지만 끈닷넷엔 그런 게 없다.

그리고 그게 되겠느냐.

PHP 언어를 모두 커버하는 타입체커는 아마 안 될 거다. 하지만 끈닷넷에서 쓰는 PHP는 워낙 범위가 좁아서 충분히 가능하리라 본다. 게다가 PHP 7.4에서는 드디어 클래스 필드에 타입 힌트를 적을 수 있게 되었다. 타입 힌트에 열심히 기대면, 그리고 다형 타입 사용을 최대한 줄이면 가능하지 않을까 싶은 것이 내 생각이다. 교과서 수준의 타입 검사로 충분할 것으로 예상한다.
stitcher.io/blog/new-in-php-74#typed-properties-rfc

목표는 안전(sound)하고 완전(complete)한 멋진 타입 시스템을 디자인하고 구현하는 것이 아니다. 내가 쓸 수 있는 도구를 만드는 것이 목표다. 취미코딩을 다년간 해 본 결과, 내가 쓴 코드는 100% 아무도 쓰지 않았다. 나만 잘 쓸 수 있으면 그만인 것이다.

거기다 취미코딩을 하면서 즐겁게 시간을 보내고 세상을 탐구하고 패킷을 낭비하는 것이 중요하다.

디자인/구현

[추가 2020-05-24] 포기다.

디자인을 이제 막 시작해서 아직 문서 대부분이 비어있다. 수식을 적어야 해서 Sphinx+MathJax를 쓰기 시작했는데 아직은 매우 만족스럽다. 매크로 정의도 나름 잘 되도록, AUCTeX도 나름 잘 쓸 수 있도록 구성했다. pdf 출력에는 손이 좀 가기는 했지만 굳이 그럴 일은 없지 않을까 싶다.

디자인이 완성되면 그 후에 구현을 시작할 것인데 슬프게도 구현은 PHP로 하려 한다. 멀쩡한 파서를 쓰고 싶기 때문. 파싱된 걸 OCaml로 가져오는 것도 생각했지만 그렇게 하면 배보다 배꼽이 더 커질 것 같아 안 하기로 한다.
github.com/nikic/PHP-Parser

흥미진진하다.

2020-05-03 씀.