Ruby 2.x 源代码分析:扩展 概述

前言

本文从 require 语句入手为大家揭开 Ruby 扩展(ext)的面纱

require

我们知道 require 语句可以引入模块,就像 java 里面的 import 语句可以引入类,c/c++ 里面的 include 语句可以引入头文件甚至源文件。但是 Ruby 中的 require 与二者有着本质的不同,它实际上是一个方法(函数)调用,是运行期而非编译期的行为

方法定义

在 Init_load 函数里面定义了 require 方法:

load.c

void Init_load(void)
{
    ...
    rb_define_global_function("require", rb_f_require, 1);
    ...
}

简单起见我们省略掉一些中间函数调用细节,列出 rb_f_require 的调用栈

rb_f_require @ load.c
    rb_require_safe @ load.c
        rb_require_internal @ load.c
            search_required @ load.c

search_required 搜索扩展

在分析 search_required 之前我们先看两个宏定义:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值