9 个版本
0.2.2 | 2019年4月5日 |
---|---|
0.2.1 | 2019年4月5日 |
0.2.0 | 2019年3月31日 |
0.1.5 | 2019年3月18日 |
#41 in #汇编器
1MB
908 行
包含 (Mach-o 可执行文件, 2.5MB) fn
Finn-Assembler
使用 HLVM v0.9.0
实现的芬恩 IR 汇编器
Finn IR
Finn IR 是一种旨在被其他语言针对的最小语言。
它编译成 Rust,然后编译成二进制文件。
功能
- 动态类型 - Finn IR 允许您使用动态类型而不必牺牲太多速度。
- 128 位十进制数 - 我们使用 128 位十进制数来获得非常大的精确值,同时在数学运算中保持速度。
- 外部函数接口 - Finn IR 可以在标识符后面使用
@
运算符直接访问包含的 crates 中的对象。 - 面向对象编程 -
:
、>
和<
运算符允许进行简单的面向对象编程。 - 函数式编程 - Finn IR 可以使用 lambda 演算,但效率不高。此外,因为它不是垃圾回收的,所以没有无限的递归深度。然而,这对于闭包和其他事物来说非常棒。
示例
阶乘
计算 n 的阶乘。
./fnexamples/factorial.fn
{
n=
1 total=
{
total n* total=
1 n- n=
} {1 n greater!} &
total
} factorial=
1500 factorial! println!
Lambda 演算
演示了在 Finn IR 中使用 Lambda 演算。
./fnexamples/lambda.fn
{a= {b= a}} True =
{a= {b= b}} False =
{p= {q= p q p!!}} And=
{ "is false!" println! } { "is true!" println! } True True And!!!!!
用户输入
从命令行获取用户输入,并打印结果。
./fnexamples/input.fn --cratesinclude/input
">> " input@! user_input=
"You said: \"" print! user_input print! "\"" println!
FFI '宏'
自动执行定义构造函数所需的许多语法。它还演示了您如何使用 Rust FFI 模拟 '宏'(它们实际上不是宏)。
./fnexamples/struct.fn --cratesinclude/structs
[
0 "x"
{
self=
self x: > 1 + self x: < self =
"im a method!" println!
self
} "method"
{
"im a static method!" println!
} "static_method"
] strukt@! s=
s x: > println!
s s method: > ! s=
s x: > println!
s static_method: > !
斐波那契
计算斐波那契数列。 ./fn examples/fibonacci.fn
{
n=
1 a=
0 b=
0 c=
{
a b+ c=
b a=
c b=
"iteration " print! n print! " " print! c println!
1 n-n=
} {0 n greater!} &
c
} fib=
29404 fib!
面向对象编程
演示了 Finn IR 中的面向对象编程。 ./fn examples/object.fn
{
$ self=
x= y=
x self x: < self=
y self y: < self=
{
self= dx= dy=
self x: > dx + self x: < self=
self y: > dy + self y: < self=
self
} self move: < self=
{
self=
"self:x " print! self x: > println!
"self:y " print! self y: > println!
self
} self println: < self=
self
} Sprite=
0 20.5 Sprite ! s=
s s println: > !
1 5 0- s s move: > ! s=
s s println: > !
安装
要安装 Finn-assembler
,请克隆 Finn-assembler
仓库,并运行 install.sh
文件。
依赖项
约2.8–4.5MB
约69K SLoC