当前位置:七道奇文章资讯编程技术Java编程
日期:2011-04-13 09:26:00  来源:本站整理

<b>Java编程语言的另一个替换,编程语言 Mirah</b>[Java编程]

赞助商链接



  本文“<b>Java编程语言的另一个替换,编程语言 Mirah</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

当你利用Ruby语法,增添静态范例,并在JVM上运行时,发生了什么?Charles Nutter,JRuby的计划师为我们做了展示:
    我们很快将有Java 7,支持API的动态调用和改良.我们有很多编程语言可供挑选- 一些静态范例,一些是动态范例,...- 这供应了他们自己的独特上风.
    我们乃至发现Java本身的一些“小改变“,比方文字列表和字符串开关.我们有任何受管理的Runtime的最大、最强的生态系统,数以百万计的开辟者.
    但是,贫乏了什么东西.没有语言看起来可以代替Java本身.大概说,没有可以充当Java替身.
    从Java中学习
    让我们看一看尺度,我相信我们必须满意替换Java的尺度.下面是我的概念,他们都基于大量的使Java获得成功的指导原则.
    平等代码下,性能平等于Java
    假如我们利用新语言开始写核心库,以及系统级别的代码,它必须像Java做的那样履行精确.我们当然可以尝试更好的表现,但是“平等Java”绝对是最低限度.
    没有语言强加的Runtime库
    假如利用当前的替换语言的最大的障碍是它们强加于你它们的“锁链”-Runtime库.没有5,10,乃至20M的Jar文件,你写不出"Hello, world" .复杂的布置,小配置的利用更复杂.乃至更糟糕的,有些语言带有很大的初始化损耗,在加载他们的Runtime的类文件,和/或初始化Runtime状况时.
    不要比Java复杂
    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(本地范例推断)“的技术.简单来说,普通可以从Mirah的上下文推断对象,变量和办法调用的范例.像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)
    @title = title
    @width = w
    @height = 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: 878Mirah与Java的表现完好一致.
    更多来自Java的功效
    界面定义:
    import java.util.List
    interface Printer do
    def printAll(a:List)
    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兼容性方面考虑很有意义.目前Mirah近似于Java 0.9.. 没有泛型或列举,最小的注释支持,并且大多基本语言功效...但是你有一些封闭的支持,更多的文字量,部分范例推断,等等.我们正在 稳步促进Mirah到1.0版本 ,至少相当于Java 5.我们还将持续改进Mirah的宏观体制和元编程本领,同时认真的从其他的语言中汲取最酷的功效.


  以上是“<b>Java编程语言的另一个替换,编程语言 Mirah</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .