云编程那些事4 - 不造巴比伦塔

圣经旧约有个巴比伦塔的故事:当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。

上帝似乎也在阻止码农建立巴比伦塔,我们有太多的编程语言,程序与码农之间、不同语言的程序相互之间的沟通变得无比复杂。SUN一直有"not invented here"的情结,仿佛不发明毋宁死。公司里不乏创造编程语言的高手,除了Java的高斯林,还有来自伯克利大学的Tcl/Tk发明者,XML的发明者,JavaFx的发明者。我以前做过几个编译器,很有发明一种新语言的冲动,感觉这是青史留名的机会。但是这个冲动被巴比伦塔克制了,我们是否真正需要为云编程设计一种新的语言?正因为对程序语言设计和编译实现有比较深入抽象的理解,我们开始探索如何利用流行的语言表达云编程的方言特色。

Java经过六代,已经变得过于笨重庞大,尤其是自我解析的Reflection部分算不上通俗,以致多数码农并不熟悉如何使用Reflection进行自造,而我很坚持云编程一定要有超强的程序自己制造程序的能力。当时,既流行也轻巧的Javascript成为我们的首选,毕竟,Javascript也是Netscape网景与SUN合作的成果,借了Java的名。青睐Javascript的原因除了流行性,更因为它是一种深受Scheme语言影响的函数编程语言。函数编程里,代码封装在函数的容器里变成了数据,代码和数据可以混为一谈。这样让程序方便地在云里跑来跑去,并且随时可以让程序自造代码。

既然云把一切变成了服务,云编程的特色应该把程序自身也变成服务。Javascript的函数编程特色,用来把代码封装成云里可以输送和享用的服务。而Javascript的代码自造,能够带来非常智能的云服务。代码级的云服务比当时Amazon亚马逊的AWS要细腻太多。当年还没有清晰的云服务层次划分,用现在的术语,Amazon的云服务是IaaS,提供计算、存储、带宽这样的基础资源。IaaS不考虑应用的问题,只考虑操作系统层面的资源服务。后来出现了PaaS,提供应用层面的支撑,例如Google在2008年推出的GAE,提供不同语言的运营环境、数据库、中间件。这样的PaaS,只考虑应用支撑层面的资源服务。简单说,你把程序写好交给PaaS,不用操心安装和运营Tomcat和MySQL之类的应用支撑软件。然而这种PaaS,不考虑你如何写程序的问题。我们的目标是最大限度地利用云,用云的方式来写出在云上跑的程序,打造一个“面向服务 service-oriented programming”的云编程模式。用浏览器在云上编程只是一个方面,更重要的是,一段可复用的程序,例如一个Class,应该成为一种云服务。由于Javascript的码农已经很熟悉Ajax的API服务调用,我们顺着这个思路,构造了两类服务:

  1. Service: 用Javascript可以写出后台的数据API服务。后台部分需要在Java里面跑Javascript,我们用了SUN欧洲同事研发的Rhino。经过精心的映射和封装,码农不需要Ajax那么麻烦,可以用一行代码搞定API的调用,类似于 var reviews = Service.bookStore.getReviewsByItem(item_id);
  2. Widget: 用Javascript,HTML,CSS一起写出前台的Web页面部件。而一个页面里,用Javascript可以方便地引用和复用Widget。
Service和Widget都是云服务。和亚马逊谷歌的云服务道理一样,亚马逊提供Linux虚拟机,谷歌提供Tomcat,我们提供更细颗粒的应用程序服务。为了简化API调用的界面,程序级的云服务一概使用命名空间,例如Service.bookStore.getReviewsByItem就是一个云服务,这样非常符合码农的习惯。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值