什么是编程语言?什么是编程语言?当我对这块行业涉入未深的时候,你让我说个所以然出来我还真说不出来。不过随着时间的推移,自己似乎能够理解那么点意义。 像所有机器一样,它都有它的一个操作命令清单。打个最简单的比方吧,水壶只有开或者关闭,这就是水壶的一个操作命令清单。还有CD播放器吧,它有开、快进、倒退、暂停、关闭、调节音量、随机播放,这就是CD播放器的一个命令清单。那么对于计算而言,它也是一样的,它也有属于自己的一张清单。打个简单的比方,命令计算机可以把两个数字相加。这种操作命令的组合就是计算机的机器语言(machine language)。 机器语言 机器语言 计算机刚刚发明的时候,所有程序就是一条条机器 机器语言和汇编语言的共同构问题就是,只能让大多数计算机做一些简单的事情。比如你想让计算机的蜂鸣器响10次,但是不存在一跳直接的机器语言命令重复进行n次操作,所以只能用机器语言写出下面这样的程序:
如果只是让蜂鸣器响10次就不得不写这么多代码,不难想象写出一个文字处理器或电子表格将是一项多么浩大的工程。 顺便再说一句,再次看到上面的那个程序。蜂鸣器真的会响10次吗?不,响了11次。我不应该在第一行使用10,而是9。我故意在这个例子中留了1个BUG,是为了证明编程语言的一个重要特点:一个操作所需要的代码越多,就越难避免BUG,也就越难发现它们。 高级语言 假设你现在不得不不用编程语言开发程序,但是你有了一个助手,帮你省去了不必要的麻烦。你接下来只要把程序写成下面这样就行了: dotimes 10 蜂鸣器响 接下来你的助手会用编程语言帮你完成这条命令。(假设不产生BUG) 事实上大多数程序员的工作就是这样的,不同之处就是,程序员的助手不是一个人,而是编译器。所谓的“编译器”,它本身就是一个程序。作用就是将简便方式书写的程序(就是上面这一行命令)转变为硬件可以理解的语言。而这种简便方式书写的程序所使用的就叫做高级语言。它能够 让你使用更强大的命令开发程序。写程序时有了方便的命令,就可以把程序写得更简短。就算你出线了BUG,也更容易找到。 高级语言还有一个有优点,它使得程序更具有可移植性。不同计算机语言都不是完全相同的。所以,你无法为某一种机型写的机器语言程序放到另外一种机型上面运行,只有彻底重写才能实现。但是你的程序是用高级语言写的,你只需要 重新编写编译器就可以了 。 编译器不是高级语言唯一实现方法,另一种是使用解释器,它的作用是实时地将代码解释为相应的机器语言,然后一行行运行。相比之下,编译器是将整个程序翻译为机器语言,然后再运行。 高级语言 开放源码 编译器处理的高级语言又叫做源码。它经过翻译后产生的机器码就叫做目标码。(目标码很难读懂 ,相当于加密了,可以保护公司的商业秘密)但是后来出现一种潮流:开放源代码的软件。你可以得到源代码,并且不受限制的修改它。 Android源码部分图 这两种方式的区别在于,开放源代码可以让你对软件有更大的控制权,如果你想了解 源软件如何运行的,你只需要看源代码就行。如果你愿意,甚至可以修改软件、重新编译。你之所以需要这样做,一个原因是因为修正一个BUG。比如,你不可能修正windows的BUG,因为你没有源码。(理论上你也许可以 破解目标码,但是实际上是非常困难的。另一方面,软件的授权协议也不允许你这样做)这会导致很大的问题。一旦windows出现新的安全漏洞,只能等待微软公司发布解决方法,这还是算块的。如果BUG不严重,许只是让你机器死机,那么可能不得不等到下次全面升级后问题得到解决。 开放源代码的优势不仅仅局限于自己手动解决BUG。这里的关键是所有人都可以参与。许许多多聪明的人在仔细阅读Linux和FreeBSD这样的开源操作系统的源码后,发现并解决了大量的BUG。相比之下 ,windows的可靠性只能依赖大公司的质量保证部门了。开放源代码的拥护者常常被看作反对知识产权的怪人。其中有些人确实如此,但是我本人肯定不反对知识产权。普通的消费者也许不需要看到他们使用的文字处理器的源码,但是在非常强调软件可靠性的情况下,处于强烈的工程需求的考虑,会要求开放源码。 未完待续... |
|