dorkhub

nerd

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

NerdLang
C++3.6k124 forksMITupdated 3 years ago
visit the demogit clone https://github.com/NerdLang/nerd.gitNerdLang/nerd

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 if you need more information.

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

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

more like this

lottery

🎉🌟✨🎈年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序,奖品🧧🎁,文字,图片,抽奖规则均可配置,😜抽奖人员信息Excel一键导入😍,抽奖结果Excel导出😎,给你的抽奖活动带来全新酷炫体验🚀🚀🚀

JavaScript4.6k

TachiSnap

TachiSnap — Pixel Snapper for animation pixel artists. Rust + WebAssembly client-side tool for cleaning up AI-generated…

HTML50

RaylibWasm

.Net 10 (.Net 8+) webassembly starter project using raylib-cs nuget 7.0.2 and raylib 5.5

C#50

AutomationShield

Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…

C51

search

search projects, people, and tags