25 个版本 (4 个重大更改)

0.5.10 2019 年 10 月 19 日
0.5.9 2019 年 10 月 19 日
0.4.2 2019 年 10 月 5 日
0.3.2 2019 年 10 月 2 日
0.1.3 2019 年 8 月 31 日

#901 in 编程语言

Download history 1/week @ 2024-03-10 73/week @ 2024-03-31

每月 51 次下载
用于 tsar

Apache-2.0

18KB
303

xasm

一个跨平台、编译和动态类型化的编程/中间语言

Xasm 旨在成为编译和动态类型化编程语言的中间表示。然而,xasm 本身也适合用于脚本。

特性

  • 动态类型
  • Lua 风格的速度
  • 易于使用的 Rust 外部函数接口
  • 一等支持函数式和面向对象编程
  • 简单的语法

文档

您可以在此处找到虚拟机的文档,以及在此处找到编译器后端文档。这两个组件都称为 xmachinexassembler,您可以在我的 GitHub 账户上找到它们。

$ xasm

xasm x.x.x
Adam McDaniel <[email protected]>
Compiler for the xasm programming language

USAGE:
    xasm [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    compile    Compile a xasm file
    help       Prints this message or the help of the given subcommand(s)
    run        Run a xasm file

示例

以下是您如何在 xasm 中实现基本控制流结构的示例。

value = 1

if value {
    println("`value` is not 0")
} else {
    println("`value` is 0")
}


while 1 {
    println("Still looping!")
}

请注意,xasm 旨在成为中间表示!

面向对象编程

要在 xasm 中编写面向对象的代码,首先您编写一个类。

class Point {
    fn new(self, x, y) {
        self.goto(x, y)
        self
    }

    self.goto(self, x, y) {
        self.x = x
        self.y = y
    }
}

new 方法通常用于实例化对象,但您也可以编写其他构造函数。我们使用 new 方法的原因是,new 函数将调用我们类的 new 函数来构造我们的对象。

以下是我们的 Point 的构造方式。

p = new(Point, 2, 3)

函数式编程

由于 xasm 支持闭包,因此您可以轻松实现 Church 编码。

fn True(a) {
    fn(b) { a }
}

fn False(a) {
    fn(b) { b }
}

fn If(c) {
    fn(a) {
        fn(b) {
            (c(a))(b)
        }
    }
}

此外,您还可以使用更多实用的函数式编程技术。

multiply = fn(n) {
    fn(m) {
        mul(n, m)
    }
}

double = multiply(2)
triple = multiply(3)

println(double(3))
println(triple(3))

安装

安装 Rust

# For *nix users
# If you're a windows user, go to https://rust-lang.net.cn
curl https://sh.rustup.rs -sSf | sh

安装/更新 xasm

cargo install -f xasm

问题

如果您遇到问题,请发布问题

许可证

xasm 在 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE。

依赖项

~3-4MB
~72K SLoC