久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

JRuby

來自站長百科
Ahbaybface討論 | 貢獻2010年11月25日 (四) 11:17的版本
(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

JRuby,一個采用純Java實現(xiàn)的Ruby解釋器,由JRuby團隊開發(fā)。它是一個自由軟件,在CPL/GPL/LGPL三種許可協(xié)議下發(fā)布。主要開發(fā)者有Charles Nutter、Thomas Enebo、Ola Bini、Nick Sieger等。

簡介[ ]

通過JRuby,你可以在JVM上直接運行Ruby程序,調(diào)用Java的類庫。很多Java編寫的Ruby IDE都是使用JRuby來解釋語法的。 2006年,SUN雇傭了兩名JRuby團隊的兩名核心成員Charles Nutter和Thomas Enebo全職開發(fā)JRuby,后來ThoughtWorks也雇傭了一名JRuby項目的核心成員全職開發(fā)JRuby。

自此JRuby發(fā)展非常迅速,立刻推出一個50%性能提升的版本。最近又發(fā)布了0.9.8版,正式宣布官方支持Rails,單元測試有98%成功通過(也是因此稱作0.9.8版),現(xiàn)在開發(fā)小組全力修復(fù)剩下的2%,將會很快發(fā)布100%支持Rails的JRuby 1.0。但是目前JRuby的主要精力集中在功能實現(xiàn)上,性能還不如理想,1.0發(fā)布之后應(yīng)該就會全力解決性能問題。

歷史[ ]

版本 發(fā)布日期 改進
0.9 2006-08-01 Rails支持
1.1 2008-03-28 比Ruby MRI 1.8.7性能更好
AOT模式JIT模式
1.1.4 2008-08-28
1.2.0 2009-03-16 提供對Ruby 1.9幾乎完全支持 (包含JIT編譯器)
初步的Android支持
1.3.0 2009-06-03 性能提升
1.4.0 2009-11-02 支持Ruby 1.8.7
Ruby 1.9支持的改進

使用jprofiler監(jiān)控jruby腳本[ ]

jruby本質(zhì)上也是啟動一個jvm,然后去讀ruby腳本并解釋執(zhí)行(也可以編譯),因此jprofiler理所當(dāng)然也可以去監(jiān)控jruby腳本的執(zhí)行。

執(zhí)行[ ]

jruby hello.rb等價于執(zhí)行:

java -xmx378m -xss1024k -djruby.home=/usr/local/jruby

-djruby.lib=/usr/local/jruby/lib djruby.script=jruby org.jruby.main hello.rb這一點,你可以通過ps aux |grep jruby 看到。因此配置jprofiler就簡單了,在vm arguments加上這些參數(shù)(可以包括jruby的參數(shù)),比如本例中的vm arguments配置如下:

-server -xmx378m -xss1024k -djruby.script=jruby -djruby.thread.pooling=true
-djruby.jit.threshold=0 -djruby.compile.fastest=true
-djruby.home=d:jrubyjruby-1.1rc2 -djruby.lib=d:jrubyjruby-1.1rc2lib

main class or executable jar填上:org.jruby.main。然后就是arguments一欄填上你的腳本位置:

d:rubylibhello.rb

最后,別忘了將jruby/lib目錄下的bsf.jar和jruby.jar加入class path。

可以用jprofiler去觀察gc、線程和鎖、heap等等了。

運行JRuby程序[ ]

JRuby的發(fā)行中帶有一個tar.gz文件。在本例中,基于Windows系統(tǒng)并使用JRuby的jruby-bin-0.9.1.tar.gz二進制發(fā)行版本以及Java SE版本1.5.0_06。在解壓這些發(fā)行文件后,會出現(xiàn)一個jruby-0.9.1文件夾,其中包含的子文件夾有:bin,docs,lib和samples。注意,你可以添加一個指向這個目錄的JRUBY_HOME環(huán)境變量,然后把%JRUBY_HOME%bin(在UNIX系統(tǒng)上是$JRUBY_HOMEbin)添加到你的系統(tǒng)路徑下。JRuby發(fā)行版的bin目錄中包含一個jruby.bat文件,它用于運行JRuby解釋器程序。從命令行下運行“jruby -version”可以測試JRuby是否正確工作:

C:JRubyjruby-0.9.1>jruby -version ruby 1.8.5 (0) [java] 

在上面的samples目錄中,你可以找到一些展示JRuby功能的示例Ruby程序。作為第一個示例,你可以看一下下面這個java2.rb示例。這個示例包含了下列Ruby代碼

require "java" 
filename = "./samples/java2.rb" 
fr = java.io.FileReader.new filename  
br = java.io.BufferedReader.new fr  
s = br.readLine  
print "------ ", filename, "------n" 
while s  
puts s.to_s  
s = br.readLine  
end 
print "------ ", filename, " end ------n";  
br.close 

第一行代碼負(fù)責(zé)啟動JRuby的Java支持并且允許一個Ruby程序使用Java。

該程序定義了一個指向文件“./samples/java2.rb”的java.io.FileReader。然后,它聲明了一個java.io.BufferedReader用于緩沖經(jīng)由FileReader讀取的數(shù)據(jù)。本文程序從這個文件中讀取所有的代碼并且把它們輸出到控制臺。下面是使用JRuby運行這個Ruby腳本的輸出結(jié)果:

C:JRubyjruby-0.9.1>jruby .samplesjava2.rb  
------ ./samples/java2.rb------  
require "java" 
filename = "./samples/java2.rb" 
fr = java.io.FileReader.new filename  
br = java.io.BufferedReader.new fr  
s = br.readLine  
print "------ ", filename, "------n" 
while s  
puts s.to_s  
s = br.readLine  
end 
print "------ ", filename, " end ------n";  
br.close  
------ ./samples/java2.rb end ------  
C:JRubyjruby-0.9.1>

到現(xiàn)在為止,你已經(jīng)能夠使用JRuby運行一個Ruby腳本;該腳本能夠使用Java類讀取一個文件并且輸出其內(nèi)容。這是JRuby向Ruby用戶展示的一個強有力的概念。

在JRuby中使用Java類[ ]

JRuby提供的最重要的方法是Kernel#include_class方法。這個方法允許Ruby按如下方式使用Java類:

require "java" 
# Include Java's FileReader  
include_class "java.io.FileReader" 
filename = "./samples/java2.rb" 
fr = FileReader.new filename

然而,有可能在Java類和Ruby類之間存在命名沖突問題。其中,字符串的使用就是一個例子;Java中提供了java.util.String,而Ruby中提供了Kernel::String。為了解決這個命名沖突問題,你可以在包括它時重命名這個類-通過把一個代碼塊傳遞給include_class方法調(diào)用來實現(xiàn):

require "java" 
# Include Java's String as JString  
include_class("java.lang.String") { |package, name| "J" + name }  
s = JString.new("Hello World from JRuby!")  
puts s

通過定義一個包括Java類定義的Ruby模塊,你還能夠避免這個命名沖突:

require "java" 
module JavaLang  
include_package "java.lang" 
end 
s = JavaLang::String.new("Hello World from JRuby!")  
puts s

下面提供了一個示例程序,javaHello.rb,它使用Java的HashMap來存儲三個字符串并且打印它們。這個程序中有趣的地方在于,它調(diào)用Ruby的java.util.Set(通過java.util.HashMap.keySet()方法調(diào)用返回)中的each方法。這允許把通過這個“each”方法返回的結(jié)果鍵傳遞給相應(yīng)的代碼塊,然后該代碼塊使用該鍵取得相應(yīng)的字符串,并且輸出該字符串。

require "java" 
module JavaLang  
include_package "java.lang" 
end 
include_class("java.util.HashMap") { |pkg, name| "J" + name }  
s = JavaLang::StringBuffer.new("Hello Java World")  
puts s.append(", I love JRuby")  
m = JHashMap.new()  
m.put("java", "Java")  
m.put("ruby", "Ruby")  
m.put("jruby", "JRuby")  
puts m  
m.keySet().each { |key| puts m.get(key) }

下面是當(dāng)使用JRuby運行它時的輸出結(jié)果:

C:\JRuby>jruby javaHello.rb  
Hello Java World, I love JRuby  
{java=Java, ruby=Ruby, jruby=JRuby}  
Java  
Ruby  
JRuby  
C:\JRuby>

一個完全使用Java編寫的類似上面的程序看起來如下所示:

StringBuffer s = new StringBuffer("Hello Java World");  
s.append(", I love JRuby");  
HashMap<String> m = new HashMap<String>();  
m.put("java", "Java")  
m.put("ruby", "Ruby")  
m.put("jruby", "JRuby")  
for (String key: m.keySet()) {  
 println(m.get(key));  
}

在JRuby中使用Swing[ ]

Swing是一個GUI框架,它允許開發(fā)者使用Java語言創(chuàng)建圖形化應(yīng)用程序。下面是一個示例程序,javaSwingHello.rb,它使用Java的Swing來打印一個消息:

require 'java' 
include_class "javax.swing.JFrame" 
include_class "javax.swing.JLabel" 
frame = JFrame.new()  
jlabel = JLabel.new("Hello from JRuby with Swing")  
frame.getContentPane().add(jlabel)  
# frame.content_pane.add(label)  
frame.pack()  
frame.setVisible(true)  
frame.visible = true

從命令行如下運行這個程序:

C:\JRuby>jruby javaSwingHello.rb 

一個帶有文本“Hello from JRuby with Swing”的新窗口將會出現(xiàn): Jruby1.jpg

總結(jié)[ ]

本條目提供一個JRuby語言的簡介。JRuby允許現(xiàn)有Java開發(fā)者充分利用Ruby提供的強有力和易于使用的編程特點,而Ruby開發(fā)者將能夠自由使用龐大的曾使Java廣泛地應(yīng)用于各個軟件開發(fā)領(lǐng)域的Java庫來進行開發(fā)。

相關(guān)條目[ ]

參考來源[ ]