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