2 个不稳定版本

使用旧的 Rust 2015

0.3.0 2017 年 7 月 5 日
0.0.1 2017 年 5 月 23 日

#31 in #haskell

MIT/Apache

5MB
20K SLoC

推论:Haskell 到 Rust 转换

https://img.shields.io/crates/v/corollary.svg

推论是一个非常实验性的 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