Jolt는 JVM 없이 Chez Scheme(네이티브) 또는 Gambit(JS)에서 도는 자가 호스팅 Clojure 구현이다. 컴파일러 자신도 Clojure로 짜여 스스로를 컴파일하고, 대부분의 Clojure 코드가 수정 없이 그대로 돈다.
Jolt 홈페이지를 열면 브라우저 안에서 곧바로 REPL이 뜬다. (->> (range 10) (filter even?) (map #(* % %)) (reduce +))를 치면 120이 나오는데, 이 REPL 자체가 Gambit 백엔드로 JavaScript로 컴파일된 Jolt다.
Jolt는 JVM 대신 Scheme 위에서 도는 자가 호스팅 Clojure 구현이다. Chez Scheme에서는 네이티브로, Gambit을 거치면 JavaScript로 컴파일돼 브라우저에서도 돈다. 별도 빌드 스텝 없이 클론한 저장소에서 바로 실행할 수 있는 건, 부트스트랩 시드가 저장소에 이미 체크인돼 있기 때문이다. 컴파일러 자체도 Clojure로 짜여 있어 자기 자신을 컴파일한다.
런타임 쪽
future, promise, agent, pmap은 공유 힙 위 OS 스레드에서 돌아 JVM Clojure와 같은 동시성 시맨틱을 내고, core.async도 채널과 go 블록을 그대로 제공한다. 데이터 구조도 32-way 트라이 기반 불변 벡터, cons 리스트, HAMT 맵/셋으로 JVM Clojure의 값 시맨틱을 따르고, 트랜지언트는 실제로 변경 가능한 스크래치 컬렉션이다. 정수는 정확한 bignum과 유리수((/ 1 2) ⇒ 1/2)를 그대로 지원하고, 부동소수점 flonum과는 =가 타입을 구분해서, ==가 값만 비교해서 비교한다.
jolt build는 런타임과 표준 라이브러리, 애플리케이션 코드와 의존성 전부를 미리 컴파일해 독립 실행 파일 하나로 만든다. 이렇게 나온 바이너리를 돌리는 데는 Chez도 JVM도 필요 없다.
JVM Clojure와 갈라지는 지점은 크게 세 곳이다. 일반적인 Java 인터롭과 리플렉션, gen-class·proxy는 없고 java.* 의 일부만 시밍돼 있으며, 대신 C FFI를 쓸 수 있다. BigDecimal은 아예 지원하지 않는다. 정규식은 java.util.regex가 아니라 irregex로 컴파일되는데, 흔한 패턴은 그대로 동작하지만 일부 Java 전용 기능은 차이가 난다. 소스는 Eclipse Public License 1.0으로 공개돼 있다.