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

相關文章
相關標籤/搜索