我不相信看到这一点.它说:
4月份,Chris Smith将介绍如何用F#编写Java到x86编译器.
演示可能会持续一两个小时,这绝对不足以编写编译器.我听说F#很强大,但这个强大吗?
好吧,我想问的是:你能快速在F#中编写一个编译器吗?
Jör*_*tag 19
让我们首先从一些更正开始:
也就是说,解释一个结构良好,简单的编译器,用于以一种非常适合在一小时内编写编译器的语言实现的简单语言,这绝对是可行的.
F#是ML系列语言的成员(特别是OCaml的近亲),它们确实非常适合编写编译器.其实,原因为何罗宾·米尔纳对他的语言选择的名称ML(元语言),是因为它是专门设计用于编写编译器.编译器基本上是一个很大的功能(因此很容易在函数式语言中实现),它可以检测模式(因此可以很自然地用模式匹配的语言实现)并为它检测到的每个模式执行一些代码(因此,使用具有一流功能的语言实现非常自然).和whaddayaknow?F#是一种功能语言,具有非常复杂的模式匹配功能.另一个不错的功能是具有代数数据类型和区分联合的表达式系统,这使得表示抽象语法树变得非常容易.
在Lang.NET研讨会上,Jason Olson发表了关于F#的演讲,期间他展示了他正在研究的一些翻译,这些翻译非常好地展示了这些特征.
FredrikHolmström目前正在研究IronJS,这是针对动态语言运行时的ECMAScript 3实现.看一下代码,特别是AST类型和一些分析和解析代码.
Jonathan Tang在48小时内为自己写了一个方案是另一个编写翻译的好例子,这次是在Haskell中与F#共享许多功能.
Marc Feeley的90分钟计划到C编译器是关于用Scheme编写的Scheme编译器的演示文稿.
在Ruby中的实现方案中,James Coglan教授观众Scheme,实时代码并在Ruby中解释Scheme解释器,并在15分钟内编写几个示例Scheme程序.
Jon*_*eet 16
提供有关项目的演示与在演示期间实施整个项目不同.
完全可以在一小时内向x86编译器提供Java的一些有趣方面,甚至可以显示一些代码:但这与创建所有代码并不相同.
Java是一种相当复杂的语言,因此我认为Chris不会实现完整的Java编译器.然而,他的讲话真指出,与代码(树状结构一般)操作是很多在F#比任何其他.NET语言更容易.这就是F#用于各种静态分析工具(例如Microsoft的静态驱动程序验证程序)的原因
像fslex和fsyacc这样的工具可以很容易地为语言编写解析器.克里斯有一个简单的数学表达式博客.罗伯特皮克林写了一个更复杂的例子,它实际上只用几行代码生成IL代码(用.NET编译数学表达式).如果使用表达式树生成代码,这在.NET 4.0上会更容易.
所以我想即使他是从头编写编译器,他也可以编写一个语言编译器,可以用来编写非平凡的示例程序.