IronJS 是 DLR 上的 ECMAScript 3.0 实现。其作者 Fredrik Holmström 最近在 i-programmer 的访谈上深入讨论在 DLR 上做语言实现的各种细节。
Fredrik 特别强调 DLR 为他省下了很大的工作量:
DLR 自带了很多好东西。
语言互操作是其中之一。DLR 本身代码的坚实可靠。输出 IL 等很大比例的设施它都帮你准备好了。
Fredrik 指出 DLR 有两种用法,一种是通过特殊的 binder 类 / 对象来关联操作,另一种是把 DLR 当作 IL 生成器和编译工具,然后自行做绑定。前一种速度较慢,IronJS 用的是后一种方案。根据去年的基准测试报告,速度已经超过IE8 的引擎。
自己做binding 的副作用,是牺牲了与其他DLR 语言互操作的天然能力。
IronJS 的解析器当前用 F#写成,而核心运行时是用C#写的。为了提升速度,Fredrik 计划在下一版本中将所有的 F#代码替换为 C#。他又在和Scott Hanselmann 进行的访谈中提到,IronJS 既然建立在CLR 之上,撞上性能墙只是迟早问题,无法跟原生代码的 V8 相比。
如果你想在 DLR 上实现自己的语言,阅读文档是个好的开始。“Iron”系列语言的源代码也是很好的阅读材料,如 IronPython 或者 IronRuby 。
查看英文原文: Inside A DLR Language – IronJS
更多内容推荐
为.NET 所用的 NumPy 和 SciPy
作为Python Tools for Visual Studio项目的一部分,NumPy和SciPy程序库已经迁移到.NET上了。这项迁移通过本地的C核心组合了C#和C接口,从而所有.NET语言都能够从中受益。
.NET 中的 SIMD
在Mono六年之后,微软的CLR实现最终通过RyuJIT提供了对SIMD的支持。RyuJIT 目前仍处在社区预览阶段,它是下一代的.NET JIT编译器。
R 语言的预测分析高级方法
2023-01-12
C++ 20 的悲叹,未出世就被群嘲“劝退”
C++ 20 要来了!然而,大家都不看好是怎么回事儿?
Mono 为何能跨平台?聊聊 CIL
跨平台是Mono的一大特性,却并不仅仅局限于Mono。前一段时间CoreCLR登陆GitHub,便有很多人在Linux甚至是Mac OS X上成功编译了CoreCLR,并且用CoreCLR在各自的平台上成功的运行了同一个程序(CoreClrHelloWorld,是一个跨平台的.NET控制台演示程序,可以显示微软、Linux、苹果的logo)。与此同时,也正是由于具备这种跨平台的能力,所以Mono也被一些移动端开发工具所利用,例如游戏引擎Unity3D。那么这种跨平台的特性是如何实现的呢?为何同一个程序,能运行在不同的平台上呢?下面小匹夫就和各位一起聊聊Mono跨平台的基础,也是本文的主角CIL吧。Tag: Mono、 .Net、 Unity3D、 博文共赏文章是Markdown,注意排版。
商业数据分析利器 - R 语言
2022-11-07
使用.NET 发送格式丰富的电子邮件
格式丰富的电子邮件需要一点儿CSS,但电子邮件客户端并不总能处理好CSS所需的内联样式。对于Ruby来说,这可以简单地通过Alex Dunae's Premailer库来处理,但从.NET调用它对于大多数开发者来说都是不可取的。因此,Martin H. Normark创建了一个.NET版的,名叫PreMailer.NET。
开篇词 | JavaScript 的进阶之路
这门课的初衷,就是让学习JavaScript的你,能够对这个开始比较不那么“专业”的语言,有一个系统的专业理解。帮助你一步一个脚印,把点连成线,把线连成面,把面搭建起一座空间立体的“思维大厦”。
2022-09-19
开篇词|让 Rust 成为你的下一门主力语言
从入门到放弃?精准学习+刻意练习,陈天带你轻松掌握Rust!
2021-08-16
加餐|这个专栏你可以怎么学,以及 Rust 是否值得学?
都说 Rust 好,但是就是入门难,所以它真的值得你花精力学习吗?
2021-08-24
Blazor 将.NET 带回到浏览器
由Steve Sanderson开发的Blazor尝试使用WebAssembly和DotNetAnywhere将.NET带回到浏览器。它不是要成为一个像Flash或Silverlight那样的完整生产框架,而是要探索一下有什么可能性。
Eric Lippert 对 C#的评论和展望
Roslyn项目。异步编程。语言设计哲学。总是有料的Eric Lippert简述C#最近的成果,讨论C#和Visual Basic的关系并比较两者的设计哲学。最后他展望了未来可能纳入C#的特性。
JS or C#?不存在的脚本之争
本文主要针对在Unity3D开发过程中,普遍存在的如何选择开发语言这一问题进行剖析。通过剖析Unity3D中的JS脚本(UnityScript)到底是什么,来揭示UnityScript和Boo之间的关系。再将UnityScript和遵循ECMAScript标准的JS进行对比;将UnityScript和C#进行对比,最后得出作者的观点。
从游戏脚本语言说起,剖析 Mono 搭建的脚本基础
在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”。那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而Mono又能提供怎样的脚本基础。最后会通过模拟Unity3D游戏引擎中的脚本功能,将Mono运行时嵌入到一个非托管(C/C++)程序中,实现脚本语言和“引擎”之间的分离。
WebAssembly 和 Blazor:解决了一个存在十年的老问题
Blazor可以使用C#构建客户端代码,还允许开发人员在没有插件的情况下在浏览器中运行现有的.NET标准DLL。
Mono 4.0 发布,支持 C# 6
Mono 4.0本月正式发布。这标志着含有微软的CoreCLR项目的开放源代码的首个版本的问世。其默认的语言为C# 6,这意味着Mono再一次抢在微软之前推出了新的C#编译器的RTM版本。
10|基于 C 语言的虚拟机(一):实现一个简单的栈机
今天让我们来实现一个基于C语言的虚拟机!
2021-08-30
Edge.js:让.NET 和 Node.js 代码比翼齐飞
Tomasz Janczuk创建了Edge.js,它可以将.NET和Node.js优点相互结合。是不是很好奇怎样将非阻塞通信添加到你的.NET工程?是不是正在寻找将计算密集型代码移出Node.js线程的方法?Janczuk的文章为读者提供了良好的起点,在本文中可以了解到Edge.js的工作原理,以及在程序中使用它时所带来的益处。
C# 8 新提案让泛型 Attribute 成为现实
从一开始, Attribute就是.NET的一部分。尽管理论上CLR支持泛型Attribute,但在实现新提案之前,仍然无法在C#中使用它。
JSIL:将 CIL 编译为 JavaScript 时所遇的挑战
本文介绍了JSIL,这是一个将.NET转换为JavaScript的编译器,同时详细地讲解了将CIL代码编译为跨浏览器的JavaScript时所遇到的各种困难。
暂无签名
推荐阅读
电子书
大厂实战PPT下载
换一换 姬生利 | 腾讯安全 云鼎实验室数据安全总监
刘凡平 | 岩芯数智 CEO
朱荣松 | 信也科技 基础组件负责人
评论