【问题标题】:What alternative syntax exist for C/C++? (think SPECS or Mirah)C/C++ 有哪些替代语法? (想想 SPECS 或 Mirah)
【发布时间】:2011-07-22 03:21:08
【问题描述】:

我想知道 C 或 C++ 是否有更简单或更强大的语法。我已经遇到过SPECS。这是 C++ 的另一种语法。但是还有其他的吗?C 呢?

它也可以是一种代码生成器,以便可以不那么冗长地定义函子之类的东西。我想它可以作为一个代码生成器来编译成 C 或 C++ 代码,这与你在替代语法中编写的代码非常相似。

Mirah 是为 Java 执行此操作的示例。

理想情况下,我想用类似 Go 的语法编写 C。我喜欢他们修复 switch-case 的方式,并且总的来说让一切变得不那么冗长。

【问题讨论】:

  • 在编译语言的世界里,这并没有多大意义;您所需要的只是一种对 C/C++ 运行时系统具有绑定支持的语言。 (请注意,MSVC C++ 代码无论如何都不会直接在 Linux 上运行;重要的是运行时。)因此,从这个角度来看,FORTRAN 是一种“替代语法”,或 Modula II,或任何您可以编译为可链接到的对象的东西所需的运行时间。
  • 这不是真的。 C++ 的许多复杂性和强大功能来自于模板,它是一种编译时语言。
  • 仅从您发布的链接中,我看到他们声称拥有 switch 声明而不会失败,并且在另一端具有相同的语义。这不在一起。
  • 根据您提供的链接,Mirah 是一种完全独立的语言,可以编译到与 Java 相同的 JVM,而不是 Java 的替代语法。
  • 我在这个页面上寻找像 Scala 或 Python 这样的语法,用于完全强大的 C++。不幸的是,SPECS 根本没有开始回答这个问题,我担心完全改变的声明语法会吓跑太多人。使一门编程语言成功的关键是尽可能使用与其他语言相似的语法,同时仍然改变最烦人的部分(即,尽管有一些重大变化,但本质上仍然基于 C 语法的 Python)。

标签: c++ c compiler-construction syntax code-generation


【解决方案1】:
#define BEGIN {
#define END }

不! 说不!

【讨论】:

    【解决方案2】:

    我知道的唯一通用工具是Lazy C++,它允许您创建一个单独的.lzz 源文件,它可以从中生成.h.cpp 文件。

    还有很多方法可以为 C++ 生成代码。 (例如,请参阅 CogPumpWikipedia's list。)这些不是成熟的替代语法,但它们可以帮助处理特定类别的语法(例如自动生成带有 1 到 N 个参数的模板,解决缺少可变参数模板的问题)。

    【讨论】:

      【解决方案3】:

      如果它只是你所追求的语法,为什么你不能定义你自己的,作为一个琐碎的预处理器->解析器->C-pretty-printer 链?它只不过是一个语义可达的预处理器,有点像 CamlP4 风格,但对于 C。没有人知道你会发现哪种语法合适,所以它的实现完全取决于你。

      【讨论】:

      • 我正在考虑类似的事情,但我不确定做类似事情的最佳工具是什么。
      • @Adam Smith,任何解析工具链都可以——例如,带有 Java 后端的 Antlr,或者(更好)任何带有 ADT 的函数式语言(SML、OCaml、Haskell,...)。
      • 定义一个适合 C++ 开发的自定义语法是一项巨大的工作(我是否需要提到,仅仅解析 C++ 非常痛苦,世界上只有少数团队能够做到完全是这样吗?)。拥有一个拥有更广泛用户群的自定义语言可以让它变得更好,并有一系列 IDE 和其他工具可供选择。
      【解决方案4】:

      在我看来,SPECS 不再是真正的 C++,我肯定很难阅读这样的代码(至少最初是这样)。

      您应该根据自己的需要选择一种语言,而不是选择一种特定的语言,然后对其进行修改以适应您的需求。

      如果你想用 Go 编程,然后用 Go 编程,不要尝试用类似 Go 的语法编写 C,因为这只会让真正懂 C 的人难以阅读你的代码。

      【讨论】:

      • 选择一种语言并根据您的需要对其进行修改是实现新语言的一种不错的方式。此外,具有相同语义的语言,只有语法上的差异是相同的。与语言的其他部分相比,语法太不重要了。
      • 在企业环境中,您很少可以使用任何您想要的语言。除了与现有库等集成之外,人们可能更喜欢编译为 C 或 C++ 的东西。我希望能够编写低级代码并与 C 紧密接口,所以常规 Go 不是和选项。但是我可以没有垃圾收集和 goroutines。
      【解决方案5】:

      不要改变语法,而是考虑改变抽象:使用自定义的 DSL 增加抽象。工具支持对于达到最佳生产力是必要的。

      如果您的目标是简化,那么基于文本(如XText)、基于图形(如MetaEdit+)或基于树(如AtomWeaver)的轻量级建模方法将消除一些复杂性通过简化解决方案进行项目。

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 2013-08-13
        • 2011-08-24
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        相关资源
        最近更新 更多