Skip to content

Zelex/jo_clojure

Repository files navigation

JO Clojure

Author Jon Olick. @JonOlick on twitter.

A Fast, (soon to be) Embeddable Clojure-like language implementation in C/C++.

The near-term goal is to re-make clojure in an embedable form.

The long-term goal is to add types/functions for machine learning, tensors, etc...

Usage:

  • For the REPL: jclj
  • For running a script: jclj file.clj

Currently:

  • Native implementation of almost entire core lib. See TODO.md
  • Parses code into native structures (AST), then executes. Essentially interpreted - though does some clever things here and there.
  • Lazy sequences
  • Startup time is ridiculously fast by comparison to clojure
  • Implementations of persistent lists, vectors, hash-map, hash-set, matrix
  • Software Transactional Memory (STM)
  • Atoms
  • IO

Differences:

  • IO is very different than clojure's IO cause JVM Clojure's IO functions are practically non-existant.
  • Software Transactional Memory (STM) now works seamlessly with Atoms - thus refs are only useful if you need the history feature?
  • Not entirely complete implementation (yet). There is a LOT to do.
  • See TODO.md for information on what is left to do.

Future:

  • Compile to C/C++ code so you can compile a native executable.
  • Save/Restore program state (continue later, saved in binary format).
  • Native types and operations for Matrices and Tensors.
  • Automatic Parallelization.
  • sorted-set
  • sorted-map
  • refs
  • agents
  • other etc....

Compile/install:

Unix: Run make to build and make install to install to /usr/local/bin (might require sudo)

Windows: Run c.bat for Microsoft C/C++ compiler. Run make for mingw gcc.