1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2017年5月23日 |
---|
#58 在 #haskell
1KB
推论: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-} ... }
块中的代码,并在文件中包含任何在 {-RUST ... /RUST-}
块中嵌入的代码。(请参阅 corollary/test
以获取示例。)这允许您在 Haskell 文件是自包含的(不依赖于 Haskell 的模块系统)的情况下直接运行 --run
。
开发
克隆此存储库及其测试依赖项
git clone http://github.com/tcr/corollary --recursive
此存储库包含以下 crates
parser-haskell/
,一个使用 LALRPOP 编写的原始 Haskell 解析器。corollary/
,一个实验性的 Haskell 到 Rust 编译器。corollary-support/
,用于转换Haskell代码的支撑包。
此外,在deps/
目录中存在用于测试Corollary的库。
参考文献
许可证
Corollary和parser-haskell
按照MIT或Apache-2许可证发布,任选其一。