neva

module
v0.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2024 License: MIT

README

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

component Main(start) (stop) {
	nodes { Println }
	net {
		:start -> ('Hello, World!' -> println -> :stop)
	}
}

Here we define a component Main with inport start and outport stop. It contains one node, println, an instance of Println. The network outlines dataflow: 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.

  • Building a Community
  • Core Standard Library
  • Language Server And Debugger
  • Testing Framework
  • No Runtime Exceptions (If it runs then it works)
  • 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.

Directories

Path Synopsis
cmd
lsp
cli
compiler/analyzer
Package analyzer implements source code static semantic analysis.
Package analyzer implements source code static semantic analysis.
compiler/irgen
Package irgen implements IR generation from source code.
Package irgen implements IR generation from source code.
compiler/parser
Package parser implements source code parsing.
Package parser implements source code parsing.
compiler/sourcecode
This package defines source code entities - abstractions that end-user (a programmer) operates on.
This package defines source code entities - abstractions that end-user (a programmer) operates on.
compiler/sourcecode/typesystem
Package typesystem implements type-system with generics and structural subtyping.
Package typesystem implements type-system with generics and structural subtyping.
runtime
Package runtime implements environment for dataflow programs execution.
Package runtime implements environment for dataflow programs execution.
runtime/funcs
Package funcs implements low-level components (runtime functions).
Package funcs implements low-level components (runtime functions).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL