SWIG:
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及R,甚至是编译器或者汇编的计划应用(Guile, MzScheme, Chicken)。SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。
SWIG是一种C/C++和脚本语言之间的接口编译器,其工作原理大概是使用C库的头文件生成一个包装器,脚本语言得以通过这些包装定义访问C库。包装器一次定义,可使用于所有支持的脚本语言(大约19种左右)。
1 用脚本语言而非C中的main()函数来控制程序流程,这样在做出调整时不需修改C代码和重新编译。事实上,多数大项目都会提供一种脚本语言,宏语言或配置语言为开发者提供灵活性。
2 SWIG使C代码可被快速部署在脚本环境,用于测试或调试,甚至用于最终产品。
3 SWIG使得不同的C模块可被组合进同一个脚本语言环境,并协同工作。
4 SWIG使标准C/C++库可被转换成某种流行脚本语言的组件,当然,是在别人没做过的前提下。
SWIG有时被与接口定义语言(IDL)相比交,比如COM和CORBA,但并不如这些语言一样繁琐。
SWIG出现于1996年2月。 主要用途是为c/c++程序员提供一种增加脚本语言到自己程序中的手段。
CTypes:
ctypes已经成为python标准的一部份。ctypes是一个python的外部函数库,它提供C兼容的数据类型,允许调用C的dll和动态库,可用于将这些库在纯python中打包。
Pyrex:
python已经有非常容易扩展出C和C++模块的工具,为何还要设计Pyrex?
已有工具需遵循模板代码,还要处理C和python间的数据类型转换。基本类型转换还好,但是涉及python对象时,在C库中需要处理引用计数,逐步查错和出错时清理属性,并且难于调试。
比如广为人知的SWIG,它使用定义文件来生成C扩展模块,一般而言你不需了解Python的C API,但是在你在Python和C之间重组数据时需使用API调用。另外SWIG无助于你想创建自己的Python内建类型的时候。
另一种工具是Pyinline,它允许你将C代码写在python文件中,并自动生成C扩展,但它同样只能处理基本数据类型的转换。
而Pyrex可以象SWIG同样好的处理基本类型转换,并且它可以让你以简单自然的方式写代码完成C数据类型和Python类型的转换,而不需了解任何Python/C API。你即不需要提心引用计数和错误检 它由Pyrex在后台自动处理,并且Pyrex可以让你自定义新的内建Python类型,就象在Python中定义新类一样简单。
然而目前 Pyrex仍不支持一些Python或C的语言特性。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/414.html