【问题标题】:A language that can seamlessly interop with C++? [closed]一种可以与 C++ 无缝互操作的语言? [关闭]
【发布时间】:2014-05-10 07:12:16
【问题描述】:

我喜欢尝试许多不同的编程语言,但我永远无法在实际项目中真正使用其中的许多语言,因为我需要的所有重要库都是用 C++ 编写的。

通常我必须编写一个相当耗时的 C 接口,所以我想知道是否存在一种可以无缝调用任何 C++ 代码的编程语言?

【问题讨论】:

  • SWIG 之类的东西会让你痒痒吗?
  • 不同的 C++ 编译器之间甚至不兼容。任何其他语言都更是如此。
  • @Torino 大概这样的项目会编译 C++ 代码本身,可能通过捆绑的 GCC,因此可以避免交叉编译器不兼容。
  • 我们经常将 Python 与 SIP 结合使用,但无论如何它是一个 PITA(对于大多数其他包装器生成器来说似乎也是如此)。

标签: c++ programming-languages


【解决方案1】:

C++ 中的许多函数都在头文件中定义,并希望编译到使用它们的每个应用程序中。它偶尔也会发生在 C 中,但在 C++ 中更为常见,尤其是模板类的类成员无法预先为每个潜在的模板实例化提供:有无限多。

如果与 C++ 的兼容性需要完整的 C++ 解析器和编译器,那么您并没有真正拥有不同的语言,而是拥有带有扩展的 C++。即使这些扩展之一是使部分代码看起来不像 C++,它也增加了巨大的复杂性而没有什么好处。

如果您不需要与 C++ 完全无缝的兼容性,则在某些语言中提供有限的兼容性。有 D 的 Interfacing to C++,描述了哪些有效、哪些无效以及为什么无效。

【讨论】:

    【解决方案2】:

    有一种实验性语言可以做到这一点,但只有一个开发人员(我自己),而且它还处于开发的早期阶段,所以现在还没有用。

    Here's a simple sample program:

    Main() {
        cpp("iostream").std.cout << "Hello, World!";
    }
    

    FTR,编译此示例需要 ADL、OR、模板实例化、ABI 合规性、解析有问题的 C++ 标头以及许多有趣的东西。

    【讨论】:

    • 为了让这个答案有点用,你至少应该提供一个链接。
    • 那假设我已经为它建立了一个有用的网站。我没有。这是我业余时间的一个人的努力。我花时间写它,而不是写它。反正我的网站设计很烂。
    • 需要帮助吗?我需要一个新项目。
    • 语言没用意味着答案没用。这个问题并不纯粹是理论上的。
    • 这个问题没有说明任何这样的事情。他只问它是否存在。确实如此。只是还没有真正准备好迎接黄金时段。
    【解决方案3】:

    没有一种语言可以与 C++ 无缝互操作。 C接口是个好主意。重要的是不要从模块中导出所有/许多功能,因为您注意到这很耗时。专注于一次解决一个问题,并将解决这个问题的函数导出到C中。

    另一方面,如果您确实需要将许多函数甚至类公开给其他语言,则可以使用 SWIG。阅读它的文档,您会注意到在创建包装代码时需要处理多少问题。那是因为任何两种语言都不同,你无法改变它。解决这个问题的方法是使用两种语言最大的通用接口——C。

    【讨论】:

    • C has no standard ABI,或者。
    • 猜猜可惜我已经建立了一种可以做到这一点的语言。
    • 好的,我已经编辑了没有标准 ABI 的部分。但是@FredOverflow,请注意,它具有事实上的每个平台标准 ABI。至少在 Linux、Windows 和 OSX 上。
    • @DeadMG 您可以构建一种具有 C++ 兼容性的语言,但它会与 Mingw 对象链接吗?它会与 MSVC 对象链接吗?它会与 OSX 上的 libstdc++ 和 libc++ 兼容吗?你支持 SEH 和 DWARF2 异常吗?你支持模板吗?如果是这样,您构建的语言可以与 c++ 无缝互操作。
    • @cubuspl42:其中一些正在进行中,但有些已经完成。我确实支持模板,我确实与 MinGW 对象链接,并且我与 libstdc++ 和 libc++ 兼容(虽然可能不是 OSX,我目前只在 Linux 和 Windows 上构建)。至于 MSVC 的 ABI,在 Clang 对它的支持完成之前,我什至无法开始研究它。
    【解决方案4】:

    满足您要求的唯一解决方案是V8 / Javascript from Google

    是我所知道的用 C++ 编写的脚本语言的唯一实现,而且 API 本身也通过 C++ 公开。

    缺点是这不是一个简单的项目,不能在任何平台上完全可用,它是根据 Google 的需要开发的,没有指南或标准,例如 C++ 由每个发布的 ISO 文档进行版本控制当一个新的里程碑出现并且每个里程碑都定义了标准时,V8 更像是一个正在进行的项目,有一些很大的空白,特别是在不变性、标准化和并发性方面。

    例如,没有什么可以阻止 Google 将整个 API 集从一个版本更改为另一个版本,除非您指望一个非常大的团队,否则我怀疑您能否跟上。

    【讨论】:

    • 伙计,您是否尝试过将 C++ 与 V8 集成?这与 Lua、CPython 等一切都是一样的。 +没有稳定的API。它只是......用 C++ 实现。
    • @cubuspl42 OP 询问了与 C++ 的无缝互操作性,而不是简单的解决方案:D。如果您知道任何其他具有 C++ 实现的语言,欢迎您报告它,我不知道用 C++ 编写的其他任何东西。
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多