A programming language and optimizing compiler.
This is a project about:
- Designing a practical, general-purpose programming language
- Statically typed, but the compiler does as much for you as possible
- Simple syntax, few built-ins
- More like Go than JavaScript
- Optimizing compiler
- Input-language agnostic
- Intermediate Representation in SSA form
- Flexible target architecture (x86, amd64, vm, wasm, etc.)
- Pipelined rather than progressive
- scanning source code into the parser
- parser passes AST chunks to the IR builder
- IR builder optimizes the chunks and then passes them to the code generator
- All this happens in a streaming fashion
- But each step can be easily separated and run independendly, making it easy to inspect the state of the compiler at various steps of the process.
- Using no exernal libraries
- Portable (can run in a web browser)
- Simplify codebase
- Minimize risk of security concerns
- Maximize startup performance
Requirements: nodejs >=8.0
Building:
- Setup:
npm install - Build incrementally:
./build.js -w - Run:
./dist/co.g
Some useful things:
- Build debug version in one go:
./build.js - Build optimized production version:
./build.js -O - Run unit tests before main program:
./dist/co.g -test - Run unit tests and exit:
./dist/co.g -test-only - Print source diagnostics report and exit:
./dist/co.g -nobuild - Live coding setup:
- Terminal 1:
./build.js -w - Terminal 2:
autorun dist/co.g - You'll need
autorun
- Terminal 1: