gpt4 book ai didi

java - 为 Ruby 编写 C 扩展的好处

转载 作者:数据小太阳 更新时间:2023-10-29 07:50:31 25 4
gpt4 key购买 nike

我是一名新的 Ruby 程序员,一直在浏览一些教程以编写 Ruby 语言的 C 代码扩展,我想知道:这样做有什么好处?我个人一直在看这个,因为将来我必须为我所在的类(class)做一个团队项目,我很确定我是唯一一个做 Ruby 开发的人,但大多数人都知道 C,所以我可以让他们写从理论上讲,我可以在自己的项目 Ruby 开发中使用 C 代码。但通常情况下,这是这样做的主要原因还是有什么我不知道的?另外,您认为我的想法可行吗(让某人进行 C 开发,而我将其集成到 Ruby 中用于整个项目)?您能用其他语言做类似的事情吗(即,您能将 Java 代码用于 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 等等,但它们不是同一类型的接口(interface)。如果你使用 JRuby,你可以直接使用 Java 包——不需要特殊的扩展!

也就是说,如果您希望将 Ruby 连接到现有的 C 库,请查看 ruby-ffi .它提供了许多功能,使编写 C 库的接口(interface)变得非常容易,并且可以让您快速轻松地启动和运行。

关于java - 为 Ruby 编写 C 扩展的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com