2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2017年7月5日 |
---|---|
0.1.0 | 2017年6月1日 |
#38 in #haskell
18KB
633 行代码(不含注释)
Corollary:Haskell到Rust的转换
Corollary是一个非常实验性的Haskell到Rust编译器。目标是自动化将Haskell转换为Rust的语法转换,使用户能够手动完成转换为惯用的Rust代码。结合对corollary-support
中Haskell方法的(非常宽松的)适配,这可以加速完整移植的过程。
当前状态:寻找维护者。 Corollary可以解析和翻译整个文件,结果各异。对于Haskell的C解析库的移植(language-c),使用了针对源代码的特定黑客攻击,以及手动翻译。
鉴于该项目是为移植单个库而专门设计的,你会在代码库中发现针对源代码的特定黑客攻击,尽管它们最终应该被删除。以下问题尚未找到解决方案
- Haskell的模块和导入系统
- Haskell的垃圾收集(由于Haskell值是不可变的,我们在传递时广泛地使用.clone()而不是垃圾收集)
- 没有显式类型声明的顶级函数
- Monads和HKT
- 尾递归
- 真正的惰性
- 或柯里化(缺乏更好地涉及Haskell类型分析的方法)。
使用方法
Corollary可以用作二进制文件
cargo install corollary
corollary input/file/path.hs -o target/output.rs
这会将单个源文件从Haskell转换为Rust。您可以选择省略-o
参数以将文件写入stdout。此外,您可以使用--run
参数运行文件。
Corollary将删除任何在{-HASKELL-} ... }
块中的代码,并将任何在文件中嵌入的{-RUST ... /RUST-}
块中的代码包含在内。(有关示例,请参阅corollary/test
。)这使得您可以直接使用--run
运行Haskell文件,前提是它是自包含的(不依赖于Haskell的模块系统)。
开发
克隆此存储库及其测试依赖项
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许可证授权。
依赖项
~240KB