选择学什么计算机语言来编程,先了解语言通

计算机语言是人与计算机进行交流的工具,是用来书写计算机程序的工具。

可以通俗地理解为,你用用特定的语言与特定的对象(特定操作系统与CPU的计算机)沟通,关键是需要有个翻译,这个翻译就是编译器或解释器,同样的语言,针对不同的对象(特定的CPU和操作系统)需要有不同的编译器或解释器。所以说编程语言是“设计”出来的,设计只需要思考和写文档,而该语言的编译器或解释器才是“开发”出来的。

编译器也是程序,所以也需要用编程语言来编写,很多编程语言是用别的更基础的语言开发的,其中用最多的就是C语言。C语言编译器很多,大部分都是用别的C语言编译器编译出来的,而最早的C语言编译器是用汇编语言写出来的,最早的汇编语言编译器是通过“编译器自举”开发出来的。

从最基本的角度看,一种编程语言就是把一组特定的词汇,按照一组特定的语法规则组合到一起,形成计算机可以通过某种方式“理解”的东西,可以让计算机据此执行特定的动作。

首先要决定你想设计的语言应该解决什么问题。面对不同的领域、不同的需求、不同的抽象层级、不同的思考范式,也就产生了各有特长的编程语言。专注于高效、便捷地解决某特定范畴之内问题的语言,叫做领域专用语言(DomainSpecificLanguage,DSL),而可以跨越若干领域解决问题的语言,叫做泛用语言(General-PurposeLanguage,GPL)。常见的DSL比如MATLAB、SQL等等;常见的GPL如汇编、C、Python。当然,两类语言之间的分界并不是很明显,有些语言一开始是作为DSL设计的,后来渐渐朝着GPL的方向发展,比如PHP和JavaScript;反过来也有大量基于GPL开发而来的DSL。

先看看这件事情的最底层。所谓“计算机执行动作”,其实只是“把一个二进制数字传入CPU,然后等待什么事情发生”的形而上描述。二进制计算机所能理解的唯一东西就是二进制数字,称为“机器码”。比如:

这串数字,对于某颗CPU来说,就是“把0110放到号寄存器里”的指令,其中“”的部分,就是CPU能懂得的“放入”指令。这样的指还有许许多多,比如做加法、求逻辑“与”,跳转,加密等等,全都只是一些二进制数字而已。

对人类来说,这种纯数字的写法太难记忆,就把它转写成:

MOVAL,97

其中MOV代表“”,AL代表号寄存器,97则是二进制数0110的十进制表示。其他的数字指令也一并用这种简记法来转写。使用这样的一种转写方法来写程序,就是汇编语言(当然,这是一种极度简化的说法)。汇编语言谈不上太多设计,其实几乎就是在直接告诉CPU应该做什么。把汇编语言转化为机器码的程序,称为“汇编器(Assembler)“。

汇编语言的优势是很低级,你能直接控制CPU的行为;汇编语言的缺点也是它太低级,你必须直接控制CPU的行为。看看“把A的值放进甲寄存器;B的值放进乙寄存器;把乙寄存器的值放进A;把甲寄存器的值放进B。”这段汇编指令执行后是什么结果?运行一下之后会看到,A和B的值互换了。那么,能不能直接写“交换变量A和B的值”,然后由计算机来分解为一串机器码的组合呢?

所谓的“高级”编程语言就是这样的原理。将高级编程语言翻译成机器码(或者其他更接近机器码的形式)的过程,也就是计算机“理解”语言的过程,叫做“编译”,而完成这一工作的程序,叫做“编译器(







































北京中医院能治疗白癜风
治疗白癜风需要多少钱



转载请注明:http://www.zjiaren.com/zyjs/zyjs/4402.html