我想将一些C代码翻译成Python代码或字节码.有问题的C代码就是我所说的纯算法:独立于平台,没有I/O,只有算法和内存数据结构.
一个例子是正则表达式库.翻译工具将处理库源代码并生成功能相当的Python模块,该模块可以在沙盒环境中运行.
您可以推荐哪些具体的方法,工具和技术?
注意:Python C扩展或ctypes 不是一个选项,因为环境是沙箱.
另一个注意事项:看起来有一个C-to-Java-bytecode编译器,他们甚至将libjpeg编译为Java.Java字节码+ VM与CPython字节码+ VM有太大不同吗?
坦率地说,没有办法机械地和有意义地将C翻译成Python而不会遭受疯狂的性能损失.我们都知道Python并不是接近C速度(使用当前的编译器和解释器),但更糟糕的是C擅长的东西(bit-fiddling,整数数学,内存块的技巧)Python非常慢,什么Python擅长你不能直接在C表达.因此,直接翻译将是非常低效的,甚至是荒谬的.
总的来说,更好的方法确实是将C保持为C,并将其包装在Python扩展模块中(使用SWIG,Pyrex,Cython或手动编写包装器)或使用ctypes直接调用C库.C的所有好处(和缺点)已经是C或者你以后添加的,以及Python中任何代码的Python的所有便利(和缺点).
这不会满足你的"沙盒"需求,但你应该意识到你无论如何都不能特别好地沙盒Python; CPython需要付出很多努力和修改,如果你在某个地方忘记了一个小洞,你的监狱就会被打破.如果你想沙箱Python,你应该首先沙盒化整个过程,然后C扩展也可以沙箱化.