为CLR实现功能语言(或者,关于F#实现的论文)

时间:2011-11-03 22:09:39

标签: compiler-construction f# lambda functional-programming clr

有没有人知道关于F#编译器实现的任何好文章?我正在尝试为一个针对CLR的简单函数语言生成CIL代码,但我正在努力解决几个问题。

功能语言和CIL之间的差异使得很难生成良好类型的CIL代码。我有通过类型擦除工作的解决方案,但我更愿意找到一种方法来生成CIL代码,该代码反映(至少在某种程度上)我的源语言的Hindley-Milner类型系统(例如,通过生成泛型类)。根据MS和Mono F#编译器生成的代码判断,他们设法实现了这一点!

1 个答案:

答案 0 :(得分:9)

关于F#实现的学术论文不多 - 虽然编译器是开源的,但如果你想了解一些具体的细节,你可以探索source code。 (顺便说一句:Mono中提供的F#编译器基于开源版本,因此它与Visual Studio中提供的F#编译器基本相同)。

唯一相关的学术出版物是Don Syme的论文ILX: Extending the .NET Common IL for Functional Language Interoperability。阅读非常有趣 - 它讨论了如何扩展IL以便更容易地编译函数式语言。在封面下,F#编译器的初始版本编译为此扩展IL(ILX),然后将其转换为普通IL。从那时起,细节可能已经发生了变化,但核心原则将是相同的。