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

前言

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

require

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

方法定义

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

load.c

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

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

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

search_required 搜索扩展

在分析 search_required 以前咱们先看两个宏定义:code

相关文章
相关标签/搜索