.net 網(wǎng)站 iis 配置四川seo優(yōu)化
目錄
一、代碼運行的過程
二、跨平臺的實現(xiàn)
1)C/C++
2)C#
3)Java
三、總結(jié)?
一、代碼運行的過程
? ? ? ? 開發(fā)程序無論使用何種編程語言,至少都需要經(jīng)歷編碼、編譯、連接和運行這么4個過程,C語言是這樣,Java語言也是這樣。而需要開發(fā)人員具體實施的只有編碼這個過程,其它都是交由計算機自動執(zhí)行。對應(yīng)這4個過程,也就有對應(yīng)的工具。
? ? ? ? 編碼有很多可用工具,最簡單的就是記事本,畢竟我們的代碼文件就是文本文件。然而我們很少會使用記事本來編寫代碼,因為它的效率太低,除了能寫文本外,不能給我們?nèi)魏纹渌妮o助。因此,我們常用長多其他的編碼工具,比如VS、PyCharm、idea等等,這些工具在我們編碼過程中會根據(jù)不同語言的語法特征給我們大量提示信息,極大提高編碼效率。
? ? ? ? 每一種編程語言都有其對應(yīng)的編譯工具,編譯就是將我們寫的文本代碼使用編譯工具翻譯成計算機能夠識別的機器碼。這個過程由編譯工具去實現(xiàn),比如gcc、g++、javac等這些編譯工具。編譯工具對應(yīng)編程語言,同時也要適配不同的操作系統(tǒng)。同一種語言的編譯工具在widows和Linux系統(tǒng)下是不一樣的,他們互不兼容。因為不同操作系統(tǒng)提供的API接口實現(xiàn)是不一樣的,我們寫的應(yīng)用程序必然要在操作系統(tǒng)上運行,需要調(diào)用操作系統(tǒng)提供的各類接口函數(shù)。
? ? ? ?連接就是將我們編寫的程序在運行時需要調(diào)用的外部依賴與本程序關(guān)聯(lián)起來。這些依賴存在于電腦操作系統(tǒng)中,他們是編譯好的庫文件,比如windows下的.dll,Linux下的.o文件等。連接過程會自動去尋找所需依賴文件的位置。
? ? ? ?運行,當(dāng)我們運行編寫的代碼時,其實是在上述過程完成后,計算機真正開始執(zhí)行程序。這是完全由計算機操作系統(tǒng)控制的,它執(zhí)行的是編譯完成后的二進制文件,并在執(zhí)行過程中根據(jù)需要調(diào)用本地的庫文件。即使在相同的電腦和操作系統(tǒng)下,也不要期望我們所編寫的程序能夠在另一臺電腦百分百能運行。如果你把文本代碼復(fù)制到另一臺電腦,另一臺電腦可能沒有安裝對應(yīng)的編譯器,那么它就不能編譯代碼,更不能運行你所編寫的程序。如果你把編譯完成的字節(jié)碼文件復(fù)制到另一臺電腦,另一臺電腦可能因為缺失部分依賴庫文件也同樣無法運行。這時,我們也許會想到我們在安裝一些常用軟件時,并沒有遇到過這種情況。這是因為這些軟件安裝包已經(jīng)將編譯好的字節(jié)碼和運行所需要的依賴文件統(tǒng)一打包在了軟件安裝包里,我們在安裝軟件時就自動為軟件的運行配置好了所需環(huán)境。
二、跨平臺的實現(xiàn)
? ? ? ?讓代碼在不同的操作系統(tǒng)平臺上運行是很有必要的,但這不是開發(fā)人員來實現(xiàn)的。前面已經(jīng)說明,不同的操作系統(tǒng)底層實現(xiàn)是不一樣的。程序跨平臺運行不能繞開操作系統(tǒng)。其實對編程語言的跨平臺運行,需要指明是在哪個層面。如果說指的是編譯完成后的可執(zhí)行程序,可以在任意一個平臺編譯,所有平臺運行,那目前所有的編程語言都是實現(xiàn)不了的。如果說是代碼層面的跨平臺,那么幾乎所有語言都可以實現(xiàn)跨平臺,即同樣一套代碼可以在不同的操作系統(tǒng)上進行編譯,當(dāng)然有的還是會需要做一些小的改動。還有一種就是使用基本框架隔離操作系統(tǒng),實現(xiàn)程序的跨平臺運行?,F(xiàn)就常見的幾種語言談?wù)勛约旱睦斫狻?/p>
1)C/C++
? ? ? ?C/C++幾乎是所有高級語言的基礎(chǔ),語法規(guī)則最難,精通C/C++后再去學(xué)習(xí)其他語言真的是易如反掌,這也是為什么現(xiàn)在大學(xué)的計算機語言入門仍然要求從C開始。windows和Linux等所有系統(tǒng)均支持C。然而它跨平臺的實現(xiàn)是代碼層面的,它需要在不同平臺上編譯后才能運行,并且可能需要做一些細節(jié)的改動。目前基于C++的QT框架在這個層面的跨平臺實現(xiàn)很好,如果不調(diào)用一些特殊的類庫,可以實現(xiàn)一套QT代碼無需改動在Windows和Linux系統(tǒng)上編譯運行。而且在Linux系統(tǒng)上開發(fā)圖形應(yīng)用程序使用最廣泛的還是QT,特別是在國產(chǎn)化要求背景下。
2)C#
? ? ? C#跨平臺運行是基于基本框架實現(xiàn)的。對與C#而言,不論是Windows還是Linux系統(tǒng),均需要安裝.net框架才能運行C#開發(fā)的程序。.net框架為C#程序運行提供了一個中間件,隔離了操作系統(tǒng)的影響,對操作系統(tǒng)API的調(diào)用由框架實現(xiàn),從而開發(fā)人員不需要去關(guān)心與操作系統(tǒng)的直接交互操作。
3)Java
? ? ? ? Java的跨平臺思想也是基于基本框架實現(xiàn)的,但Java的實現(xiàn)早于C#。使用Java編寫的程序也不是直接運行于操作系統(tǒng)上的,Java與操作系統(tǒng)的關(guān)系如下圖所示。在電腦操作系統(tǒng)之上需要安裝一個Java程序運行環(huán)境,也就是JRE,它由Java虛擬機(JVM)、核心類庫和java啟動程序3部分構(gòu)成。JRE是運行java程序的基礎(chǔ),不論是開發(fā)環(huán)境下,還是在程序部署環(huán)境下,要運行java開發(fā)的程序均需要安裝JRE。在JRE之上是java字節(jié)碼文件,這個文件之上就是開發(fā)人員所編寫的java程序代碼。
? ? ? ?通常我們編譯java程序代碼時,生成的編譯結(jié)果就是java字節(jié)碼,即以.class為后綴名的文件。我們通常說的java程序跨平臺運行就是指的這個字節(jié)碼文件可以拷貝到不同的操作系統(tǒng)下運行,前提是操作系統(tǒng)已安裝的適配的JRE。java程序的真正運行是由java虛擬機(JVM)來控制的。這也是java實現(xiàn)跨平臺的思想,它確實可以實現(xiàn)一次編譯,多平臺運行,但是編譯生成的字節(jié)碼文件并不是傳統(tǒng)意義上理解的可執(zhí)行程序。字節(jié)碼文件并不是計算機可執(zhí)行的機器碼,它還需要在JRE中作進一步翻譯。我們可以理解java初次編譯生成的字節(jié)碼為中間件,或者說是半成品。
三、總結(jié)?
? ? ? ? 每種編程語言都有自己的優(yōu)勢,越是高級、最新的語言,學(xué)習(xí)越簡單,開發(fā)效率越高。但個人認為C/C++仍然是所有高級語言的基礎(chǔ)。很多人在學(xué)習(xí)編程時糾結(jié)該學(xué)哪一種語言,個人建議入門就應(yīng)該從C/C++開始,它是其他高級語言的思想根基。而且以后編程終將會成為每個人的通用技能,就如開車一樣,它本身也不是一項高深的技術(shù),只是輔助我們工作的一項工具。所有打好基礎(chǔ)是關(guān)鍵,再學(xué)習(xí)任何一種語言都會很便捷。