深入DLR语言 - IronJS
jopen 12年前
查看英文原文: <a href="/misc/goto?guid=4958349273880997000">Inside A DLR Language – IronJS</a> <p> <a href="/misc/goto?guid=4958349274682839482">IronJS</a> 是 <a href="/misc/goto?guid=4958349275712613884">DLR</a> 上的 ECMAScript 3.0 实现。其作者 <a href="/misc/goto?guid=4958349276524181486">Fredrik Holmström</a>最近在<a href="/misc/goto?guid=4958349277318910359">i-programmer 的访谈</a>上深入讨论在 DLR 上做语言实现的各种细节。</p> <p> Fredrik 特别强调 DLR 为他省下了很大的工作量:</p> <blockquote> <p>DLR 自带了很多好东西。</p> <p>语言互操作是其中之一。DLR 本身代码的坚实可靠。输出 IL 等很大比例的设施它都帮你准备好了。</p> </blockquote> <p> Fredrik 指出 DLR 有两种用法,一种是通过特殊的 binder 类/对象来关联操作,另一种是把 DLR 当作 IL 生成器和编译工具,然后自行做绑定。前一种速度较慢,IronJS 用的是后一种方案。根据去年的<a href="/misc/goto?guid=4958349278112868790">基准测试报告</a>,速度已经超过 IE8 的引擎。</p> <p> 自己做 binding 的副作用,是牺牲了与其他 DLR 语言互操作的天然能力。</p> <p> <a href="/misc/goto?guid=4958349278921595022">IronJS 的解析器</a>当前用<a href="/misc/goto?guid=4958349279716624521">F#</a>写成,而<a href="/misc/goto?guid=4958349280504016290">核心运行时</a>是用 C# 写的。为了提升速度,Fredrik 计划在下一版本中将所有的<a href="/misc/goto?guid=4958349281295877581">F#代码替换为C#</a>。他又在<a href="/misc/goto?guid=4958349282081197039">和 Scott Hanselmann 进行的访谈</a>中提到,IronJS 既然建立在 CLR 之上,撞上性能墙只是迟早问题,无法跟原生代码的 <a href="/misc/goto?guid=4958324604344519844">V8</a>相比。</p> <p> 如果你想在 DLR 上实现自己的语言,阅读<a href="http://dlr.codeplex.com/wikipage?title=Docs%20and%20specs&referringTitle=Home">文档</a>是个好的开始。“Iron”系列语言的源代码也是很好的阅读材料,如 <a href="/misc/goto?guid=4958349284383186380">IronPython</a> 或者 <a href="/misc/goto?guid=4958349285187123562">IronRuby</a>。</p> <div id="come_from"> 来自: <a id="link_source2" href="/misc/goto?guid=4958349285971196115" target="_blank">InfoQ</a> </div>