日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

編譯型語言與解釋型語言有何區(qū)別( 二 )


操作系統(tǒng)和編譯器是緊密相連的,不同操作系統(tǒng)所提供的編譯環(huán)境不同 。Linux和GCC編譯器密不可分,Windows有自家研發(fā)的MSVC(Microsoft Visual C++) 。不同操作系統(tǒng)在管理網(wǎng)絡(luò)、讀寫硬盤、圖形化等具體的實現(xiàn)方式不同,庫函數(shù)連接方式不同…可執(zhí)行文件一般需要調(diào)用這些操作系統(tǒng)接口,所以最終連接生成的可執(zhí)行文件會截然不同 。了解了編譯知識,就不難明白為什么很多軟件提供商對同一個軟件會提供Windows、Mac OS、Linux、iOS、Android等多個版本的下載 。因為不同平臺的硬件、編譯器和操作系統(tǒng)存在著巨大差異,可執(zhí)行文件完全不同 。所以,也就不難理解Windows軟件為什么不可能在Mac OS上運行 。
實際構(gòu)建一個大型項目時,編譯要考慮的問題會更多 。比如我自己編寫了多個文件,文件1會被文件2調(diào)用,所以要先編譯文件1,后編譯文件2,否則會因為順序顛倒而報錯;還比如編譯型語言對所以依賴的庫函數(shù)非常挑剔,如果版本過低,有可能出現(xiàn)編譯錯誤 。類似的問題會很多,因此編譯型語言在編程和調(diào)試時更麻煩,實際操作中一般會使用構(gòu)建工具鏈(toolchain),根據(jù)一定的順序,從前到后串起來地去編譯 。
解釋型語言:Java、Python、R…
既然可以將01組成的機器語言抽象成容易編寫的C語言,那為什么不能繼續(xù)再用類似的辦法,再做一次包裝呢?IT圈的一句名言就是:計算機科學(xué)任何領(lǐng)域的問題都可以通過增加一個中間層來解決 。一些大牛忍受不了C語言這樣編寫和調(diào)試太慢,系統(tǒng)平臺之間無法共享移植的問題,于是開始自立門戶,創(chuàng)建了新的編程語言,最有名的要數(shù)Java和Python,這類語言不需要每次都編譯,因此被稱為解釋型語言 。matlab、R、Javascript也是解釋語言 。

編譯型語言與解釋型語言有何區(qū)別


解釋型語言一般是使用C語言等偏底層的語言做一個或者,編程人員需要先在自己的計算機上安裝這個解釋器,接下來就只用關(guān)心自己的源代碼,其他的事情都交給解釋器去做 。如果把編譯型語言的編譯過程比作將源代碼“翻譯”成機器語言的話,那么解釋型語言就是同聲傳譯 。編譯型語言是一篇提前就“翻譯”好的稿子,拿過來就能被讀出來,這樣肯定更快;解釋型語言要等翻譯邊“聽”邊“翻譯”,速度當(dāng)然慢很多 。
編譯型語言與解釋型語言有何區(qū)別


不同編程語言的性能測試 - ***/benchmarks/
C語言和相應(yīng)編譯器經(jīng)過了幾十年的發(fā)展,在性能優(yōu)化上已經(jīng)達到了極致,一般是所有高級語言中速度最快的 。上圖展示了一個對不同編程語言在不同任務(wù)上的測試,數(shù)據(jù)以C語言為基準(zhǔn),可以看到Python、R等語言在部分任務(wù)上要比C語言慢10倍到100倍 。Julia語言是解釋語言中的“奇葩”,它剛剛誕生沒幾年,語言的設(shè)計上使用了更多新技術(shù),屬于長江后浪推前浪了 。
有了解釋器,我們可以在任何安裝了Python的機器上運行同樣一份源代碼文件 。像Python這樣的解釋語言就像一個高級計算器,非常容易上手,有一些理工基礎(chǔ)的朋友,半天時間就能學(xué)會 。
其實,這就是一個妥協(xié)的過程,解釋語言放棄了速度,取得了易用性和可移植性 。
【編譯型語言與解釋型語言有何區(qū)別】如果我還是關(guān)心速度呢?當(dāng)然還是要回歸底層,拒絕中間商賺差價嘛!
以Python為例,為了保證性能,大部分高性能科學(xué)計算庫其實都是使用編譯型語言編寫的 。比如,感興趣的朋友可以前往numpy的源碼地址(***/numpy/numpy)查看,會發(fā)現(xiàn)很多C語言編寫的代碼 。對于一些計算密集型的函數(shù)和方法,Python用戶自己可以使用這樣的工具,R語言可以使用 。我最近在使用Java的jni來調(diào)用C++代碼,發(fā)現(xiàn)速度有成倍提升 。

推薦閱讀