<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    Java的另一個替代,編程語言Mirah

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

    當然我提到Mirah也是一個編譯器。在上面的例子,它在執行前快速編譯已有腳本。沒有runtime庫意味著沒有解釋,所以所有東西在執行前作為JVM字符碼結束。我們使用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!  

    這個例子可能最重要。不僅是Mirah為一段代碼產生了類文件,而且類文件完全獨立。最終的java命令不需要jar文件或類路徑。你決定什么依賴來引入到你的程序。
    讓我們瀏覽一下Mirah的基本語法。
    基礎語法
    Mirah是靜態類型,像Java或Scala一樣,但你僅是觀察也許不知道。這是因為Mirah采用了一種叫做“local type inference(本地類型推斷)“的技術。簡單來說,通?梢詮腗irah的上下文推斷對象,變量和方法調用的類型。像Scala和C#中,您仍然必須聲明方法參數; Mirah只是在本地范圍內推斷出類型。
    讓我們看看在Java中定義一個簡單的方法,并對比Mirah。首先,是Java:
    • public static String hello(String name) {  
    •   return "Hello, " + name + "!";  
    • }
    Mirah如下:
    • def hello(name:String)  
    • "Hello, #{name}!"  
    • end  
    這里我們聲明了name變量,作為String。因為僅是一行代碼是一String,我們知道返回類型一定是String。
    如果我們將它放入一個文件,會得到與使用javac同樣的結果。
    • ~/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”主體,定義的方法轉變為同樣類的靜態方法。這允許你有非常輕型的腳本,很干凈,并沒有runtime依賴。
    使用Java庫
    一個簡單的Swing應用
    • 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。確實說明兩件事:方法調用的性能和整數運算性能- 這都是很難在動態語言進行優化。
    • 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
    ......
    最終調用fib(40),打印結果,使用插補字符串,與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的表現完全一致。
    更多來自Java的功能界面定義:
    • import java.util.List  
    • interface Printer do  
    •   def printAll(aist)  
    •     returns void  
    •   end  
    • end
    我們執行這個界面與Java類似,使用implements 關鍵字,然而在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,仍然在開發中。但是已經有很多的用戶在使用。在Java兼容性方面考慮很有意義,F在Mirah類似于Java 0.9。. 沒有泛型或枚舉,最小的注釋支持,而且大多基本語言功能...但是你有一些封閉的支持,更多的文字量,局部類型推斷,等等。我們正在 穩步推進Mirah到1.0版本 ,至少相當于Java 5。我們還將繼續改善Mirah的宏觀體制和元編程能力,同時認真的從其他的語言中吸取最酷的功能。
    本文地址:http://www.portaltwn.com/thread-60222-1-1.html     【打印本頁】

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

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區
    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷