Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jank-lang/jank

A Clojure dialect hosted on LLVM with native C++ interop
https://github.com/jank-lang/jank

clojure compiler cpp functional-programming jit language lisp llvm programming-language

Last synced: 29 days ago
JSON representation

A Clojure dialect hosted on LLVM with native C++ interop

Awesome Lists containing this project

README

        


jank banner







CI

# 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**.

## Latest binaries
There are pre-compiled binaries for Ubuntu 22.04, which are built to follow the
`main` branch. You can download a tarball with everything you need here: https://github.com/jank-lang/jank/releases/tag/latest

## 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 through inline C++.
(defn sleep [ms]
(let [ms (int ms)]
; A special ~{ } syntax can be used from inline C++ to interpolate
; back into jank code.
(native/raw "auto const duration(std::chrono::milliseconds(~{ ms }->data));
std::this_thread::sleep_for(duration);")))
```

## Docs
* [Building jank](./compiler+runtime/doc/build.md)

## 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.








Misha Karpenko



Bert Muthalaly

## 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)
|
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-: | :-: |