代码改变世界

Script# - 把 C# 编译为 JavaScript

2006-10-22 15:39  Cat Chen  阅读(2147)  评论(3编辑  收藏  举报

原来有一样东西叫做Script#,是Atlas的主要开发者之一的Nikhil Kothari自己编写的一个小框架,目标就是制作一个C#编译器让C#可以直接编译为JavaScript,并且是不经过编译为IL这个步骤。

之前我就说过,以MS的做法如果要想继续宠着那群很RAD的ASP.NET程序员,并且确保他们继续think inside MS's box,那就必须做一个C#到JavaScript的编译器,让ASP.NET程序源可以继续以C#语法和服务器端控件编写方式来制作客户端控件,然后如服务器端拖放控件一个制作Ajax应用。不过我当时的想法是,先编译为IL再编译为JavaScript,这样其他语言也都能兼容近来,不过Script#的做法就是C#直接编译。我当时还想过要有一个控件树和HTML DOM影射的模型,不过在Atlas里面这个应该是xml-script的DOM而非HTML DOM。

回头看Atlas,为什么它设计得那么像C#,让大家可以用C#的对象设计方法来写JavaScript(当然代码要写对一些),同时把C#能实现的都尽量实现了,原来就是为了Script#铺路。其实这个编译器不难做,C#每一条关键所表达的语义要在JavaScript找一个对应的表达方式是肯定做得到的,不过如果对应的JavaScript表达方式如编译为二进制代码一样难读,那就难以编译后修改再用了,所以Script#有一个关键的目标就是编译出来的JavaScript是高可读性的。

其实很好的主意天天都会降临在不同的人身上,只是你会不会愿意抓住它然后做一个大家都看好的东西来,而你的价值取向很大程度上决定了这个东西最后是否被看好。当然,价值取向只是一个决定因素,如果你有适当的价值取向,但是你没有足够的技术来按照这个价值取向实现,最后还是会走弯路,甚至选择放弃。

最后,抢占时机也是很关键的,在Script#正式公布的同时能将Java编译为JavaScript的Google Web Toolkit也出来了,结果Nikhil Kothari有点后悔为什么不提前几周正式公布。