QOR 简介





5.00/5 (4投票s)
Querysoft Open Runtime 的背景、动机和架构。
第一部分:蛋糕和其他怪物。QOR 的非技术背景故事
十年前,我已经从事软件开发一段时间了,但处于一份没有前途的工作中,并且对软件的编写方式以及我对它的理解都不满意。我拥有不错的学位和几年的经验,但我的控制欲仍然让我觉得我对按下运行按钮时真正发生的事情把握不够。本着自古以来好奇儿童和车库男人的精神,我开始拆解软件,找出它究竟是如何工作的。
我属于那种“事后读手册”的人,所以在物理世界中拆解东西时,它们往往会散架,而且很少能再次有用。然而,美妙的软件世界有所不同。你可以拆解软件,但仍然保留原始的运行副本。这就像你拥有蛋糕,并且可以一遍又一遍地吃掉它,只是每次吃的时候,你都更加理解和欣赏它。当然,前提是它确实是好蛋糕。
我很快发现,关于开源软件质量,“您的行驶里程可能会有所不同”这句话实际上应该以光年为单位来表达。这是一篇非技术性的介绍,但有一件事在我还在那份没有前途的工作时就学到了,并且值得分享:“代码是供人阅读的。如果我们只打算让机器阅读,我们会省略所有的空白字符,从而节省大量空格键的敲击时间。”
从一开始,我就尝试了我发现的想法和组件。制作自己的容器类版本,尝试不同的工具。有效的东西大多被备份了,而无效的东西大多在一次又一次的硬盘故障中丢失了。几年的这些实验让我积累了相当多的看起来相当有用的代码,并且对很多事情有了更清晰的理解。
许多(如果不是大多数)C++ 软件开发人员只模糊地知道程序中实际包含了什么代码,或者 strcmp 来自哪里,更不用说 C++ 语言中实际有什么,以及什么是编译器供应商为了多卖出一些产品而额外添加的“锦上添花”的功能。我曾经就是那些软件开发者之一。
许多(如果不是大多数)C++ 软件开发人员只模糊地知道为什么他们的代码只能在 Windows 或只能在 Linux 上运行,更不用说要让它同时在两者上运行需要什么。我曾经就是那些软件开发者之一。
许多(如果不是大多数)C++ 软件开发人员从未听说过面向切面设计。有些人对面向对象设计只做表面文章,而设计本身几乎普遍被认为只在大规模时最重要,在小规模时最不重要,而且只有在我当前工作的下一个规模上才真正需要做得更好。我曾经就是那些软件开发者之一。
这听起来可能有点自怨自艾,但曾经是那些软件开发者之一的好处是,我现在不再是了。这并不是说我已经达到了某种编码的涅槃,仅仅是当无知的面纱开始揭开时,我看到了不同的做事方式的潜力。我开始将我那堆软件的零散部分重新组合起来,以一种新的方式。过程中有无数次的错误尝试、返工、死胡同和分心,但就像弗兰肯斯坦博士一样,我不断地组装更多更好的零件,直到怪物开始看起来像鲍里斯·卡洛夫。
这都是关于从经验中学习,虽然我知道我既不能放弃我的创作,也不能将其完整地释放到一个毫无防备的世界。我也知道现在出现的怪物对我来说太庞大太麻烦了,我无法独自处理。
现在是时候寻求帮助,最终让它焕发生机,并一点一点地揭示它,以免被原住民狠狠地攻击。
QOR 正在成长!QOR 即将到来!什么是 QOR?
第二部分:什么是 QOR?
Querysoft Open Runtime(发音类似于 core)是一个开放架构的跨平台框架。它之所以开放,是因为它是开源的,也是因为它设计成可以扩展的。不仅仅是能够扩展,而是扩展是它的核心。每一个 QOR 应用程序都是 QOR 的扩展。它的架构借鉴了面向切面设计和面向对象设计的思想,并应用它们来创建一个通用框架。它是一个跨平台框架,因为它旨在跨不同的编译器、不同的处理器和不同的操作系统工作。这是通过使用特定于方面(compiler、architecture 和 operating system)的模块来实现的,这些模块是可互换的。
有许多其他框架、许多其他跨平台项目、许多其他方面的功能实现以及许多其他语言,其中一些声称可以实现“一次编写,到处运行”。QOR 是唯一的 C++、跨平台、面向切面、开源、模块化框架;直到有人写出另一个。这意味着它也是最好的 C++、跨平台、面向切面、开源、模块化框架;直到有人写出更好的,相信我,考虑这样做的人一定是疯了。
QOR 最棒的地方在于,没有人需要编写一个更好的,因为它被设计成人们可以修复 QOR 来代替,这总比从头开始创建一个新的要简单、更有效率。不是每个人都会同意,但也不是每个人都喜欢蛋糕。
在人们真正提出问题之前,不可能有诚实的 FAQ,但这里有一系列您可能会问的问题以及一些简短的回答。
问:QOR 里有什么?
QOR 的设计目前包含:
- CompilerQOR - QOR 编译器兼容性方面
- ArchQOR - QOR 硬件架构方面
- CodeQOR - QOR 代码服务方面
- CQOR - QOR C 语言库接口
- stdQOR - QOR 标准 C++ 库
- SystemQOR - QOR 操作系统方面
- UnitTestQOR - QOR 单元测试方面
- PosumQOR - QOR Posix 类库
- MonkiQOR - QOR 视图库
- MammutQOR - QOR 模型库
- AppocritaQOR - QOR 控制器库
- BluefootQOR - QOR 管道库
以及用于特定操作系统、编译器和架构支持的附加库
这些模块构成了一个相互依赖的方面和接口网络。
问:QOR 完成了吗?
不,这还早得很。一个开放式项目(部分设计目的是延长软件的潜在寿命)的巨大优势在于,原则上它可以永远持续下去。在撰写本文时,QOR 包含超过 250,000 行代码,处于各种正确性状态。此类项目的缺点是,由于范围如此之大,它可能永远不会完成。
问:我可以购买它吗?
不,因为它免费。您可以在它上线时获取它,但您不能为此付费,也不能让任何人为副本付费。
问:我可以在商业项目中使用它吗?
可以。QOR 代码不受限制商业的 GPL 许可,因此您可以在您的产品中使用它并销售该产品。您仍然是免费提供 QOR 部分,只是为其余部分收费。即使您修改了 QOR 源代码,您也不必向您的客户或其他人提供,尽管这样做是礼貌的。
问:QOR 是如何发展的?
QOR 项目被划分为“层”(Strata)。这些非时间性的里程碑指定了组件组合必须提供什么功能才能实现它们。
例如,为了使 CompilerX 支持被视为 Strata-1,其 CompilerQOR 组件必须能够与任何其他 Strata-1 组件的组合一起使用,以实现 Strata-1 功能。虽然 CompilerX 支持可能处于 Strata-2,但 CompilerY 支持可能仍只处于 Strata-1。这并不妨碍两者同时使用,也不意味着 CompilerY 支持的优先级较低或较高。
Strata-1 规范故意非常简单:
TwoForTea 程序必须仅在编译、链接 QOR 库和基本编译器支持代码后,才能运行并返回 42。
//Two for tea
int main()
{
return 42;
}
任何第三方编译器支持代码都应该是开源的,最好是 QOR 兼容的 LGPL 类型许可。这确保了构成最终产品的每一行代码都可以进行检查。反编译是无风险的,可以实现完整的代码透明度。
并非所有 QOR 库都需要在 Strata-1 中,而需要使用的也大多很小。然而,Strata-1 构建仍然可以包含数千行代码。
Strata-1 不需要其他任何东西,没有浮点数学,没有异常处理,没有 RTTI,也没有任何库调用,除非这些东西是为了在选定的编译器和选定的操作系统和硬件上构建一个可工作的可执行文件所必需的。
然而,Strata-2 正是要求任何不调用库的代码都必须工作。您的编译器能够为您的硬件构建代码的所有数学支持和其他功能,都必须能够添加到 main 中并产生正确的结果。现在,这要编写一个测试要困难得多,但规范本身却足够容易理解。任何工具支持的有效代码并且不调用外部代码都必须工作。
Strata-3 增加了要求,即所有 Posix 2008 指定的函数都必须可用,并与选定的组件组合一起工作……等等。
任何给定的组件组合都将满足直到某个 Strata 的规范,通常是能力最弱的组件所支持的最大 Strata。
基于 QOR 的应用程序将被编写成期望一个 Strata-n 的 QOR。任何达到 Strata-n 的 QOR 组件组合都可以用来支持相同的应用程序,从而立即将其移植到各种硬件和操作系统环境,并有可能无缝地迁移到不同的工具集,例如用于嵌入式使用。
问:QOR 何时到来?
就这些事情而言,答案是现在和未来。我不会一下子将 250,000 行代码放到网上,并期望任何人能深入其中并直接使用它,更不用说贡献了。最初只发布符合 Strata-1 的项目,这些项目主要对编译器兼容性、架构支持和系统编程领域的专家感兴趣。它们将尽可能独立,以便支持配套文章。然而,QOR 本质上是相互协作的组件网络,因此完全分离它们是不可能或不可取的,所以会有妥协和在先前工作的基础上进行构建。
我的目的是展示一系列关于 QOR 组件的文章。有些将非常基础,而另一些可能会远远超出满足 Strata-1 规范所必需的范围。在此过程中,我们将解决一些问题,或许能启发一些人,并打下基础,在此基础上可以构建更高、更好的东西。之后会发生什么,在很大程度上将取决于产生的兴趣水平以及我是否有能力在编码谋生和为了编码而生存之间进行任何事情。
我将从 CompilerQOR 开始。
问:我能做些什么来提供帮助?
您可以加入 QOR 的开发。如果您认为整个想法很疯狂但您喜欢它,您可以贡献您的专业知识来帮助 QOR 焕发生机。如果 QOR 在您的编译器、您的硬件或您的操作系统上无法正常工作,那么至少有一个模块缺失。如果可以,那么在 QOR 中有各种各样的子项目可以供您工作,从汇编浮点例程到数据库访问代码。一切都有其位置,而所有已编写的内容都将帮助您编写更多内容。
虽然您的名字叫 Igor 会有帮助,但并非真正必要,特别是如果您在非 x86 汇编语言、异常处理或 C++11 方面拥有扎实的技能,并且不期望获得比好评和认可更有价值的东西。
历史
- 初始版本 - 2013/03/02。