Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2013-01-23) 我为什么选择haxejs,而不是dart/typescript

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

我在js群里向大家介绍haxejs时,有同学问它与dart/typescript相比,有什么好处,为什么不用dart/typescript?

三者都有各自的优点和不足,我在这里列出来,大家自行参考:

Dart

优点:

  1. Google开发,研发实力雄厚,由v8引擎的开发者主导,阵容强大2. 有很多不错的语言特性,如静态类型仅对IDE起提示作用,所以我们可以给任意一个对象设为任意一个类型,既能得到编辑器的提示,又不影响生成的代码,非常灵活。3. 有一个叫dart-web-ui的项目,跟angularjs很像,但增加了web-components的支持,前途光明4. eclipse和idea都提供不错的支持5. 思路是Dart的,这样不论是在后台运行,还是生成js,都可直接按dart的思路走,不需要过多考虑js的语法问题。

缺点:

  1. 目前还不够成熟,还在不断添加语言特性,感觉很谨慎2. 着眼于未来,所以不太在意低版本浏览器的支持。如果你要支持IE6/7/8,请多多测试3. 生成的js优化不够,如果你引用的dart第三方库多了,生成的js会很大。这将导致你在使用dart时有很多顾虑。4. 因为思路是Dart的,并不支持js语法。如果你需要使用很多js库,需要多做一些工作

TypeScript

优点:

  1. 微软开发。微软对nodejs也在大力支持,可以看出微软将在这方面投入很多。2. 思路还是Javascript的,兼容js语法,仅仅提供了一些基本而必要的面向对象的结构3. 相当于静态类型版的coffeescript,对于js人员来说,学习成本很低4. 微软提供了基于vs的编辑器插件,据说功能不错5. Js兼容性比较好

缺点:

  1. 其它编辑器(如eclipse等)的支持还没跟上,对于非微软系的同学,安装VS心理阻力有点大2. 如果你本身不喜欢js的语法,则用typescript时,也会有类似的感觉3. 功能由第三方js库提供,根据项目需要,可能要引入多个第三方js库4. 语言本身提供的功能较少、较弱

Haxejs

优点:

  1. 生成js代码时,可以完全去除不需要的代码,生成的js文件体积很小。这意味着你可以随心所欲地使用各种haxe库,不用担心最终的文件大小。2. 语言功能很强,比如macro,可以实现一些常规手段很难实现的功能3. 有一些比较好用的功能,比如extension method等,可以实现流畅的代码调用4. 成熟,已经七年了,简单的bug早就死光了5. Js兼容性比较好。检查了生成的js,都是一些很常规的用法6. 使用Haxe的思路,对于常用功能,基本上不用考虑js。

缺点:

  1. 没有大公司支持,都是开源社区及爱好者们支持。2. 产品化做的不好,文档简单(甚至过时),资料少,不容易系统学习,有时候非常简单的功能也要去问3. 需要看源代码学习。但因为haxe还支持编译为php/neko/flash/c++/java/c#等代码,所以它的源代码中经常有各种编译开关,看着很乱。4. 一些第三方库使用的haxe版本不同,并不是拿来就能用,可能会有编译错误,需要手动修改5. 编辑器的支持不够好,虽然基本功能有了,但还不贴心6. 对于java/c#/js转过去的同学,有一些语言特性还需要学习和理解,有一定的学习曲线7. 大部分用haxe的人,是为了开发跨平台的手机游戏(使用nme库),单纯为了js的人比较少

我为什么选择HaxeJS

通过上面列出来的优缺点,可以看出,对于大多数人来说,haxejs并不适合。但对于我来说,它却是这三个中最适合的一个。因为它的优点都是我需要的,而它的缺点在这几天的学习过程中,已经克服掉了。

我今天把我前段时间写的js代码全部转换成了haxe代码,并且运行完全正常,这给了我极大的信心。在转换过程中,发现haxe的语法跟js语法还是很像的,拷过来的代码只需要改少数几个地方(如增加类型)就行了,比较方便。

我打算以后就用HaxeJs来写js代码,不过对于我来说,大部分功能还是在后端用java实现。我觉得用nodejs的人,更应该考虑一下这种静态解决方案,不论是HaxeJs或者TypeScript,都可以一试。毕竟服务端的代码往往比较多,需要经常重构,如果没有类型系统和编辑器的支持,会让人无从下手。

最后再次强调,请根据自己的情况和需求选择合适的语言和技术。我的选择只适合我的情况,所以仅供参考。

一些评论

zjcqoo

Typescript的编译器居然也是用Typescript写的。。。编译速度实在受不了

comments powered by Disqus