Zeta Logo

# Zeta Language A low level programming language for high performance applications, featuring many modern syntactical and semantic conveniences with a clear and consistent design ### Contents - [Planned Features](#planned-features) - [Code Basis](#code-basis) - [Project Status](#project-status) - [Usage](#usage) - [Requirements](#requirements) - [Install](#install) - [Utilize](#utilize) - [VS Code Integration](#vs-code-integration) - [Syntax Highlighting Extension](#syntax-highlighting-extension) - [Editor Tasks](#editor-tasks) - [Debug Launch Config](#debug-launch-config) - [Links](#links) ## Planned Features + Low level (raw memory access / pointer arithmetic) + Lightweight, opt-in standard library + Simple, consistent, context-free, zero lookahead grammar + Expression based control flow + Pattern matching & destructuring + Modular, header-free source files + Simple C interop/FFI + Tuple and sum types + Multiple enumeration types + Methods and associate values for all types + Operator overloads + Type traits + Generics + Procedural meta programming + Compile time function execution ## Code Basis (Internal, compiler dependencies) + Rust standard library + Colored ([MIT](https://github.com/mackwic/colored/blob/master/LICENSE)) > For ANSI-colorized console output > https://github.com/mackwic/colored + Num ([MIT](https://github.com/rust-num/num/blob/master/LICENSE-MIT)) > For easy int <-> enum conversion and other conveniences > https://github.com/rust-num + CC ([MIT](https://github.com/alexcrichton/cc-rs/blob/master/LICENSE-MIT)) > Used only in the Windows version of Zeta > For locating other compiler toolchain elements (On Windows, one must use COM to probe the registry for the locations of link.exe and standard libraries) > https://github.com/alexcrichton/cc-rs + TODO // LLVM ## Project Status This project is in its very early days, but a list of features that have been completed so far are as follows: + Most of version 1 grammar defined [grammar.md](/grammar.md) + Extensive source error reporting system [tracking.rs](/src/lib/tracking.rs) + Lexical analyzer [lexer/mod.rs](/src/lib/lexer/mod.rs) + Abstract Syntax Tree [parser/ast.rs](/src/lib/parser/ast.rs) + Parser [parser/mod.rs](src/lib/parser/mod.rs): - Type expressions [parser/texpr.rs](/src/lib/parser/texpr.rs) - Pratt-style arithmetic/etc expressions [parser/expr.rs](/src/lib/parser/expr.rs) - Statements [parser/stmt.rs](/src/lib/parser/stmt.rs) ## Usage ### Requirements Because Zeta uses experimental feature flags (specifically `try_trait` and `bind_by_move_pattern_guards` currently), you will need to install nightly Rust. You can install the specific recommended/tested nightly version with `rustup toolchain install nightly-2019-07-31`, and set it to the default to be used by cargo with `rustup default nightly-2019-07-31` Or, you can try the latest nightly Rust with `rustup toolchain install nightly`, and set it to the default to be used by cargo with `rustup default nightly` You will also need to install RLS for the specific nightly version you're using. If you're using VS Code, simply restart your editor after setting the default and it should prompt you to install RLS. ### Install Clone the repo by running ``` git clone https://github.com/zeta-lang/zeta ``` Build with the typical `cargo` commands ### Utilize Currently the driver application is capable of accepting source files and a few config flags via the command line. The full pipeline is not yet implemented, so no binary will be produced, but the various stages implemented can produce debug outputs. Usage: ``` zeta [-flag]* [-option=value]* path/to/source.z [path/to/source.z]* ``` Flags: * `help` - Print a help message * `show_path` - Print the path of each source file as it is loaded * `show_src` - Print the content of each source file as it is loaded * `show_lex` - Print a debug representation of the token stream output by the lexical analyzer for each source file * `show_ast` - Print a debug representation of the abstract syntax tree output by the parser for each source file * `show_args` - Print a debug representation of the internal arguments structure * `no_excerpts` - Disable printing the section of source code an error came from when outputting error messages * `uncolored` - Disable ANSI color codes for compiler messages Options: * `max_errors` = `usize` - The maximum number of errors to allow before terminating the processing of a source file [Default: `20`] * `excerpt_len` = `usize` - The maximum number of lines to show in a source code excerpt [Default: `5`] ### VS Code Integration Visual Studio Code (Not to be confused with Visual Studio, they are totally separate products) is the recommended editor for developing Zeta. It is a fast and highly customizable text editor with some IDE-like features without the bulk, strict pipeline, or platform limitations of systems like Visual Studio. It is a free download and available for both platforms supported by Zeta #### Syntax Highlighting Extension There is an extension to enable syntax highlighting for Zeta, available from source here: https://github.com/zeta-lang/zeta-syntax #### Editor Tasks VS Code editor tasks are preconfigured for most build script actions in `.vscode/tasks.json` To run any task press `Ctrl` + `Shift` + `B` and select the task you want from the drop down menu #### Debug Launch Config Debug launch configs for stepping through the driver are included for `vsdbg`, `gdb` and `lldb` debuggers, in `.vscode/launch.json` #### Links * Editor > https://code.visualstudio.com/ * Official Rust RLS Extension (Source code completion, goto def, etc) > https://marketplace.visualstudio.com/items?itemName=rust-lang.rust * LLVM IR Syntax Highlighting (Reading compiler output) > https://marketplace.visualstudio.com/items?itemName=RReverser.llvm * BNF Syntax Highlighting (Reading [grammar.bnf](./grammar.bnf)) > https://marketplace.visualstudio.com/items?itemName=Vallentin.vscode-bnf * LLDB Integration (If you don't want to use the standard debugger for your platform (`vsdbg`/`gdb`)) > https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb [^](#zeta-language)