当前位置: 首页 > 面试题库 >

在Go(golang)中编写Ruby扩展

吴开宇
2023-03-14
问题内容

是否有一些有关如何在Go中编写Ruby扩展的教程或实践课程?


问题答案:

Go
1.5添加了对构建共享库的支持,这些共享库可从C(因此可以通过FFI从Ruby)调用。这使该过程比1.5版之前的版本(需要编写C胶合层)更容易,并且现在可以使用Go运行时,这在现实生活中实际上是有用的(以前无法进行goroutine和内存分配,因为它们需要Go运行时,如果Go不是主要入口点,则该运行时将无法使用)。

goFuncs.go:

package main

import "C"

//export GoAdd
func GoAdd(a, b C.int) C.int {
    return a + b
}

func main() {} // Required but ignored

请注意,//export GoAdd每个导出的功能都需要注释。之后的符号export是函数的导出方式。

goFromRuby.rb:

require 'ffi'

module GoFuncs
  extend FFI::Library
  ffi_lib './goFuncs.so'
  attach_function :GoAdd, [:int, :int], :int
end

puts GoFuncs.GoAdd(41, 1)

该库构建有:

go build -buildmode=c-shared -o goFuncs.so goFuncs.go

运行Ruby脚本会产生:

42


 类似资料:
  • 问题内容: 我目前使用Cython链接C和Python,并以慢速的python代码获得加速。但是,我想使用goroutines实现非常慢(且可并行化)的代码,但是必须可以从python调用它。 如果有必要,我很乐意通过C(或Cython)来建立数据结构等,但是从错误修复/避免的角度来看,避免这种额外的层将是一件好事。 无需重新发明轮子的最简单方法是什么? 问题答案: 更新2015 :从Go 1.5

  • 本文向大家介绍使用C++来编写Ruby程序扩展的教程,包括了使用C++来编写Ruby程序扩展的教程的使用技巧和注意事项,需要的朋友参考一下 Ruby 最酷的功能之一就是使用 C/C++ 定义的应用程序编程接口 (API) 扩展它。Ruby 提供了 C 头文件 ruby.h,它随附提供了许多功能,可使用这些功能创建 Ruby 类、模块和更多内容。除了头文件,Ruby 还提供了其他几个高层抽象来扩展基

  • 只是将Eclipse迁移到Android Studio,在不知道多少快捷方式的情况下费尽周折,导入扩展类方法,如“右键单击->源码->覆盖/实现方法”,然后实现方法。这里我没有找到源选项。我怎样才能包括那些方法。请帮助我尽快得到这个,因为现在我正在键入他们。

  • 经过了一段时间的折腾,现在大致也有所了解了。于是乎准备把这些内容整理一下,然后就有了这本电子书。当然如果要在Ruby中调用C,现在来说可以有多种方法实现。而直接使用C来编写Ruby扩展的方法显得略有些过时了,但是不管怎样它也是一种比较有效的方法。

  • 在Ruby中扩展Ruby的新功能是很容易的,如果你用c来写底层的代码,那么我们就能更好的扩展Ruby的功能。 用c来扩展ruby是非常简单的事情。比如,我们我们在为Sunset Diner and Grill建造一个基于internet的自动点唱机,它将从硬盘播放mp3文件或者从cd唱机播放cd音频。我们想从ruby程序中控制硬件系统,硬件提供商为我们提供了一个C语言的头文件,和一个二进制的实现库

  • 问题内容: 在python中,我们使用反斜杠表示当前语句继续到下一行 例如, 或者简单地说, 可以用Go语言做到这一点吗?谢谢 问题答案: 当然可以,只需将运算符放在最后,例如: 另请注意,不可能在操作员之前中断换行。以下代码 无效 : 该规则在此处和规范中进行了描述。