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

(2013-07-31) Dart实战 (1) 我的最初计划

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

这一个多月的业余时间都花在了Dart上。本想出点成果写个长篇,但最后因为种种原因,仅勉强以最低标准完成了最初的计划,看来只能写个短篇了。

Dart是Google正在开发中的一门语言,用于替代Javascript。相比javascript,它的语言基础更加牢靠,有利于创建更可靠的程序。鉴于现在web开发的情况为,后端有各种成熟的web框架,前端被风头正盛的各种js框架统治,所以Dart的目标只好定在“未来”,希望能在将来成为人们构建结构化web程序的首选语言。另外,Dart的作者是v8引擎的作者,仅这一点就能人以强大的信心。

我曾在很久以前简单了解了一下Dart,那个时候的它还太弱。这段时间看到Dart team正在开发一个叫web-ui的前端框架,与AngularJS相似,但有一些特性很吸引人,比如web components以及跟DOM的直接交互(AngularJS这点很弱)。我试用了一下,发现基本可用,而且生成的js文件也不大(如果你还记得这个故事)。所以又动了心,看看能不能用Dart做点什么可用的东西出来,同时实际体验一下Dart的开发。

我最初的计划如下:

使用Dart做一个简单的博客程序,然后把自己的博客都转过去。其特点是

  1. 全部以Dart实现,包括前后台
  2. 可以用Markdown写日志,并且可以直接ctrl+v将剪贴板中的图片上传至服务器并添加到编辑器中
  3. 使用sqlite作为数据库,不需要安装,拷走可用
  4. 可以稳定运行于一个128M内存的小型vps上,并承受一个普通博客的访问量

像我们购买的普通PHP空间,一年大约要100元左右,而一个128M的国外vps,一年也差不多100,这样在花费上差不多;面向的用户群为程序员,功能简单实用,特别是markdown和贴图片的支持;不考虑扩展性,想定制请直接fork改代码。

在实际执行过程中,发现估计得有点乐观,因为Dart的第三方资源实在太少,并且Dart本身某些功能的缺失,导致某些功能几乎没法实现。期间多次想放弃,不过最终坚持下来了,遇到的困难有:

  1. 没有可用的模板引擎,只好自己写了一个:https://github.com/freewind/RythmDart
  2. 没有orm可用,只能自己写了一个极简单的:https://github.com/freewind/dartblog/blob/master/lib/src/orm.dart
  3. 因为Dart更新很快,sqlite驱动多次过期,执行出错,差点倒在它上面
  4. Dart无法处理form上传文件,最后用html5的api,把文件变成base64格式传上去了
  5. 编辑器支持比较差,Idea在Dart上居然落后于官方的eclipse插件

最后的成品在这里:

模板引擎中大量使用了这个库:https://github.com/renggli/PetitParserDart,期间得到了作者的大量帮助,在此对他表示十二分的谢意。

你可以看到这个博客非常的简单,且代码也很丑,主要原因是因为Dart的一些功能上的缺失(以后会慢慢说),导致现阶段还没法做出一个漂亮的web框架,所以这些代码仅仅用来验证可行性。不过虽然丑,Dart现在的确已经有能力实现一个简单的网站,具备最基本的可行性了。我打算等Dart提供了必要的功能后,再重新实现,希望能把我最喜欢 的Play Framework 1的思想移植到Dart上。

插个插曲:这次尝试Dart是被web-ui吸引过来的,杯具的是,正当我准备用它的时候,听说它被废了。。。

最后做个广告:对Dart感兴趣的同学,欢迎加入我的Dart热情交流群:322215472

comments powered by Disqus