`

IKVM 编程武林之.NET派的北冥神功

阅读更多
在编程武林中,Java派成立较久底子雄厚,虽然掌门人Sun已经老态龙钟,镇山之技的Java语言已经被后进的新秀.NET派的C#压得喘不过气来,甚至有时候Sun老大还得跑到.NET派潜伏学艺。但是百足之虫,死而不僵,一众Java派的拥趸们自认虽然Java渐渐技不如人,但是Java派成立日久,从Java演化过来的七十二门绝技绝非武林暴发户.NET派所能比拟,其中几大支派如apache,springsource各有绝技,而衍生出的帮会、黑社会等等更是不计其数,.NET派望尘莫及。

然而江湖传言有不世神功叫北冥神功,“北冥有鱼,其名为鲲,鲲之大,不知其几千里也……”,能够容纳几千里的大鱼必定是非常广阔的海洋,因而北冥神功正是寓含了广大恢宏之意,也体现了神功的威力。“可以吸取他人的内力以供己用,是迅速提升功力的捷径。内力既厚,天下武功无不为我所用,犹如北冥,大舟小舟无不载,大鱼小鱼无不容。”

.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所用,哇哈哈。
分享到:
评论
10 楼 xiaojing3517 2009-12-28  
其实一个纠结了的...
9 楼 ray_linn 2009-12-27  
幸存者 写道
ray_linn 写道


从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。


linq,dynamic与IL和CLR无关,这些东西要转成jvm上的.class倒并非难事,只是java不直接提供语言支持罢了。
比较麻烦的是泛型,比如jvm是做不到类似typeof(IEnumerable<object>)这种事情的。



我说的就是这个意思,由于java不提供语言支持,意味着必须写一个更复杂的编译器。
8 楼 幸存者 2009-12-27  
ray_linn 写道


从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。


linq,dynamic与IL和CLR无关,这些东西要转成jvm上的.class倒并非难事,只是java不直接提供语言支持罢了。
比较麻烦的是泛型,比如jvm是做不到类似typeof(IEnumerable<object>)这种事情的。
7 楼 ray_linn 2009-12-26  
kimmking 写道
介个,,,想起gcj了。

明儿翻翻有没有java上的.net虚拟机实现。
assembly-il转bytecode



ms 只有一篇论文:ILJc。

从指令上看CLR有更多的指令大概有220条,而JVM只有200条指令。

从特点上看CLR有更多特性,比如泛型的实例化就很难处理

从语法上看.net更丰富多彩,比如linq,dynamic这些东西,无疑给ILJc制造了许多困难。

6 楼 Hooopo 2009-12-26  
ray_linn 写道
如此宵小之徒:http://blog.csdn.net/liangdiwei/archive/2009/12/24/5072233.aspx

这也是你们门派的...
5 楼 ray_linn 2009-12-26  
如此宵小之徒:http://blog.csdn.net/liangdiwei/archive/2009/12/24/5072233.aspx
4 楼 kimmking 2009-12-26  
介个,,,想起gcj了。

明儿翻翻有没有java上的.net虚拟机实现。
assembly-il转bytecode
3 楼 ray_linn 2009-12-25  
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.

2 楼 RednaxelaFX 2009-12-24  
嘿嘿,这文字有趣~
不知道Ray大大有没有兴趣顺手拿Ja.NET来对比下看看?
1 楼 Hooopo 2009-12-24  
楼主的故事很精彩~~

相关推荐

    IKVM.NET 8.1.15

    IKVM.NET是一个开源项目,由Glenn Block创建,它的全称是"IKVM - Java for .NET"。这个项目的主要目标是将Java平台的核心部分移植到.NET Framework上,使得Java程序能够在.NET环境中运行。IKVM.NET 8.1.15是该项目的...

    IKVM7.3.4830.0,将java的jar包转换为.dll控件,以使.NET可以使用

    http://weblog.ikvm.net/default.aspx 解压ikvmbin ,并将%IKVM_HOME%\bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。 将java的jar包转换为.dll控件 使用的命令:ikvmc -out:XXXX.dll XXXX.jar ...

    IKVM-8.8.0-bin-net6.0

    IKVM(Java for .NET)是一个开源项目,它实现了Java虚拟机(JVM)和Java类库,使得Java程序可以在.NET环境中运行。标题中的"IKVM-8.8.0-bin-net6.0"指的是该版本是专为.NET 6框架优化的IKVM发布版,意味着它可以...

    IKVM.NETv8.1

    Java 8引入了许多重要的新特性,如lambda表达式、方法引用来支持函数式编程,以及Stream API,这些都可以通过IKVM.NET在.NET环境中使用。 在实际应用中,IKVM.NET的使用流程大致如下: 1. 下载并安装IKVM.NET的相应...

    IKVM7.4.5196.0,将java的jar包转换为.dll控件,以使.NET可以使用

    http://weblog.ikvm.net/default.aspx 解压ikvmbin ,并将%IKVM_HOME%\bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。 将java的jar包转换为.dll控件 使用的命令:ikvmc -out:XXXX.dll XXXX.jar ...

    ikvm学习入门 .net与java程序互访

    IKVM(IronJava Virtual Machine)是一个开源项目,它实现了Java虚拟机(JVM)和Java类库,并将它们集成到.NET Framework中。这样,开发者可以在.NET环境中运行Java应用程序,同时也能利用.NET平台的特性和资源。这...

    ikvm-7.2.4630.5.rar

    IKVM.NET是一个开源项目,由Glenn Block创建,它的全称是"Java for .NET",旨在为.NET Framework提供一个完整的Java虚拟机(JVM)实现。这个项目的核心目标是让Java应用程序能够在Microsoft的.NET环境中无缝运行,...

    ikvmbin-8.1.5717.0版本 jar包转dll

    IKVM是一种开源项目,全称为“IKVM.NET”,它是一个.NET框架的实现,允许Java应用程序在.NET环境中运行。IKVM的核心功能是将Java字节码转换为.NET中间语言(IL),使得Java类库可以在.NET平台上无缝使用。在这个场景...

    IKVM最新版.rar

    IKVM(Java for .NET)是一款开源项目,由Jeroen Frijters开发,它将Java虚拟机(JVM)和Java类库实现为.NET框架的一部分。这个工具允许.NET开发者利用Java库,将它们转换为.NET组件,进而可以在C#等.NET语言中直接...

    IKVM-8.2.4630.5.rar

    IKVM(Java to .NET)是一个开源项目,它实现了Java虚拟机(JVM)和Java类库,使得Java程序可以在Microsoft.NET平台上运行。这个“IKVM-8.2.4630.5.rar”压缩包包含的是IKVM的一个特定版本,即8.2.4630.5,它提供了...

    java2.net_ikvm8.1.5717.0

    jar包转换成.net的工具,包含ikvmsrc-8.1.5717.0.zip、ikvmbin-8.1.5717.0.zip、ikvmbin-7.2.4630.5.zip三个文件。...IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序。

    IKVM.NET详细信息

    IKVM.NET是一个开源项目,由Glenn Block创建,它的全称是"I Know VM for .NET",是一个将Java虚拟机(JVM)和Java类库移植到.NET Framework的实现。这个项目的主要目标是允许.NET开发者能够使用Java库,同时也能让...

    ikvm资源及测试包

    IKVM是一种开源项目,全称为"IKVM.NET",它实现了Java虚拟机(JVM)并将其集成到.NET Framework中,使得.NET开发者可以利用Java库和程序在C#等.NET语言中运行。这个资源包“ikvm资源及测试包”显然是针对想要在C#...

    ikvm-7.2.4630.5.zip

    IKVM.NET的主要功能之一是允许.NET开发者利用Java类库,比如在描述中提到的"hanlp.jar",这是一个著名的中文分词和自然语言处理库。通过IKVM.NET,开发者无需将代码迁移到Java环境中,可以直接在C#或其他.NET语言的...

    ikvm8支持jdk8.zip

    IKVM.NET是一个开源项目,由Glenn Block创建,它的全称是"IKVM: Java for .NET"。这个项目的主要目标是实现一个Java虚拟机(JVM)和Java类库的.NET Framework版本,使得Java代码可以在.NET环境中运行,同时也允许...

    .net调用java IKVM-8.1.5717.1

    .NET调用Java IKVM-8.1.5717.1是一个技术组合,它允许.NET Framework应用程序调用和利用Java代码和库。IKVM(Java for .NET)是一个开源项目,由Ganesh Venkatraman开发,其主要目标是实现Java虚拟机(JVM)和Java ...

    ikvm-8.1.5717.0

    4. **部署灵活性**:由于ikvm将Java代码编译为.NET IL,因此,Java应用程序可以作为.NET组件进行部署,无需在目标机器上安装完整的JVM。 5. **开源社区支持**:ikvm是开源项目,由全球开发者共同维护和改进。这意味...

    ikvmsrc-8.1.5717.0_C#_ikvm8_

    标题“ikvmsrc-8.1.5717.0_C#_ikvm8_”提及的是IKVM库的一个版本,这是一个开源项目,它允许在.NET平台上运行Java应用程序和库。IKVM将Java虚拟机(JVM)和Java Class Library的实现转化为.NET Framework兼容的组件...

    ikvmbin-8.1.5717.0 IKVM.NET

    基于.NET的Java虚拟机意味着我们可以让Java程序跑在.NET上,可以通过虚拟机这个中介让Java程序和.NET应用程序一起协同工作。更难能可贵的是,IKVM同时支持微软的.NET Framework 和 Mono。

    IKVM.GNU.Classpath

    这个项目的核心是IKVM.NET,一个实现了Java虚拟机(JVM)和大部分Java核心类库的.NET版本。IKVM这个名字是"Java for .NET"的缩写,它的目标是将Java技术融入.NET世界,使开发者能够利用.NET的优势来开发和运行Java...

Global site tag (gtag.js) - Google Analytics