neva
neva copied to clipboard
Write programs like message passing graphs and get parallelism for free. Statically typed and compiled to machine code!
Flow-Based Programming Language
⚠️ Warning: This project is currently under heavy development and is not yet ready for production use.
Neva
A general-purpose flow-based programming language with static types and implicit parallelism. Compiles to machine code and Go.
Website: https://nevalang.org/
Features 🚀
- Flow-Based Programming
- Strong Static Typing
- Implicit Parallelism
- Compiles to Machine Code, Go and More
- Clean C-like Syntax
- Garbage Collection
- ...And more!
Please note that even though these features are technically implemented, developer-experience may be bad due to the current state of the project. No backward-compatibility guarantees at the time.
Quick Start
Installation
For Mac OS and Linux:
curl -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.sh | bash
If your device is connected to a chinese network:
curl -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.sh | bash
For Windows (please note there's an WIP issue with Windows Defender, try manual download from releases if installed won't work):
curl -o installer.bat -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.bat && installer.bat
Creating a project
neva new test
Running
neva run test/src
You should see the following output:
Hello, World!
What's inside?
If you open test/src/main.neva with your favorite IDE you'll see this
flow Main(start) (stop) {
nodes { Println }
:start -> ('Hello, World!' -> println -> :stop)
}
Here we define a flow Main with inport start and outport stop. It contains one node, println, an instance of Println. The network consist of one connection: upon receiving a message from start, "Hello, World!" is sent to println. After printing, the program terminates by signaling stop.
Execute
Now run (make sure you are in the test directory with neva.yml):
neva run test/src # or neva run test/src/main.neva
You should see the following output:
Hello, World!
What's Next?
- Learn more about the language
- See more examples (
git clonethis repo andneva runthem!)
Roadmap (🚧 WIP)
Nevalang is at an extremely early stage but with the help of community it can become a feature-rich, mature language.
- Bigger Community and Better Documentation
- Batteries included stdlib (including Testing Framework)
- More language features including Pattern-Matching
- Good DX (Language Server, Debugger, Linter, etc)
- Go Interop (import Go from Neva and Neva from Go)
- Visual Programming in VSCode (Neva becomes hybrid langauge)
Nevalang needs your help - it currently has just a few maintainers.
Community
Join community. Together we can change programming for the better:
Also please check our CoC.
Contributing
See CONTRIBUTING.md and ARCHITECTURE.md.
Neva is a relatively small and simple language. Don't be intimidated, feel free to dive in and hack around. Some directories have a README.md.
Note that, due to the early stage of development, the documentation can sometimes be outdated. Feel free to reach out to maintainers if you need any help.