Ecosyste.ms: Awesome

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

https://github.com/NerdLang/nerd

🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries.
https://github.com/NerdLang/nerd

arduino compilation js nodejs raspberry wasm

Last synced: 2 months ago
JSON representation

🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries.

Lists

README

        


No VM. No Bytecode. No packaging. No Garbage Collector. Fully compiled to native binaries.

# NectarJS becomes Nerd

Compile JavaScript and NerdLang in native binaries.

# What is NerdLang

NerdLang is a substract of JS with some additions, focus on efficiency.

**Nerd** is a **JavaScript native compiler** aiming to make JavaScript universal, Nerd is able to compile native apps for Windows, Mac, Linux, iOS, Android, Raspberry, STM32 and more.

> **Nerd** is in active development, join us on [Discord](https://discord.gg/cpe2UuN) if you need more information.

- [Roadmap on Trello](https://trello.com/invite/b/6F4rvEj2/ATTI8842296bacc92724fa8b4114fe1dc80aA9FA431B/nerd)

## Main objectives
* Supporting EcmaScript 3 standard (then 5, 6 ...)
* Supporting NodeJS and NPM ecosystem
* Supporting a maximum of platforms (Windows, Mac, Linux, Android, Arduino, ...)
* Being secure
* Embeding debuging tools
* Compile everything that can be transpiled in JS: Ruby (Opal), Python (Transcript, Brython, JavaScrypthon), TypeScript ...

# Get started

## Installation

### Install GCC/CLang for your platform

- Windows
Install Mingw and Clang for Windows here: http://winlibs.com/ or Clang here: https://releases.llvm.org/

You can also install Linux for Windows and use a linux system on Windows

You need MinGW with POSIX threads

- Linux / FreeBSD
Install it with your distro (apt install gcc, yum install gcc, ...).
You can use GCC, CLANG, as well as any derivative of those compilers (arm-gcc ...)

- Apple iOS
Install xCode and you are ready.

You can check your installation with `npm start njs_test`

## Usage

Simplest way to use Nerd:
```
nerd file.js / file.ng
```

The output file name will be automatically chosen regarding the target. You can specify another output with `-o something.out`

You can select a preset
```
nerd file.js --preset [none|speed|size]
```

You can also run the compiled executable just after compilation using --run:
```
nerd file.js --run
```

You can enable the quiet mode with --quiet:
```
nerd file.js --quiet
```

Changing the stack size (useful on Windows):
```
nerd --stack 10000000 flood.js
```

For more informations about compilation output, use `--verbose`

For help, use `--help`

# Benchmarks

* _Need update_

Compiled with GCC v10.2.0 on Windows

| | NodeJS v12.8.1 | QuickJS 2020-07-05 | Nerd v0.6.104 |
|-----------|----------------|--------------------|-------------------|
| sort(1e6) [No preset] |
| - Time: | 0.33s | - | **0.33s** |
| - Memory: | 7.0Mb | - | **1.0Mb** |
|- Filesize:| 28.6Mb | - | **424Kb** |
| sort(1e6) [+Size preset] |
|- Filesize:| 28.6Mb | - | **260Kb** |
| sort(1e6) [+Speed preset] |
| - Time: | 0.33s | - | **0.20s** |
| matrix(256) [No preset] |
| - Time: | 0.33s | - | **0.21s** |
| - Memory: | 7.0Mb | - | **1.0Mb** |
|- Filesize:| 28.6Mb | - | **405Kb** |
| matrix(256) [+Size preset] |
|- Filesize:| 28.6Mb | - | **251Kb** |
| matrix(1e6) [+Speed preset] |
| - Time: | 0.33s | - | **0.11s** |

* _Some code can be evaluated compile-time_

# Supported platforms

Actively tested for

- Windows
* - win-x86-32
* - win-x86-64
- Linux
* - linux-x86-32
* - linux-x86-64
* - linux-arm32v7
- Arduino
* - arduino-nano
* - arduino-uno
* - arduino-mega1280
* - arduino-mega2560
- STM32 Nucleo
* - nucleo-l152re
* - nucleo-l432kc
* - nucleo-f446re
- Mobile
* - android
- Web
* - wasm
* - wast
* - asm-js
- macOS
- Sun OS

# Development

This project is in heavy development and a lot features are not implemented yet.

## ECMAScript Support

Nerd already supports more than 80% of ES3.

Prototype



* .call()
* .bind()

Array



* .length
* .push(value)

Class



* constructor
* methods
* static methods

Console



* .log(variadic)

JSON



* .parse(str)
* .stringify(obj)

Math **(DONE)**



* [All static methods and constants]

Object



* .keys

performance



* timeOrigin
* .now()

String

* .length
* .toString()
* .indexOf(needle)
* .lastIndexOf(needle)
* .search(needle)
* .slice(start, end)
* .substring(start, end)
* .substr(start, end)
* .replace(needle, str)

Syntax



* for
* while / do while
* if / else if / else
* try / catch / finally
* function / lambda
* class
* new
* typeof
* instanceof
* undefined
* null
* Infinite
* NaN / isNaN
* true / false