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 #汇编器

MIT 许可证

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