#haskell #corollary #emulation #run-time #cross-compiler #parsing-library #parser-haskell

corollary-support

Haskell运行时模拟的Corollary支持库

2个不稳定版本

使用旧的Rust 2015

0.2.0 2017年7月5日
0.1.0 2017年6月1日

#38 in #haskell

MIT/Apache

18KB
633 行代码(不含注释)

Corollary:Haskell到Rust的转换

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

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