一起谈.NET技术,.NET平台上的JavaScript引擎

  长久以来,在.NET平台上只能通过JScript.NET执行ECMAScript/JavaScript代码,但是该项目一直是.NET语言中的二等公民,甚至Mono中的对应项目也已经无人维护。不过在JScript.NET逐渐淡出人们视线的时候,.NET平台上也出现了一些新的JavaScript执行引擎,虽不完善,但值得关注。

  Jint是一个相对较早的纯托管代码实现的JavaScript执行引擎,基于MIT授权协议开源,它的目标是为.NET应用程序提供JavaScript代码的执行及互操作能力。您可以将一个.NET对象传入应用程序,或是使用.NET类库。Jint使用ANTLR解析JavaScript代码以避免CodeDomProvider可能带来的内存泄漏。目前Jint处于0.8.9版本,可以支持JavaScript的一些高级技巧,但仍处于ECMAScript 3.0语言特性的实现阶段。

  Jurassic同样是一个开源的托管JavaScript执行引擎,使用MS-PL授权协议。它的目标是成为.NET平台上功能最强,最为标准的JavaScript引擎。具官方页面描述,Jurassic引擎:

  • 支持ECMAScript 3和ECMAScript 5的功能
  • 简单但强大的API
  • 将JavaScript编译为.NET字节码(CIL),而非解释执行
  • 纯.NET实现,无原生代码
  • 支持Visual Studio的基础集成调试功能
  • 使用轻量级代码生成技术,所有的动态代码均可被回收

  从性能评测上看,Jurassic优于Jint,但还远远落后于著名的V8引擎。此外,Jurassic依赖.NET 4,并支持Silverlight,在它的项目页面中您可以看到一个Silverlight版的JavaScript控制台。

  IronJS是一个.NET平台中的新军,由Fredrik Holmström开发。IronJS之前同样使用ANTLR来解析代码,但如今的解释器已经使用F#编写。IronJS构建于DLR之上,因此可以轻易地与IronPython,IronRuby等语言进行互操作。IronJS最重视的一点便是“性能”,从作者博客上的各项评测结果来看,甚至领先于以速度见长的V8。不过IronJS仍处于早期Alpha阶段,并没有提供完整的功能。

  同样基于DLR的还有RemObjects Script for .NET,可惜它并不是开源产品(不过公开了源代码),且授权协议要求我们最多在5台机器上安装代码,且只供自己使用。

  除此之外,老赵在博客介绍到,他在构建新版博客的时候,使用IKVM.NET运行Java实现的Rhino引擎,并成功执行了showdown.js(JavaScript实现的Markdown转化器)及一些自定义的过滤逻辑:

有趣的是,.NET平台下最靠谱的JavaScript执行引擎居然是Rhino JavaScript,最近一次发布是在2009年3月,不过实现的十分完整。要说缺点,可能就是使用起来比较麻烦,还有,这是个Java项目。

嗯,我没有开玩笑,我们完全可以在.NET平台下使用Rhino JavaScript:

var cx = Context.enter();try{  var scope = cx.initStandardObjects();   cx.evaluateString(scope, @"var checkName = function(name){ return /^\w{3,10}$/.test(name); }","checkName.js", 1, null);  var func = (Function)scope.get("checkName", scope);   Console.WriteLine(Context.toString(func.call(cx, scope, scope,"jeffz")));   Console.WriteLine(Context.toString(func.call(cx, scope, scope,"hello world"));}finally{  Context.exit();}

因为我们有IKVM.NET。mono等.NET开源社区上有大量宝藏,就看您能利用多少了。我用ikvmc把js.jar转化为RhinoJs.dll之后就可以直接使用,效果很好,对调试也有很好的支持(如果JavaScript执行时出现了错误,则VS会直接带您至出错的那行)。性能也是比较令人满意的,在我的Mac OSX上安装的Ubuntu Server 10.10虚拟机,单线程转化并过滤博客上最近的3800条评论,大约耗时20秒。试验时Host上还开着一个Windows 7虚拟机,还有大量浏览器等应用程序,并不十分空闲。

您可能知道,我的博客目前是基于mono 2.6的,其中比较有特色的地方便是评论功能了,我使用Markdown标记,并提供了实时的预览功能,这自然需要在客户端解释Markdown标记,并进行过滤。目前,我还在服务器使用了C#实现的Markdown转化器及过滤逻辑,但在某些特殊情况下结果会有所不同,且需要维护两套代码。不久以后,我会将把博客升级为ASP.NET 4.0及mono 2.8(C# 4.0的dynamic特性在某些情况下的确比较方便),并且在服务器端使用IKVM.NET + Rhino JavaScript执行相同转化代码。从效果上来看还是十分令人满意的。

  IKVM.NET是一个在.NET环境下运行Java程序的项目,它可以将Java字节码转化为.NET IL,并提供了一套JDK核心类库的.NET实现。IKVM.NET支持微软.NET平台及Mono,并可以成功运行包括Eclipse、Jython、JBoss在内的大型Java应用程序。老赵之前也分享过他基于IKVM.NET使用Lucene 2.9.0及Google Closure Compiler的经验。

时间: 2024-08-01 11:00:20

一起谈.NET技术,.NET平台上的JavaScript引擎的相关文章

大数据实战:站在JMP分析平台上的FIT足迹识别技术

大数据范围越来越广,随着不同应用的爆发式增长,数据分析正在被更多行业企业所知晓并实践,比如互联网.金融.零售.医疗.以及制造业等.与此同时,对于统计分析系统应用的争论,也随着应用与实践的逐步深入而日趋激烈. 正如之前就"数据收集与分析"的话题与 LinkedIn商业分析部总监张溪梦讨论时,他特别提到的一点:"统计分析有两个知名系统,SAS和R.前者稳定,闭源,功能众多,大型企业用户很多.后者,开源,反应快,但并不稳定,专业领域优势明显,年轻人很喜欢用.各有空间和市场.&quo

java平台上,类似于WCF的技术,一般用什么?

问题描述 java平台上,类似于WCF的技术,一般用什么?我知道有一些技术能实现,比如:RMI,CORBA,EJB.但大家做产品时一般都用什么?比如.net平台现在就是WCF,Java平台上有没有类似的? 解决方案 可以尝试apache CXF解决方案二:Apache CXF目前java平台常用的webservice实现,除此之外,还有xfire,axis2解决方案三:WCF能支持的服务比较多,你说的RMI和EJB完全不在一个概念上,初步判断你是要实现web service吧?

一起谈.NET技术,分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

在许多年前,"语言"就等同于"平台",例如C,C++以及最早的Ruby和Python等等.但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多.再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂.技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.简单地说,如今的观念,一定要从"语言即平台"切换成"语言及平台",当分清"语言"和&quo

一起谈.NET技术,数据库访问的性能问题与瓶颈问题

声明: 本文是一篇有争议的文章,甚至有可能是一篇争议非常大的文章,可能争来争去依然无法得到一个统一的意见. 场景 个别公司的技术决策者要求团队的开发人员在编写数据访问层的时候,禁止在程序中出现任何的SQL语句,禁止使用Entity Library,禁止使用NBear.NHibernate.IBatis.Entity Framework等ORM框架,只允许使用存储过程.试想一下,您的公司是否是这样子的?您的身边有没有这样的朋友,他们的公司存在这样或类似这样的情况吗? 矛盾点   对于开发人员来说,

一起谈.NET技术,抛砖引玉:我看微软.NET各子技术领域之应用前景

从2002年发布.NET 1.0,历经8年发展,.NET发展到了4.0,已经成为一个庞大而复杂的软件开发与运行平台,其架构日益复杂,其应用领域也在不断地扩展,包容了"一堆"的子技术领域.在.NET 4.0即将发布之际,回顾一下已发布的各项.NET技术,看看哪些技术用得很火,哪些被打入冷宫,再猜猜.NET 4.0中可能会有哪些技术会得到"青睐",是件有意思的事. 1. 桌面应用程序开发技术( Windows Form和WPF) 在.NET桌面应用程序开发领域,Wind

一起谈.NET技术,为什么我支持托管运行时(虚拟机)

最近博客园上在炒关于C#性能的问题,其实应该说是.NET性能的问题,其中某位仁兄提出,他希望C#能够直接编译为原生代码,而不是在CLR这样一个托管运行时上执行,因为虚拟机啊,JIT什么的性能差.后来发到TL上以后,也有朋友认为,"基于虚拟机的语言都是大公司为了利益在推动,说白了就是政治",因此"对C#提高性能的建议感到可笑,因为它本来就不是用来开发高性能程序的",再有,"C.C++已经明确不和这些后进争所谓的'容易开发'的头衔",那么其他语言为什

网上教育系统软件对接到一体化指挥平台上,实现野战条件下网上教育直达单兵

一名入伍时仅有初中文化的下士,考取了"二级计算机网络管理员"证书,前不久被团里表彰为优秀网络管理员,团长在表彰大会上号召全团官兵向他学习-- 呵呵,也许你猜到了,这个人就是我.当兵5年,成就了今天的我. 既然大伙儿让我说说,那我就介绍一下自己这5年的"网"事.其实就一句话:这5年,我和网络一起升级. 想起刚刚开始负责维护更新团队政工网网页那会儿,只有一个词可以形容,那就是战战兢兢.幸好老班长杨西峰手把手地带了我两周,才让我握鼠标的手不再颤抖. 噢,忘了介绍一句,团里

聪明平台上的“傻瓜”工具 IBM发布机器学习即服务

 这一轮的人工智能热潮使机器学习成为人们眼中的高频词,而随着海量数据和云计算的发展,这项诞生了半个多世纪的技术重于迎来了春天,更被广泛应用于大数据分析和人工智能等领域. 但是作为一门多领域交叉学科,企业要想充分利用机器学习技术,不仅需要跨过数据的门槛,还要解决专业人才的难题,更需要面对众多的算法模型.数据处理,以及没完没了的模型调优. 聪明的平台 机器学习权威学者,卡内基梅隆大学教授Mitchell T.M.认为,机器学习这门学科所关注的问题是"计算机程序如何随着经验积累自动提高性能"

新型的互联网公司其实建立在亚马逊提供的平台上

酷盘董事长黄明明 和讯科技消息 3月22日,由艾瑞咨询集团主办的第七届艾瑞年度峰会今日在京举行.本届艾瑞年会历时2天,第一天诸多行业领袖参与高峰论坛,进行交流探讨.次日3月23日,行业精英现场多维度地剖析行业动态.分享成功经验及独到见解.酷盘董事长黄明明发表主题演讲. "如果我们看云存储市场,每年百分之百增长,如亚马逊公司,新型的互联网公司其实建立在亚马逊提供的平台上",黄明明表示. 黄明明同时认为,云存储虚无缥缈原因缺乏落地,无线互联网是云走进生活的巨大驱动力,只有云端服务3G+wi