38 个版本 (9 个破坏性更新)

0.29.5 2019年6月13日
0.28.0 2019年6月8日

#7 in #hana

Download history 184/week @ 2024-03-30 42/week @ 2024-04-06

每月下载量 99

GPL-3.0 许可协议

270KB
7K SLoC

Rust 5.5K SLoC // 0.1% comments C 1K SLoC // 0.1% comments

🌸 hana

travis codecov Gitter

hana 是一个由 Rust/C 编写的小型动态类型脚本语言,受 Pascal、Ruby 和 Javascript 启发。它主要支持基于原型的面向对象、动态数组、一等函数(带有闭包支持)。解释器具有一些有用的功能,如简单的标记-清除垃圾收集器、异常处理和导入系统。

haru,Rust 解析/运行时生成在用 C 编写的优化虚拟机上运行的字节码(与 Python 和 Ruby 一样快!)

安装

您需要安装 cargo 软件包管理器和 rust。然后您可以这样做

cargo install haru

名为 haru 的解释器将被安装到您的 PATH 中。

附加功能

可以通过将它们的名称传递给 cargo 的 --features 标志来启用附加功能

  • jemalloc:使用 jemalloc 内存分配器
  • cffi:启用 stdlib 的 C 外部接口 (wip)

运行

一旦构建或安装,您可以将 hana 代码写入源文件,然后像这样调用解释器

haru program.hana

或者您也可以调用 REPL 以便于原型设计

haru

有关用法,请传递 -h 命令

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 了解更多

Hello World

print("Hello World\n")

变量

name = "Alice"
age = 20
print(name, " is ", age, " years old.\n")

斐波那契数列

// 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.md

构建

(在 x64 Linux 上使用 rust-nightly 和 gcc-4.8 进行了测试,在其他架构上的效果可能会有所不同)

只需这样做

cargo build --release

许可协议

GPLv3 许可协议

依赖项

约 6-8MB
约 155K SLoC