1P by GN⁺ 2일전 | ★ favorite | 댓글 1개
  • Clojure 문법과 LLVM 기반 네이티브 성능을 결합한 프로그래밍 언어로, C++과의 매끄러운 상호운용성을 제공
  • Clojure의 함수형·값 지향 특성을 유지하면서, JVM 대신 LLVM을 호스트 환경으로 사용
  • 모든 데이터 구조가 불변(persistent & immutable) 이며, C++ 표준 라이브러리와 직접 연동 가능
  • 현재 알파(Alpha) 단계로, 공식 문서와 예제는 jank book에서 제공
  • Clojure 생태계와 C++ 네이티브 성능을 결합하려는 시도로, 함수형 언어와 시스템 언어 간의 경계를 좁히는 의미를 가짐

jank 개요

  • jankClojure의 문법과 철학을 기반으로 한 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 InterviewCompiler Spotlight에서 언어 소개
  • YouTube: Language Introduction 영상 제공

요약:
jank는 Clojure의 함수형 철학을 LLVM과 C++ 네이티브 환경에 이식한 언어로, Clojure의 생산성과 C++의 성능을 결합하려는 시도임. 현재 알파 단계이지만, Clojure 개발자와 시스템 프로그래머 모두에게 새로운 통합 개발 경험을 제시함.

Hacker News 의견들
  • jank alpha 관련 내용은 공식 북 사이트를 참고해줬으면 함
    아직 완전히 발표할 준비는 안 됐지만, 사람들이 관심을 보여주는 것이 기쁨임
    몇 가지 컴파일러 기능만 더 병합하면 책을 따라가며 jank를 직접 써볼 수 있을 정도로 준비가 되어 있음

    • jank에 흥미가 많아서 방금 링크한 책을 읽고 있음
      문법 오류가 몇 군데 보이는데, book 섹션에 PR을 보내도 되는지, 아니면 저자의 문체를 유지하기 위해 다른 방식으로 피드백을 주는 게 나은지 궁금함
    • 참여한 모든 사람들에게 감사와 찬사를 보냄
  • jank는 Clojure의 방언으로, Clojure 자체도 Lisp의 방언임
    함수형 중심이지만 가변 상태와 부수효과도 지원함
    모든 데이터 구조는 기본적으로 불변이며, Clojure처럼 안전한 변경 메커니즘을 제공해 동시성을 쉽게 다룸
    또 C++과의 깊은 연동이 가능해 런타임에 새로운 C++ 타입, 함수, 템플릿을 정의할 수 있음
    Clang과 LLVM을 이용한 JIT 컴파일로 C/C++ 라이브러리를 손쉽게 접근할 수 있음
    자세한 내용은 공식 북 참고

    • 예전에 C++을 쓸 때 컴파일 과정이 너무 고통스러웠음
      Clojure는 좋아하지만 네이티브 타깃이 있다는 점이 매력적임
      jank에서 컴파일/리컴파일 속도가 얼마나 되는지 궁금함
  • 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가 아니라 Jack Lang(프랑스 정치인) 얘기인 줄 착각했음

    • 나도 똑같이 착각했음
  • 함께 볼 책: https://book.jank-lang.org/

  • jank 블로그를 1년째 팔로우 중인데, alpha 릴리스 축하
    Emacs 사용자로서 CIDER 같은 개발 도구 지원 상태가 궁금함
    또 Welcome 섹션의 링크 오타를 발견했음 — “foreward”가 아니라 “foreword”로 수정 필요함

    • nREPL 서버는 작동 중이지만 아직 jank 저장소에 병합되지 않음
      try-jank에서 확인 가능함
      Clang 버그로 인해 진행이 지연되고 있지만, 우선순위가 높은 작업
      링크 오타는 이미 수정했음
  • jank가 Rust 코드베이스와 연동할 수 있는지 궁금함

    • 일반적인 C++ 프로젝트처럼 가능함
      C ABI나 C++/Rust 상호운용 메커니즘을 통해 연결할 수 있음
    • 물론 가능함
  • 정적 타입 시스템이 포함되어 있는지 궁금함

    • Clojure의 방언이므로 기본적으로 동적 타입 언어
      하지만 개발자가 점진적 타입 시스템¹을 추가할 계획을 언급했음
      일부는 완전 동적이고 GC 기반으로, 일부는 더 제어되고 최적화된 형태로 동작할 수 있게 하려는 비전임
      ¹ 관련 블로그 글
    • 전체 언어 수준의 정적 타입은 없음
      C++과의 interop은 정적으로 타입이 지정되지만, Clojure 영역으로 돌아오면 완전히 동적이고 다형적임
      Carp처럼 선택적 정적 타입 모드를 탐구할 예정이지만, 올해는 아님
    • Clojure를 구현하고 있으므로 정적 타입은 없을 것으로 강하게 추정함
  • 처음엔 “Jank Lang”이라는 사람이 투자 알파를 찾았다는 얘기인 줄 알았음