neva
neva copied to clipboard
🌊 Flow-based programming language with static types and implicit parallelism. Compiles to native code and Go
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 clone
this repo andneva run
them!)
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.