Java 向Ruby编写C扩展的好处

Java 向Ruby编写C扩展的好处,java,ruby-on-rails,c,ruby,Java,Ruby On Rails,C,Ruby,我是一名新的Ruby程序员,一直在阅读一些为Ruby语言编写C代码扩展的教程,我想知道:这样做有什么好处?我个人一直在考虑这个问题,因为我将来要为我所在的班级做一个团队项目,我很确定我是唯一一个做Ruby开发的人,但是大多数人都知道C,所以我可以让他们编写C代码,理论上我可以在我自己的Ruby开发中使用。但通常情况下,这是做这件事的主要原因还是有什么我不知道的?另外,在您看来,我的想法行得通吗(让某人进行C开发,而我将其集成到Ruby中进行总体项目)?你能用其他语言做一些类似的事情吗(比如,你能

我是一名新的Ruby程序员,一直在阅读一些为Ruby语言编写C代码扩展的教程,我想知道:这样做有什么好处?我个人一直在考虑这个问题,因为我将来要为我所在的班级做一个团队项目,我很确定我是唯一一个做Ruby开发的人,但是大多数人都知道C,所以我可以让他们编写C代码,理论上我可以在我自己的Ruby开发中使用。但通常情况下,这是做这件事的主要原因还是有什么我不知道的?另外,在您看来,我的想法行得通吗(让某人进行C开发,而我将其集成到Ruby中进行总体项目)?你能用其他语言做一些类似的事情吗(比如,你能用Java代码和Ruby项目、Python代码等等)?

这样做的主要原因是速度和对现有功能的重用

首先是速度。C通常比Ruby快得多,因为您可以避免Ruby VM,并且可以进行手动内存管理。在性能关键的应用程序中(例如,数据库驱动程序),这可能意味着整个应用程序运行时的显著改进,主要是因为您不需要生成大量的Ruby对象来包装原语,也不需要调用垃圾收集器来清理

其次,通过编写C扩展,您可以与C库中已经存在的代码进行交互。Linux生态系统中有许多功能强大、经过良好测试的C库,用于实现许多常见功能。例如,用于它的解析,它允许它使用经过战斗测试的快速解析器,然后它只是在上面添加了漂亮的Ruby sugar。在本例中,C扩展的主要目的是提供一个RubyAPI,该API调用C代码,并将数据转换为C-Ruby数据类型和从C-Ruby数据类型转换数据(因此,您可以将
rb_字符串
作为参数传递,该参数必须转换为
char*
以供某些C库使用,然后将结果转换回
rb_字符串
,以传递回Ruby)

当使用MRI(stock Ruby)时,您通常仅限于C代码,虽然在Ruby和诸如此类的软件中有运行Python的方法,但它不是同一类型的接口。如果您使用JRuby,您可以直接使用Java包-无需特殊扩展


也就是说,如果您希望将Ruby与现有的C库进行接口,请看一看。它提供了许多功能,使编写C库接口变得非常简单,并且可以让您快速、轻松地启动和运行。

这样做的原因之一是您希望用其他语言绑定应用程序/库。0mq有很多不同语言的绑定。这些绑定是代码扩展(大部分是用C编写的)。所以这是有原因的。