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: 3 months ago
JSON representation
🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries.
- Host: GitHub
- URL: https://github.com/NerdLang/nerd
- Owner: NerdLang
- License: mit
- Created: 2017-01-14T14:37:09.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-25T06:57:26.000Z (almost 2 years ago)
- Last Synced: 2024-10-01T09:33:47.460Z (3 months ago)
- Topics: arduino, compilation, js, nodejs, raspberry, wasm
- Language: C++
- Homepage: https://nectarjs.com
- Size: 164 MB
- Stars: 3,576
- Watchers: 82
- Forks: 126
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - NerdLang/nerd - 🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries. (C++)
- awesome-starred - NerdLang/nerd - 🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries. (C++)
- awesome-starred - NerdLang/nerd - 🔱 Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries. (C++)
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 methodsConsole
* .log(variadic)JSON
* .parse(str)
* .stringify(obj)Math **(DONE)**
* [All static methods and constants]Object
* .keysperformance
* 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