Miranda를 계승한 순수 함수형 언어 Admiran, x86-64 어셈블리 코드로 컴파일!

by DD
4개월 전
조회수 12

Admiran은 Miranda를 기반으로 한 순수, 지연 평가(Lazy Evaluation) 함수형 언어로, Haskell의 특징을 일부 차용함

x86-64 어셈블리 코드로 컴파일되며, MacOS 및 Linux 환경에서 실행 가능함

셀프 호스팅 컴파일러(Self-hosting Compiler)를 통해 자체 컴파일이 가능하며, Hindley-Milner 타입 추론(Type Inference)을 지원함

Advent of Code 문제 해결을 위한 언어로 개발되었으며, 컴파일러 구현 방식 학습을 목표로 함

Admiran의 특징: 순수 함수형 언어

Admiran은 순수 함수형 언어(Pure Functional Language)로서, Miranda 언어를 기반으로 설계되었다. 특히, 지연 평가(Lazy Evaluation) 방식을 채택하여, 계산의 효율성을 높였다. 또한, Haskell의 특징을 차용하여, 모나딕 IO(Monadic IO), 사용자 정의 연산자, 패턴 매칭(Pattern Matching) 등 다양한 기능을 제공한다. 이러한 특징은 Admiran을 통해 함수형 프로그래밍(Functional Programming)의 개념을 깊이 있게 탐구할 수 있게 한다.

컴파일러 아키텍처 및 구현

Admiran 컴파일러는 셀프 호스팅(Self-hosting) 방식으로 구현되어, 자체 컴파일이 가능하다. 컴파일러는 토큰화(Tokenization)부터 x86-64 코드 생성까지 모든 단계를 포함하며, Hindley-Milner 타입 추론(Type Inference)을 지원한다. 또한, 모듈 간 인라이닝(Inter-module Inlining) 및 최적화(Optimization)를 통해 성능을 향상시킨다. 컴파일러의 소스 코드 규모는 약 6700 SLOC로, 컴파일러 구현 방식을 학습하기에 적합하다.

Miranda와의 차이점 및 Haskell과의 비교

Admiran은 Miranda의 확장된 부분 집합으로, num 타입, polymorphic show 연산자, %free 지시어 등 일부 기능을 제거했다. Haskell과의 주요 차이점은 타입 클래스(Typeclass) 부재로, 대신 타입 클래스 딕셔너리를 함수에 명시적으로 전달한다. 또한, 고차 타입(Higher-Kinded Types)을 지원하지 않아, 특정 인스턴스에 특화된 코드를 작성해야 한다. 이러한 차이점은 Admiran이 Haskell보다 단순한 구조를 가지면서도, 함수형 프로그래밍의 핵심 개념을 이해하는 데 도움을 준다.

성능 및 Advent of Code 활용

Admiran은 Miranda 컴파일러/조합기 인터프리터보다 20~50배 빠른 성능을 제공한다. 또한, Advent of Code 문제 해결을 위한 언어로 개발되어, 다양한 알고리즘을 구현하고 성능을 측정하는 데 활용된다. 개발자는 Admiran을 통해 함수형 프로그래밍(Functional Programming)의 실용적인 측면을 경험하고, 컴파일러 구현에 대한 이해를 높일 수 있다. 특히, Advent of Code를 통해 실질적인 문제 해결 능력을 향상시킬 수 있다.

Admiran: a pure, lazy functional programming language and self-hosting compiler

댓글 0

첫 번째 댓글을 남겨보세요!