例如,一个正则表达式库。翻译工具将处理库源代码并生成一个在沙盒环境中可运行的功能等效的Python模块。
您能推荐哪些具体的方法、工具和技术?
注意:由于环境被沙盒化,Python C扩展或ctypes不是一个选择。
另一个注意事项:看起来有一个C到Java字节码编译器,他们甚至将libjpeg编译成了Java。 Java字节码+VM与CPython字节码+VM差别太大吗?
另一个注意事项:看起来有一个C到Java字节码编译器,他们甚至将libjpeg编译成了Java。 Java字节码+VM与CPython字节码+VM差别太大吗?
x * 1,000,000 = a
y * 1,000,000 = b
a {function} b = result
result / 1,000,000 = z
最快的方法(从程序员的努力而言,不是效率)可能涉及使用现有编译器将C编译成简单的东西(例如LLVM),并且要么:
直接将C翻译成Python是可能的(并且可能比上述方法产生更快的代码),但您本质上是在编写C编译器后端,这是一项巨大的任务。
编辑,随后想到:一个更加快速且粗略的方法是获取C代码的解析树,将其转换为Python数据结构,并在Python中解释。
用纯Python编写一个C解释器?;-)
为什么不保留C代码并创建一个Python C模块,然后将其导入到正在运行的Python环境中呢?
首先,我会考虑使用Pythonic的方式封装现有的C库,以提供一个Python模块形式的API。我会看看swig、ctypes、pyrex以及其他现有的工具。C库本身将保持不变。这样可以节省工作量。
但是如果我真的必须基于C编写原始的Python代码,那么我不会使用任何工具,只会依靠我的大脑。C允许使用指针进行许多有趣的技巧,使用宏进行聪明的操作等等,即使有人向我指出自动化工具,我也永远不会信任它们。
我提到了Pyrex——这是一种类似于C但也面向Python的语言。我没有做过太多的工作,但是鉴于你是以C为指南开始的,使用Pyrex可能比纯Python更容易。
从IDL(科学家喜欢使用的数据语言,而不是其他IDL)等更受限制、更温顺的语言转换很难,需要手动和心理努力。C?别想了,除非UFO人给我们他们的高级软件工具,那可是我们现在技术水平的千年之后的东西!
我个人会使用一个工具从C代码中提取UML图表,然后使用它来生成Python代码。
从这个框架开始,我会摆脱不必要的C风格结构,然后用Python代码填充方法。
我认为这是最安全和最有效的方式。
您可以随时编译C代码,并使用Python中的ctypes加载库。