使用JRuby生成JVM代码

尽管JRuby的性能已经接近CRuby了,但有时它仍然不够快。CRuby的用户可以使用Ryan Davis的RubyInline库,它提供了对C/C++的内建支持以便更容易的产生Ruby的C扩展。来自JRuby阵营的Charles Nutter现在已经为JRuby实现了一个RubyInline builder ,它可以即时编译嵌入的Java代码。

下面是Ryan Davis提供的使用C编写的一个阶乘计算方法的示例:

class MyTest
 inline do |builder|
 builder.c "
  long factorial_c(int max) {
   int i=max, result=1; 
   while (i >= 2) { result *= i--; }    
   return result;     
  }
 "
 end
end 

下面是Charles提供的相应的JRuby实现 :

class FastMath
 inline :Java do |builder|
   builder.package "org.jruby.test" 
   builder.java "
   public static long factorial_java(int max) {
    int i=max, result=1;
    while (i >= 2) { result *= i--; } 
    return result;       
   }
   "
 end
end  

RubyInline for JRuby的一个缺点在于其需要Java 6 JDK(对于编译器),它可能还无法在所有系统上都可使用。

另一个可产生快速执行代码的方法就是直接产生JVM字节码。对于正常的应用来说,这听起来有些过激了,像编译器这样的字节码生成工具会从一个简单的字节码生成DSL中获益,就像早前Charles Nutter的博客中提到的那样。然而即便通过DSL来生成字节码也并非易事。以下是Charles的博客中的一个例子:一个名为bar的方法将小写的String参数加到传进来的ArrayList中,下面就是产生的代码:

def test_class_builder
 cb = Compiler::ClassBuilder.build("MyClass", "MyClass.java") do
 [...]     
 method(:bar, ArrayList, String, ArrayList) do
  aload 1  
  invokevirtual(String, :toLowerCase, String)  
  aload 2       
  swap
  invokevirtual(ArrayList, :add, [Boolean::TYPE, Object])   
  aload 2     
  areturn
end
[...]  

Charles Nutter还提供了一个新方案,这就是叫做Duby的新语言,它实现了Ruby语法的一个子集,增强了一些类型推断逻辑(请访问Charles的博客来了解更多信息),以此来生成快速的字节码。下面同样是计算阶乘的方法,这次是针对Duby编译器而写的。

class Fac
 def self.fac(max)
  {max => :int, :return => :int}
  i = max
  result = 1
  while i > 1
   result *= i
   i -= 1 
  end
  result
 end
end 

这是一个原型,用来展现以一种类Ruby语言而不是一种新语言来实现类型推断的可能性。它还可被JRuby程序员所用,以避免因为性能问题而回退到Java,或者用来实现JRuby本身的一些部分功能,这与Squeak Smalltalk的Slang很像,它是Smalltalk语言的一个子集,可以很轻易的转化为C。Rubinius计划使用叫做Garnet的类似方法。现在,对于JRuby来说,你想使用何种代码生成方式呢?

别再对着手册发愁了!手把手教你读懂MIPI-DSI初始化命令(以Rockchip平台为例) 本文深入解析MIPI-DSI初始化命令在Rockchip平台的应用,帮助嵌入式工程师快速掌握LCD屏幕调试技巧。从协议基础到实战指南,详细拆解命令格式、DCS与Generic命令的区别,并提供Rockchip平台的调试全流程与高级技巧,解决常见显示问题。 阅读详情

相关推荐

通义千问对接FreeSWITCH实现大模型呼叫中心

通义千问是由阿里云开发的大规模语言模型,具备优秀的自然语言处理能力,支持文本生成、问答对话、摘要提取等多种任务。它不仅拥有丰富的知识储备,还能根据上下文灵活调整回答策略,适用于各种复杂场景下的自动化交流。FreeSWITCH是一个开源的多媒体通信服务器,提供了包括VoIP通话、即时消息传递在内的多种通信服务。它的模块化设计允许开发者根据实际需求定制功能,广泛应用于企业级通信系统中。通过集成通义千问,FreeSWITCH能够实现更智能的客户服务体验。

技术永不眠 Q:53195017 1498

jruby语言_使用JRuby的JVM多语言实验

jruby语言 业余技术项目的好处是您可以自由地探索和学习新事物。 有时,这种自由会使项目切线进行,尤其是在您进行探索的情况下。 前一段时间,我正在从事一个多供应商软件开发项目。 我们很难使开发人员遵循Git提交消息准则,并且多次询问无济于事,所以我认为我应该为此目的实施技术解决方案。 我们的存储库托管在GitHub上,因此我研究了接收后挂钩机制,学习了一些Ruby,并实现了自己的服务挂钩...

333

SAP中寄售结算规则及要点分析

在做MRKO寄售结算时,系统会根据选定的期间和供应商等条件,将符合条件的寄售消耗或寄售上线的物料凭证找出。然后以供应商为单位。合并产生一张会计凭证。下图显示了通过MRKO结算后自动生成的会计凭证。 那么,在MRKO做寄售结算的规则是什么样的?做为寄售业务处理者的物流和财务需要掌握和了解哪些关于寄售结算的规则和控制逻辑。下面以笔者的经验分析一下: 1、寄售物料在系统中有两种处理方法,一种是通过MB1B 411 K ,通常该操作达到两个目的:将物料从仓库转移到线边库(表示即将要投入生产了)的同时将寄售库

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 8296

jruby编写java_JRuby的状态:1.5,AOT,Java 7

jruby编写java JRuby 1.5已经发布 ,InfoQ借此机会赶上了JRuby的Charles Nutter ,讨论了发行版中的重大变化,当前和未来JVM上JRuby的未来等等。 InfoQ JRuby 1.5中AOT的状态是什么? 我们一直都有一个提前编译器,可以在.class文件中生成预编译的Ruby代码。 但是缺少一些东西: *这些预编译的文件将继续生成“调用程序”,并生...

cunfu6353的博客 379

SpringBoot+Flowable 6.8.0实战:5分钟搞定免登录流程图设计器

本文详细介绍了如何通过SpringBoot与Flowable 6.8.0深度整合,快速实现免登录流程图设计器的集成方案。通过排除默认安全配置、自定义安全策略和用户模拟服务,开发者可在5分钟内完成设计器的部署,适用于快速原型开发和企业内部工具搭建。

weixin_29204205的博客 278

CVAEGAN实现锂离子电池EIS数据增强:基于健康状态的阻抗谱生成

本文提出了一种基于CVAEGAN的锂离子电池EIS数据增强方法。该方法结合了变分自编码器和生成对抗网络的优点,能够根据指定的健康状态(SoH)生成高质量的EIS阻抗谱数据。文章详细介绍了数据预处理流程、模型架构设计(包括编码器、解码器和判别器),并提供了完整的PyTorch实现代码。通过条件生成的方式,该方法可以有效解决电池健康评估中标注数据不足的问题,为基于数据驱动的电池诊断提供更丰富的训练样本。实验结果表明,生成的EIS数据具有良好的真实性和多样性,可用于增强电池健康状态评估模型的性能。

huanghm88的专栏 497

初识JRuby之入门

首先,Jruby的官方站点是http://jruby.org/,最详尽的资料都在那里。至于为什么选择JRuby,官方站点上列举了诸如jvm的普及以及性能等等优点,但我想最简单的回答就是,我喜欢用ruby编程,而大多数不再充电的老板还固守着java,相对于ruby,java这个词本身先产生了50%的安全感,所以这可能是比较贴近现实的选择。不过我今天想去倒腾倒腾这个东西,则完全是为了了解ruby的方方

压碎起重机 1665

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

JRuby 9.2.7.0 发布,Java 的 Ruby 解释器

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> JRuby 9.2.7.0 发布了,...

cpongo5 289

MacBook Air老本重装系统

手里的这个本子型号是A1466,cpu i5,4G内存,硬盘ssd 120G。 重装系统可以在原系统上升级到更新版本,或者用U盘安装。 先确定,这个本子可以安装什么系统。 最权威的信息当然是apple的官网,地址:https://support.apple.com/zh-cn/HT211683 在“检查兼容性”中,可以依次检查每个系统兼容的硬件型号。Mojave是A1466能安装的最高版本。 确认兼容性后,下一步就是下载安装文件。还是这个页面稍下面一点可以找到。 这里告诉用户文件可以在什

bigwood99的博客 2万+

TMS320F28377D双核开发例程 - DSP开发

首先,我们需要创建一个新的工程来进行开发。然后,选择适当的目标设备为TMS320F28377D,并设置工程的名称和存储位置。在上面的代码中,我们定义了一个128个元素的输入数组和输出数组。然后,我们使用一个简单的数字信号处理算法,将输入数组中的每个元素平方,并将结果存储到输出数组中。这个芯片的双核架构提供了更高的计算能力和灵活性,使得数字信号处理的开发更加高效和可靠。希望本文对您有所帮助!当应用程序在TMS320F28377D芯片上运行时,它将对输入数组中的每个元素进行平方运算,并将结果打印出来。

IfllUnity的博客 2517

JVM----Class类文件结构

JVM平台无关性 Java具有平台无关性,也就是任何操作系统都能运行Java代码。之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次编写,处处运行”。而JVM不仅具有平台无关性,还具有语言无关性。平台无关性是指不同操作系统都有各自的JVM,而语言无关性是指Java虚拟机能运行除Java以外的代码!这听起...

aier0323305的博客 163

【Bug已解决】Auto mode cannot determine the safety of an action — Claude Code 自动模式安全判断失败解决方案

将已知安全的操作添加到白名单,分类器不再拦截这些操作。# 步骤 1:编辑 Claude Code 配置"Read","Write"EOF# 步骤 2:白名单中的操作将自动通过# 不在白名单中的操作仍需分类器判断# 步骤 3:重启 Claude Codeclaude方案适用场景推荐指数难度方案一:手动审批偶发回退,安全优先⭐⭐⭐⭐⭐低方案二:/compact 压缩上下文超限导致⭐⭐⭐⭐低方案三:拆分步骤复杂操作触发⭐⭐⭐⭐低方案四:跳过审批隔离环境,CI/CD。

博客 1万+

Java的java.lang.constant包与常量动态CONDY在动态语言特性中的支持

随着Java平台的不断演进,java.lang.constant包与常量动态(CONDY)机制的引入,为Java注入了新的动态能力。这些特性不仅增强了Java的灵活性,还为元编程、动态代码生成等场景提供了更强大的支持,让开发者能够以更优雅的方式处理运行时动态行为。随着JVM生态的持续演进,Java的动态语言特性支持将变得更加成熟和强大。通过以上几个方面的探讨,可以看出java.lang.constant包与CONDY机制为Java的动态能力提供了坚实基础,使其在保持类型安全的也能灵活应对现代编程需求。

yamrut_861的博客 218

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

axis框架_如何扩展Axis2框架以支持基于JVM的脚本语言

axis框架 本文介绍了如何扩展Axis2框架以支持基于Java虚拟机(JVM)的脚本语言,例如Jython,JRuby等。它提供了对该主题的高级概述,涵盖了Apache Axis2的一些关键概念以及如何实现。用于提供对基于JVM的脚本语言的扩展。 在阅读完本文之后,开发人员将能够扩展Axis2框架以支持他或她选择的基于JVM的脚本语言。 扩展Axis2框架后,很容易: 将脚本部署为Web...

cunfu6353的博客 260

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用JRuby的JVM多语言实验

业余技术项目的好处是,您可以自由地探索和学习新事物。 有时,这种自由会使项目切线进行,尤其是在您进行探索的情况下。 前一段时间,我正在从事一个多供应商软件开发项目。 我们很难使开发人员遵循Git提交消息准则,并且多次询问无济于事,所以我认为我应该为此目的实施技术解决方案。 我们的存储库托管在GitHub上,因此我研究了接收后挂钩机制,学习了一些Ruby,并实现了我自己的服务挂钩,该服务挂...

347

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

为了让Java语言具有良好的跨平台能力,Java独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码(ByteCode)。 有了字节码,无论是哪种平台(如Windows、Linux等),只要安装了虚拟机,都可以直接运行字节码。 同样,有了字节码,也解除了Java虚拟机和Java语言之间的耦合。这话可能很多人不理解,Java虚拟机不就是运行Java语言的么?这种解耦指的是什么? 其实,目前Java虚拟机已经可以支持很多除Java语言以外的语言了,如Kotlin、Groovy、JRuby、Jyt

weixin_43664019的博客 2637

JRuby终极指南:如何在JVM上构建和开发Ruby应用

JRuby是一个在Java虚拟机(JVM)上运行的Ruby语言实现,让您能够将Ruby的简洁优雅与Java生态的强大功能完美结合!🚀 无论您是想要更快的Ruby执行速度,还是希望在Java应用中嵌入Ruby脚本,JRuby都能为您提供理想的解决方案。 ## 什么是JRuby项目? JRuby是一个完整的、正确的、快速的Ruby语言实现,运行在Java虚拟机上。它提供了强大的新功能,如无全局解

gitblog_01096的博客 491

JRuby是什么

作为一个Java程序员,你不要想在产品中使用Ruby直到你能够让它和存在的Java应用程序和类库进行交互,而这些程序和类库之中能够支持Ruby的很多种类的基本功能。JRuby,JVM下的一个开源Ruby解释器,能够在Java里面使用Ruby类库。就像标准的Ruby解释器一样,除开使用Ruby调用本地方法(C代码)或者Java类库以外,Ruby代码都能够在JRuby里面正确执行。 相比较于微软的.N

Jason 932

JRuby实战:使用Java类库增强Ruby应用的完整指南

JRuby作为Ruby语言在JVM上的实现,为开发者提供了将Ruby的优雅语法与Java丰富生态完美结合的能力。通过JRuby,你可以直接在Ruby代码中调用Java类库,轻松实现跨语言功能扩展,为Ruby应用注入强大的企业级能力。 ## 为什么选择JRuby? JRuby不仅保留了Ruby语言的简洁与灵活,还带来了JVM平台的稳定性和性能优势。特别是在需要利用Java生态系统中成熟类库(如S

gitblog_01198的博客 953

JRuby使用经验

首先我是一个Java程序员,很喜欢Ruby.公司由于业务的需要,在Java项目中引入动态语言,目的是可以快速地修改业务逻辑以响应快速变化的业务需求.于是我有幸当了一回JRuby的先锋.当初使用JRuby的时候,我对JRuby项目的了解其实就是知道它可以让Ruby运行在JVM上面,其余细节一概不知,都是在实际使用中一点点地摸索,一点点地积累回来. 在这一过程中,在 dennis_zane

狼群 1939

JRuby——Java和Ruby的强强联合

什么是JRuby JRuby是一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。 JRuby,JVM下的一个开源Ruby解释器,能够在Java里面使用Ruby类库。就像标准的Ruby解释器一样,除开使用Ruby调用本地方法(C代码)或者Java类库以外,Ru...

435

JRuby并发编程:如何利用JVM实现真正的并行Ruby执行

JRuby作为运行在JVM上的Ruby实现,突破了传统Ruby MRI的GIL限制,为开发者提供了真正的并行执行能力。本文将深入探讨JRuby如何利用JVM的多线程机制实现高效并发,以及普通开发者如何轻松上手这一强大特性。 ## 🚀 JRuby并发模型:超越传统Ruby的限制 传统Ruby MRI受限于全局解释器锁(GIL),即使在多核CPU环境下也无法实现真正的并行执行。而JRuby通过将

gitblog_01064的博客 836

Deploying with JRuby: Deliver Scalable Web Apps using the JVM

Deploying with JRuby: Deliver Scalable Web Apps using the JVM http://pragprog.com/book/jkdepj/deploying-with-jrubyDeploying with JRub...

165

(JRuby) Performance Tuning

 JRuby supports a number of options to help you tune performance. They range from turning on experimental features to turning off inefficient emulations of Ruby features.This document describes thes

LongAway 的 CyberLog 1332
上一篇: AOM 2.0 M2版本融入IoVC编程思想和Elite语言
下一篇: 用Acegi Security来保护Grails应用
xzydejava
博客等级 码龄23年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值