当前位置: 首页 > news >正文

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 之前我们先看两个宏定义:

相关文章:

  • 淘宝网Open API 入门教程
  • css3中追加的三种选择器
  • 终于安装成功了
  • angular2开源库收集
  • 如果爱能早点说出来
  • 数据库设计中的14个关键技巧
  • 二分查找模版
  • 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(三)商业逻辑代码部分...
  • [每日一点]msgsnd函数代码跟踪
  • 硬币
  • 数字化管理(Digital Management)
  • 【生活】2017 开始!
  • UNIX IO---再谈文件描述符
  • HTML5 拖放(Drag 和 Drop)详解与实例
  • ⒍环境变量
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Bootstrap JS插件Alert源码分析
  • CEF与代理
  • express.js的介绍及使用
  • iOS 系统授权开发
  • JS字符串转数字方法总结
  • Promise面试题,控制异步流程
  • Redash本地开发环境搭建
  • sessionStorage和localStorage
  • springboot_database项目介绍
  • Spring声明式事务管理之一:五大属性分析
  • vue-router 实现分析
  • 工作中总结前端开发流程--vue项目
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 突破自己的技术思维
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 我与Jetbrains的这些年
  • #考研#计算机文化知识1(局域网及网络互联)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (8)STL算法之替换
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (SpringBoot)第二章:Spring创建和使用
  • (二十四)Flask之flask-session组件
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计高校学生选课系统
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET6实现破解Modbus poll点表配置文件
  • .NET的微型Web框架 Nancy
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .so文件(linux系统)
  • @hook扩展分析
  • [@Controller]4 详解@ModelAttribute