-
Clojure 문법과 LLVM 기반 네이티브 성능을 결합한 프로그래밍 언어로, C++과의 매끄러운 상호운용성을 제공
- Clojure의 함수형·값 지향 특성을 유지하면서, JVM 대신 LLVM을 호스트 환경으로 사용
- 모든 데이터 구조가 불변(persistent & immutable) 이며, C++ 표준 라이브러리와 직접 연동 가능
- 현재 알파(Alpha) 단계로, 공식 문서와 예제는 jank book에서 제공
- Clojure 생태계와 C++ 네이티브 성능을 결합하려는 시도로, 함수형 언어와 시스템 언어 간의 경계를 좁히는 의미를 가짐
jank 개요
-
jank는 Clojure의 문법과 철학을 기반으로 한 LLVM 호스티드 언어
- JVM 대신 LLVM을 기반으로 하며, C++과의 상호운용성(interoperability) 을 지원
- Clojure의 함수형, 상호작용적, 값 중심적 특성을 유지
-
Clojure와 높은 호환성을 목표로 하며, Clojure가 Java와 상호작용하듯 jank는 C++과 통합
- 현재 알파 버전으로 개발 중이며, 세부 내용은 공식 문서에서 확인 가능
언어 특징
- 모든 내장 데이터 구조는 불변(persistent & immutable) 형태
- 예시: (def george {:name "George Clooney"})
-
부작용(side effect) 은 필요 시 명시적으로 수행 가능
- 예시: (defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
-
C++ 표준 라이브러리와 직접 연동 가능
- 예시: (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
-
함수형 데이터 처리를 위한 다양한 코어 함수 제공
- 예시: (apply + (distinct [12 8 12 16 8 6])) ; => 42
개발 및 문서
- 공식 문서: jank book
- 프로젝트는 LLVM 22 기반으로 최신 C++ 표준과 호환
-
AOT 컴파일, GC 프로파일링, CMake 빌드 옵션 등을 지원
-
Nix 환경 및 CI 자동화 빌드 구성 포함
커뮤니티 및 후원
관련 발표 및 소개
-
Clojure Conj 2023 발표 영상
-
The REPL Interview 및 Compiler Spotlight에서 언어 소개
-
YouTube: Language Introduction 영상 제공
요약:
jank는 Clojure의 함수형 철학을 LLVM과 C++ 네이티브 환경에 이식한 언어로, Clojure의 생산성과 C++의 성능을 결합하려는 시도임. 현재 알파 단계이지만, Clojure 개발자와 시스템 프로그래머 모두에게 새로운 통합 개발 경험을 제시함.