Skip to content
/ neva Public
forked from nevalang/neva

🌊 Flow-based programming language with static types and implicit parallelism. Compiles to native code and Go

License

Notifications You must be signed in to change notification settings

Catya3/neva

 
 

Repository files navigation

Big Header

Flow-Based Programming Language

tests lint

⚠️ 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?

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)

See backlog for more details

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.

About

🌊 Flow-based programming language with static types and implicit parallelism. Compiles to native code and Go

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 97.2%
  • ANTLR 1.1%
  • Other 1.7%