Just a simple programming language / experiment to build a simpler and less quirky JavaScript.
SimpleScript is a Strongly & Statically typed, Application programming language inspired by JavaScript/TypeScript, SML and Go, to be a simple and clean language that can target multiple execution methods from AOT compilation for binary executables to popular VM platforms (like JVM / BEAM / WASM) to interpretation and JIT compilation techniques.
- Read the language's specification and design goals in here
- See the Language Design Guidelines here
- See the syntatic grammar definition in BNF
- Simple
- Simple to Understand --> Intuitive code with no assumptions or quirkiness (WYSIWYG)
- Simple to Write --> Intuitive semantics without requiring any hackery (WYSIWYG)
- Simple to read and understand by using explicit constructs to avoid surprises caused by implicit language constructs
- Simple to write with easy and intuitive constructs and syntax
- Strongly & Statically typed language with type inference and optional type annotations
- High level language so that you don't have to deal with low level constructs of underlying hardware and execution models
- Not too abstract, e.g. can support abstract ideas like meta programming, but not too extreme as it may reduce readability and in extension, maintainability
- No stupid module issues like python
- Reference implementation of the language
- Intepreter in Rust
- Byte Code stack based Virtual Machine in Rust
- A compiler frontend for LLVM
- Perhaps a Graal/Wasm/JVM version to target a popular bytecode virtual machine
- Transpilation to JavaScript to run in browsers
- Others
- Language server
- VS code and vim extensions
Research.. Research.. and more Research..
Currently:
- Doing lots of research on programming languages
- Learning more about PLT (Programming Language Theory)
- Studying other languages
- Working on the type system with type inference
- Working on the language spec whilst learning and building upon the research
- Module system design
- Researching and experimenting with how to embed Asynchronous programming / Concurrency / Parallel computing into the language semantics itself.
- Working on different implementations
- An interpreter in Rust for a modified lox language, inspired by this book and rlox
- The interpreter is not (at least, not yet) for SS, it is for a modified version of of the lox language, which I am building to learn more about building interpreters.
- Currently works with basic static type checking using type inference
- A bytecode virtual machine written in rust
- Just like the interpreter, this is not the final version of SS, mainly a modified version of the lox language too, used to experiment with VM design
- A Simply Typed Lambda Calculus to experiment with lambda calculus and type inference.
- An interpreter in Rust for a modified lox language, inspired by this book and rlox
This mono repo contains the following sub repos and their commit prefixes:
- ri
- Interpreter written in Rust
- Commits prefixed with
ri:
or[rust-i]
- rvm
- Bytecode virtual machine written in Rust
- Commits prefixed with
rvm:
or[rvm]
- vsce
- Visual Studio Code Extension
- Will include both the extension and the language server in the future
- Commits prefixed with
vsce:
- Simply Typed Lambda Calculus
- Simply Typed Lambda Calculus implemented in JavaScript, with a focus on type inference
- Commits prefixed with
stlc:
or[stlc]
I had lots of help referencing other similar projects, credits are listed in the README of individual subrepos.
Hit me up if you wanna!