Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ffwff/hana
🌸 a simple scripting language (alpha) 🌸
https://github.com/ffwff/hana
bytecode-interpreter programming-language scripting-language
Last synced: 3 months ago
JSON representation
🌸 a simple scripting language (alpha) 🌸
- Host: GitHub
- URL: https://github.com/ffwff/hana
- Owner: ffwff
- License: gpl-3.0
- Archived: true
- Created: 2019-01-24T11:53:17.000Z (almost 6 years ago)
- Default Branch: haru
- Last Pushed: 2019-06-24T03:14:34.000Z (over 5 years ago)
- Last Synced: 2024-07-09T18:46:33.022Z (4 months ago)
- Topics: bytecode-interpreter, programming-language, scripting-language
- Language: Rust
- Homepage:
- Size: 1.08 MB
- Stars: 133
- Watchers: 6
- Forks: 7
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-luooooob - ffwff/hana - 🌸 a simple scripting language (alpha) 🌸 (Rust)
README
# 🌸 hana
[![travis](https://travis-ci.org/ffwff/hana.svg?branch=haru)](https://travis-ci.org/ffwff/hana)
[![codecov](https://codecov.io/gh/ffwff/hana/branch/haru/graph/badge.svg)](https://codecov.io/gh/ffwff/hana)
[![Gitter](https://badges.gitter.im/flowers-of-spring/community.svg)](https://gitter.im/flowers-of-spring/community)**hana** is a small dynamically-typed scripting language written in Rust/C
and is inspired by Pascal, Ruby and Javascript. It primarily supports prototype-based
object orientation, dynamic arrays, first-class functions (with closure support). The interpreter
comes useful features such as a simple mark-and-sweep garbage collector, exception handling
and an import system.**haru**, the Rust parser/runtime generates bytecode that runs on an optimised
virtual machine written in C (about as fast as Python and Ruby!)## Installation
You'll need to have the cargo package manager and rust installed. You can then do:
```
cargo install haru
```The interpreter called `haru` will be installed into your PATH.
### Additional features
Additional features can be enabled by passing their names into
cargo's `--features` flag:* `jemalloc`: use the jemalloc memory allocator
* `cffi`: enables the stdlib's C foreign interface *(wip)*## Running
Once built or installed, you can write hana code into a source file, then invoke the interpreter like this:
```
haru program.hana
```Alternatively you could invoke a REPL for easier prototyping:
```
haru
```For usage, pass the `-h` command:
```
usage: haru [options] [-c cmd | file | -]
options:
-c cmd : execute program passed in as string
-d/--dump-vmcode: dumps vm bytecode to stdout
(only works in interpreter mode)
-b/--bytecode: runs file as bytecode
-a/--print-ast: prints ast and without run
-v/--version: version
```## Examples
*see [/examples](https://github.com/ffwff/hana/tree/haru/examples) for more*
### Hello World
```
print("Hello World\n")
```### Variables
```
name = "Alice"
age = 20
print(name, " is ", age, " years old.\n")
```### Fibonacci numbers
```
// Regular recursive
fib(n) = n <= 1 ? 1 : fib(n-1) + fib(n-2)
print(fib(30), "\n")// Faster recursive (with tail-call optimization!)
fibrec(n, prev, curr) = n <= 0 ? curr : fibrec(n-1, prev+curr, prev)
fib(n) = fibrec(n+1, 1, 0)
print(fib(50), "\n")
```## Documentation
*see [DOCUMENTATION.md](https://github.com/ffwff/hana/blob/haru/DOCUMENTATION.md)*
## Building
(building was tested by using rust-nightly and gcc-4.8 on an x64 with Linux, mileage
may vary on other architectures)Just do:
```
cargo build --release
```## License
GPLv3 License