按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
闹匾栽礁摺�
“程序写出来容易,但是程序就像生命一样,会跟周围的环境发生作用,会慢慢的长大,会变化,会生长,会成熟,也会老去。”
“很多程序的寿命要超过人的寿命,所以,不同的人会来维护他,修改他,首先要读懂它”
“读都读不懂,怎么长大?而可读性,正是可维护性中最重要的一部分”
“表达能力是我给总结的,虽然从理论上来说,任何程序设计语言的表达能力跟只有向前和向后两个指令的图灵机是等价的“
“但是语言能力还是体现在无歧义啊,简洁,清晰等等上,所以最早的设计目标,跟自然语言接近啥的,被我理解为表达能力”
“不得不说,米国国防部还是非常强大的”
“Ada语言至少领先工业界三十年以上”
“当工业界还在为挖掘每一个时钟周期的性能而绞尽脑汁的时候,人家已经把可维护性放在仅次于稳定性的位置了”
“所以116所选择Ada作为飞控系统的开发语言,那是非常有远见的”
李文静在台下举手了,“你说的很好,很正确”
“不过我们接下来该怎么干呢”
”难道我们重新用哥德尔系统理解的语言重写一遍飞控吗“,李文静的话还没说完呢,就听见呯呯的声音,116所的几个程序开发人员口吐白沫,瘫倒在椅子上。
”还是我们写一套编译器,将使用Ada语言书写的飞控系统编译成哥德尔系统能够理解的语言“,
呯呯的声音又响起来了,这回是赵天成和李飞口吐白沫,瘫倒在椅子上。
”GoodQuestion“,王一男指了指李文静,”很好的问题“,
“要不怎么说咱们是最佳拍档呢”
“这就要感谢我们伟大的开源事业了”
“有一个开源项目,叫做LLVM的,有人知道吗”
立刻好几个人举起了手,王一男指着116所的一个程序员,“你来说说吧”
“LLVM是LowLevelVirtualMachine的意思,也就是低级虚拟机,它实际上是一组规范和工具的集合,为开发现有语言的编译器,甚至设计新的程序设计语言,提供了一个非常强大的基础“
”Perfect“,王一男夸奖了一句。
“DragonEgg有人知道吗“,王一男接着问。
这回没人举手了,李文静举手说,”龙蛋哇,这个谁不知道“
没等王一男骂人呢,李文静坐了下来,“开个玩笑,活跃一下气氛嘛”
“这是一个GCC的后端,或者说LLVM的前端,能够将GCC和LLVM连接起来”,王一男说,
“GCC你们都知道吧”
“废话,别侮辱我们的智商好吗”,“GCC是一组开源的编译器,包括CC++,Fortran,当然也包括了Ada语言的编译器,我们116所目前使用的就是GCC”
“好了,齐活啦”,王一男拍了拍手。他在黑板上先画了一个圆圈,然后在里面写上
“116所飞控代码”,
“一共多少行代码”,王一男问116所的攻城狮,
“大概四百多万吧”。
偷偷咽了一口口水,王一男在圆圈了添上”400万行“的字样。
然后在旁边又画了一个圆圈,在里面写上“GCC”,再画了一条带箭头的线,从“116所飞控代码”指向“GCC”。
“这样大家能理解吧,GCC可以编译116所的飞控代码”,王一男说。
“这步没问题,我们也是用GCC来编译成飞控计算机使用的机器代码的”,116所的攻城狮说。
王一男在“GCC”圆圈的边上又画了一个圆圈,然后在里面写上“龙蛋”两个字。
“龙蛋就是将GCC和LLVM连接起来的东西”,王一男说,
他在“GCC”圆圈添上一条带箭头的线通往“龙蛋”,然后在“龙蛋”圆圈后面又添上一条带箭头的线。
在箭头指向处,王一男打上一个大大的问号。
“看明白了吗”,王一男问。
所有的人都摇了摇头,“作者大大,臣妾真的不明白”
王一男指了指赵天成和李飞,
”我们之前在研发哥德尔系统的时候,曾经使用过LLVM,你们还记得吗?“
”当然记得,哥德尔系统的一部分核心用的就是LLVM的IR“,
”等等“,”IR“(IntermediateRepresention),就是那个通用的中间表示,能够被LLVM输出,同时又能被哥德尔系统理解的那个东西?“
”宾果“,王一男打了个响指,
在那个大大的问号那里,他重重地写下IR两个大字。
“这样,整个流程就全通了,我们不用重写飞控的代码”,116所倒下的攻城狮立刻坐了起来。
“也不用写编译器”,李飞和赵天成也满血复活了。
“利用现有的这些工具链,我们可以将116所的飞控代码自动编译成LLVM的中间代码”
“我们现在要做的事情,只是将这些中间代码,跟前段时间我们建立的理论模型对应起来,添加必要的输入输出模块”
“添加实际控制面的虚拟模型和代码”
“然后,就可以用成吨的数据来训练哥德尔系统了”
“简单不简单,完美不完美?”,王一男显然又把自己嗨到了,按照他的设想,现在应该是大家高呼“完美,简单”,
当然如果有识相的来一句“王一男万岁”,就更完美了。
“干活啦”,李文静一巴掌打破了王一男的幻想。
”咱们这里面,写代码最牛是你,所以能者多劳,你就把整体框架先弄出来,我们负责补充啦“
”老大威武“,这回,连116所的程序员也跟在屁股后面喊上了,”老大威武!“
王一男想了一下,确实,整体框架这东西,人多了还真不一定有用,需要保证思路的一致性,让其他人来弄,他还真不放心,进度也没有保证。
“好吧,给我三天时间,我会给世界一个奇迹“
“让你们看看传说中卡马克。王”(卡马克是Doom的开发者,以独立开发游戏引擎而闻名于世,他一个人写了三代Doom游戏引擎)
王一男把自己关在一个独立的办公室里面,禁止任何人打扰他。
电话也关机,办公室里面一个冰箱是必须有的,他让人然后扛了一箱子雪碧和一箱子方便面进去,把张琪家里的那套价值好几十万的音响给勒索了过来,电话里他是这么说的,“音响没有,我就干不了活,我干不了活,116所的事情一定就砸了,116所的事情砸了,公司就开不下去了,你自己看着办吧”
之后整整三天时间,整个公司都能隐约听到重金属摇滚的声音。
三天后,门打开了,王一男胡子拉碴,神情憔悴的走了出来,对着门外的李文静和赵天成说,
“git里面我刚提交了版本,你们看看吧,所有文档都在doc目录下”
“所有示例代码都在samples目录下面”
“你们叫上116所的攻城狮一起研究吧,我去睡一觉”。
“八个小时之后,所有人一起开工!”
第39章 哥德尔的飞行训练()
八小时以后,睡了一觉精神抖擞的王一男把所有人都召集起来,准备开工了。
当然116所的那几个Ada攻城狮望着王一男的目光,跟望着五行山底下的妖怪,那是完全没有两样。
行家一伸手,就知有没有,之前他们对王一男这个Boss,说实话是有点不怎么服气,整天在公司晃来晃去,吹牛打屁的,好像啥都不干的样子。理论方面,李文静是一个妖孽,连大佬们都服她,这个没话说,但是王一男,哼哼,写过Ada么,这可是军标,军标啊。
貌似王一男连研究生都不是,就一个普普通通的本科毕业生,还是物理系的。你说你一物理系的本科,老老实实弄你的固体物理得了,跑到我们家自留地里充大只,几个意思啊。
他们仔细看了王一男三天的成果,有C++的代码,也有Ada的模块。C++不说了,之前就知道王一男CC++厉害,哥德尔系统大部分代码都是他写的。不过这么两天就能让整个流程跑起来,很不容易,虽说王一男之前解说整个方案的时候,看起来很简单。
就是Ada到Gcc再到DragonEgg最后是LLVM的IR,但是每一步都有一些特别的地方,比如说116所使用的Ada扩展啊,GCC的运行环境啊,DragonEgg就更扯了,116所的攻城狮这两天专门去看了这个项目,结果发现已经停滞两年了!代码库里面最新的代码居然编译不过。
原来发起的那帮人貌似都干别的去了。。。
王一男居然修改了所有的编译错误不算,还补上了所缺少的所有模块代码,他修正的DragonEgg版本支持了最新的GCC和LLVM版本。
原来以为这几天王一男弄好这些已经很不容易了。
打开Ada的目录,看到密密麻麻的Doc和Samples的时候,116所的攻城狮直接崩溃了。原来将飞控系统的Ada程序编译成LLVM的IR代码只是热身而已,王一男将整个飞控系统的框架全部搭建好了,输入是飞行高度,速度等等飞行包线里面的各个点。形式化的是各个操纵面的状态,包括发动机的输出范围,输出就是实际获得的各种真实或者模拟数据。
也就是说,王一男实际上已经完成了一个独立的迭代系统,可以直接使用给哥德尔系统进行训练!
当然,这个系统跟实际的系统比较起来,做了大量的简化,比如说,原来发动机的推力曲线是一个复杂分阶段不规则的曲线,王一男直接用一个线性的输出代替了。
实际系统中双垂尾是可以差动的,也就是各有自己的偏转角度,为了简化问题,王一男直接设定为随动,也就是同步偏转。
不过用数学的术语来说,王一男的简化系统和实际系统之间,是拓扑等价的,换句话来