不过计算的本质可并不只是加减乘除,计算的本质需要有递归。在图灵机之中就是一个可以随意移动的读写头,这样才能让读写头才有可能来回往复地进行循环。
不过这个功能实际上冯唐刚才已经测试过了,毕竟刚才他记录的那些视频就是循环播放的。就算不是循环播放,想让视频之中一帧帧的画面动起来,也需要一个循环的便利。这属于是系统作为虚拟现实播放系统的内置功能,已经实现好了。
如此说来,阻止冯唐在系统界面里自己造一个计算机的一切阻碍都没有了。剩下的知识亿点点简单的,重复的,单调的编程模拟工作罢了。先把逻辑门做出来,还有其他的算术逻辑单元,然后是时钟,存储器比如堆栈,输入输出……
冯唐在大学的时候学了一门徒手造计算机的课程,虽然只是上个世纪的最简单的计算机,但是这些基础的东西他都还算熟悉。不就是肝吗?他有的是!
这样一来,冯唐就可以用这个简单的计算机完成一些有意思的任务了。例如枚举素数,用最简单最暴力的埃拉托斯特尼筛法就行,它只要要求计算机可以进行循环。或者是用枚举法进行密码的暴力破解……
以上这些都可以直接写点汇编解决。哦对了,冯唐还要把明确一下isa。具体来说把计算机里面重重稀奇古怪的操作整理成一个表,抽象出一个汇编语言。不过冯唐在学校还学习了另外一门课,里面用到了一个非常经典的叫做mips的isa。顺便一提,这个指令集系统的专利后来被国家买断了,用来研究自己的芯片……虽然最后还是失败了。
冯唐计算机都可以手搓出来,整理整理指令集那也是轻轻松松了,这只是做减法的事情,一些可以直接烧掉计算机的后门指令可不能暴露给用户。
然而就算是有了汇编,这也并不意味着冯唐就可以完成统计计算自己超凡视觉输出的任务了。因为这些图像信息的处理非常繁琐,它们是以像素点的方式存在的,具体来说是一个个矩阵,这和加减乘除并不一样。矩阵运算还需要一些更加通用的编程处理。
不过好在冯唐又学过一门从零开始手搓编译器的课程,可以把一门简化版的java语言编译到字节码,甚至是mips汇编代码。
当然了,想要一步实现这个宏伟的功能是非常困难的,毕竟java这样的高级语言是非常复杂的。不过这个问题冯唐在上课的时候遇到过,老师给出的解决方案比较暴力,那就是把java这个语言拆分成多个小语言,然后一步步翻译过去。
而冯唐现在面对的困难要比这个更加复杂一些,因为上课时这其中每个小语言都有自己的解释器,但是现在冯唐什么都没有。冯唐也不打算写虚拟机,他要直接编译到mips指令集上。
冯唐想了一个非常聪明的笨办法,那就是将java从功能上拆解成java,java1,java2……javan最基础的java0就是汇编语言,java1有简单的寄存机抽象,并且java1语言的编译器是用java0语言(也就是汇编语言)写的。而java2语言之中就有函数了,同时规定了函数调用的规则,而java2语言的编译器是用java1语言写得……到了最后javan语言就是真正的java语言。
你看,这不就又套娃了起来。冯唐成功地将写一个java编译器的工作简化成了写n个java编译器,工作量提升了n倍,但是好处是其中的每一个步骤都是可重复的,可控的,增量的。就算是java3的编译器写错了也不影响java2程序还能跑。
总而言之,只需要这样亿点点努力,冯唐就可以写出来一个可以进行图像处理的软件了。不过图像处理是计算量非常庞大的任务,冯唐认为自己有必要进行并行化的处理,也就是将不同的任务同时跑。因为本来视频就已经拆成了一帧帧的样子,每一帧和其他帧都是独立的。现在冯唐的大脑记录了一个几秒的视频,有超过一千帧,只要同时跑一千个程序,那么这些帧不就能一下子处理完了吗?
然而想要进行并行化处理就需要对资源进行更加精细的分配。这里的资源指的是计算资源和存储资源。
存储资源比较好理解,系统界面里的空间如果不够用的话,那么就没办法同时处理一千张图片了,只能先处理一些,然后把处理完的中间过程擦掉,再处理其他。
计算资源可以看成计算的时间。例如语文考试时有两章卷子,有一张是作文,有一张是其他,那么在有限的时间里,冯唐需要分配自己的时间,哪些给作文。
这些惊喜的调度和分配就需要操作系统的帮助了。这不巧了吗?冯唐上学的时候又又学了一门手搓操作系统的课,不过用的是c语言。冯唐java语言都可以搓出来,那么c语言也不在话下了。
只能说冯唐的本科计算机教育净教了一些屠龙之术,没想到这些屠龙之术还真有能被用上的一天。
冯唐一边想着,一边就动手开搓。不就是肝吗?冯唐就喜欢肝这个,只要不让他按部就班地锻炼超能力开发,让他肝到地老天荒都行。再说了,冯唐也进行了一下计划,他认为自己大概这么肝上两三年差不多就可以在大脑里肝出计算机,编译器和操作系统了,轻轻松松。
不过冯唐也打算先尝尝鲜。操作系统这属于很高级的东西,专用计算机不搞那些通用计算,只运算一个任务,那就不需要操作系统了。c语言和java语言都太复杂了,甚至冯唐连你汇编语言都嫌复杂。因为汇编语言实际上是计算机指令集的接口,而冯诺依曼计算机就已经很复杂了。
其实还有一个和图灵机等价的,更加简单的计算模型,根本没有什么无限长纸带,没有什么读写头,他只需要进行复制和替换就行了。
这个神奇的计算模型叫λ演算,冯唐现在就可以用起来。他同时是一个计算模型,也是一个门语言,并且还是自解释的所有不需要编译器和解释器。这下子计算机和编译器全部省下来。当然了,他的效率非常的低,这也就是简单带来的代价了。
冯唐一边美滋滋地想着,一边随手花了十分钟写了一个埃拉托斯特尼筛法,准备随便地计算一下一亿以下的素数。虽然这个任务现代家用计算机大概要算个十几秒的时间,当然冯唐也不求它算得多快,全当一乐了……
然后冯唐愣住,因为他刚写完程序,答案就算完了。冯唐改了改数字,改成了一百亿,依旧是瞬间算完。冯唐发狠了,开始疯狂地按0,他也不知道自己到底设置了多大的数量上限,结果还是一下子就算完了。
计算得到的结果排了常常的一列,一直在系统界面上延伸。冯唐随意输入一个数字n,系统都可以跳转到指定位置,给出排在第n个的素数。