2 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2017 年 7 月 5 日 |
---|---|
0.0.1 | 2017 年 5 月 23 日 |
#31 in #haskell
5MB
20K SLoC
推论:Haskell 到 Rust 转换
推论是一个非常实验性的 Haskell 到 Rust 编译器。目标是自动化 Haskell 到 Rust 的语法转换,让用户手动将转换完成为惯用 Rust 代码。结合在 corollary-support
中的(极其宽松的)Haskell 方法的适配,这可以加速完整移植的过程。
当前状态:寻找维护者。 推论可以解析和翻译整个文件,结果各异。为了 Haskell 的 C 解析库的 language-c 移植,使用了特定于源代码的技巧,以及手动翻译。
鉴于该项目是为了移植单个库而专门构建的,你会在代码库中找到许多特定于源代码的技巧,但它们最终应该被删除。以下问题尚无解决方案
- Haskell 的模块和导入系统
- Haskell 的垃圾回收(相反,鉴于 Haskell 值是不可变的,我们在传递时广泛地 .clone() 大多数值)
- 没有显式类型声明的顶层函数
- Monads 和 HKT
- 尾递归
- 真正的惰性
- 或柯里化(缺乏更好地涉及 Haskell 类型分析的方法)。
使用方法
推论可以用作二进制文件
cargo install corollary
corollary input/file/path.hs -o target/output.rs
这会将单个源文件从 Haskell 转换为 Rust。您可以省略 -o
参数以将文件写入 stdout。此外,您可以使用 --run
参数运行文件。
推论将剥离代码块中的任何代码 {-HASKELL-} ... {-/HASKELL-}
并将文件中嵌入的任何代码包含在 {-RUST ... /RUST-}
块中。(见 corollary/test
中的示例。)这使得您可以直接运行 Haskell 文件,前提是它是自包含的(不依赖于 Haskell 的模块系统)。
开发
克隆此存储库及其测试依赖项
git clone http://github.com/tcr/corollary --recursive
此存储库中包含以下 crate
parser-haskell/
,一个用 LALRPOP 编写的原始 Haskell 解析器。corollary/
,一个实验性的 Haskell 到 Rust 编译器。corollary-support/
,用于转换后的 Haskell 代码的支持 crate。
此外,在 deps/
目录中存在用于测试 Corollary 的库。
参考
许可协议
Corollary 和 parser-haskell
可选择使用 MIT 或 Apache-2 许可协议。
依赖关系
~7.5–9.5MB
~188K SLoC