編程語言中import比起include來是更先進的模塊管理機制嗎?


是的,首先他就避免了100個cpp要把include的那個頭文件編譯100次的情況,其次他還不需要hard code文件路徑,你放哪裡都可以。

當然我指的不是java和python的那個長得像import但實際上還是include的東西。


那我暫且把題主的描述理解成「用文件劃分模塊還是用命名空間劃分模塊更合理一些」。

假如我要用到兩個模塊,其中包含具有相同名稱的類或者函數。如果有名字空間的話,我大不了不import,直接寫全名就行了。那如果拿文件劃分呢?直接gg。

其實include最早應該是用來解決編譯問題,只是碰巧發現它能劃分模塊罷了。在現在的計算機上,副作用也挺大的。

===========================

你說的這兩個,就不是一個東西。

java的package等效於cpp和c#的namespace。

java的import等效於cpp的using namespace和c#的using。

這些都是和模塊有關的。你java能把包組織成什麼樣,我cpp就能把命名空間組織成什麼樣。只是java強制包結構和源文件結構一致罷了。

而include,認真來說,屬於編譯機制。

include僅僅是文本替換,cpp有這個東西是因為它採用了分散編譯這種機制。這個是歷史遺留問題,早期的機器內存不足,不夠編譯完整的程序。java由於是後起之秀,沒有這個限制。

是否分散編譯,和是否有包(命名空間)不是相關的,比如obj-c就是分散編譯,但它沒有命名空間。所以我說你問的這兩個分明就是不同的東西。


這問題簡直是語言大戰的新導火索啊,學到了。標準的答案應該是他們壓根就是不同語言的包引入寫法。至於那種更先進屬於語言差異。

用import還是include還是using屬於語法差異。

PS:輪子哥就認準 c# 是最好的語言的話,我覺得 PHP 就是最好的語言。Go 也不錯,Java 比 .NET 不知道好到哪裡去了


Include是文本級的,import是語言級的


是。

你們答題的都要講究實事求是,二話不說先打200字轉移話題,把別人鄙視一番算什麼東西,主要是還有邏輯漏洞,這可是學不來的,智商不夠不要學我們裝逼,哪涼快哪呆著去吧。


nodejs的require呢,golang的import呢


補充下輪子哥的答案吧。

說錯的請指出,謝謝。

import引入了真正的包(package)或者namespace的概念,更好的組織程序的結構,比include只是簡單的把頭文件的內容加入源文件的原始處理方法要先進。

import同時解決了令人頭疼的include循環引用定義的問題。

至於include編譯次數的問題,解決頭文件被多次編譯,其實可以把常用的頭文件加入預編譯頭,以縮短編譯的時長。

因為include的原始性,include也具有優勢:在處理一些冗長的宏定義,可以通過多次include來充當代碼生成器。


推薦閱讀:

C++有沒有像python-pip/nodejs-npm/ruby-gem一樣的包管理工具?

TAG:編程語言 | 包管理器 |