锁定老帖子 主题:IKVM 编程武林之.NET派的北冥神功
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-24
最后修改:2009-12-24
然而江湖传言有不世神功叫北冥神功,“北冥有鱼,其名为鲲,鲲之大,不知其几千里也……”,能够容纳几千里的大鱼必定是非常广阔的海洋,因而北冥神功正是寓含了广大恢宏之意,也体现了神功的威力。“可以吸取他人的内力以供己用,是迅速提升功力的捷径。内力既厚,天下武功无不为我所用,犹如北冥,大舟小舟无不载,大鱼小鱼无不容。” .NET派的几位高人闭关苦练,竟然悟出北冥神功,此神功后曰:IKVM.NET. 江湖后辈小子Ray Linn偶习此神功,得心得一二,不敢自珍,特此记之,以壮大我.NET门派,千秋万代,一统江湖。 那日Ray偶来到apache支派,却看到Apache弟子们各施绝技,好不热闹. Ray对Apache绝技手痒已久,想来得习IKVM.NET已有时日,斗胆上前叫阵。迎战者哪Apache派中的小弟子,江湖人称:commons.collection. 二人拳脚来去,Ray却懒得与之多动手脚,随即默念真言: ikvmc -assembly:commons -target:library -version:1.0.0.0 commons-collections-3.2.1.jar collection陡然萎靡在地,想是一身内功尽被Ray所吸去,Apache派人等尽皆失色,“我等苦练十余载,内力尽为汝一夕取去”,莫敢上前。 Ray回转.NET派,试练collection的神功,借助IKVM.OpenJDK.Core之神器,神功即成,试演如下: using System; using org.apache.commons.collections; using org.apache.commons.collections.functors; namespace MyLib { class Program { static void Main(string[] args) { String name = "Tim"; Predicate nameJohn = new EqualPredicate( "John" ); Predicate nameTim = new EqualPredicate( "Tim" ); Predicate instanceString = new InstanceofPredicate(typeof(String) ); Predicate instanceDouble = new InstanceofPredicate(typeof(Double)); Console.Out.WriteLine( "Is Name John?: " + nameJohn.evaluate( name ) ); Console.Out.WriteLine("Is Name Tim?: " + nameTim.evaluate(name)); Console.Out.WriteLine( "Is this a String?: " + instanceString.evaluate( name ) ); Console.Out.WriteLine( "Is this a Double?: " + instanceDouble.evaluate( name ) ); } } } 相较原有神功: import org.apache.commons.collection.Predicate; import org.apache.commons.collection.functors.*; String name = "Tim"; Predicate nameJohn = new EqualPredicate( "John" ); Predicate nameTim = new EqualPredicate( "Tim" ); Predicate instanceString = new InstanceofPredicate( String.class ); Predicate instanceDouble = new InstanceofPredicate( Double.class ); // Testing all predicates for "Tim" System.out.println( "Is Name John?: " + nameJohn.evaluate( name ) ); System.out.println( "Is Name Tim?: " + nameTim.evaluate( name ) ); System.out.println( "Is this a String?: " + instanceString.evaluate( name ) ); System.out.println( "Is this a Double?: " + instanceDouble.evaluate( name ) ); 竟然绝无二致。 偌大Java江湖,从此为我.NET所用,哇哈哈。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-24
楼主的故事很精彩~~
|
|
返回顶楼 | |
发表时间:2009-12-24
嘿嘿,这文字有趣~
不知道Ray大大有没有兴趣顺手拿Ja.NET来对比下看看? |
|
返回顶楼 | |
发表时间:2009-12-25
最后修改:2009-12-28
ja.net和Ikvm.net都是在.net CLR之上又虚拟了java的虚拟机,并提供了兼容某些版本的java
就目前而言,二者提供了Java虚拟机都相当强大,比如ikvm尽管目前版本才0.4,但是竟然可以磕磕盼盼跑起了jboss 4.05..(有一些exception,主要是某些类型转换出错),而且大部分war发布正常。 若假以时日,在windows平台上,完全丢弃java虚拟机也未曾不可。 ja.net和IKVM比较: 1. IKVM和ja.net都提供了运行java class的能力,也提供将java代码编译成assembly的能力,但IKVM提供了更简单的转换jar到assembly的方法,略胜一筹。 2. IKVM的兼容度更高,在测试中,ja.net虽然宣称可以运行JDK编译后的class,但是java -vmdir:drlvm HelloWorld 却直接报告不支持Windows 6.1 (Win 7).(default java是运行.net版class,vmdir:drlvm运行的则是java虚拟机),这点和ikvm差别很大。 IKVM直接可以运行java class。 3.ja.net的javac不带-java,实际生成的class是assembly. |
|
返回顶楼 | |
发表时间:2009-12-26
介个,,,想起gcj了。
明儿翻翻有没有java上的.net虚拟机实现。 assembly-il转bytecode |
|
返回顶楼 | |
发表时间:2009-12-26
如此宵小之徒:http://blog.csdn.net/liangdiwei/archive/2009/12/24/5072233.aspx
|
|
返回顶楼 | |
发表时间:2009-12-26
ray_linn 写道 如此宵小之徒:http://blog.csdn.net/liangdiwei/archive/2009/12/24/5072233.aspx
这也是你们门派的... |
|
返回顶楼 | |
发表时间:2009-12-26
最后修改:2009-12-26
kimmking 写道 介个,,,想起gcj了。
明儿翻翻有没有java上的.net虚拟机实现。 assembly-il转bytecode ms 只有一篇论文:ILJc。 从指令上看CLR有更多的指令大概有220条,而JVM只有200条指令。 从特点上看CLR有更多特性,比如泛型的实例化就很难处理 从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。 |
|
返回顶楼 | |
发表时间:2009-12-27
ray_linn 写道 从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。 linq,dynamic与IL和CLR无关,这些东西要转成jvm上的.class倒并非难事,只是java不直接提供语言支持罢了。 比较麻烦的是泛型,比如jvm是做不到类似typeof(IEnumerable<object>)这种事情的。 |
|
返回顶楼 | |
发表时间:2009-12-27
幸存者 写道 ray_linn 写道 从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。 linq,dynamic与IL和CLR无关,这些东西要转成jvm上的.class倒并非难事,只是java不直接提供语言支持罢了。 比较麻烦的是泛型,比如jvm是做不到类似typeof(IEnumerable<object>)这种事情的。 我说的就是这个意思,由于java不提供语言支持,意味着必须写一个更复杂的编译器。 |
|
返回顶楼 | |