Official repository of the JAPL language
Go to file
Mattia c70d923ef8
Update factorial.jpl
2020-10-22 18:04:27 +02:00
examples Update factorial.jpl 2020-10-22 18:04:27 +02:00
meta Consirerable refactoring needed 2020-10-22 16:05:39 +02:00
tools Made the project nicer. Rewritten README, added copyright notices and fixed typos 2020-10-21 22:34:04 +02:00
types Consirerable refactoring needed 2020-10-22 16:05:39 +02:00
util fix copyright info 2020-10-21 22:49:08 +02:00
.gitignore Cleaned up the repository and moved the python POC to a separate repo 2020-10-21 18:29:08 +02:00
LICENSE Initial commit 2020-07-29 16:09:40 +02:00
README.md Changed the checkmarks to prevent rendering issues 2020-10-22 00:47:48 +02:00
common.nim Started to refactor the object structure 2020-10-22 12:21:58 +02:00
compiler.nim fix copyright info 2020-10-21 22:49:08 +02:00
lexer.nim fix copyright info 2020-10-21 22:49:08 +02:00
main.nim fix copyright info 2020-10-21 22:49:08 +02:00
memory.nim fix copyright info 2020-10-21 22:49:08 +02:00
test.nim Cleaned up the repository and moved the python POC to a separate repo 2020-10-21 18:29:08 +02:00
vm.nim Started to refactor the object structure 2020-10-22 12:21:58 +02:00

README.md

JAPL - Just Another Programming Language

JAPL is an interpreted, dynamically-typed, garbage-collected, and minimalistic programming language with C- and Java-like syntax.

J.. what?

You may wonder what's the meaning of JAPL: well, it turns out to be an acronym for Just Another Programming Language, but beware! Despite the name, the pronunciation is the same as "JPL".

Disclaimer

This project is currently a WIP (Work in Progress) and is not optimized nor complete. The design of the language may change at any moment and all the source inside this repo is alpha code quality, for now.

For other useful information, check the LICENSE file in this repo.

JAPL is licensed under the Apache 2.0 license.

Project roadmap

In no particular order, here's a list that is constantly updated and that helps us to keep track of what's done in JAPL:

  • Parsing/Lexing ✔️
  • Type system (Rework Needed)
  • Control flow (if/else) ✔️
  • Loops (for/while) ✔️
  • Basic comparisons operators (>, <, >=, <=, !=, ==) ✔️
  • Logical operators (!, or, and) ✔️
  • Multi-line comments /* like this */ (can be nested) ✔️
  • Differentiation between integers and floating point numbers ✔️
  • inf and nan types
  • Basic arithmetic (+, -, /, *) ✔️
  • Modulo division (%) and exponentiation (**) ✔️
  • Bitwise operators (AND, OR, XOR, NOT) ✔️
  • Global and local variables (WIP)
  • Explicit scopes using brackets (WIP)
  • Garbage collector
  • String slicing, with start:end syntax as well ✔️
  • Operations on strings (addition, multiplication) ✔️
  • Functions and Closures (WIP)
  • Functions default and keyword arguments (WIP)
  • An OOP system (prototype- or class-based) (Coming soon)
  • A proper import system (Coming soon)
  • Native asynchronous (await/async fun) support (Coming soon)
  • Bytecode optimizations such as constant folding and stack caching (Coming Soon)
  • Arbitrary-precision arithmetic (Coming soon)
  • Generators (Coming soon)
  • A standard library with collections, I/O utilities, scientific modules, etc (Coming soon)
  • Multithreading and multiprocessing support with a global VM Lock like CPython (Coming soon)
  • Exceptions (Coming soon)
  • Optional JIT Compilation (Coming soon)

Classifiers

  • WIP: Work In Progress, being implemented right now
  • Coming Soon: Not yet implemented/designed but scheduled
  • Rework Needed: The feature works, but can (and must) be optimized/reimplemented properly
  • ✔️: The feature works as intended

Contributing

If you want to contribute, feel free to open a PR!

Right now there are some major issues with the virtual machine which need to be addressed before the development can proceed, and some help is desperately needed greatly appreciated!

To get started, you might want to have a look at the currently open issues and start from there

Community

Our first goal is to create a welcoming and helpful community, so if you are so inclined, you might want to join our Discord server! We can't wait to welcome you into our community :D

A special thanks

JAPL is born thanks to the amazing work of Bob Nystrom that wrote a book available completely for free at this link, where he describes the implementation of a simple language called Lox.