1个不稳定版本

0.1.0 2019年5月11日

#1869 in 开发工具

MIT 许可证

240KB
5K SLoC

Ullage

一个由简单语法定义的静态类型编译语言。

当前状态

现在可以编写简单的程序。以下程序计算9的阶乘

fn fact(n: Number): Number
    var acc = 1
    var i = 1
    while i < n
        acc = acc * i
        i = i + 1
    end
    acc
end

print fact(9) # => 362880

您还可以对常量字符串进行操作

# FizzBuzz
#
# Implementation of the legendary `FizzBuzz` algorithm.
fn fizzbuzz(n: Number): String
    (print 'fizzbuzz') if mod(n, 15) == 0 else
    (print 'fizz') if mod(n, 3) == 0 else
    (print 'buzz') if mod(n, 5) == 0 else
    print_num(n)
end

构建和测试

主要的构建由 cargo 完成。为了运行功能测试和基准测试,您需要Python。建议使用 build.sh 脚本

  • $ ./build.sh 将构建编译器 target/release/ullage
  • $ ./build.sh test 将构建编译器并运行来自 specs/ 的测试套件。
  • $ ./build.sh bench 将运行来自 spec/bench/ 的基准测试。

许可证

Ullage是开源的,受MIT许可证的约束。

功能和进展

  • 自定义数据结构
  • 模式匹配
  • 一等函数

词法分析器

  • 识别单词、数字、注释、运算符和空白
  • 每个标记的位置信息
  • 插值字符串
  • 将空白暴露给解析器

解析器

  • 解析基本构造
  • for循环和迭代器
  • 传统的 if
  • 跟踪所有底层标记
  • 在语法节点上暴露位置 & 范围信息
  • 可往返/可美化打印的树

代码生成 / 降低

  • 创建LLVM模块并降低基本构造
  • 数组索引
  • 局部变量的任意类型
  • 堆分配的类型
    • 降低 String 类型
    • 用户定义的类型
    • RC垃圾回收 (#26)
  • 库输出类型(LLVM ir、LLVM bc、对象、静态lib、dylib、exe)
  • 目标机器 & 功能控制
  • 优化
  • 链接器支持
    • clang - macOS链接器默认
    • gold - GNU ld
    • lld/llvm-link
    • Microsoft LINK

依赖项

~6–17MB
~227K SLoC