去年底,有中国开拓者已经开拓出文言文编程措辞,并在GitHub上摘得了5500星,在海内引起不小反响。这件事给普通人的印象是,科技发展日月牙异,电脑CPU太厉害,都能读懂文言文了!
CPU真的能看懂文言文代码吗?答案是CPU既看不懂文言文代码,也看不懂英文代码。
现在的CPU晶体管数量动辄几十亿个,构造非常繁芜,但内部传输的旗子暗记只有两种:高电压和低电压,分别代表数字旗子暗记“1”和“0”(也有相反的),因此CPU唯一能看懂的便是由“1”和“0”组成的代码。

由于程序(代码)存储在电脑硬盘中时,也是“1”和“0”的形式,是否就意味着,只要程序存到硬盘中,CPU就能认识呢?
答案是CPU仍旧看不懂这些程序,由于以“1”和“0”位模式存储的程序和以“1”和“0”写成的机器措辞完备是两回事,大略说,两者的差异类似于汉语书和英语书都用纸和油墨印制,但依然是两种不同的措辞,不会英语的依然看不懂英语书。
机器措辞是CPU唯一能看懂的措辞,也是第一代编程措辞。
图片解释:早期的打算机程序员利用机器措辞编程,将用0和1数字编成的程序代码打在纸带或卡片上(打孔代表1,不打孔代表0),再将它通过纸带机或卡片机输入打算机,进走运算。
机器措辞的最大特点是面向打算机硬件编程,大略说便是程序员须要通达打算机硬件知识,写的程序要真实表示数据是如何被打算机操纵的。对程序员来说这就比较头大,一方面不仅须要通达打算机硬件知识,另一方面如果打算机利用了不同的硬件,那么就得重新编程。
毕竟上得了“厅堂”(搞掂硬件)下得了“厨房”(玩得转软件),只有少数大神能做到,加上机器措辞纯用“0”和“1”序列组成,非常单调呆板,不仅扼杀了编程的意见意义,而且对视力也是一种磨练,轻微一眼花,看错1或0的排列位置,就会制造一个大BUG。
于是,有一帮人开始琢磨了:能不能将打算机硬件从编程等分离出来,让硬件知识小白也能编程?
最先开窍的是蓝色巨人IBM,它在其System/360打算机中引入了ISA(Instruction Set Architecture)观点,将编程所须要理解的硬件信息从硬件中抽象出来,这样编程职员就可以面向ISA编程。由于ISA是用来描述编程时用到的抽象机器(不是详细的电脑CPU),包括了一套指令集和一些寄存器,因此,程序员只要知道ISA,不须要理解详细的硬件知识,就可以编写程序,在ISA相同的电脑上运行。
这样一来,就涌现了汇编措辞,但汇编措辞用符号写成,还是不足接地气儿,于是高等措辞就出身了。高等措辞的出身,使程序员将精力从繁芜的打算机构造转移到要办理的问题,从而可以专心烹调程序大餐。
由此也可以看出,现在的程序员并不都是理解打算机硬件的,以是妹子们不要指望自己的程序员男朋友给你DIY电脑,或者电脑坏了,他能给你省下一笔修理费。他说不会修,那便是真的不会修。
自从高等措辞涌现后,人类开始了在编程措辞上的放飞自我,经由数十年的发明创造,现在的高等编程措辞已超过2500种,像比较有名的C++和Java等,都属于高等措辞。
极客漫画《编程措辞之战》,展示的是高等编程措辞之间的市场竞争,也揭示了高等编程措辞弗成偻指算。
但问题涌现了,CPU能理解的机器措辞还是那个机器措辞,几十年来没有变革,让它读懂高等措辞那是不可能的。
怎么办?
实在,早在高等措辞涌现之前的汇编措辞时期,聪明的打算机研发职员就开拓出了专门的程序,用来将汇编措辞和高等措辞翻译成机器措辞,其过程相称于将英语名著翻译成汉语著作。
说白了,这种翻译程序相称于人类中的翻译家。
翻译程序有两种事情方法:编译和解释,相应的程序名称是编译器和解释器。两者的差异是,编译是在实行前把全体源程序(高等措辞程序)翻译成目标程序(机器措辞程序),而阐明是一次只翻译和实行源程序中的一行。
打个形象的比方,阐明器相称于发布会的实时翻译,演讲的高朋说一句,实时翻译立时翻译一句。编译器则相称于著作翻译家,整本翻译完成后,再让出版社印刷上市。
经由翻译程序的努力,现在CPU能看懂程序员写的程序了。当然,用开头提到的文言文编程措辞编写的程序想要让CPU看懂,还得多一道翻译步骤,即要么翻译成Javascript,要么翻译成Python。多转了一圈,不知道程序实行效率如何。
由于CPU不能直接理解用高等措辞写成的代码,必须依赖翻译程序翻译成机器措辞,因此翻译程序可以极大地影响乃至决定处理器性能的发挥。如果没有一个好的翻译程序,那么CPU的性能再强大,也好比茶壶装的饺子,倒不出来。
正由于如此,谷歌在安卓4.4之后,抛弃了Dalvik虚拟机,改为ART,实际是将翻译程序从阐明器切换到编译器,发挥了芯片的性能,提高了程序运行效率。
现在,手机大厂包括华为、OPPO和vivo都开始重视编译器开拓,说到底便是为了发挥芯片性能,让它不再成为倒不出饺子的茶壶。
末了总结一下,用翻译程序把程序员编写的程序翻译成二进制代码的机器措辞后,CPU就能看懂代码了,而且翻译程序的利害可以影响乃至决定CPU性能发挥。
图片源自网络,版权归图片作者所有。