Compiler construction 最佳编译器目标

Compiler construction 最佳编译器目标,compiler-construction,llvm,Compiler Construction,Llvm,作为口译员,我已经学会了几种语言。当我准备好采取“下一步”时,对于非本机编译格式,什么选项是最好的。。。每种方法的优缺点是什么 我一直在考虑编译到CLR或LLVM,并考虑过几次C-midcompile,但我并不完全确定 我希望能够移植的一些功能如下: REPL—我正在构建的语言之一支持在运行时进行块级计算 健壮的宏——我正在构建的语言之一需要在标记化之前以及在标记化和解析之间的中间阶段分别过滤代码 好的,不是“几个”,只有两个。我喜欢认为我可以将我的语言支持的任何其他功能移植到“任何东西” 我的

作为口译员,我已经学会了几种语言。当我准备好采取“下一步”时,对于非本机编译格式,什么选项是最好的。。。每种方法的优缺点是什么

我一直在考虑编译到CLR或LLVM,并考虑过几次C-midcompile,但我并不完全确定

我希望能够移植的一些功能如下:

  • REPL—我正在构建的语言之一支持在运行时进行块级计算
  • 健壮的宏——我正在构建的语言之一需要在标记化之前以及在标记化和解析之间的中间阶段分别过滤代码
  • 好的,不是“几个”,只有两个。我喜欢认为我可以将我的语言支持的任何其他功能移植到“任何东西”


    我的最佳选择是什么,以及它们的优缺点?

    LLVM似乎很有希望。该团队声称,与本机相比,使用后端的gcc具有更好的运行时性能。从AST编译的能力非常有趣(请看教程)。它可以在运行时编译和优化,这是动态应用程序所必须的。它也可以作为纯解释器运行

    我考虑在一个涉及创建类似TCL语言的项目中使用LLVM。Tcl是高度动态的,因此我不知道这在现阶段意味着什么,但我相信我将获得比当前基于字节码的内核更好的性能。

    赞成/反对:

    • CLR:

      • pro:CLR环境随时可用;有很多东西需要绑定
      • con:绑定到CLR(;-);针对某些系统很难或不可能(嵌入式、大型机等。CLR impl.在非MS系统上可能不太成熟)
    • LLVM:

      • 赞成:独立于MS
      • 缺点:针对某些系统可能需要移植LLVM(?);与网络、Java等的接口可能很麻烦(可能需要FFI)
    • C作为目标语言:

      • 赞成:几乎所有可能的目标;易于代码生成
      • 缺点:您必须实现一些VM的东西作为运行库(GC、dynload、dyn编译等);有些事情在C语言中很难做到(延续、回溯、堆栈跟踪、异常);有些事情在C中很难高效和可移植(GC、动态类型、堆栈布局依赖)
    • Java字节码作为目标:

      • 赞成:可能是最大的目标平台(甚至是手机和嵌入式设备);周围有很多现有的工具;与现有库的轻松接口
      • 缺点:有些东西很难实现或很难有效实现(动态类型、延续、回溯)
    综上所述,我认为以Java字节码为目标可能最适合您

    编辑:实际上是对评论的回答,但300个字符是不够的

    JByteCode不确定-我同意(作为一个小人,JByteCode对我来说太有限了)


    就虚拟机而言,我认为作为JVM,您可以获得相对广泛的性能,从纯慢速字节码解释器到高端复杂的JITting虚拟机(IBM)。我想,CLR虚拟机将迎头赶上,因为微软迟早会窃取并整合所有创新,加速动态翻译的技术也会发布(例如,阅读Self的论文)。LLVM的进程可能会慢一点,但谁知道呢。有了C,您将免费受益于更好的编译器,但像动态重传等东西很难以C为目标实现。我自己的系统混合使用预编译和动态编译代码(在一个内存空间中拥有所有:一个缓慢的字节码解释器、抖动和预编译的静态C代码)。

    代码生成是我的事:-)

    对几个选项的评论:

    • CLR:

      • 赞成:工业支持
      • 缺点:你必须完全接受他们的打字系统;根据您想要对类型执行的操作,这可能无关紧要
      • 缺点:只有Windows平台才是真正的黄金时段质量
    • LLVM:

      • 赞成:热情的用户社区和有魅力的领导者
      • 赞成:苹果公司的大力支持
      • 赞成:许多有趣的性能改进
      • 缺点:界面有点复杂
      • Con:工程中的孔历史;随着LLVM的成熟,希望通过增加接口的复杂性来填补工程中的漏洞
      • Pro:目标是一种实际的书面语言,而不是API;您可以轻松地检查、调试和编辑C代码
      • 赞成:设计相当成熟,相当干净
      • 支持精确的垃圾收集
      • 赞成:大多数用户报告它很容易使用
      • 缺点:非常小的开发团队
      • 缺点:截至2009年初,仅支持三种硬件平台(x86、PPC、ARM)
      • 缺点:没有附带垃圾收集器
      • 反对:这个项目没有前途
    • C作为目标语言

      • 赞成者:看起来很简单
      • 缺点:几乎不可能有好的表现
      • 缺点:从长远来看会让你发疯;询问一长串试图使用此技术编译Haskell、ML、Modula-3、Scheme等的人。在某个时候,这些人中的每一个人都放弃了,建立了自己的本地代码生成器
    总结:除了C以外的任何东西都是合理的选择。为了获得灵活性、质量和预期寿命的最佳组合,我可能会推荐LLVM


    充分披露:我是C--项目的成员。

    Java字节码是我一直不确定的东西。称之为糟糕的过去经验。他们中是否有人对其内部VM的功能(除了库调用之外)有任何额外的好处?C代码生成看起来很容易,直到您已经做了6到18个月。然后突然间,事情变得不可能了。只需一个小小的音符:你