Skip to content
This repository has been archived by the owner on Jun 13, 2021. It is now read-only.

calcit-lang/calcit-runner.nim

Repository files navigation

This project has been written in Rust, check calcit_runner.rs.

Rust as a stronger type system, which offers a more solid base for building a language.


[Migrated] Calcit Runner

An interpreter runtime for Calcit snapshot file.

Running Calcit Editor with compact=true caclcit-editor enables compact mode, which writes compact.cirru and .compact-inc.cirru instead of Clojure(Script). And this project provides a runner for compact.cirru, written on Nim for low overhead.

A compact.cirru file can be:

{} (:package |app)
  :configs $ {} (:init-fn |app.main/main!) (:reload-fn |app.main/reload!)
  :files $ {}
    |app.main $ {}
      :ns $ quote
        ns app.main $ :require
      :defs $ {}
        |main! $ quote
          defn main! () (+ 1 2)
        |reload! $ quote
          defn reload! ()
      :proc $ quote ()

APIs implemented in Calcit Runner is mostly learning from Clojure.

Usage

Install dependency:

brew install fswatch sdl2 cairo
nimble test --threads:on -y

Build binaries:

nimble build --threads:on

There are currently 2 commands cr and cr_once:

cr compact.cirru # watch by default

cr compact.cirru --once # run only once

cr compact.cirru --init-fn='app.main/main!' # specifying init-fn

cr -e="range 100" # eval from CLI

cr --emit-js # compile to js
cr --emit-js --mjs # compile to mjs
cr --emit-js --emit-path=out/ # compile to js and save in `out/`

cr --emit-ir # compile to intermediate representation

cr_once # bundled without wathcer and SDL2, for CI only

For linux users, download pre-built binaries from http://bin.calcit-lang.org/linux/ .

Development

Dependent modules, besides SDL2 and Cairo:

Alias in dev mode:

# rerun program on changes
nimble watch

# just run once
nimble once

# demo of eval from CLI
nimble e

# for emitting js
nimble genjs

# for emitting ir
nimble genir

Modules

:configs $ {}
  :modules $ [] |phlox/compact.cirru

Calcit Runner use ~/.config/calcit/modules/ as modules directory. Paths defined in :modules field are just loaded as files based on this directory, which is: ~/.config/calcit/modules/phlox.caclit.nim/compact.cirru.

To load modules in CI environment, create that folder and clone repos manually.

License

MIT