本來我不太想說的,奈何有不少粉絲提問提到了這語言,目前的情況我不透露太多,看過這課程C++實現一門計算機編程語言到手擼虛擬機實戰的懂的自然懂。
在互聯網領域幾乎大部分應用軟件運行在X86?LINUX上居多,如果你有問題可以先學習這個https://www.bilibili.com/video/BV1Dj411d7GQ/?spm_id_from=333.999.0.0
所以本文內容也是居于linux x86環境【阿里云服務器,畢竟用它做服務器居多?互聯網公司一般都是X86?指令集架構的居多】來進行測試。
下面是demo示例代碼
cjc?demo.cj?在LINUX下得到ELF格式可執行文件,內部存儲了X86指令和數據
main() {
println("Hello, World!")
}
編譯后得到如下幾個文件
生成的ELF文件和X86指令內容
編譯后得到的還是共享目標文件,但能直接執行,有興趣可以自行去了解靜態鏈接,動態鏈接的區別。
它底層運行時,依然是使用幾十年沒有變化的系統調用函數和幾十年沒有變化的X86指令集【感覺是一堆廢話,運行在X86 LINUX上當然了,當然也能根據目標機器生成其它架構的代碼】
運行它的系統調用過程如下[進程啟動到死亡的過程]【所有的編程語言都這樣】
[pid 18799] execve("./main", ["./main"], 0x5654ce18e360 /* 24 vars */) = 0
//裝載ELF文件,將ELF文件的指令和數據添加到進程虛擬內存里
[pid 18799] openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
//c動態庫
[pid 18799] openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
//不用說了 在LINUX C 課程說這
[pid 18799] write(1, "Hello, World!\n", 14) = 14
//調用write 系統調用函數 【此函數1991年到今天沒有變過】
[pid 18803] exit(0) = ?
//調用exit系統調用函數 退出進程 【進程死亡】此函數同樣是1991年到今天沒有變過】
[pid 18803] +++ exited with 0 +++
[pid 18799] exit_group(0) = ?
//同上
[pid 18799] +++ exited with 0 +++
上面的系統調用函數在以下課程已經說過,但建議你去實踐,技術只來源于實踐,不是來源看【紙上得來終覺淺絕知此事要躬行】
https://edu.51cto.com/lecturer/14934648.html
測試了這些,只是想告訴各位一個事實,我講的PHP多進程,物聯網,LINUX C?它們的知識并沒有過時,底層的東西依然是一樣的東西,但不少程序員長期忽略,物有本末,事有終始,知所先后,則近道矣,底層的東西是核心關鍵
對于一個后端程序員,必學內功修煉課程和LINUX C?核心高級,千舉萬變【應用層各種層出不窮的框架和語言】,其道一也【底層】,以不變【底層】應【駕馭理解探索認知】萬變【各種應用層的一切語言和框架】。
關于網絡編程也是一樣的技術,在這里不過多演示了。
雖然如此,但不少程序員還是沉入無窮無盡的編程語言和框架生態中...
物有本【底層】末,事有終【底層】始,知所先【底層】后,則近道矣.