23、深入探索:用C语言扩展Ruby的技术与实践

深入探索:用C语言扩展Ruby的技术与实践

1. 用C扩展Ruby的概述

在Ruby中编写代码来扩展其功能相对容易,但有时需要与底层事物进行交互。一旦开始添加用C编写的底层代码,扩展的可能性就变得无穷无尽。例如,为Sunset Diner and Grill构建一个定制的联网点唱机,它可以播放硬盘上的MP3音频文件或CD点唱机中的音频CD,并且希望通过Ruby程序控制该点唱机的硬件。硬件供应商提供了C头文件和二进制库,我们的任务是构建一个Ruby对象,使其能够进行适当的C函数调用。

2. 编写第一个扩展

为了介绍扩展编写,我们来编写一个简单的扩展。这个扩展纯粹是对扩展编写过程的测试,它所实现的功能用纯Ruby也能完成。以下是对应的Ruby类:

class MyTest
  def initialize
    @arr = Array.new
  end

  def add(obj)
    @arr.push(obj)
  end
end

对应的C代码如下:

#include "ruby.h"
static int id_push;
static VALUE t_init(VALUE self)
{
    VALUE arr;
    arr = rb_ary_new();
    rb_iv_set(self, "@arr", arr);
    return self;
}
static VALUE t_add(VALUE self, VALUE obj)
{
    VALUE 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值