成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JRuby生成JVM代碼詳解

開發(fā) 開發(fā)工具
本文向您介紹如何使用JRuby生成JVM代碼,作者列舉了CRuby、JRuby和Duby生成字節(jié)碼的不同示例來證明使用JRuby生成JVM代碼的好處。

盡管JRuby的性能已經接近CRuby了,但有時它仍然不夠快。CRuby的用戶可以使用Ryan Davis的RubyInline庫,它提供了對C/C++的內建支持以便更容易的產生Ruby的C擴展。來自JRuby陣營的Charles Nutter現(xiàn)在已經為JRuby實現(xiàn)了一個RubyInline builder ,它可以即時編譯嵌入的Java代碼,即使用JRuby生成JVM代碼。

下面是Ryan Davis提供的使用C編寫的一個階乘計算方法的示例:

  1. class MyTest  
  2. inline do |builder|  
  3. builder.c "  
  4.  long factorial_c(int max) {  
  5.  int i=max, result=1;  
  6.   while (i >= 2) { result *= i--; }    
  7.   return result;    
  8.  }  
  9. "  
  10. end  
  11. end  

下面是Charles提供的JRuby生成JVM代碼的實現(xiàn) :

  1. class FastMath  
  2. inline :Java do |builder|  
  3.  builder.package "org.jruby.test" 
  4.   builder.java "  
  5.  public static long factorial_java(int max) {  
  6.   int i=max, result=1;  
  7.   while (i >= 2) { result *= i--; }  
  8.   return result;     
  9.   }  
  10.  "  
  11. end 
  12. end 

RubyInline for JRuby的一個缺點在于其需要Java 6 JDK(對于編譯器),它可能還無法在所有系統(tǒng)上都可使用。

另一個可產生快速執(zhí)行代碼的方法就是直接使用JRuby生成JVM代碼。對于正常的應用來說,這聽起來有些過激了,像編譯器這樣的字節(jié)碼生成工具會從一個簡單的字節(jié)碼生成DSL中獲益,就像早前Charles Nutter的博客中提到的那樣。然而即便通過DSL來生成字節(jié)碼也并非易事。以下是Charles的博客中的一個例子:一個名為bar的方法將小寫的String參數(shù)加到傳進來的ArrayList中,下面就是產生的代碼:

  1. def test_class_builder  
  2. cb = Compiler::ClassBuilder.build("MyClass""MyClass.java"do 
  3. [...]    
  4. method(:bar, ArrayList, String, ArrayList) do 
  5.  aload 1   
  6.  invokevirtual(String:toLowerCaseString)   
  7.  aload 2     
  8.  swap  
  9.  invokevirtual(ArrayList, :add, [Boolean::TYPE, Object])   
  10.  aload 2    
  11.  areturn  
  12. end 
  13. [...] 

Charles Nutter還提供了一個新方案,這就是叫做Duby的新語言,它實現(xiàn)了Ruby語法的一個子集,增強了一些類型推斷邏輯(請訪問Charles的博客來了解更多信息),以此來生成快速的字節(jié)碼。下面同樣是計算階乘的方法,這次是針對Duby編譯器而寫的。

  1. class Fac  
  2. def self.fac(max)  
  3. {max => :int:return => :int}  
  4.  i = max  
  5.  result = 1  
  6. while i > 1  
  7.  result *= i  
  8.  i -= 1  
  9.  end 
  10.  result  
  11. end 
  12. end 

這是一個原型,用來展現(xiàn)以一種類Ruby語言而不是一種新語言來實現(xiàn)類型推斷的可能性。它還可被JRuby程序員所用,以避免因為性能問題而回退到Java,或者用來實現(xiàn)JRuby本身的一些部分功能,這與Squeak Smalltalk的Slang很像,它是Smalltalk語言的一個子集,可以很輕易的轉化為C。Rubinius計劃使用叫做Garnet(InfoQ已經就Cuby/Garnet采訪了Evan Phoenix)的類似方法。

現(xiàn)在,你應該知道使用JRuby生成JVM代碼的好處了。

 

【編輯推薦】

  1. 在JRuby下將RoR項目配置到tomcat詳解
  2. 如何在tomcat上配置jruby on rails
  3. JRuby是什么? JRuby語言概覽
  4. JRuby中調用java帶可變參數(shù)的方法
  5. 使用JRuby生成JVM代碼
責任編輯:佚名 來源: ddvip.com
相關推薦

2009-07-17 17:34:15

JRuby On Ra

2009-07-17 17:05:29

JRuby是什么JRuby

2009-07-20 09:22:36

用jruby調用jfr

2012-04-16 14:55:54

JVMJRuby

2009-07-17 17:00:13

在JRuby下將RoR

2009-04-03 10:25:32

C#XML擴展代碼

2009-07-17 17:02:54

JRuby是什么

2009-07-20 16:11:41

JRuby Swing

2009-07-20 15:37:26

JRuby安裝JRuby配置

2009-12-17 18:16:44

JRuby語言技術

2010-09-27 13:48:41

JVM內存結構

2010-09-26 11:00:48

JVM參數(shù)配置

2023-10-11 18:35:20

Java編程語言

2010-09-25 12:38:40

JVM內存模型

2011-03-17 09:27:00

JRuby

2009-07-17 16:17:04

在tomcat上配置j

2009-07-17 16:43:02

JRuby性能優(yōu)化

2023-08-02 08:38:27

JVM加載機制

2018-11-01 10:34:37

JVM內存配置

2009-07-17 17:49:39

JRuby學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品www | 精品福利在线视频 | 可以在线观看av的网站 | 日本一区二区在线视频 | 欧美中文一区 | 亚洲成人日韩 | 久久久免费少妇高潮毛片 | 国产精品综合色区在线观看 | 亚洲一区中文字幕 | 欧美日韩在线精品 | 成人欧美一区二区三区黑人孕妇 | 国产高清免费 | 精品欧美一区二区精品久久 | 国产成人精品一区二区三 | 亚洲人在线 | 国产精品久久久久久久久久久免费看 | 国产精品精品3d动漫 | 99久热在线精品视频观看 | 精品色| 日本天堂一区 | 精品一区二区观看 | 日本淫视频 | 日韩成人在线一区 | 国产精品精品视频一区二区三区 | 中国免费黄色片 | 一区二区三区日 | 久久精品无码一区二区三区 | 九九热精品视频 | 日日操夜夜操天天操 | 亚洲欧美综合 | 成人依人| 天天艹| 久久精品一区二 | 成人av在线播放 | 成人免费视频 | 久久久精品网站 | 伊人久久在线观看 | 亚洲精品视频一区 | h视频在线看| 最新日韩精品 | 国产一区二区在线播放视频 |