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

JRuby生成JVM代碼詳解

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

盡管JRuby的性能已經接近CRuby了,但有時它仍然不夠快。CRuby的用戶可以使用Ryan Davis的RubyInline庫,它提供了對C/C++的內建支持以便更容易的產生Ruby的C擴展。來自JRuby陣營的Charles Nutter現在已經為JRuby實現了一個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代碼的實現 :

  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(對于編譯器),它可能還無法在所有系統上都可使用。

另一個可產生快速執行代碼的方法就是直接使用JRuby生成JVM代碼。對于正常的應用來說,這聽起來有些過激了,像編譯器這樣的字節碼生成工具會從一個簡單的字節碼生成DSL中獲益,就像早前Charles Nutter的博客中提到的那樣。然而即便通過DSL來生成字節碼也并非易事。以下是Charles的博客中的一個例子:一個名為bar的方法將小寫的String參數加到傳進來的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的新語言,它實現了Ruby語法的一個子集,增強了一些類型推斷邏輯(請訪問Charles的博客來了解更多信息),以此來生成快速的字節碼。下面同樣是計算階乘的方法,這次是針對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 

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

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

 

【編輯推薦】

  1. 在JRuby下將RoR項目配置到tomcat詳解
  2. 如何在tomcat上配置jruby on rails
  3. JRuby是什么? JRuby語言概覽
  4. JRuby中調用java帶可變參數的方法
  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-12-17 18:16:44

JRuby語言技術

2010-09-27 13:48:41

JVM內存結構

2010-09-26 11:00:48

JVM參數配置

2023-10-11 18:35:20

Java編程語言

2009-07-20 15:37:26

JRuby安裝JRuby配置

2010-09-25 12:38:40

JVM內存模型

2011-03-17 09:27:00

JRuby

2009-07-17 17:49:39

JRuby學習

2009-07-20 15:42:34

監控JRubyJProfiler

2009-07-09 14:01:22

JVM工作原理

2009-07-08 10:41:54

JDK JRE JVM

2010-09-26 08:50:11

JVM工作原理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 夜久久 | 日韩一二三区 | 精品国产91乱码一区二区三区 | 成人免费视频网站在线观看 | 国产人久久人人人人爽 | 一区二区在线不卡 | 毛片免费观看 | 精品欧美激情精品一区 | 精品久久久久久 | 欧美群妇大交群中文字幕 | 欧洲一区二区在线 | 欧美一级一区 | 91 久久 | 国产精品精品 | 久久久青草婷婷精品综合日韩 | 日本成人中文字幕在线观看 | 成人免费视屏 | 91九色视频在线 | 九一国产精品 | www..99re| 热99| 国产成人久久精品一区二区三区 | 亚洲一区三区在线观看 | 国产剧情一区二区三区 | 欧美精品免费观看二区 | 国产精品日本一区二区在线播放 | 国产一区二区免费在线 | 中文字幕 在线观看 | 久久精品中文 | 一级免费看片 | 精品免费视频 | 成人性视频免费网站 | 日韩在线视频网址 | 天天射网站 | 亚洲精品成人av久久 | 深夜福利影院 | 日韩av电影院 | 色男人的天堂 | 亚洲精品一区av在线播放 | 亚洲综合在线视频 | 欧美综合一区二区三区 |