东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

LLVM 和 Ruby 近况:llvmruby、yarv2llvm 以及 regexpllvm、Rubinius

  • 2008-10-21
  • 本文字数:1475 字

    阅读完需:约 5 分钟

Llvmruby llvmruby 的 GitHub 代码库)是由 Tom Bagby 开发的项目。它提供 Ruby 对 LLVM 的绑定。Llvmruby 与 Ruby 可以良好的集成。例如,下面的代码可以添加一个 add 指令(codeblock 是指令构造器)。

复制代码
codeblock.bin_op(Instruction::Add, 41.llvm, 1.llvm)

Llvmruby 重新打开了 Object 并将 llvm 添加进去,以便可以将其转换成 LLVM 可以处理的值。

在按照 README 的使用说明做完以后(包括获取和编译 LLVM 以及编译 llvmruby),就可以开始进行实验了,例如使用 irb。这有一个示例会话(其中一些示例代码是取自于 llvmruby 项目):

复制代码
# Set up LLVM
>> require 'llvm'
=> true
>> include LLVM
=> Object
>> m = LLVM::Module.new("test_module")
=> ; ModuleID = 'test_module'
# Create a function type - the second argument is the method signature,
# ie. the return type and the types of the arguments
# In this case, there are no return values or arguments
>> type = Type::function(MACHINE_WORD, [])
=> #
>> f = m.get_or_insert_function("test", type)
=>
declare i32 @test()
# Create an LLVMBuilder object which allows to call methods and
# generate instructions
>> builder = f.create_block.builder
=> #
# Create an Add instruction - note how it's possible to pass regular Ruby Fixnums
>> ret = builder.bin_op(Instruction::Add, 41.llvm, 1.llvm)
=> #
>> fcode = builder.return(ret)
=> #
>> ExecutionEngine.get(m);
=> true
# Finally: execute the generated code
>> ExecutionEngine.run_autoconvert(f)
=> 42

关于 LLVM 的更多信息,请看 LLVM 关于如何为一门简洁的语言实现 JIT 的教程

Miura Hidek 给出了两个更大一点儿的使用 llvmruby 的实例:

  • regexpllvm :将正则表达式转换为 LLVM 代码。
  • yarv2llvm :将 Ruby 1.9 的操作码(1.9 虚拟机在没有成为官方 1.9 虚拟机之前被称为 YARV)转换成 LLVM 代码。它跟随着相似项目前行的脚步,例如 _why 的 Unholy(将 Ruby 1.9 的操作码转换为 Python 虚拟机的操作码)或者 HotRuby(一个用于 Ruby 1.9 操作码的 Javascript 解析器)。和这些项目不同的是,llvmruby 和 Ruby 1.9 虚拟机紧密集成,可以做的事情更加有趣。Regexpllvm 展示了一种加速代码执行的可能,比如将 DSL 编译成 LLVM 操作码。其他系统使用过这种方法,比如 Java 的 XSLT 实现将 XSLT 样式表编译成 JVM 字节码
    另 一种可能:编译 Ruby 代码的热点。此事,如果某段 Ruby 代码遇到性能瓶颈,通常的解决方案是用 C 重写(最理想化的解决方案是等待 Ruby 虚拟机的性能 提升)。通过 llvmruby,有了另一个选择:将 Ruby 代码编译成 LLVM,例如使用 yarv2llvm 来加速。当然,能否可以提供必要的性能加速还 要取决于代码本身。

Llvmruby 可以让你不接触任何 C++ 就能够试用 LLVM,还允许你通过 irb 增量进行尝试。这是一项很有用的特性,比如 Rubinius(此项目正计划使用 LLVM)的贡献者就利用其构建原型系统,以原型化自己的某些主张。Rubinius 团队正忙于使用 C++ 重写虚拟机和清理一些内部问题。这个目前已经在 Rubinius 在 Git 的代码库的 CPP 分支中出现,而且还将 LLVM 作为外部的程序库。C++ 分支很快就会转入主干。根据最近在 Twitter 上发布的消息显示,Rubinius 已经在全新的 C++ 虚拟机上重新获得了运行大量 Ruby 代码的能力。 Eric Hodel 本周在 Twitter 上说道

Rubinius 全新的虚拟机目前已经可以运行核心规格而不会挂掉

Evan Phoenix 最近报告

万岁!IRB 又能在新的 Rubinius C++ 虚拟机下面工作了!

你打算如何在 Ruby 中使用 LLVM 呢?

2008-10-21 01:381609
用户头像

发布了 80 篇内容, 共 19.2 次阅读, 收获喜欢 5 次。

关注

评论

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

首次代币发行(ICO)的成功:概念化、理论和系统分析

区块链软件开发推广运营

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

Chrome不支持正则搜索?那我们自己写一个

JYeontu

前端 chrome扩展 浏览器插件 Chrome插件 Chrome Extension

软件测试学习笔记丨Pytest常用的异常处理方法

测试人

软件测试

成为Flask专家:利用蓝图实现功能模块化管理的关键路径

测吧(北京)科技有限公司

测试

国际化物联网卡解决方案立项一周年

IoTOS

物联网 IoT eSIM安全 java 技术提升

如何快速提升你的技术能力

老张

自我提升 技术 优化体系

零售饮料企业凭借精准铺货策略与动态调整,通过指标平台精准把脉,赢得线下渠道的主动权

Kyligence

鸿蒙Next升级有便捷的方法?

Geek_2305a8

GaussDB(分布式)实例故障处理

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

探索ORM技术:如何轻松管理数据库并提高操作效率?

测吧(北京)科技有限公司

测试

守护你的在线业务!如何选择合适的服务器高防公司?

一只扑棱蛾子

高防服务器 高防服务器公司

Solana模因币空投方法:使用PandaTool批量转账工具快速完成

加密先生

Solana PandaTool

最全参赛指南!2024 年(第 17 届)中国大学生计算机设计大赛大数据主题赛现已开赛

ModelWhale

大数据 数据分析 交叉学科 中国大学生计算机设计大赛 乡村发展

1688商品详情API在电商平台中的应用与实践

Noah

鸿蒙5.0发布时间已定!移动开发加速器何处寻?

Geek_2305a8

C++中虚表是什么

快乐非自愿限量之名

c++ 算法 开发语言

探索全球加密市场:市场规模、趋势和参与者解析

区块链软件开发推广运营

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

Sol代币发行:探究Solana生态系统中Sol代币的发行

区块链软件开发推广运营

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

Solana链MEME币上传图标、网站的方法:PandaTool工具一键更新

加密先生

民生银行罗京:数据飞轮助力银行提升服务质量

Geek_2d6073

深入分析Java中的PriorityQueue底层实现与源码

华为云开发者联盟

Java 数据结构 开发 华为云 华为云开发者联盟

自定义Key类型的字典无法序列化的N种解决方案

EquatorCoco

Java 开发语言 key

深度解析:DApp钱包燃烧质押合约挖矿系统的开发

区块链软件开发推广运营

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

低代码:软件开发的性价比之王

EquatorCoco

软件开发 低代码 项目开发

潮流风潮:Meme预售疯狂背后的原因和趋势分析

区块链软件开发推广运营

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

Docker Kill/Pause/Unpause命令详细使用指南

霍格沃兹测试开发学社

人大金仓助力国家电网调度中心培养国产数据库专家人才

科技热闻

干货满满丨万字超全 ElasticSearch 监控指南

腾讯云可观测平台

Elastic Search

什么是设计模式?

不在线第一只蜗牛

数据库 设计模式

纯血鸿蒙来了!鸿蒙App开发需如何提速

Geek_2305a8

连接数据,畅通协作!企业数字化管理再升级

聚道云软件连接器

案例分享

LLVM和Ruby近况:llvmruby、yarv2llvm以及regexpllvm、Rubinius_Ruby_Werner Schuster_InfoQ精选文章