一、Qomolangma 1.0 Final
一年以来,Qomo团队都在一种迷茫的、看起来没有方向的状态中工作。因为Qomo看起来缺乏必要的设计,以向每一个关心它的人解释以下的问题:
- Qomo到底是什么
- Qomo有什么用
此前我已经说过,Qomo项目源出于另一个名为WEUI的商业项目。WEUI有着自己完整的架构和方向,由于需求决定设计,因此事实上WEUI的原始设计也是面向它原本的方向与需求的。我当然知道这样的需求目标和方向,但也同样知道:WEUI与Qomo有相似但不相同的方向。
所以,我无法把WEUI的架构搬到Qomo中去,也无法用WEUI的方式来解说Qomo的架构。我必须Qomo的前期工作中解决一个问题:如何让WEUI变成Qomo。
既然不能让一个旧架构为新目标服务,那么就明确目标,并为这个目标做一个新架构。
那么,还是上面那两个问题。Qomo的答案到底是什么呢?
二、Qomo 到底是什么
在很长时间里,我都在强调Qomo学术性的方面。但Qomo却不是学术者的玩物,Qomo的团队把它打造得“有点学术的味道”,其目标是让他更有实用的价值。我们应当从根基上保证Qomo能“被更好的实用”。
在架构上,Qomo一直良好地保持了它在两个目标上的相对独立:内核与应用。Qomo V1将主要的精力放在了内核的构建上。为了能让一个内核更好地满足将来的应用,它做到了模块间不存在严重的耦合性。这使得我们可以有一种简洁的方式来重建(适用于不同环境的)Qomo内核。在Qomo中,实现这种“重建”的工具是一个强大的Builder工具。有趣的是这个Builder也是使用Qomo来实现的。
Qomo面向的方向包括但并不局限于RWC(Rich Web Client)。在我看来,JavaScript是一种技术工具,但并不是一种仅用来做网页的工具。很多人怀疑这种语言的价值,但我想我已经清晰地看到这个语言超凡的特性和它蕴藏的能量。我也注意到这种能量在各种不同的平台、环境中慢慢地释放。
Qomo在语言特性的实现上也并不局限于RWC。已经有朋友注意到:如果我们仅仅是要做一些网页或者一套界面组件库,那么我们没有必要在Qomo中实现IOP和AOP。Qomo V1努力去实现这些,正是为了释放JavaScript这种语言的内部能量做出的准备。
所以说:
- Qomo内核是足够强大的能应用在不同的JavaScript宿主环境下的通用扩展。
- Qomo有能力提供胶合不同的应用环境下功能需求的中间代码。
- Qomo可以作为定制的宿主应用的代码包的一个部分以提升应用的体验或局部性能。
Qomo使用通用内核层,来面向不同的宿主环境去提供统一的实现能力——这一点有点象.NET的中间语言或Java的JVM(所起到的作用)。为了达到这种目的,Qomo在内核实现中体现了宿主无关的特性,也通过Builder和内核模块化来达到为特殊的宿主提供定制版本的能力。
Qomo应用可以不是独立的代码体(例如进程或模块),这说明它在形式上可以是代码片断,也可以是整体方案。这种特性由两个方面来保证:JavaScript语言对宿主的设定,以及Qomo自身的可剪裁特性。因此你可以用它来胶合各种模块或者用它独立实现应用。
三、Qomo 有什么用
严格来说,Qomo只实现一个应用(或者胶合模块、代码片断)中的两层:内核层和应用架构层。
内核层也可以称为语言层,提供语言特性,让开发人员得到更强的编程能力;应用架构层提供应用架构和机制,例如消息处理、持久化、数据传输以及并行分布的体系结构等等。
Qomo也会有一些演示用的应用软件——当然,把它称为严格含义上的软件是不妥当的。因为它可能不会象软件产品那样发布和销售。——Qomo提供这些演示的目的,与Java或C#等等提供演示代码的目的完全一致:让你学会它的使用。
所以,如果你不去实际用它,Qomo就“不会有什么用”。因为它不是产品,不面向任何确切的用户需求。它是开发工具,是开发者所需要的代码包或代码层。
四、Qomo V1实现了什么
目标和远景都很伟大,但我们究竟做了些什么实实在在的事情呢?
Qomo V1中实现了完整的内核层。包括:
- 基于类(类型)继承的面向对象系统,对基于原型的JavaScript是有益的扩展;
- 包括注册、查询和聚合等功能的接口(Interface),提供面向接口编程(IOP)的能力;
- 完整的、可定制连结点的面向切面系统;
- 通过路径映射与侦测,实现了能自行管理的、可选的命名空间系统;
- 可扩展的兼容层构架;
- JavaScript基础类的增强,包括字符串、数组以及错误类等;
- 公共类库:池、处理机、时间管理与时间线等;
- 调试、性能分析、编译(连接与压缩)等
Qomo V1中实现了部分的应用层代码。包括:
- 体验版本的界面组件库、图形组件库和数据库组件库(概念模型,非正式框架)
- 界面、逻辑和数据分离的基本框架
- HTML描述(模板)与脚本实现之间的基本关系定义与属性的使用方法
- QomoHierarchyPoster.html:用于展现Qomo中的命名空间与类继承关系(for IE only)
五、Qomo V2的计划
Qomo V2有五点计划:
- 让基于Qomo的应用成为现实。我们将实现Qomo应用层中关于数据、界面与基础逻辑框架相关的绝大多数内容,以使得Qomo可以应用于复杂的应用项目之中。
- 让Qomo可以为更多的JavaScript宿主使用。我们将在内核层实现更好的兼容性,以使得Qomo可以用于包括Acrobat Script、ActionScript、JScript、Rhino以及Epimetheus等不同的引擎中,并提供相同的(或相容的)能力。
- 让Qomo的示例与文档更规范和丰富,并提供(或包含)更良好的测试框架与文档化工具。
- 让Qomo面向不同的平台提供跨平台的编程能力。例如对Linux平台下的,或嵌入式平台下的脚本引擎提供支持。
- 更加良好的团队管理与项目管理。