写点什么

Rubinius:深入字节码编译器和外来函数接口

  • 2007-10-26
  • 本文字数:1164 字

    阅读完需:约 4 分钟

最近的两篇关于 Rubinius 的文章中的第一篇是 Giles Bowkett 所撰写的, Giles 在尝试开始参与Rubinius 编译器的开发。Rubinius 编译器通过遍历 Ruby 抽象语法树(Abstract Syntax Tree,AST)进行工作,AST 使用 ParseTree s 表达式(s-expressions)以树状形式展现 Ruby 的源码。这意味着它是一个使用符号来描述数据的数组。例如,它可能看上去如同:

[:call, [:lit, 1], :+, [:array, [:lit, 1]]]字面量(Literal)看上去像这样:

[:lit, 42]为了遍历 AST,ParseTree 使用了 SexpProcessor 库,这个库可以方便访问者的创建。为了分析一个 Ruby AST 的所有的节点类型,需要建立一个具有 process_XXX 方法的 SexpProcessor 的子类,XXX 须是节点的名字。例如,要处理的是:alias节点,就得定义:

def process_alias(node)<br></br> cur = node.shift<br></br> nw = node.shift<br></br> # ...<br></br>endRuby 到 Rubinius 字节码编译器正是基于此方式构建的。例如,一个 Ruby 的alias调用被分析成[:alias, :old_name, :new_name],编译器会做如下处理:

def process_alias(x)<br></br> cur = x.shift<br></br> nw = x.shift<br></br> add "push :#{cur}"<br></br> add "push :#{nw}"<br></br> add "push self"<br></br> add "send alias_method 2"<br></br>end编译器获取到旧的名字(对应cur变量值)和新的名字(对应nw变量值),建立实现功能所必需的字节码指令(使用字符串),既而转换成由 Rubinius 解释器执行的二进制字节码。

拥有用 Ruby 写成的编译器让我们更加容易洞悉其内部工作机理并做出实验性的修改。有用的场景可能包括对生成的代码进行操作或者以低耗方式来搜集有关于被编译代码的统计数据。

想要浏览 Rubinius 的源代码,可以参阅InfoQ 上关于Rubinius 开发入门的文章,或者查看 Rubinius 的在线源代码,例如 Rubinius 当前版本的字节码编译器

对 Rubinius 而言,编译器不是其仅有的必要条件,一个完善的标准库也是必不可少的。Red Artisan 的 Marus Crafter 提供了一个教程,教大家如何向Rubinius 添加类库功能。这个教程讲解了如何使用Rubinius 的外来函数接口 foreign function interfaceffi)访问本地类库调用native library calls)。这可以用来实现一些缺失的类库功能,在这个教程中实现类库功能是 POSIX 的link调用。

查看英文原文: Rubinius: Inside the Bytecode Compiler and Foreign Function Interface - - - - - -

译者简介:孙向晖,儿子小名“豆豆”,常被人称为“豆豆他爹”。1998 年开始步入 IT 行业,现任浪潮软件质保中心副主任。专注于研究和实践 MDA/UP/UML/SCM 等相关技术在团队中的大规模应用,对产品化的软件项目管理、需求管理和配置管理略有心得。他的博客为 http://blog.csdn.net/xiaosun/ 。参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com

2007-10-26 12:00728

评论

发布
暂无评论
发现更多内容

Macos视频下载工具:Downie 4 支持M1

彩云

视频下载 downie 4

立冬礼物已送达,小艺陪你开启“暖冬”模式

最新动态

大模型训练,推动NLP发展的强大引擎

百度开发者中心

自然语言处理 大模型训练 #人工智能

提速30%!HarmonyOS NEXT自动化测试开发效率提升

新消费日报

AI对抗中的AI:技术展望与应用研究

EquatorCoco

人工智能 AI

Adobe Substance 3D Painter(pt3D绘画软件)激活版下载

影影绰绰一往直前

Substance 3D Painter下载 Substance 3D Painter破解

软件测试/测试开发丨接口测试学习笔记,TcpDump与WireShark

测试人

软件测试 接口测试

新手初探Amazon Lightsail,几步构建一个Wordpress服务器

王强

VPS云主机 亚马逊云服务器

大模型时代,程序员的工作还是“写程序”?

SoFlu软件机器人

程序员 软件开发 AIGC java 技术提升

杭州悦数出席 2023 云栖大会计算巢专场,分享云上最佳实践

最新动态

第三方数据测评对比五大品牌HTTP代理!哪家代理最纯净稳定

Geek_bf375d

软件开发全套资料整理下载(投标支撑,立项,研发,测试,实施维护,安全监测,服务巡检,结项,验收支撑)

代码人,代码魂

软件测试/测试开发丨接口自动化学习笔记——响应体断言

测试人

软件测试 接口测试

大模型训练中的高性能计算与通信优化

百度开发者中心

深度学习 大模型 #人工智能

Axure RP Pro8(原型设计工具)汉化特别版下载

影影绰绰一往直前

Axure RP Pro下载 Axure RP Pro破解版 Axure RP Pro中文版

Linux中比cp好用10倍的rsync,你会用了吗

高端章鱼哥

Linux rsync

HarmonyOS应用开发

不在线第一只蜗牛

华为 架构 系统 HarmonyOS

加密货币交易软件开发:树立行业新标准

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

软件测试/测试开发丨接口自动化学习笔记——请求方法构造

测试人

软件测试 接口测试

全方位监控基础设施,坚实守护您的业务稳定!

观测云

监控 基础设施 网络

八个提升编程体验的VS Code插件

这我可不懂

vs-code

DDD技术方案落地实践

EquatorCoco

技术 DDD 教程 教程分享

致敬记者节,合合信息扫描全能王助力新闻工作者构建“随身资料库”

合合技术团队

人工智能 合合信息 扫描全能王 记者节 新闻工作者

Capture One 23 Pro专业版下载(图片编辑软件)

影影绰绰一往直前

Capture One Pro 23 Capture One 破解版 Capture One下载

数据赋能业务,神州数码HR数字画像荣获2023HRoot人力资源管理卓越实践奖

科技热闻

少林寺方丈释永信造访 Meta 总部;OpenAI 正在摧毁创业公司?丨 RTE 开发者日报 Vol.80

声网

SAE 2.0,让容器化应用开发更简单

Serverless Devs

云计算 负载均衡 Serverless

Adobe Photoshop Lightroom中文特别版下载(Lr2024)

影影绰绰一往直前

lr2024 Adobe Lightroom下载 Adobe Lightroom特别版 Adobe Lightroom中文版

AutoCAD 2024 中文版 附 完整图文安装激活教程 支持M1

彩云

mac软件下载 AutoCAD 2024

重庆上百位老师和学生,正在使用这个国产操作系统

OpenCloudOS

Linux 操作系统

前端常用的开发工具有哪些?

互联网工科生

前端框架 前端开发工具 JNPF

Rubinius:深入字节码编译器和外来函数接口_Ruby_Werner Schuster_InfoQ精选文章