Jank Lang 알파 버전 공개
(github.com/jank-lang)- 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 자동화 빌드 구성 포함
커뮤니티 및 후원
- 프로젝트는 GitHub Sponsors를 통해 후원 가능
- 후원 기업 및 개인: Clojure Together, nubank, multiply.co, modulr-software 등
- 커뮤니티 채널: Slack (Clojurians), Twitter
관련 발표 및 소개
- Clojure Conj 2023 발표 영상
- The REPL Interview 및 Compiler Spotlight에서 언어 소개
- YouTube: Language Introduction 영상 제공
요약:
jank는 Clojure의 함수형 철학을 LLVM과 C++ 네이티브 환경에 이식한 언어로, Clojure의 생산성과 C++의 성능을 결합하려는 시도임. 현재 알파 단계이지만, Clojure 개발자와 시스템 프로그래머 모두에게 새로운 통합 개발 경험을 제시함.
Hacker News 의견들
-
jank alpha 관련 내용은 공식 북 사이트를 참고해줬으면 함
아직 완전히 발표할 준비는 안 됐지만, 사람들이 관심을 보여주는 것이 기쁨임
몇 가지 컴파일러 기능만 더 병합하면 책을 따라가며 jank를 직접 써볼 수 있을 정도로 준비가 되어 있음- jank에 흥미가 많아서 방금 링크한 책을 읽고 있음
문법 오류가 몇 군데 보이는데,book섹션에 PR을 보내도 되는지, 아니면 저자의 문체를 유지하기 위해 다른 방식으로 피드백을 주는 게 나은지 궁금함 - 참여한 모든 사람들에게 감사와 찬사를 보냄
- jank에 흥미가 많아서 방금 링크한 책을 읽고 있음
-
jank는 Clojure의 방언으로, Clojure 자체도 Lisp의 방언임
함수형 중심이지만 가변 상태와 부수효과도 지원함
모든 데이터 구조는 기본적으로 불변이며, Clojure처럼 안전한 변경 메커니즘을 제공해 동시성을 쉽게 다룸
또 C++과의 깊은 연동이 가능해 런타임에 새로운 C++ 타입, 함수, 템플릿을 정의할 수 있음
Clang과 LLVM을 이용한 JIT 컴파일로 C/C++ 라이브러리를 손쉽게 접근할 수 있음
자세한 내용은 공식 북 참고- 예전에 C++을 쓸 때 컴파일 과정이 너무 고통스러웠음
Clojure는 좋아하지만 네이티브 타깃이 있다는 점이 매력적임
jank에서 컴파일/리컴파일 속도가 얼마나 되는지 궁금함
- 예전에 C++을 쓸 때 컴파일 과정이 너무 고통스러웠음
-
jank 개발이 Clojure를 얼마나 가깝게 추적할지 궁금함
cljs처럼 가능한 한 동일하게 유지할 계획인지, 아니면 언젠가 분기할지도 궁금함
예전에 90% 정도 Clojure와 비슷한 언어를 만들었지만, 완전한 호환성을 보장하기 어려워 이름을 붙이지 않았음
jank는 drop-in replacement처럼 보이는데 멋져 보임- jank는 Clojure이며, 업스트림 Clojure 개발을 추적할 예정임
Clojure 팀 및 다른 방언 개발자들과 협력 중이며, 이를 위해 cross-dialect clojure-test-suite를 주도하고 있음
Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp, jank를 모두 지원하거나 작업 중임
다만 Carp에서 영감을 받은 선택적 모드도 추가될 예정이며, 기본 호환성은 유지될 것임
- jank는 Clojure이며, 업스트림 Clojure 개발을 추적할 예정임
-
순간 jank가 아니라 Jack Lang(프랑스 정치인) 얘기인 줄 착각했음
- 나도 똑같이 착각했음
-
함께 볼 책: https://book.jank-lang.org/
-
jank 블로그를 1년째 팔로우 중인데, alpha 릴리스 축하함
Emacs 사용자로서 CIDER 같은 개발 도구 지원 상태가 궁금함
또 Welcome 섹션의 링크 오타를 발견했음 — “foreward”가 아니라 “foreword”로 수정 필요함- nREPL 서버는 작동 중이지만 아직 jank 저장소에 병합되지 않음
try-jank에서 확인 가능함
Clang 버그로 인해 진행이 지연되고 있지만, 우선순위가 높은 작업임
링크 오타는 이미 수정했음
- nREPL 서버는 작동 중이지만 아직 jank 저장소에 병합되지 않음
-
jank가 Rust 코드베이스와 연동할 수 있는지 궁금함
- 일반적인 C++ 프로젝트처럼 가능함
C ABI나 C++/Rust 상호운용 메커니즘을 통해 연결할 수 있음 - 물론 가능함
- 일반적인 C++ 프로젝트처럼 가능함
-
정적 타입 시스템이 포함되어 있는지 궁금함
- Clojure의 방언이므로 기본적으로 동적 타입 언어임
하지만 개발자가 점진적 타입 시스템¹을 추가할 계획을 언급했음
일부는 완전 동적이고 GC 기반으로, 일부는 더 제어되고 최적화된 형태로 동작할 수 있게 하려는 비전임
¹ 관련 블로그 글 - 전체 언어 수준의 정적 타입은 없음
C++과의 interop은 정적으로 타입이 지정되지만, Clojure 영역으로 돌아오면 완전히 동적이고 다형적임
Carp처럼 선택적 정적 타입 모드를 탐구할 예정이지만, 올해는 아님 - Clojure를 구현하고 있으므로 정적 타입은 없을 것으로 강하게 추정함
- Clojure의 방언이므로 기본적으로 동적 타입 언어임
-
처음엔 “Jank Lang”이라는 사람이 투자 알파를 찾았다는 얘기인 줄 알았음