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