3,000줄 C 코드로 구현한 LLVM 프론트엔드, AST와 malloc 없이!

by DD
2주 전
조회수 8

C-like 시스템 프로그래밍 언어인 Nibble은 LLVM IR 생성을 위해 3,000줄의 C 코드로 작성되었으며, 외부 의존성 및 메모리 할당을 사용하지 않음

그래픽 예제를 포함하여, SDL2, Clang을 사용하여 컴파일 및 실행 가능하며, 멀티스레드 렌더링, 레드-블랙 트리 구현, 게임 프로그래밍 데모를 제공

단일 패스(Single Pass) 컴파일러 설계로 코드 가독성을 높였지만, Clang 백엔드 최적화 시 스택 오버플로우(Stack Overflow) 발생 가능성 존재

커뮤니티에서는 코드의 간결함과 그래픽 예제에 대한 긍정적 평가와 함께, IR의 확장성에 대한 기대감을 표명

AST 미사용 및 메모리 할당 회피 설계

Nibble은 AST(Abstract Syntax Tree)를 사용하지 않고, 메모리 할당(malloc)을 지양하는 설계를 통해 코드의 간결성(Code Simplicity)을 확보했다. 이러한 접근 방식은 컴파일러의 구현 복잡도(Implementation Complexity)를 줄이는 데 기여하지만, Clang 백엔드 최적화 과정에서 스택 오버플로우(Stack Overflow) 문제를 야기할 수 있다. 특히, 단일 패스(Single Pass) 컴파일러 구조는 스택 메모리 사용량(Stack Memory Usage)을 증가시키는 요인으로 작용한다.

그래픽 데모를 통한 기능 시연

Nibble은 SDL2를 활용한 그래픽 데모를 통해 언어의 기능을 시연한다. 멀티스레드 렌더링(Multithreaded Rendering), 레드-블랙 트리 구현, 게임 프로그래밍 데모 등을 통해 언어의 활용성(Language Usability)을 보여준다. 이러한 예제들은 Nibble의 실용적인 측면(Practical Aspect)을 강조하며, 개발자들이 언어의 기능을 이해하고 활용하는 데 도움을 준다. 하지만, 렌더링 시 최적화(Optimization)에 대한 추가적인 고려가 필요하다는 의견도 존재한다.

단일 패스 컴파일러의 장단점

Nibble은 단일 패스(Single Pass) 컴파일러 설계를 채택하여 코드의 가독성을 높였다. 단일 패스 컴파일러(Single Pass Compiler)는 소스 코드를 한 번만 읽어 들이므로, 컴파일 속도가 빠르다는 장점이 있다. 하지만, 최적화(Optimization)에 제약이 있으며, Clang 백엔드 최적화 과정에서 스택 오버플로우(Stack Overflow)와 같은 문제를 발생시킬 수 있다. 성능(Performance)유지보수성(Maintainability) 사이의 트레이드 오프(Trade-off)를 고려해야 한다.

LLVM IR 생성 및 확장성

Nibble은 LLVM IR(Intermediate Representation) 생성을 목표로 하며, LLVM IR 생성(LLVM IR Generation)에 대한 접근 방식을 제시한다. 커뮤니티에서는 Nibble의 IR이 얼마나 확장될 수 있는지에 대한 관심이 높다. IR의 확장성(Extensibility)은 새로운 언어 기능 추가 및 최적화에 중요한 요소이며, Nibble의 미래 발전 가능성(Future Development Potential)을 결정하는 핵심 요소가 될 것이다.

Show HN: Nibble