【发布时间】:2014-01-16 19:58:10
【问题描述】:
一个看似不寻常的快速问题。 (反向)
而不是从解释语言调用本机代码;有没有办法将 Java 或 Python 代码编译为 .dll/.so 并从 C/C++ 调用代码?
我什至愿意接受诸如手动生成解释器或 JVM 并强制它读取 .class/.py 文件的答案。 (这是一个好的解决方案吗?)
谢谢。
【问题讨论】:
-
您为什么要这样做?有很多选择,但如果不知道您要做什么,就很难知道哪一个对您有意义。
-
我的 C++ 网络系统的某些部分对性能不是那么关键,但它们需要大量的高级抽象。所以我决定用一种更快(在开发方面)的语言分别编写它们。
-
通常,网络系统中对性能至关重要的唯一部分是核心网络环路。像
gevent、asyncio、twisted等 Python 库通常比你用 C++ 编写的任何东西都快(以及跨平台、更少错误、更易于使用等),所以根本没有理由使用 C++。当然,如果您在套接字多路复用之外还有其他受 CPU 限制或需要核心并行性或与没有绑定的第三方 C 库通信的其他事情,您可以用 C++ 编写 它们,但是将这些部分组织成扩展模块通常很容易。 -
对不起,我有点粗体,但我认为 Python 库或任何其他语言/库都无法提供与 Winsock 和 C 的 IOCP 相同的速度或灵活性;/
-
这些库的核心部分是用高度优化的、特定于平台的 C 代码编写的,然后向 Python 公开一个简单的 API 以在其之上构建您的应用程序。如果您有一个网络编码专家团队构建单平台流服务器,并且优化可扩展性是您项目的核心目标,那么是的,您显然可以击败这样的库。如果你是一个知道如何编写像样的 IOCP 应用程序的人,那么你就不会这样做。