什么是編程語(yǔ)言?什么是編程語(yǔ)言?當(dāng)我對(duì)這塊行業(yè)涉入未深的時(shí)候,你讓我說(shuō)個(gè)所以然出來(lái)我還真說(shuō)不出來(lái)。不過(guò)隨著時(shí)間的推移,自己似乎能夠理解那么點(diǎn)意義。 像所有機(jī)器一樣,它都有它的一個(gè)操作命令清單。打個(gè)最簡(jiǎn)單的比方吧,水壺只有開或者關(guān)閉,這就是水壺的一個(gè)操作命令清單。還有CD播放器吧,它有開、快進(jìn)、倒退、暫停、關(guān)閉、調(diào)節(jié)音量、隨機(jī)播放,這就是CD播放器的一個(gè)命令清單。那么對(duì)于計(jì)算而言,它也是一樣的,它也有屬于自己的一張清單。打個(gè)簡(jiǎn)單的比方,命令計(jì)算機(jī)可以把兩個(gè)數(shù)字相加。這種操作命令的組合就是計(jì)算機(jī)的機(jī)器語(yǔ)言(machine language)。 機(jī)器語(yǔ)言 機(jī)器語(yǔ)言 計(jì)算機(jī)剛剛發(fā)明的時(shí)候,所有程序就是一條條機(jī)器 機(jī)器語(yǔ)言和匯編語(yǔ)言的共同構(gòu)問(wèn)題就是,只能讓大多數(shù)計(jì)算機(jī)做一些簡(jiǎn)單的事情。比如你想讓計(jì)算機(jī)的蜂鳴器響10次,但是不存在一跳直接的機(jī)器語(yǔ)言命令重復(fù)進(jìn)行n次操作,所以只能用機(jī)器語(yǔ)言寫出下面這樣的程序:
如果只是讓蜂鳴器響10次就不得不寫這么多代碼,不難想象寫出一個(gè)文字處理器或電子表格將是一項(xiàng)多么浩大的工程。 順便再說(shuō)一句,再次看到上面的那個(gè)程序。蜂鳴器真的會(huì)響10次嗎?不,響了11次。我不應(yīng)該在第一行使用10,而是9。我故意在這個(gè)例子中留了1個(gè)BUG,是為了證明編程語(yǔ)言的一個(gè)重要特點(diǎn):一個(gè)操作所需要的代碼越多,就越難避免BUG,也就越難發(fā)現(xiàn)它們。 高級(jí)語(yǔ)言 假設(shè)你現(xiàn)在不得不不用編程語(yǔ)言開發(fā)程序,但是你有了一個(gè)助手,幫你省去了不必要的麻煩。你接下來(lái)只要把程序?qū)懗上旅孢@樣就行了: dotimes 10 蜂鳴器響 接下來(lái)你的助手會(huì)用編程語(yǔ)言幫你完成這條命令。(假設(shè)不產(chǎn)生BUG) 事實(shí)上大多數(shù)程序員的工作就是這樣的,不同之處就是,程序員的助手不是一個(gè)人,而是編譯器。所謂的“編譯器”,它本身就是一個(gè)程序。作用就是將簡(jiǎn)便方式書寫的程序(就是上面這一行命令)轉(zhuǎn)變?yōu)?strong>硬件可以理解的語(yǔ)言。而這種簡(jiǎn)便方式書寫的程序所使用的就叫做高級(jí)語(yǔ)言。它能夠 讓你使用更強(qiáng)大的命令開發(fā)程序。寫程序時(shí)有了方便的命令,就可以把程序?qū)懙酶?jiǎn)短。就算你出線了BUG,也更容易找到。 高級(jí)語(yǔ)言還有一個(gè)有優(yōu)點(diǎn),它使得程序更具有可移植性。不同計(jì)算機(jī)語(yǔ)言都不是完全相同的。所以,你無(wú)法為某一種機(jī)型寫的機(jī)器語(yǔ)言程序放到另外一種機(jī)型上面運(yùn)行,只有徹底重寫才能實(shí)現(xiàn)。但是你的程序是用高級(jí)語(yǔ)言寫的,你只需要 重新編寫編譯器就可以了 。 編譯器不是高級(jí)語(yǔ)言唯一實(shí)現(xiàn)方法,另一種是使用解釋器,它的作用是實(shí)時(shí)地將代碼解釋為相應(yīng)的機(jī)器語(yǔ)言,然后一行行運(yùn)行。相比之下,編譯器是將整個(gè)程序翻譯為機(jī)器語(yǔ)言,然后再運(yùn)行。 高級(jí)語(yǔ)言 開放源碼 編譯器處理的高級(jí)語(yǔ)言又叫做源碼。它經(jīng)過(guò)翻譯后產(chǎn)生的機(jī)器碼就叫做目標(biāo)碼。(目標(biāo)碼很難讀懂 ,相當(dāng)于加密了,可以保護(hù)公司的商業(yè)秘密)但是后來(lái)出現(xiàn)一種潮流:開放源代碼的軟件。你可以得到源代碼,并且不受限制的修改它。 Android源碼部分圖 這兩種方式的區(qū)別在于,開放源代碼可以讓你對(duì)軟件有更大的控制權(quán),如果你想了解 源軟件如何運(yùn)行的,你只需要看源代碼就行。如果你愿意,甚至可以修改軟件、重新編譯。你之所以需要這樣做,一個(gè)原因是因?yàn)樾拚粋€(gè)BUG。比如,你不可能修正windows的BUG,因?yàn)槟銢](méi)有源碼。(理論上你也許可以 破解目標(biāo)碼,但是實(shí)際上是非常困難的。另一方面,軟件的授權(quán)協(xié)議也不允許你這樣做)這會(huì)導(dǎo)致很大的問(wèn)題。一旦windows出現(xiàn)新的安全漏洞,只能等待微軟公司發(fā)布解決方法,這還是算塊的。如果BUG不嚴(yán)重,許只是讓你機(jī)器死機(jī),那么可能不得不等到下次全面升級(jí)后問(wèn)題得到解決。 開放源代碼的優(yōu)勢(shì)不僅僅局限于自己手動(dòng)解決BUG。這里的關(guān)鍵是所有人都可以參與。許許多多聰明的人在仔細(xì)閱讀Linux和FreeBSD這樣的開源操作系統(tǒng)的源碼后,發(fā)現(xiàn)并解決了大量的BUG。相比之下 ,windows的可靠性只能依賴大公司的質(zhì)量保證部門了。開放源代碼的擁護(hù)者常常被看作反對(duì)知識(shí)產(chǎn)權(quán)的怪人。其中有些人確實(shí)如此,但是我本人肯定不反對(duì)知識(shí)產(chǎn)權(quán)。普通的消費(fèi)者也許不需要看到他們使用的文字處理器的源碼,但是在非常強(qiáng)調(diào)軟件可靠性的情況下,處于強(qiáng)烈的工程需求的考慮,會(huì)要求開放源碼。 未完待續(xù)... |
|
|
來(lái)自: 大隆龍 > 《編程技術(shù)》