<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |