Update README.md

This commit is contained in:
Nathan Braswell
2018-04-17 11:25:53 -04:00
committed by GitHub
parent 804f98f9cf
commit 21e978767f

View File

@@ -8,30 +8,15 @@ The Kraken Programming Language
(vim integration (filetype, syntax highlighting, Syntastic) at https://github.com/Limvot/kraken.vim)
(emacs integration (filetype, syntax highlighting) at https://github.com/Limvot/kraken-mode)
(more info and examples at http://limvot.github.io/kraken/)
The Kraken Programming Language is functional but very much still in development.
It has both the normal features you might expect of a modern language, (functions, variables, an object system, dynamic memory), as well as some more advanced ones (mutually recursive definitions, lambdas/closures, algebraic data types, templates, marker traits, defer statements, etc).
Currently, it consists of a RNGLALR parser written in C++, an AST intermediate representation, and a C code generator.
When compiled, the kraken compiler will take in a text file to be parsed and optionally the grammer file to use and an output file name.
Kraken will then generate the RNLALR parsing tables from the grammer or load them from a binary file if Kraken has been run with this exact version of the grammer before. Then it will parse the input and export one .c file along with a .sh script containing the compiler command to compile the C files together into a binary.
The current work is going into self-hosting the compiler, which is progressing quickly. Currently, the self-hosted version can compile simple programs consisting of functions, variables, normal operators, if statements, while loops, and very simple C-passthroughs.
It is invoked in this way:
kraken inputKrakenFile
OR
kraken inputKrakenFile inputGrammerFile outputName
Kraken can either compile to C or its own bytecode which is then interpreted.
Dependencies
============
It is built using CMake, which is also its only dependency.
Kraken is self-hosted - in order to build it, a script is included that will compile the original C++ version (which depends on CMake) and then checks out each necessary version to compile up to the current one. This can take quite a while - when it hits 1.0 I am planning on removing the old C++ version and checking in a pre-compiled-to-c version to use for further bootstrapping.
Goals
=====
@@ -41,6 +26,7 @@ It has the following design goals:
* Clean
* Fast (both running and writing)
* Good for Systems (including Operating Systems) programming
* Very powerful libraries (say, a library that allows you import from automatically parsed C header files)
* Minimal "magic" code. (no runtime, other libraries automatically included)
It is inspired by C/C++, Scala, and Rust.
It is inspired by C, Kotlin, Rust, and Jai.