[英]Benefits of writing a C extension to Ruby
我是一名新的Ruby程序员,并且正在查看一些教程,用于编写Ruby语言的C代码扩展,我想知道:这样做有什么好处? 我个人正在考虑这个,因为我将来必须为一个班级做一个团队项目,我很确定我是唯一一个做Ruby开发的人,但大多数人都知道C所以我可以让他们写我理论上可以在我自己的Ruby开发中使用的C代码。 但通常情况下,这是做这件事的主要原因还是我不知道的事情? 另外,我的想法是否适用于你的观点(当我将其集成到Ruby中以进行整体项目时,有人进行C开发)? 你能用其他语言做类似的事情(即你可以用Ruby代码和Python代码等)吗?
这样做的主要原因是速度和现有功能的重复使用。
首先,速度。 C通常比Ruby快得多,因为您可以避免使用Ruby VM并且可以进行手动内存管理。 在应用程序的性能关键部分(例如数据库驱动程序)中,这可能意味着整个应用程序运行时间的显着改进,主要是因为您没有生成大量的Ruby对象来包装基元,并且不必调用垃圾收集器自行清理。
其次,通过编写C扩展,您可以与C库中已存在的代码进行交互。 Linux生态系统充斥着功能强大,经过良好测试的C库,可提供许多常用功能。 例如, Nokogiri使用libxml进行解析,这使得它可以使用经过实战考验的快速解析器,然后它就可以在顶部添加漂亮的Ruby糖。 在这种情况下,C扩展的主要目的是提供一个Ruby API,它调用C代码并将数据转换为C-Ruby数据类型(因此您可以将rb_string
作为参数传入,必须将其转换为一个char*
供某些C库使用,然后将结果转换回rb_string
,以便传递给Ruby,例如)。
当使用MRI(股票Ruby)时,你通常只限于C代码,虽然有些方法可以在Ruby中运行Python等等,但它不是同一类型的接口。 如果您使用JRuby,您可以直接使用Java包 - 无需特殊扩展!
也就是说,如果您希望将Ruby与现有的C库接口,请查看ruby-ffi 。 它提供了许多功能,使得编写C库的接口变得非常简单,并且可以让您快速轻松地启动和运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.