说到虚拟机,甚多人肯定会想到云计算,确实云计算中的虚拟服务器也是一种虚拟机。只是更早以前还有一种应用级的虚拟机,主要用于托管应用程序和操作系统的交互。比如后世的Java、.Net等都是有名的应用级虚拟机。
MinVM也是一款应用级的虚拟机,它主要把一种字节码程序实时翻译成操作系统能识别的机器指令,用以代替应用程序直挥计算机硬件来执行机器指令。袁明这个C和Java双料程序员不是吃素的,上辈子他参与过OpenJDK的开源项目,自己写JVM核心代码,也研究过整个JVM的项目代码。OpenJDK是后世JavaVM的开源版本,由Java所有者Sun公司在2006年推出,并负责维护。
初始的MinVM不需要多大,因为它和历史上的JavaVM不一样,它不是为一个新的语言而定制的,所以无需重新做编译器,袁明利用GNU的GCC编译器源码改造后,去除内存管理和指针后,增加了堆栈管理作为原来的内存管理替代品。另外取消了GCC的词法和语法分析器,改为字节码分析器。这等于定制化GCC后,在外部套了一个解释器的壳子,所以代码量小了不是一点点。
主要的困难在于从未有过的内存垃圾回收器,这个在后世JavaVM中也是核心技术。幸好袁明看过这个垃圾回收器的源代码,所以他很容易就把这个内存垃圾回收器的设计给复制出来,甚至核心的代码都自己写了。
另一项困难不是技术难度,而是工作量大。MinVM需要提供MSDos、MinOS、Win等主流操作系统的支持,所以适配开发的工作量非常大。袁明把MinVM为每一种操作系统,发布一个分支版本,这些分支版本最终合成一个大的发布版本。用户可以根据自己的操作系统有选择的下载相应操作系统版本的MinVM。所以这部分的开发人员最多,测试的复杂度也最高。
MinVM这个项目主要由袁明自己负责,除了核心代码,他只负责给开发人员讲解设计,review他们的代码,具体的开发工作都是由项目小组自己完成。其实如果袁明自己写,也不是不可以,甚至能更快些完成。
袁明本质上还是一个程序员,这一点无论他赚多少钱,有了多大的事业,都未曾变过。每一行代码的敲击,会让他无比投入;每次调试,都会让他无比激动;每次抓虫子,都会让他彻夜难眠。自从他开始Min软件平台项目,就百分之一万的投入了进去,就连陆倩都有被冷淡的感觉了,也许程序员们谈恋爱难的主要原因就在于此吧。幸好陆倩是个懂事的,她看得出袁明最近很忙,所以就没有过多打搅他。
考虑到锻炼项目组成员地能力,以及未来这个项目需要更多人参与进来,让MinVM不断地扩充和升级。而且袁明也不想完全绑定在这个项目上,他还有很多大事情要做,没那么多时间和精力来关注具体地软件开发。所以他在完成了最初的设计,和一些核心代码之后,更多的是以指导那些开发人员为主,甚至会给他们开一些分享课程,让他们尽快提高能力。
这个时代还是有热血的,很多人充满了对知识、自由、爱情和高尚情操的向往,所以那是才会有北岛、芒克、三毛、王朔这些文学巨子,也有崔健、窦唯、黑豹这样热血摇滚。
在《十三邀》里,马东反问许知远:“你说现在的文化粗鄙了,那我们曾经精致过吗?”而这些人每一个都可以回答:“当然,我们曾经无比向往过精致、向往过自己思考的日子。”
这个时代的程序员们虽然处在的领域不同,但是他们一样有着自己的追求。所以也有着王永民、求伯君、武晓军这些第一代华夏程序员的奋斗史。而此时在复兴软件,整个公司上下对这个年轻的老板是非常尊敬的,不是因为他是老板,而是因为他的智慧、他的能力、他的无私,值得他们去学习、去崇拜!
所以团队的热情很高,公司里到处都是劈里啪啦的键盘敲击声,随处可见热烈讨论,甚至相互争吵的开发人员。办公空间里到处都是写满了字小黑板,由于此时没有白板和白板笔,袁明只能刚给他们提供黑板和粉笔。在黑板上写粉笔字,会搞得空间里到处都是粉尘,不过他们从来都不介意过。
也许他们不能完全想明白为什么要做MinVM,但袁明给他们分享的那些知识,极大的开阔了他们的能力,以及他们的人生经历。袁明相信,只要给他们成长的机会,他们未来不会比王永民、求伯君、武晓军这些人来得差!甚至远远超越,因为他们所听、所见、所做的无一不是这个时代最先进的理念!
MinIDE项目由武晓军亲自负责,由于最核心的编译器,袁明已经在MinVM中顺带完成了,所以他们主要进攻的是图形界面的代码编辑、调试等功能。MinIDE支持MinB、MinC和MinC三种开发语言,编译时不会直接生成机器码,而是生成MinVM能识别的字节码,编译后的程序会在MinVM上执行。
袁明设计的微内核架构困扰了武晓军很久,因为这种理念在当时还没有人提出过,他特别难以理解。和袁明闭门讨论了几天,他才逐渐搞清了袁明的整体设计。一旦想明白了之后,他便立刻喜欢起这样的架构来,也对他的设计思想激发了很多灵感。这就如同印刷,开始武晓军他们都是雕版印刷,一个本子从头撸到尾。现在经过袁明指点之后,立刻升级为活字印刷!装活字的架子就是核心代码,每一个活字就是一个插件,无论灵活性,还是稳定性都大幅提高,而成本却是随着印刷越多,越是在下降的。
另一个困扰武晓军的是编译生成字节码,这一中间态。开始他和一些项目成员对这个完全想不通,认为没有必要增加一层代理,这样会降低程序性能。确实,在当下386时代,是有可能降低一些性能,但只要486一推出,这些问题都不复存在了。历史上Java的第一个版本Oak就是1990出生的。
袁明看着因坚持己见而有些激动的武晓军,无奈的笑笑问:“你认为未来计算机还会不会变快?”
他一愣道:“那是当然!”开玩笑摩尔定理那可是已经说了,集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍。那就是说计算机的运行速度就会越来越快。
“那你认为MinVM会损失多少性能?”袁明笑着又问。
“大概几微妙吧?”武晓军不敢确定的说。
“那好就算几微妙吧,当总的计算速度越来越高时,损失的这些时间是否会缩短?”袁明接着问。
“一定会的。”武晓军想了一想后,这样回答。
“既然损失的性能会越来越少,而总体性能却又增加的很多,这样一来,那点损失的性能几乎可以忽略不计了。”袁明这才笑着解释道。
“哦!你的意思是说,以后计算机性能越来越高,损失的性能会越来越微不足道!”武晓军恍然大悟,他只想到了现在,没把计算机的发展速度考虑进来。
“是的,不但计算机速度会越来越快,另一方面,我们在虚拟机上的持续研发,会利用算法的优势来提高程序运行的性能,两方加一起,整体上MinVM和直接运行机器码差异就不会太大了。”袁明继续说道。
“既然性能损失可以忽略不计,而又可以带来跨平台的优势,我们何乐而不为?”袁明笑着反问道?
“是啊!”武晓军感叹道:“老板的眼光长远,考虑的周详,我没什么话说了!今天和老板又学习了一招,用发展的眼光看问题!”
说服了项目组主要的人员,其他就好办了。袁明长舒一口气,开始他还担心这样的矛盾会持续存在,可能会影响开发进度。看到他们都跨过了这道坎,袁明的心终于放下来了。