Skip to content

imagineeeinc/nimelk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nimelk

A simple and Super Bare JavaScript runtime using the small elk runtime for microcontrollers, using Nim.

A quick why

I wanted to dip into some C programming and decided to connect a small C library to Nim. So I started by creating a c binding for the elk using nimterop fiddling around with the settings. Until something worked. Finally it worked and I slapped on a simple cli interface with docopt. This might not be the best js runtime as it misses a lot of features and thus writing js is a pain. So this project can be helpful to some people as it lays down the framework for embedding the elk runtime in Nim.

Usage

Make sure to have Nim and Git installed.

CLI

# Get repo
git clone https://github.com/imagineeeinc/nimelk.git

# Git submoulde elk
git submodule init
git submoudle update

# Install nimterop
nimble install nimterop -y

# Generate Nim bindings of elk
nim c -r elk_wrraper.nim

# Install deps
nimble install

# Test out
nimble run -- run tests/index.js

JS Syntax

You have no input method. You can output using the print function. e.g.:

let a = 1;
let b = 2;
let c = a + b;
print(c);
a+b >= c ? true : false;

this should output true if a+b is greater than c. (which always is going to be).

Here are some of the features (and unsupported features) from the elk readme:

  • Supported
    • Operations: all standard JS operations except:
      • !=, ==. Use strict comparison !==, ===
      • No computed member access a[b]
      • No exponentiation operation a ** b
    • Typeof: typeof('a') === 'string'
    • For loop: for (...;...;...) ...
    • Conditional: if (...) ... else ...
    • Ternary operator a ? b : c
    • Simple types: let a, b, c = 12.3, d = 'a', e = null, f = true, g = false;
    • Functions: let f = function(x, y) { return x + y; };
    • Objects: let obj = {f: function(x) { return x * 2}}; obj.f(3);
    • Every statement must end with a semicolon ;
    • Strings are binary data chunks, not Unicode strings: 'Київ'.length === 8
  • Not supported
    • No var, no const. Use let (strict mode only)
    • No do, switch, while. Use for
    • No => functions. Use let f = function(...) {...};
    • No arrays, closures, prototypes, this, new, delete
    • No standard library: no Date, Regexp, Function, String, Number

Resources

Made with love by imagineee

About

A super bare js runtime in Nim

Resources

License

Stars

Watchers

Forks