1个不稳定版本
0.1.0 | 2019年5月11日 |
---|
#1869 in 开发工具
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