1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2020年1月27日 |
---|
#888 在 开发工具
27KB
250 行
Floorplan 编译器
一种用于指定一维地址空间的布局的语言,特别适用于用 Rust 和 C/C++ 编写的垃圾收集器和手动内存管理器。
构建和运行
Floorplan 用 Haskell 编写,必须使用 stack 或 cabal 构建。如果您只想在系统上全局构建和安装 Floorplan,可以执行以下操作
$ cabal install flp
这将从 Hackage 拉取 Floorplan 的最新稳定版本,并全局安装 flp
可执行文件。如果您希望修改编译器或直接从另一个 Haskell 项目引用它,您可以拉取此存储库的 master 分支,并按照以下方式构建项目
$ git clone --branch master https://github.com/RedlineResearch/floorplan.git
$ cd floorplan && stack build
...
Completed 2 action(s).
此时,您可以使用 build-immix
脚本编译文件,例如 examples/immix/layout.flp
$ ./build-immix
...
Compiling immix_rust v0.0.1 (/home/karl/w/flp/examples/immix)
Finished dev [unoptimized + debuginfo] target(s) in 4.56s
此脚本确保构建 Floorplan 编译器,为当前用户安装它,然后构建 Immix 项目,该项目本身调用 Floorplan 编译器来构建文件 examples/immix/src/heap/layout.flp
要针对其他 .flp
文件运行编译器,可以直接按以下方式运行编译器
stack exec flp [path/to/layout.flp] [path/to/generated.rs]
Rust
请注意,要构建以这种方式生成的 Rust 文件,您必须在 Cargo 依赖中包含 flp-framework
,并在 cargo build-dependencies 中包含 flp-compiler
。后者是一个调用(已使用 stack 安装)flp 编译器的包装器,而框架 crate 包含生成 Rust 代码使用的必要宏和地址类型。
本仓库的 genrs/
目录中给出了Rust cargo项目的骨架,可以复制并修改以支持除immix-rust之外的内存管理器的需求。
C/C++
C/C++ 输出正处于积极开发中。无论选择哪种输出类型(.c
、.h
或 .hpp
),编译器都将输出相同的C-like代码。预计这可以在Clang编译器的最新版本上工作,但也可能在现代版本的GCC下正常工作。
在报告Floorplan编译器的C输出模式问题时,请首先检查或在合理程度上相信该问题在Clang中也存在。对编译器进行修改以适应不同的C编译器的输出是受欢迎的,但我们打算主要支持Clang作为后端工具链。
依赖项
在当前仓库的 deps/
目录中包含了一个针对 language-rust 的自定义版本,它添加了对将宿主语言表达式直接拼接到quasiquoted Rust代码中的支持。这是Floorplan生成Rust代码的机制。
测试和贡献
如果您想帮助维护或为此项目贡献新代码,请随时提交pull request,或者最好是开始在问题跟踪器中发起一个问题,这样您可以在过程中得到我们的反馈。编译器的工作途径有很多,包括但不限于
- 使用Floorplan布局实现的更多示例Rust分配器。
- Rust模板,用于在对齐边界上分配。
- 广泛记录生成的接口。
- 更好的错误信息。
- 将核心语义(
app/semantics.hs
)直接集成到项目src/
层次结构中。 - 调用SMT库来验证对齐和大小约束。
- 针对C和Rust。
- 支持非64位架构。
- 生成调试断言。
- 动态跟踪堆中每个部分的类型信息。
- 通过直接将Rust拼接支持集成到 上游存储库(例如,作为单独的quasiquoter)来清理依赖项。
- 在生成的函数旁边生成基于cargo的Rust文档,说明为什么生成某个特定函数以及如何使用它。
- 修复
proofs/*.v
文件中的Coq证明。 - 更好的Rust集成和下游crate。
lib.rs
:
flp_framework
Crate
此模块包含Floorplan编译器的Rust绑定,用于生成以地址类型为单位的代码。这些接口支持基本的算术运算、地址比较、美化打印和直接内存访问。
有关获取Floorplan编译器的信息,请参阅此处GitHub项目。