타입 검사를 없애기보다 계층화해 필요한 곳에서만 쓰자는 제안. 작은 블랙박스와 이벤트 기반 데이터플로 아키텍처로 복잡도를 줄이고, 암시적/명시적 타입을 선택적으로 적용하는 방법과 실용적인 전환 수단을 다룬다.
문제는 타입 검사를 _없애는 것_이 아니라, 타입 검사를 비켜놓고 필요할 때만 쓰는 것이다.
계층화된 타입 검사.
"알 필요가 있는 것만".
전송 계층은 바이트를 옮긴다. 그 이상에 대해 타입 검사를 적용하면 안 된다. 바이트 패킷 내부에 무엇이 있는지 알 필요가 없어야 한다.
각 계층은 자신의 일을 하는 데 필요한 만큼만 타입을 검사하고, 그 이상의 세부를 추론하려 들지 말아야 한다.
이건 지금 우리의 프로그래밍 언어들이 하는 일과 대부분 반대다. 언어들은 맨 아래까지 전부 타입을 검사한다. 그리고 타입 검사를 별도의 도구로 대하지 않고 언어 곳곳에 뿌려대서, 디테일이 너무 많아져 오히려 이해를 어렵게 만든다.
우리는, 이를테면, 관심 있는 사람을 위해 옆에 프로로그(Prolog) 규칙을 써서 엔티티가 무엇인지 설명해 두고, 실제 타입 검사는 프로로그 엔진이 하게 둘 수 있다(본질적으로 타입 체커가 하는 일이기도 하다).
나는 소프트웨어 LEGO®를 원한다.
소프트웨어 LEGO®를 가질 수 없는 이유는 우리의 API가 디테일로 너무 어지럽기 때문이다.
내 경험으로, 프로그램이 5줄밖에 안 될 때는 타입 검사가 전혀 필요 없었다. 블랙박스(소프트웨어 LEGO® 블록)를 만들 수 있을 때 그 경험을 다시 얻게 된다. 작은 블랙박스 안에서 벌어지는 일은 너무 적어서 전부 파악할 수 있고, 그럴 땐 그 어떤 화려한 도구도 필요 없다.
요령은 그 작은 감각을 프로그램 전체에 끝까지 유지하는 것이다.
어떻게?
암시적 타입으로
이것은 작동하는 컴파일러의 최상위 계층이다.
명시적 타입으로
전환하기
이미 가진 것으로 이걸 할 수 있을까?
그렇다.
클로저, 큐 클래스, 파트(블랙박스)의 가비지 컬렉션.
다이어그램을 위한 XML 파싱 또는 PEG 파싱.
더 보기
이메일: ptcomputingsimplicity@gmail.com
Substack: paultarvydas.substack.com
비디오: https://www.youtube.com/@programmingsimplicity2980
디스코드: https://discord.gg/65YZUh6Jpq
Leanpub: [WIP] https://leanpub.com/u/paul-tarvydas
Twitter: @paul_tarvydas
Bluesky: @paultarvydas.bsky.social
Mastodon: @paultarvydas
(예전) 블로그: guitarvydas.github.io
참고 자료: https://guitarvydas.github.io/2024/01/06/References.html