작고 재미있는 프로그래밍 언어들(Lil' Fun Langs)

다양한 소규모 프로그래밍 언어의 코드 크기(LOC)와 기능을 분석하며, 특히 ML 스타일 언어 구현에 필요한 기술적 비용을 상세히 비교합니다. 99줄의 C로 작성된 tinylisp부터 340바이트의 milliForth, 그리고 1,000~3,000줄 규모의 scrapscript까지 언어별 구현 특성을 수치로 제시합니다.

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
Share

이것도 읽어보세요

댓글

이 소식에 대한 의견을 자유롭게 남겨주세요.

댓글 (0)

불러오는 중...