日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java的另一個(gè)對(duì)手:Mirah

當(dāng)你使用Ruby語(yǔ)法,添加靜態(tài)類型,并在JVM上運(yùn)行時(shí),發(fā)生了什么?Charles Nutter,JRuby的設(shè)計(jì)師為我們做了展示:

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出南沙免費(fèi)做網(wǎng)站回饋大家。

我們很快將有Java 7,支持API的動(dòng)態(tài)調(diào)用和改進(jìn)。我們有很多編程語(yǔ)言可供選擇- 一些靜態(tài)類型,一些是動(dòng)態(tài)類型,...- 這提供了他們自己的獨(dú)特優(yōu)勢(shì)。

我們甚至發(fā)現(xiàn)Java本身的一些“小變化“,比如文字列表和字符串開關(guān)。我們有任何受管理的Runtime的最大、最強(qiáng)的生態(tài)系統(tǒng),數(shù)以百萬(wàn)計(jì)的開發(fā)者。

但是,缺少了什么東西。沒有語(yǔ)言看起來(lái)能夠取代Java本身?;蛘哒f(shuō),沒有可以充當(dāng)Java替身。

從Java中學(xué)習(xí)

讓我們看一看標(biāo)準(zhǔn),我相信我們必須滿足替換Java的標(biāo)準(zhǔn)。下面是我的觀點(diǎn),他們都基于大量的使Java獲得成功的指導(dǎo)原則。

同等代碼下,性能等同于Java

如果我們使用新語(yǔ)言開始寫核心庫(kù),以及系統(tǒng)級(jí)別的代碼,它必須像Java做的那樣執(zhí)行準(zhǔn)確。我們當(dāng)然可以嘗試更好的表現(xiàn),但是“等同Java”絕對(duì)是最低限度。

沒有語(yǔ)言強(qiáng)加的Runtime庫(kù)

如果使用當(dāng)前的替代語(yǔ)言的最大的障礙是它們強(qiáng)加于你它們的“鎖鏈”-Runtime庫(kù)。沒有5,10,甚至20M的Jar文件,你寫不出"Hello, world" 。復(fù)雜的部署,小配置的應(yīng)用更復(fù)雜。甚至更糟糕的,有些語(yǔ)言帶有很大的初始化消耗,在加載他們的Runtime的類文件,和/或初始化Runtime狀態(tài)時(shí)。

不要比Java復(fù)雜

Java的成功很大程度歸功于它的簡(jiǎn)單。任何語(yǔ)言試圖替代它,都要考慮這一點(diǎn),當(dāng)然這并不意味著不能比Java強(qiáng)大。

優(yōu)雅

考慮到所有的積極特征,Java也并不是一個(gè)特別美麗的語(yǔ)言。有大量的“儀式“,最簡(jiǎn)單的程序。類型必須在每個(gè)地方聲明。少于80個(gè)字符根本寫不出“Hello,world”,而其他語(yǔ)言可在用20個(gè)以下的字符做到。

JVM庫(kù)的完美整合

取代Java的任何語(yǔ)言必須滿足Java的使用案例。這意味著能夠定義真正的類,真正的靜態(tài)方法,真正的數(shù)組。從我們的語(yǔ)言到Java,需要被直接調(diào)用,使用相同的字節(jié)碼,并且相比Java編寫的同樣的調(diào)用要更有效率。我們現(xiàn)在使用Java的地方,我們需要使用自己的語(yǔ)言,如果我們不能-我們永遠(yuǎn)需要堆棧某個(gè)地方存在Java。

拓展

現(xiàn)在的語(yǔ)言競(jìng)爭(zhēng),要看誰(shuí)能最簡(jiǎn)單的設(shè)計(jì)DSL,誰(shuí)有最簡(jiǎn)單的擴(kuò)展點(diǎn)。擴(kuò)展Java基本上受限于你可以做什么,用注釋和注釋處理器。而忘記了有一個(gè)靈活的語(yǔ)法 - Java看起來(lái)像Java。我們假設(shè)的語(yǔ)言需要易于擴(kuò)展,它需要可以很容易地實(shí)驗(yàn)新功能。

是否有可能滿足所有這些要求?我相信是的,那就是叫做Mirah的語(yǔ)言。

Mirah 編程語(yǔ)言

Mirah 滿足了我的愿望,執(zhí)行JRuby,對(duì)于非Java開發(fā)者,更平易近人。讓我們面對(duì)現(xiàn)實(shí)吧,Java并不是特別難學(xué),但有很多細(xì)節(jié)需要時(shí)間來(lái)習(xí)慣。它不是一個(gè)復(fù)雜的語(yǔ)言,但它可以嚇跑門外漢。Mirah,我想使語(yǔ)言滿足我的標(biāo)準(zhǔn),讓我和其他人替換一直想替換的Java。

用代碼來(lái)解釋Mirah更容易理解,看看下面的代碼吧!

安裝 Mirah

下載最新的zip文件,Mirah Github 下載頁(yè)面。

你可以在里面找到mirah-complete.jar,一些bin腳本for "mirah" 、"mirahc,",一組案例、說(shuō)明、協(xié)議等。

準(zhǔn)備開始

Mirah 有清晰、簡(jiǎn)單的語(yǔ)法。一些非常美麗,你也會(huì)發(fā)現(xiàn)它非常接近Ruby。

 
 
 
  1. puts "Hello, world!"

我們第一個(gè)Mriah程序,利用Mirah命令運(yùn)行。

 
 
 
  1. ~/projects/mirah_play → mirah -e 'puts "Hello, world!"'
  2. Hello, world!

這里我們使用-e flag執(zhí)行一行腳本,也可以放入文件中。

 
 
 
  1. ~/projects/mirah_play → echo 'puts "Hello, world!"' > hello.mirah
  2. ~/projects/mirah_play → mirah hello.mirah 
  3. Hello, world!

當(dāng)然我提到Mirah也是一個(gè)編譯器。在上面的例子,它在執(zhí)行前快速編譯已有腳本。沒有runtime庫(kù)意味著沒有解釋,所以所有東西在執(zhí)行前作為JVM字符碼結(jié)束。我們使用mirah命令生成類文件:

 
 
 
  1. ~/projects/mirah_play → mirahc hello.mirah 
  2. ~/projects/mirah_play → ls -l Hello.class 
  3. -rw-r--h;r--  1 headius  staff  505 Mar 19 18:49 Hello.class
  4. ~/projects/mirah_play → java Hello
  5. Hello, world!

這個(gè)例子可能最重要。不僅是Mirah為一段代碼產(chǎn)生了類文件,而且類文件完全獨(dú)立。最終的java命令不需要jar文件或類路徑。你決定什么依賴來(lái)引入到你的程序。

讓我們?yōu)g覽一下Mirah的基本語(yǔ)法。

基礎(chǔ)語(yǔ)法

Mirah是靜態(tài)類型,像Java或Scala一樣,但你僅是觀察也許不知道。這是因?yàn)镸irah采用了一種叫做“l(fā)ocal type inference(本地類型推斷)“的技術(shù)。簡(jiǎn)單來(lái)說(shuō),通常可以從Mirah的上下文推斷對(duì)象,變量和方法調(diào)用的類型。像Scala和C#中,您仍然必須聲明方法參數(shù); Mirah只是在本地范圍內(nèi)推斷出類型。

讓我們看看在Java中定義一個(gè)簡(jiǎn)單的方法,并對(duì)比Mirah。首先,是Java:

 
 
 
  1. public static String hello(String name) {
  2.   return "Hello, " + name + "!";
  3. }

Mirah如下:

 
 
 
  1. def hello(name:String)
  2.   "Hello, #{name}!"
  3. end

這里我們聲明了name變量,作為String。因?yàn)閮H是一行代碼是一String,我們知道返回類型一定是String。

如果我們將它放入一個(gè)文件,會(huì)得到與使用javac同樣的結(jié)果。

 
 
 
  1. ~/projects/mirah_play → cat HelloJava.java 
  2. public class HelloJava {
  3.     public static void main(String[] args) {
  4.         System.out.println(hello("world"));
  5.     }
  6.     public static String hello(String name) {
  7.         return "Hello, " + name + "!";
  8.     }
  9. }
  10. ~/projects/mirah_play → cat hello_mirah.mirah 
  11. def hello(name:String)
  12.   "Hello, #{name}!"
  13. end
  14. puts hello("world")
  15. ~/projects/mirah_play → javac HelloJava.java 
  16. ~/projects/mirah_play → mirahc hello_mirah.mirah 
  17. ~/projects/mirah_play → javap HelloJava
  18. Compiled from "HelloJava.java"
  19. public class HelloJava extends java.lang.Object{
  20.     public HelloJava();
  21.     public static void main(java.lang.String[]);
  22.     public static java.lang.String hello(java.lang.String);
  23. }
  24. ~/projects/mirah_play → javap HelloMirah
  25. Compiled from "hello_mirah.mirah"
  26. public class HelloMirah extends java.lang.Object{
  27.     public static void main(java.lang.String[]);
  28.     public static java.lang.String hello(java.lang.String);
  29.     public HelloMirah();
  30. }

Mirah將腳本頂層作為它的“main”主體,定義的方法轉(zhuǎn)變?yōu)橥瑯宇惖撵o態(tài)方法。這允許你有非常輕型的腳本,很干凈,并沒有runtime依賴。

使用Java庫(kù)

一個(gè)簡(jiǎn)單的Swing應(yīng)用

 
 
 
  1. import javax.swing.JFrame
  2. import javax.swing.JButton
  3. class SwingMirah
  4.   def initialize(title:String, w:int, h:int)
  5.     @title = title
  6.     @width = w
  7.     @height = h
  8.   end
  9.   def run
  10.     frame = JFrame.new @title
  11.     frame.setSize @width, @height
  12.     button = JButton.new "Press me"
  13.     frame.add button
  14.     button.addActionListener do |event|
  15.       JButton(event.getSource).setText "Mirah rocks!"
  16.     end
  17.     frame.setVisible true
  18.   end
  19. end
  20. sm = SwingMirah.new("Welcome!", 300, 200)
  21. sm.run

性能

Mirah與Java的性能對(duì)比,使用fibonacci。確實(shí)說(shuō)明兩件事:方法調(diào)用的性能和整數(shù)運(yùn)算性能- 這都是很難在動(dòng)態(tài)語(yǔ)言進(jìn)行優(yōu)化。

 
 
 
  1. def fib(a:int):int
  2.   if a < 2
  3.     a
  4.   else
  5.     fib(a - 1) + fib(a - 2)
  6.   end
  7. end
  8. def bench(n:int)
  9.   n.times do
  10.     timeStart = System.currentTimeMillis
  11.     puts "fib(40): #{fib(40)}\nTotal time: #{System.currentTimeMillis - timeStart}"
  12.   end
  13. end
  14. bench 3

最終調(diào)用fib(40),打印結(jié)果,使用插補(bǔ)字符串,與Java對(duì)比如何呢?

 
 
 
  1. ~/projects/mirah_play → java FibJava
  2. fib(40): 102334155
  3. Total time: 883
  4. fib(40): 102334155
  5. Total time: 876
  6. fib(40): 102334155
  7. Total time: 875
  8. ~/projects/mirah_play → mirah fib.mirah
  9. fib(40): 102334155
  10. Total time: 882
  11. fib(40): 102334155
  12. Total time: 876
  13. fib(40): 102334155
  14. Total time: 878

Mirah與Java的表現(xiàn)完全一致。

更多來(lái)自Java的功能

界面定義:

 
 
 
  1. import java.util.List
  2. interface Printer do
  3.   def printAll(a:List)
  4.     returns void
  5.   end
  6. end

我們執(zhí)行這個(gè)界面與Java類似,使用implements 關(guān)鍵字,然而在Mirah, implements在類的body中。

 
 
 
  1. class MyPrinter
  2.   implements Printer
  3.   def printAll(a)
  4.     a.each {|element| puts element}
  5.   end
  6. end
  7. list = ['foo', 'bar', 'baz']
  8. p = Printer(MyPrinter.new)
  9. p.printAll(list)

文字列表和地圖使用[] 和{} 語(yǔ)法。

 
 
 
  1. list = [1,2,3,4]
  2. list.each {|x| puts x} # prints "1\n2\n3\n4\n"
  3. map = {'foo' => 'bar'}
  4. puts map['foo'] # prints "bar"

Mirah,仍然在開發(fā)中。但是已經(jīng)有很多的用戶在使用。在Java兼容性方面考慮很有意義?,F(xiàn)在Mirah類似于Java 0.9。. 沒有泛型或枚舉,最小的注釋支持,而且大多基本語(yǔ)言功能...但是你有一些封閉的支持,更多的文字量,局部類型推斷,等等。我們正在 穩(wěn)步推進(jìn)Mirah到1.0版本 ,至少相當(dāng)于Java 5。我們還將繼續(xù)改善Mirah的宏觀體制和元編程能力,同時(shí)認(rèn)真的從其他的語(yǔ)言中吸取最酷的功能。


分享標(biāo)題:Java的另一個(gè)對(duì)手:Mirah
路徑分享:http://www.5511xx.com/article/cccchoj.html