https://github.com/jank-lang/jank
The native Clojure dialect hosted on LLVM with seamless C++ interop.
https://github.com/jank-lang/jank
clojure compiler cpp functional-programming jit language lisp llvm native programming-language
Last synced: 4 days ago
JSON representation
The native Clojure dialect hosted on LLVM with seamless C++ interop.
- Host: GitHub
- URL: https://github.com/jank-lang/jank
- Owner: jank-lang
- License: mpl-2.0
- Created: 2014-07-02T14:48:41.000Z (almost 11 years ago)
- Default Branch: main
- Last Pushed: 2025-04-09T05:01:11.000Z (7 days ago)
- Last Synced: 2025-04-10T07:30:46.356Z (6 days ago)
- Topics: clojure, compiler, cpp, functional-programming, jit, language, lisp, llvm, native, programming-language
- Language: C++
- Homepage: https://jank-lang.org
- Size: 6.5 MB
- Stars: 2,481
- Watchers: 43
- Forks: 85
- Open Issues: 72
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
- awesome-programming-languages - Jank - Jank is a Clojure dialect which aims to offer the best of both worlds: dynamic and static. For both of these worlds, jank uses a single runtime, so the transition from one to the other is not only seamless, it can be gradual. (Uncategorized / Uncategorized)
- awesome-clojure-likes - Source code
README
# What is jank?
Most simply, jank is a [Clojure](https://clojure.org/) dialect on LLVM with C++ interop.
Less simply, jank is a general-purpose programming language which embraces the interactive,
functional, value-oriented nature of Clojure and the desire for the native
runtime and performance of C++. jank aims to be strongly compatible with
Clojure. While Clojure's default host is the JVM and its interop is with Java,
jank's host is LLVM and its interop is with C++.For the current progress of jank and its usability, see the tables here: https://jank-lang.org/progress/
The current tl;dr for jank's usability is: **still getting there, but not ready for
use yet. Check back in a few months!**## Docs
* [Installing jank](./compiler+runtime/doc/install.md)
* [Building jank](./compiler+runtime/doc/build.md)
* [Using jank with Leiningen](./lein-jank/README.md)
* [Using jank with Clojure CLI](./clojure-cli/README.md)## Appetizer
```clojure
; Comments begin with a ;
(println "meow") ; => nil; All built-in data structures are persistent and immutable.
(def george {:name "George Clooney"}) ; => #'user/george; Though all data is immutable by default, side effects are adhoc.
(defn say-hi [who]
(println (str "Hi " (:name who) "!"))
(assoc who :greeted? true)); Doesn't change george.
(say-hi george) ; => {:name "George Clooney"
; :greeted? true}; Many core functions for working with immutable data.
(apply + (distinct [12 8 12 16 8 6])) ; => 42; Interop with C++ can happen *seamlessly*.
(defn sleep [ms]
(let [duration (c++/std.chrono.milliseconds ms)]
(c++/std.this_thread.sleep_for duration)))
```## Sponsors
If you'd like your name, company, or logo here, you can
[sponsor this project](https://github.com/sponsors/jeaye) for at least $25/m.
## In the news
| [
Clojure Conj 2023](https://www.youtube.com/watch?v=Yw4IAY4Nx_o)
| [
The REPL Interview](https://www.therepl.net/episodes/44/)
| [
Language Introduction](https://youtu.be/ncYlHfK25i0)
| [
Compiler Spotlight](https://compilerspotlight.substack.com/p/language-showcase-jank)
|
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-: | :-: |