程式語言基礎

簡介程式語言的用途與概念

程式語言用來做什麼的

程式語言的發展可以參考程式語言歷史,是一個很長的故事,我們這邊不會很仔細的來說明,但籠統上來說,程式語言的發展,就是為了操作電腦的各種行為,因此,隨著電腦技術的演進與發展,程式語言也為了各式各樣的目的設計與發展起來。

早期的電腦與現在的個人電腦概念其實並不相同,早年的電腦往往是為了特地目的而存在的,因此早期的程式語言往往是為了操作特定用途電腦上的應用程式而設計出來的,舉例來說,早期的文書處理,就會有一台電腦被稱之為文書處理機器,上面搭載了文書處理應用程式提供使用者使用,而為了這個文書應用程式就會有一套對應他的程式語言來操作它。

隨著電腦的效能越來越好,可以安裝的應用程式越來越多,單一台電腦能運行的應用程式與處理的工作也越來越多,程式語言的發展也就不再只是服務或操作單一應用程式了,慢慢轉變成為可以操作不同的應用程式,從過去的單一目的性語言逐漸轉變成為現在的通用性高的程式語言。

但總結來說,程式語言就是為了操作與執行電腦裡面各種操作,在我們使用的各式各樣的應用程式背後,就是由程式語言所建築而成的執行邏輯,針對使用者的操作來對電腦下達各式各樣的運作指令,讓電腦完成任務來達成使用者的目的。

程式語言:低階語言與高階語言與編譯

在程式語言的分類中,我們有著低階與高階的區別,但這並不是我們一般生活中的對於高低的理解概念,這邊的高並不代表比較好、低也不意味著差的概念,而是在描述一個程式語言的用途,在執行與操作的對象距離硬體設備上抽象程度的概念。 所以低階語言在概念上越接近操作硬體,也就是處理一些如:處理器、晶片版…等等的程式語言,往往就會跟硬體有所綁定,比如我們在筆電中所使用的Intel i series CPU可以使用的指令集,就不能夠跟iPhone手機中所使用的ARM的指令集共通。

反之高階語言就是相反的,離硬體比較遠,操作上也都有高度的抽象化了,因此在開發上也較容易使人類理解與開發,通常我們就會使用高階語言來開發應用程式,然後將高階的指令不斷的轉換成為低階語言所對應描述的指令,最終產生出1010這樣的訊號讓硬體執行我們的操作。

程式語言的高階與低階可以參考這個部分程式語言世代,而這邊我們要再稍微提及到剛剛從高階語言程式轉換到低階語言然後產生二進位訊號的這個執行過程。

上面的這樣的過程,其實術語上來說就是「編譯」,字面上可能不容易了解意思,但如果我們說「翻譯」就容易理解多了,所謂的編譯在概念上就很像是翻譯的動作,為了讓電腦可以執行我們的程式,所以我們要把我們所寫的程式翻譯給機器(電腦)可以理解或處理的指令,回想剛剛上面的描述,從高階語言到低階語言而從低階語言再到硬體可以接收的二進位序號,這樣的整體過程中就是一個翻譯過程,而協助我們翻譯的應用程式,我們就稱之為「編譯器」,也因為有這樣的機制,我們工程師在開發的過程中才可以免於要直接寫出101010這樣的二進位的操作,不然在開發稍微複雜的應用程式的話,我們的大腦就很難來處理並寫出正確的程式了,我們得以使用一些比較貼近人類說話方式或描述事情的程式語言,進行應用程式的開發,然後透過編譯轉換成為機器可以接受的二進位輸入訊號,而我們的開發效能也會大大的提高。

理解編譯的意思後,我們就要稍微提一下「直譯」這個術語,直譯與編譯本質上都是在對程式語言進行翻譯的動作,只是差別在於編譯會先把翻譯前的程式語言整個都先看過,整理出前後共用啊、找出最好的翻譯方式然後統一翻譯,讓翻譯後的程式執行效率變高,最終會翻譯出一個對應的可執行檔,讓這個可執行檔案得以重複執行不用每次都重新翻譯。

而直譯的話,概念上就比較像是我們一般來說的「即席翻譯」,也就是讀一句翻譯一句執行一句,也因為這樣翻譯到可以執行的過程的週期會很短,便於開發人員的開發,但缺點就是比起編譯很難做到最佳化,或是提前知道程式是否有錯誤的地方無法翻譯,往往都是執行到那邊出錯了才會知道。而這系列文章中在Web中最用到的Javascript,就是一種直譯語言,而Javascript所需的直譯器其實就包含於我們的網頁的瀏覽器中。