我写了一个函数式语言的解释器,现在我尝试使用编译器进行引导。该语言拥有动态类型系统,使用列表、数字和字符串。它也是函数式的,函数将其参数作为列表(类似于Perl中的@_或JavaScript中的arguments)。函数是一等公民,可以嵌套。顺便问一下,我应该使用哪种语言作为编译器的目标呢?我认为选择静态类型的命令式语言(例如C)会很难。该语言应支持动态类型和函数式编程(像JavaScript这样的语言不太好 - 该语言本身应该具备编译器,就像Common Lisp一样)。
我写了一个函数式语言的解释器,现在我尝试使用编译器进行引导。该语言拥有动态类型系统,使用列表、数字和字符串。它也是函数式的,函数将其参数作为列表(类似于Perl中的@_或JavaScript中的arguments)。函数是一等公民,可以嵌套。顺便问一下,我应该使用哪种语言作为编译器的目标呢?我认为选择静态类型的命令式语言(例如C)会很难。该语言应支持动态类型和函数式编程(像JavaScript这样的语言不太好 - 该语言本身应该具备编译器,就像Common Lisp一样)。
a + b
,你可以生成像 generic_add(a, b)
这样的代码,其中 generic_add
是一个函数,根据运行时类型信息选择合适的实现。如果你愿意自己实现动态分派、闭包等功能,那么针对LLVM和C这样的低级语言是可以的。但是,既然你提到JavaScript作为一个可能的目标(尽管缺乏编译器,但现在主流浏览器都支持JIT编译),那么Scheme怎么样呢?它是一种动态类型、高阶函数式语言,已经有本地代码编译器了:http://community.schemewiki.org/?scheme-faq-standards#implementations唯一的问题可能是它太接近你的源语言和你的编译器(或者说“翻译器”)可能会太容易了。:-)
如果你想针对C进行开发,Marc Feeley的教程“90分钟Scheme到C编译器”可能是一个很好的起点:http://churchturing.org/y/90-min-scc.pdf