我是一名新的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库的接口变得非常简单,并且可以让您快速启动并运行容易.
原文地址:https://codeday.me/bug/20190826/1726159.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。