为NGSOS智能操作系统设计编程语言

缘起

最近空明魏在全栈工程师网站发起一场有关智能操作系统开发的倡议,诸多大牛热烈参与讨论,详情见这里。涉及编程语言如何选择,已成为其中一个焦点问题,多方争执不休,莫衷一是,本文就这个话题谈谈个人浅见。

本文语境

编程语言就是一种宗教,关乎信仰,一讨论起来就没完没了,最终也不会有结果。在我看来,适用的、能最优解决问题的都是好语言,谈语言必在特定语境下,把要解决的问题是什么,场景是什么,摆清楚,才可能有最佳结果。

本文的语境就限定在空明魏所设想的“下一代智能操作系统”(NGSOS)上,假定为这个OS选择或新设计一套编程语言。关于NGSOS是什么,我摘录相关信息:

首先,这个操作系统是传统通用操作系统的一个封装,而不是要替代现有的传统、通用操作系统,主要有两个特征:一个是统一的开发语言,另外一个是一次开发完成然后可运行在所有的现有操作系统之上。在 NGSOS 上,不同的设备或节点承担不同的角色,可以划分为客户端、服务器端和中继端。这些节点之间通过类似 DDP 的协议和 IM 协议同步和传输数据并进行各自的展现或处理。比如在智能手表上,主要负责收集数据然后发给智能手机,智能手机再发给云端服务器进行处理。这种情况下,智能手表是客户端,云端是服务器,智能手机是中继端。

本文另一个语境设定是:如果我(Wayne Chan)为这个OS选配语言,该如何如何?每个人都有他的经验、层次、考虑问题出发点,别人我无从揣度,我只按自己的行业经验发表个人看法,有必要了解一下相关背景,点这个链接。

选择语言的依赖因素

NGSOS长什么样尚未定论,这对语言选择有很大影响,关键问题未确定的,我先作假设,要不然,后文无从展开。

其一:在什么设备上跑NGSOS?

假定先在智能穿戴设备上用,以后扩展到具有更强处理能力的设备,假定CPU至少是32位,内存至少128M,处理能力要超过当年Win95,如果处理能力太弱,编程语言选择肯定大不一样,也影响脚本解释器是否驻留。

其二:如何与现有系统对接?

脱离现系统(OS及OS之上基础服务框架),从零开始构造新系统不现实,也不必要,这么多开源的RTOS,从中选一个,这没疑义。问题是:OS之上的编程框架怎么定?选android,天然绑捆java,走MS路线的,C#最佳,如果不想脱离iOS,只能用C++ 与JS(因为ObjC、Swift被封闭系统圈住了)。语言与OS紧捆绑,涉及生态环境、商业形式、安全等因素,细论起来很复杂,我简化处理,就用C++与 JS,从iOS的限制倒推。C++ 在哪个OS都适用,能保证底层运行效率,JS在高层,可保证快速开发,也有广泛适用性(如果新操作系统不支持浏览器,就不该叫NGSOS,我假定NGSOS是必须支持WebApp开发的)。

为什么不能绕过iOS?如果你承认iOS在智能设备市场处于领导地位,就不该想着绕开,它留点缝隙都是宝贵的资产(其间有深意,不展开),,如果您认同选择C++ 与JS是NGSOS两个基本出发点,我们继续。

其三:Qt必选

没太多理由,在NGSOS上跑的程序要炫、要酷,为了节能还要用C++ 开发,现实中,你能找到比Qt更好的图形库吗?即便找到,能裁减到资源受限设备上跑吗?

构造边界

每个OS都有边界,我们简单的将OS系统看成由两部分组成:含基础服务的操作系统,一套(或多套)编程体系。在前者构造边界,还是在后者构造边界?如果前者,你的主业只能卖一卖RTOS,NGSOS应该选后者,就像windows用.Net与C#,Android用java,iOS用objC,都用特色的编程体系强化它的生态特征。

前面选择了C++ 与 JS,这才刚开始,如果仅依赖这两项,如何让你的系统具有商业价值?没有商业价值,或商业价值不高的系统,会很快消亡。所以,NGSOS上的编程语言还必须承担锁住(或强化)商业价值的责任。因为你不贩卖RTOS,重任只能由编程体系来承担,就像在iOS上开发APP,严格受限后,才维持Apple的优质生态。这里,我想强调的是:C++ 与JS是基点,在两者之上还得发展新语言。

新兴生态系统还得解开“鸡生蛋,还是蛋生鸡”的死结,刚冒出来的OS应用少,应用少就没价值、没影响力,也就没有开发人员愿为它开发应用。看看微软近几年的表现就清楚了,如果找不出一条路径跳出这个闭环,只能一次次坐失良机,竞争对手一直快速迭代,高速前进,你很容易落下,而且越落越远。讲这个与编程语言有什么关系?关系大了,别人构造边界,你想办法打破边界呀,别人用编程系统筑墙,你就用编程系统翻墙呀!

编程语言的发展趋势

近些年来,与JavaScript相关的编程语言、框架或库很活跃,拜移动设备兴起、Html5技术发展等条件所赐,有关WebApp方面的创新层出不穷。融合WebApp与NativeApp,融合强类型与弱类型,俨然成为当今编程语言的发展趋势,苹果推Swift,微软搞TypeScript,Google推Dart,Facebook弄Reactive Native,Firefox搞Rust,都反映了这种趋势。

JS仍是基于浏览器开发WebApp的不二选择,任何公司无论他多牛,当下都得接受这个现实,所以,MS只能用TypeScript编码翻译成JS,Google也只能用Dart开发,最后都译成JS脚本。之所以要用一种语言描述另一种语言,折腾一下,不外乎两大原因,一是JS存在不少固有缺陷(但还不致命),像某些语法易误用、不支持class、模块化特性欠佳、开发大工程困难、调试不方便等,二是JS太过动态,动态语言固有的某些缺陷要克服(主要是类型检查),加入一些静态语言特性。

为NGSOS设计新语言,少不了要像Dart、TypeScript、CoffeeScript那样,先解决上面2大问题,但如果停留于这两点,市场上无非多一个 xxScript 语言而已,没有颠覆性,我们希望引入新东西,超越Swift、TypeScript不少,才能更有效吸引开发人员投身进来。不再卖关子,这个新语言就是CSE,因为作者认定这门语言是具有跨代意义,才这么多年坚持研发。CSE将脚本语言与编译语言合二为一,同时享受动态与静态语言的优势,结合NGSOS来说,它将带来如下几方面好处:

此举意义深远,用你的工具开发APP能跨越多个平台后,意味着,你可以到Apple的池塘去捞鱼,前面提到“别人筑墙,你再借编程语言翻墙”是这个意思。而且,此方案中,Apple处于劣势,因为同样程序,在别人平台能译成C++ 发布,在iOS只能慢腾腾跑脚本。(让Apple品尝一下封闭平台不得已的苦楚,嘿嘿)

我想一个人旅行,可以不带相机,也不要带上手机,

为NGSOS智能操作系统设计编程语言

相关文章:

你感兴趣的文章:

标签云: