国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

Java的另一個(gè)替代,編程語言Mirah

發(fā)布時(shí)間:2011-3-28 23:47    發(fā)布者:1770309616
關(guān)鍵詞: Java的 , 編程語言Mirah
當(dāng)你使用Ruby語法,添加靜態(tài)類型,并在JVM上運(yùn)行時(shí),發(fā)生了什么?Charles Nutter,JRuby的設(shè)計(jì)師為我們做了展示:
我們很快將有Java 7,支持API的動(dòng)態(tài)調(diào)用和改進(jìn)。我們有很多編程語言可供選擇- 一些靜態(tài)類型,一些是動(dòng)態(tài)類型,...- 這提供了他們自己的獨(dú)特優(yōu)勢。
我們甚至發(fā)現(xiàn)Java本身的一些“小變化“,比如文字列表和字符串開關(guān)。我們有任何受管理的Runtime的最大、最強(qiáng)的生態(tài)系統(tǒng),數(shù)以百萬計(jì)的開發(fā)者。
但是,缺少了什么東西。沒有語言看起來能夠取代Java本身。或者說,沒有可以充當(dāng)Java替身。
從Java中學(xué)習(xí)
讓我們看一看標(biāo)準(zhǔn),我相信我們必須滿足替換Java的標(biāo)準(zhǔn)。下面是我的觀點(diǎn),他們都基于大量的使Java獲得成功的指導(dǎo)原則。
同等代碼下,性能等同于Java
如果我們使用新語言開始寫核心庫,以及系統(tǒng)級別的代碼,它必須像Java做的那樣執(zhí)行準(zhǔn)確。我們當(dāng)然可以嘗試更好的表現(xiàn),但是“等同Java”絕對是最低限度。
沒有語言強(qiáng)加的Runtime庫
如果使用當(dāng)前的替代語言的最大的障礙是它們強(qiáng)加于你它們的“鎖鏈”-Runtime庫。沒有5,10,甚至20M的Jar文件,你寫不出"Hello, world" 。復(fù)雜的部署,小配置的應(yīng)用更復(fù)雜。甚至更糟糕的,有些語言帶有很大的初始化消耗,在加載他們的Runtime的類文件,和/或初始化Runtime狀態(tài)時(shí)。
Java的成功很大程度歸功于它的簡單。任何語言試圖替代它,都要考慮這一點(diǎn),當(dāng)然這并不意味著不能比Java強(qiáng)大。
優(yōu)雅
考慮到所有的積極特征,Java也并不是一個(gè)特別美麗的語言。有大量的“儀式“,最簡單的程序。類型必須在每個(gè)地方聲明。少于80個(gè)字符根本寫不出“Hello,world”,而其他語言可在用20個(gè)以下的字符做到。
JVM庫的完美整合
取代Java的任何語言必須滿足Java的使用案例。這意味著能夠定義真正的類,真正的靜態(tài)方法,真正的數(shù)組。從我們的語言到Java,需要被直接調(diào)用,使用相同的字節(jié)碼,并且相比Java編寫的同樣的調(diào)用要更有效率。我們現(xiàn)在使用Java的地方,我們需要使用自己的語言,如果我們不能-我們永遠(yuǎn)需要堆棧某個(gè)地方存在Java。
拓展
現(xiàn)在的語言競爭,要看誰能最簡單的設(shè)計(jì)DSL,誰有最簡單的擴(kuò)展點(diǎn)。擴(kuò)展Java基本上受限于你可以做什么,用注釋和注釋處理器。而忘記了有一個(gè)靈活的語法 - Java看起來像Java。我們假設(shè)的語言需要易于擴(kuò)展,它需要可以很容易地實(shí)驗(yàn)新功能。
是否有可能滿足所有這些要求?我相信是的,那就是叫做Mirah的語言。
Mirah 編程語言
Mirah 滿足了我的愿望,執(zhí)行JRuby,對于非Java開發(fā)者,更平易近人。讓我們面對現(xiàn)實(shí)吧,Java并不是特別難學(xué),但有很多細(xì)節(jié)需要時(shí)間來習(xí)慣。它不是一個(gè)復(fù)雜的語言,但它可以嚇跑門外漢。Mirah,我想使語言滿足我的標(biāo)準(zhǔn),讓我和其他人替換一直想替換的Java。
用代碼來解釋Mirah更容易理解,看看下面的代碼吧!
安裝 Mirah
下載最新的zip文件,Mirah Github 下載頁面。
你可以在里面找到mirah-complete.jar,一些bin腳本for "mirah" 、"mirahc,",一組案例、說明、協(xié)議等。
準(zhǔn)備開始
Mirah 有清晰、簡單的語法。一些非常美麗,你也會(huì)發(fā)現(xiàn)它非常接近Ruby。
  • puts "Hello, world!"  
我們第一個(gè)Mriah程序,利用Mirah命令運(yùn)行。
  • ~/projects/mirah_play → mirah -e 'puts "Hello, world!"'  
  • Hello, world!  
這里我們使用-e flag執(zhí)行一行腳本,也可以放入文件中。
  • ~/projects/mirah_play → echo 'puts "Hello, world!"' > hello.mirah  
  • ~/projects/mirah_play → mirah hello.mirah   
  • Hello, world!  

當(dāng)然我提到Mirah也是一個(gè)編譯器。在上面的例子,它在執(zhí)行前快速編譯已有腳本。沒有runtime庫意味著沒有解釋,所以所有東西在執(zhí)行前作為JVM字符碼結(jié)束。我們使用mirah命令生成類文件:
  • ~/projects/mirah_play → mirahc hello.mirah   
  • ~/projects/mirah_play → ls -l Hello.class   
  • -rw-r--h;r-- 1 headius staff 505 Mar 19 18:49 Hello.class  
  • ~/projects/mirah_play → java Hello  
  • Hello, world!  

這個(gè)例子可能最重要。不僅是Mirah為一段代碼產(chǎn)生了類文件,而且類文件完全獨(dú)立。最終的java命令不需要jar文件或類路徑。你決定什么依賴來引入到你的程序。
讓我們?yōu)g覽一下Mirah的基本語法。
基礎(chǔ)語法
Mirah是靜態(tài)類型,像Java或Scala一樣,但你僅是觀察也許不知道。這是因?yàn)镸irah采用了一種叫做“l(fā)ocal type inference(本地類型推斷)“的技術(shù)。簡單來說,通常可以從Mirah的上下文推斷對象,變量和方法調(diào)用的類型。像Scala和C#中,您仍然必須聲明方法參數(shù); Mirah只是在本地范圍內(nèi)推斷出類型。
讓我們看看在Java中定義一個(gè)簡單的方法,并對比Mirah。首先,是Java:
  • public static String hello(String name) {  
  •   return "Hello, " + name + "!";  
  • }
Mirah如下:
  • def hello(name:String)  
  • "Hello, #{name}!"  
  • end  
這里我們聲明了name變量,作為String。因?yàn)閮H是一行代碼是一String,我們知道返回類型一定是String。
如果我們將它放入一個(gè)文件,會(huì)得到與使用javac同樣的結(jié)果。
  • ~/projects/mirah_play → cat HelloJava.java   
  • public class HelloJava {  
  • public static void main(String[] args) {  
  • System.out.println(hello("world"));  
  • }  
  • public static String hello(String name) {  
  • return "Hello, " + name + "!";  
  • }  
  • }  
  • ~/projects/mirah_play → cat hello_mirah.mirah   
  • def hello(name:String)  
  • "Hello, #{name}!"  
  • end  
  • puts hello("world")  
  • ~/projects/mirah_play → javac HelloJava.java   
  • ~/projects/mirah_play → mirahc hello_mirah.mirah   
  • ~/projects/mirah_play → javap HelloJava  
  • Compiled from "HelloJava.java"  
  • public class HelloJava extends java.lang.Object{  
  • public HelloJava();  
  • public static void main(java.lang.String[]);  
  • public static java.lang.String hello(java.lang.String);  
  • }  
  • ~/projects/mirah_play → javap HelloMirah  
  • Compiled from "hello_mirah.mirah"  
  • public class HelloMirah extends java.lang.Object{  
  • public static void main(java.lang.String[]);  
  • public static java.lang.String hello(java.lang.String);  
  • public HelloMirah();  
  • }  

Mirah將腳本頂層作為它的“main”主體,定義的方法轉(zhuǎn)變?yōu)橥瑯宇惖撵o態(tài)方法。這允許你有非常輕型的腳本,很干凈,并沒有runtime依賴。
使用Java庫
一個(gè)簡單的Swing應(yīng)用
  • import javax.swing.JFrame  
  • import javax.swing.JButton  
  • class SwingMirah  
  • def initialize(title:String, w:int, h:int)  
  • @titletitle = title  
  • @wwidth = w  
  • @hheight = h  
  • end  
  • def run  
  • frame = JFrame.new @title  
  • frame.setSize @width, @height  
  • button = JButton.new "Press me"  
  • frame.add button  
  • button.addActionListener do |event|  
  • JButton(event.getSource).setText "Mirah rocks!"  
  • end  
  • frame.setVisible true  
  • end  
  • end  
  • sm = SwingMirah.new("Welcome!", 300, 200)  
  • sm.run
性能
Mirah與Java的性能對比,使用fibonacci。確實(shí)說明兩件事:方法調(diào)用的性能和整數(shù)運(yùn)算性能- 這都是很難在動(dòng)態(tài)語言進(jìn)行優(yōu)化。
  • def fib(a:int):int  
  • if a <
    2
  • a  
  • else  
  • fib(a - 1) + fib(a - 2)  
  • end  
  • end  
  • def bench(n:int)  
  • n.times do  
  • timeStart = System.currentTimeMillis  
  • puts "fib(40): #{fib(40)}\nTotal time: #{System.currentTimeMillis - timeStart}"  
  • end  
  • end  
  • bench 3
......
最終調(diào)用fib(40),打印結(jié)果,使用插補(bǔ)字符串,與Java對比如何呢?
  • ~/projects/mirah_play → java FibJava  
  • fib(40): 102334155  
  • Total time: 883  
  • fib(40): 102334155  
  • Total time: 876  
  • fib(40): 102334155  
  • Total time: 875  
  • ~/projects/mirah_play → mirah fib.mirah  
  • fib(40): 102334155  
  • Total time: 882  
  • fib(40): 102334155  
  • Total time: 876  
  • fib(40): 102334155  
  • Total time: 878
Mirah與Java的表現(xiàn)完全一致。
更多來自Java的功能界面定義:
  • import java.util.List  
  • interface Printer do  
  •   def printAll(aist)  
  •     returns void  
  •   end  
  • end
我們執(zhí)行這個(gè)界面與Java類似,使用implements 關(guān)鍵字,然而在Mirah, implements在類的body中。
  • class MyPrinter  
  •   implements Printer  
  •   def printAll(a)  
  •     a.each {|element| puts element}  
  •   end  
  • end  
  • list = ['foo', 'bar', 'baz']  
  • p = Printer(MyPrinter.new)  
  • p.printAll(list)
文字列表和地圖使用[] 和{} 語法。
  • list = [1,2,3,4]  
  • list.each {|x| puts x} # prints "1\n2\n3\n4\n"  
  • map = {'foo' => 'bar'}  
  • puts map['foo'] # prints "bar"
Mirah,仍然在開發(fā)中。但是已經(jīng)有很多的用戶在使用。在Java兼容性方面考慮很有意義。現(xiàn)在Mirah類似于Java 0.9。. 沒有泛型或枚舉,最小的注釋支持,而且大多基本語言功能...但是你有一些封閉的支持,更多的文字量,局部類型推斷,等等。我們正在 穩(wěn)步推進(jìn)Mirah到1.0版本 ,至少相當(dāng)于Java 5。我們還將繼續(xù)改善Mirah的宏觀體制和元編程能力,同時(shí)認(rèn)真的從其他的語言中吸取最酷的功能。
本文地址:http://m.4huy16.com/thread-60222-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 常見深度學(xué)習(xí)模型介紹及應(yīng)用培訓(xùn)教程
  • Microchip第22屆中國技術(shù)精英年會(huì)——采訪篇
  • 電動(dòng)兩輪車設(shè)計(jì)生態(tài)系統(tǒng)
  • “芯”光璀璨,鵬城共賞——2025 Microchip中國技術(shù)精英年會(huì)深圳站回顧
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表