AI 요약
이 기사는 프로그래밍 언어의 복잡성을 최소화하려는 시도들과 그 구현체들을 심층적으로 분석합니다. 저자는 'scrapscript'라는 자신의 프로젝트를 소개하며, Iota(2개의 조합자)나 tinylisp(99줄의 C)처럼 극단적으로 작은 언어부터 MicroHs(최대 3만 줄)와 같은 비교적 큰 규모의 소형 언어까지 폭넓게 나열합니다. 특히 Haskell, OCaml, Scala와 같은 ML 계열 언어들이 갖는 정적 타입 시스템과 다형성 타입 추론(Hindley-Milner), 패턴 매칭 등의 핵심 기능을 구현하는 데 필요한 코드 양을 기능별로 세분화하여 설명합니다. 이를 통해 언어 설계자가 기능을 추가할 때 감수해야 할 기술적 부채와 구현 난이도에 대한 실질적인 지도를 제공하며, 작지만 강력한 기능을 갖춘 'milliHaskell'과 같은 언어에 대한 지향점을 보여줍니다.
핵심 인사이트
- 극소형 구현체 사례: Iota는 단 2개의 조합자로 구성되며, tinylisp는 99줄의 C 코드로, milliForth는 340바이트라는 경이로운 크기로 구현되었습니다.
- 기능별 구현 비용(LOC): 정수 산술(~50줄), 다형성 타입 추론(Algorithm W 기준 ~300줄), 최적화된 패턴 매칭(Maranget 기준 ~400~600줄) 등 주요 기능별 필요 코드 양이 구체적으로 제시되었습니다.
- 언어별 구현 규모: Hirrolot's CoC(~70줄)가 가장 작은 축에 속하며, Ante나 Tao(~5,000~10,000줄), MicroHs(~15,000~30,000줄) 순으로 규모가 커집니다.
주요 디테일
- scrapscript 프로젝트: 저자가 개발 중인 언어로, Python으로 작성되었으며 1,000~3,000줄의 코드 규모를 가집니다. C, WASM, Cosmo native를 타겟으로 삼고 있습니다.
- 타입 시스템의 정수: Algorithm W와 PLZoo poly는 약 300~500줄의 Haskell/OCaml 코드로 다형성 타입 추론(HM)을 구현할 수 있음을 보여줍니다.
- 다양한 호스트 언어: 소형 언어 구현에는 OCaml과 Haskell이 가장 많이 사용되지만, Pico-ml은 TypeScript를, Borgo는 Rust를 사용하는 등 다양한 호스트 언어 생태계가 존재합니다.
- 컴파일 타겟의 분화: 단순 인터프리터 방식 외에도 LLVM(MiniML), WebAssembly(Pico-ml), Go(Borgo), JavaScript(Newt) 등 현대적인 런타임을 타겟으로 하는 추세입니다.
- 복잡도 임계점: 대수적 데이터 타입(ADT)과 패턴 매칭 기능을 포함할 경우, 언어의 복잡도는 최소 200~400줄 이상 증가하며 구현 난이도가 급격히 상승합니다.
향후 전망
- 경량 언어의 실용화: WASM 및 클라우드 네이티브 환경에 최적화된 scrapscript와 같은 언어들이 특정 도메인(Edge Computing 등)에서 더 많이 활용될 것으로 보입니다.
- 교육 및 연구 도구: MinCaml이나 PLZoo와 같이 작고 명확한 코드 베이스를 가진 언어들은 언어 설계 및 컴파일러 교육의 표준 레퍼런스로서의 가치가 더욱 높아질 것입니다.
출처:hackernews
