代码之家  ›  专栏  ›  技术社区  ›  Mike Dunlavey

生成代码时,应该生成什么语言?

  •  6
  • Mike Dunlavey  · 技术社区  · 17 年前

    缺点是我们要求用户安装一个编译器(主要是在MS Windows上)。

    这一直是一个令人头痛的问题,因为像MS这样的供应商一直在淘汰编译器,而且一些用户往往安装了多个编译器。

    我们正在考虑使用GNU C,可能是C++,但是即使在那里,也有连续版本问题。

    理想情况下,会有某种方法来生成灵活、运行快速的代码,并且不会让我们受到第三方提供商的突发奇想的影响。

    也许我忽略了一些简单的东西,比如Java。任何想法都将不胜感激。谢谢

    12 回复  |  直到 17 年前
        1
  •  8
  •   Shannon Weyrick    17 年前

    如果您正在考虑C甚至汇编程序,请先看一下LLVM: http://llvm.org

        2
  •  3
  •   Paul Stovell    17 年前

    我可能在这里遗漏了一些上下文,但是你能把自己固定到一个特定的版本吗?例如,.NET2.0可以与.NET1.1和.NET3.5并排安装,也可以与将来推出的其他版本并排安装。那么,只要您的代码使用特定版本的编译器,问题是什么?

        3
  •  3
  •   Quassnoi    17 年前

    我曾考虑过可能生成汇编语言,以摆脱编译器版本的“跑步机”,但汇编语言都是特定于机器的。

    你为什么不坚持 C90 ?

    gcc 如果不使用扩展名,则为。

    您可以随时分发特定版本的 海湾合作委员会 4.3.2 ,让用户可以选择使用自己的编译器,并自行承担风险。

    只要所有代码都是由您生成的(也就是说,您没有将指令嵌入到其他代码中),那么针对这个版本进行测试并使用它编译库就不会有任何问题。

        4
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    如果您想生成汇编语言代码,可以查看 asmjit .

        5
  •  2
  •   Chris Shaffer    17 年前
        6
  •  2
  •   Beep beep    17 年前

    为什么不在代码生成器中附带GNUC编译器呢?这样就不会有版本问题,客户机可以不断生成可用的代码。

        7
  •  2
  •   Ken    17 年前

        8
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前
        9
  •  1
  •   Camilo Martin    15 年前

    在@Alvin的回答中,本着“添加我的2美分可能不会太晚”的精神,我会想一想:如果你的申请要持续几年, 它将在应用程序和系统的工作方式上面临一些变化 .

    说到摩尔定律,处理器确实变得相当快,所以也许某些优化甚至没有必要。可能优化的范围会更大, some processors

    我的观点是,专注于今天存在的东西作为明天的平台不是一个好主意。让它在今天起作用,明天肯定会起作用(微软特别重视向后兼容性,苹果似乎还不错,Linux在让它按你的意愿工作方面非常自由)。

    是的,你可以做一件事。将您的技术附加到一些不会(很可能)消亡的东西上,例如Javascript。我是认真的,Javascript虚拟机现在变得非常高效,而且会变得更好,而且每个人都喜欢它,所以它不会突然消失。如果需要更高的效率/功能,可以针对CRL或JVM?

    而且我相信多线程将成为一个越来越重要的问题。我有一种直觉,处理器内核的数量将有自己的摩尔定律。从云计算的流行趋势来看,架构很可能会发生变化。

    PS:无论如何,我相信过去的C优化在现代编译器中仍然是非常有效的!

        10
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    我会坚持使用你用来生成那种语言的语言。您可以用Java生成和编译Java代码,用Python生成和编译Python代码,用C生成和编译C#,甚至用Lisp生成和编译Lisp等等。

        11
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    为什么不使用SpiderMonkey或Rhino(Java或C++中的JavaScript支持)之类的东西呢。您可以将对象导出到JavaScript名称空间,用户无需编译任何内容。

        12
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    为类似的语言嵌入解释器 Lua Scheme 并以该语言生成代码。