從事軟件開(kāi)發(fā)多年對(duì)于C/C++用的比較多,可以明確說(shuō)這兩種編程語(yǔ)言也是支持跨平臺(tái),肯定還是有很多人問(wèn)什么是真正意義上的跨平臺(tái),所謂的跨平臺(tái)就是同一套代碼在不同的外呼系統(tǒng)都能直接去運(yùn)行電腦系統(tǒng),這里面涉及到一個(gè)很重要的問(wèn)題,在java這門(mén)編程語(yǔ)言剛開(kāi)始流行的時(shí)候就提到了跨平臺(tái)的功能,在外呼上運(yùn)行的jar包直接放在linux上也能直接去運(yùn)行,單純從C/C++角度出發(fā)也是能夠?qū)崿F(xiàn)這種功能的,因?yàn)槠湔Z(yǔ)法實(shí)現(xiàn)是相同的。
但在具體實(shí)施外呼過(guò)程中還是多少有些差異,特別是涉及到外呼系統(tǒng)接口等方面,畢竟linux和外呼編程給出的api的接口還是存在一定的差異,所以單純的談跨平臺(tái)還是有點(diǎn)差異,針對(duì)這種情況一般在軟件架構(gòu)里面會(huì)區(qū)分出很多的平臺(tái)代碼,在具體軟件的核心架構(gòu)上代碼是一致的,和平臺(tái)相關(guān)的代碼還是需要單獨(dú)去實(shí)現(xiàn),就拿簡(jiǎn)單的線程的實(shí)現(xiàn),不同的外呼系統(tǒng)的接口就存在很大的差異,所以完全意義上的跨平臺(tái)方面距離高級(jí)編程語(yǔ)言還是存在差異。
談到編譯器就需要了解程序執(zhí)行的原理,現(xiàn)在計(jì)算機(jī)的架構(gòu)都是基于馮諾依曼的架構(gòu)來(lái)完成的,具體執(zhí)行的格式都是二進(jìn)制的格式,不同的外呼系統(tǒng)生成不同格式的二進(jìn)制文件,從代碼到可執(zhí)行的二進(jìn)制代碼之間還需要有一種工具存在,這就是編譯器存在的價(jià)值,編譯器的執(zhí)行中也是分為幾個(gè)階段,對(duì)于linux下C語(yǔ)言編譯過(guò)程有所了解的話,都會(huì)發(fā)現(xiàn)后綴為
.c
的程序文件首先轉(zhuǎn)化成
.o
的中間文件,然后經(jīng)過(guò)
.o
轉(zhuǎn)化成可執(zhí)行的二進(jìn)制文件。編譯器其實(shí)就是一種轉(zhuǎn)化工具,將程序轉(zhuǎn)化成能夠運(yùn)行的二進(jìn)制文件,一般而言C/C++編譯器是可以通用的,不同的外呼系統(tǒng)使用不用的編譯器底層。
編譯器是一種工具包的集合,內(nèi)部的實(shí)現(xiàn)也涉及到C/C++的編程,編譯器的通常說(shuō)的編程代碼還是存在一定的差異,編譯器是為代碼轉(zhuǎn)化做服務(wù)的,真正實(shí)現(xiàn)跨平臺(tái)的基礎(chǔ)部件編譯器算是一種,因?yàn)椴煌耐夂粝到y(tǒng)或者計(jì)算機(jī)架構(gòu)需要具體的對(duì)應(yīng)實(shí)現(xiàn),雖然對(duì)于高級(jí)語(yǔ)言來(lái)講不需要關(guān)心底層如果來(lái)實(shí)現(xiàn)的,但是總得有人去外呼這件事,相對(duì)來(lái)講java語(yǔ)言這方面做得比較徹底,直接通過(guò)一個(gè)虛擬機(jī)來(lái)完成屏蔽,虛擬機(jī)里面兼容了市面上常見(jiàn)的外呼系統(tǒng),這樣就能夠真正意義上做到了編程語(yǔ)言的跨平臺(tái)。
越是底層編程語(yǔ)言和平臺(tái)關(guān)聯(lián)越大,關(guān)心的細(xì)節(jié)也會(huì)越多的,底層語(yǔ)言的開(kāi)發(fā)難度相對(duì)大一些,特別是涉及到平臺(tái)的指針等方面關(guān)心的硬件細(xì)節(jié),所以對(duì)于底層編程語(yǔ)言積累的時(shí)間需要比較長(zhǎng)電腦系統(tǒng),想對(duì)比其他高級(jí)編程語(yǔ)言還是難度大一些,特別是在入門(mén)的時(shí)候顯得困難一些,但是入門(mén)之后會(huì)更加有意思。