【问题标题】:Is gradually translating a program written in C++ to Python feasible? [closed]逐步将用 C++ 编写的程序翻译成 Python 可行吗? [关闭]
【发布时间】:2011-08-07 03:33:23
【问题描述】:

这只是一个个人练习/项目,我不打算把它强加给世界。我的目标是加深我对这两种语言的理解,最终拥有一个不错的 Python 代码库会很不错。

但基本上有一个我喜欢的程序有一个大型(大约 100ksloc)C++ 代码库,我想做的是逐渐用 Python 重写模块,同时让现有的 C++ 代码使用新的 Python。我想这样做而不是从头开始的原因是因为应用程序将/应该从一开始就完全正常工作。

主要问题是:这是否现实?我很确定它在理论上可行,但实际上它不值得努力吗?

以前有人做过吗?

【问题讨论】:

  • 试着问一个具体的问题。已经完成了吗?是的。是否“可行”?这是一个见仁见智的问题,取决于你的资源和能力。

标签: c++ python translation boost-python


【解决方案1】:

让现有的 C++ 代码使用新的 Python

我想你会发现 python 为 C++ 提供了比 C++ 为 python 提供的更好的粘合语言。所以你可能会更容易先将 main 函数转换为 python(事实上,第一步可能只是重命名 main 函数,将 C++ 应用程序编译为 python 库,并有一行 python 调用重命名main)。然后开始一行一行地将功能从 C++ 转移到 python。

正如@freedompeace 建议的那样,您可能希望在 C++ 中留下重要的块,python 提供胶水。取决于可移植性还是速度/内存效率对您来说更重要。

【讨论】:

  • 在某种程度上不涉及嵌入吗?如果我走你的路线,新的 Python 代码将如何与现有代码交互?听起来它更像是重写而不是逐步淘汰。假设我从 Python 调用 main() 并用 Python 重写了协议内容。它仍然使用 C++ 代码,我必须编写自己的 main 函数,在这种情况下,我有协议,没有别的,因为 C++ 无法与之交互,问题重复了直到最终我替换了整个应用程序。还是我错过了什么?很难用 char li 表达自己
  • @Josef:从动态语言调用编译语言总是更容易。您首先专注于重写叶函数。我的建议是从python调用main开始,然后下一步就是将main本身转换成python,但它调用的函数仍然是C++。然后开始转换 main 调用的函数。这样 C++ 永远不必调用 python 代码。在重写使用它的代码之前,您不会重写任何协议代码。
  • 我犹豫的地方:“然后你开始转换 main 调用的函数。这样 C++ 就不必调用 python 代码了。”好的,我逐渐转换 main 调用的函数/类并逐步完成。但是 main() 并不是唯一使用这些组件的东西,它们保存动态信息并在整个应用程序中不断重用,我认为这是某种单例设计。似乎会有重复对象/类的混合混合,一个在 Python 中,一个在 C++ 中,每个都包含一半需要但无法访问的信息。我想这个问题超出了我的范围。
  • Ben,希望这能更清楚地说明我的理解失败:dpaste.org/w4D1 state 只是一个例子,不要过多解读变量名。
  • @Josef: obj2 甚至没有状态变量。但是,如果您以其他顺序移植它们,首先Object2 然后Object1,那么您似乎不会遇到这个问题。在整个程序中使用的对象是最后被转换的。您可能必须先进行深度操作,即转换 main 调用的函数之一,而不是移植 main 调用的另一个函数,而是转换已转换的函数调用的函数。你总是在寻找一个只被 python 使用的类或函数。
猜你喜欢
  • 2016-02-10
  • 2010-12-29
  • 2011-02-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2016-10-27
相关资源
最近更新 更多