CS、360、這些軟體的根目錄下有很多不同類型的文件。在沒有VS、JDK這些「程序設計語言」的「支持?
」下,是什麼東西在「組織」這些不同的文件;使之「相互配合」,變成一個可運行的程序的?
再說下我為什麼要問這個問題。對於剛學完C、Java基礎語法的我來說:「在沒有Visual stdio或JDK「支持」的情況下,就能運行一個程序」,這件事是無法想像的,因為感覺CS、360和學校里運行的程序的「運行模式」有些不一樣,就想問問。三更了 :
反正就是覺得這種程序的「運行模式」相較於以前程序的「運行模式」有些「另類」,就想問問四更提這個問題是不是說明我學完C和Java之後有了「思維慣性」了
C++寫的程序通過Visual Studio 2017編譯之後,不需要你裝Visual Studio 2017也可以運行,因為輸出的exe文件已經是適配了你的CPU的了。你當然不可能也不需要下載一個CPU,所以沒毛病(逃
10.4補充:
編譯是一回事,運行又是一回事,你說的jdk vs那些都是開發環境,你玩遊戲的時候也需要你安裝各種組件庫啊,比如vc++ 20xx runtime xxxx, directx3d之類的可以看一下《編譯原理》這本書
java程序雖然不需要jdk但是需要jre啊,jre裡面去掉了開發人員用的東西只保留了運行時的環境
vc#程序雖然不需要你裝visual studio,但是需要.net環境啊
python由於是腳本語言,不需要編譯,所以他的運行環境裝完實際上也就是裝完了開發環境,沒法精簡了
php也是一樣
c/c++,系統內置了基本功能的支持,調用api也是系統早就有的,沒有使用第三方組件庫的話,是不需要額外加環境的
--------------------------------
舉個幾個栗子…有錯誤請斧正。
dll,win32的程序,要想在windows上面顯示,就要用微軟定的規矩來辦事(調用windows api)微軟把這些集合到了dll(動態鏈接庫)裡面方便開發者調用,由於這些是微軟提供的「預裝在系統里」的功能,所以你直接用,而不需要你在複製一份dll放到軟體同目錄下。但如果我需要用一些系統原本沒提供的功能,就要用一些第三方的介面,第三方介面的開發者為了能讓大家都使用自己的程序也會把它打包成dll,然後提供給大家,大家在用的時候直接把dll放到軟體根目錄就可以調用開放的介面了。
ocx,對象類別擴充組件,說的簡單點兒你可以把他看成一個控制項。控制項是什麼呢?你用qq登錄時,輸入框是一個控制項,按鈕也是一個控制項,它是對數據和方法的封裝。第三方開發者做了一個比較漂亮的按鈕風格,他就可以把它做成一個ocx發布給其他開發者用。
res,資源文件,開發者在修改界面時不會看到無關的邏輯代碼,也方便分工
多媒體文件,遊戲中需要用到的各種媒體資源,聲音圖像等等。
壓縮文件,為了減少體積或為了防止篡改而對媒體文件進行壓縮處理。
有的程序只有一個exe文件沒有dll,可能只是單純的調用了winapi,也可能是把dll文件打包進了exe裡面(靜態編譯)操作系統幫你完成了這些事。當你點擊可執行程序時,是操作系統載入了相關文件,並負責鏈接執行。
你說的程序設計語言是給人看的,寫好代碼後,還需要編譯器翻譯成機器語言,然後就成了你用的軟體。不同類型文件只是功能不同,有資源文件,日誌文件,配置文件,可執行文件等等,小型工具軟體乾脆就合在一個exe文件了。軟體都有一個主程序的,打開它是你要做的,之後的事就是它自動打開別的依賴文件,實現不同文件里內置的功能。這應該很明了了吧。
你運行的exe中已經寫好了它要調用哪些其他的東西
推薦理解一下編譯這兩個字是什麼意思。
請看一下你所學的c Java的課本的前言 序言 第一章
問有沒有之前先問是不是,並沒有匯聚起來。你看到的只是一個個獨立的文件,感覺匯聚起來只是你的錯覺(逃)。
籠統地說,是「程序的邏輯」把他們匯聚在一起的。
至於「為什麼不需要下載程序設計語言」...此言差矣。對於cs/360來說,他們很大可能是用c/c++編寫的,我們運行.exe程序時雖然不需要下載完整的編譯環境,但他們需要c/c++語言的運行時庫。c語言運行時庫系統自帶,不需要下載;c++的運行時庫可能在安裝時自動幫你安裝好,或者程序自帶,所以實際上都是已經下載好了的。
還有一些語言寫成的程序,是需要完整的語言解釋環境的。
UPDATE
我們使用手機,並不需要機床,雖然造手機時肯定要用機床來造;我們住進樓房,並不需要腳手架的存在,雖然蓋樓房的時候肯定需要腳手架。程序也是一個道理。我們寫完c語言程序,需要vs這個「機床」來幫我們做編譯之類的工作;這一個階段完成之後,就不再需要vs了。這是因為生成的exe程序已經能夠直接被操作系統和cpu識別,就好像沙子和鋁塊對我們來說沒什麼用處,可是我們可以直接用機床造出來的手機。
jdk也是一樣,只不過運行還需要jre,沒jre也運行不了呀。這是因為java編譯出的程序無法直接被操作系統和cpu理解,但能夠被jre理解,而jre能夠被操作系統和cpu理解。相當於中間多了一層。瀉藥,你寫程序的語言只是流於表面上的形式而已,不管你用C,用JAVA還是python,終歸只是代碼而已,這些代碼經過編譯之後形成了計算機能夠識別的機器語言放在CPU裡面運行,你用IDE開發,寫好代碼之後有個編譯的過程,編譯生成一大堆文件,其中有obj等等,供CPU調用,而EXE不過是調用它們而已。根目錄下這些文件本身就是編譯好的。
是不是要先了解一下編譯型語言和解釋型語言?像C這類語言編譯成目標平台可執行代碼後,顯然可以直接運行,Java運行也不需要JDK,有jre就可以了啊。解釋型語言才需要在運行的時候有個解釋器吧,比如js什麼的這類很討厭的鬼語言(逃
1、大多數軟體的根目錄下的那些不同類型的文件,主要以DLL和數據文件為主,dll你可以理解為你程序的一部分,而數據文件和IDE就沒有半毛錢關係了。你的程序如何處理數據,完全靠你自己設計並寫成代碼。
2、不理解沒有IDE的情況下程序是如何運行的?搜一搜計算機原理,我也是看了很多篇文章才徹底沒有疑惑的。
3、「運行模式」是啥,我實在是不理解。如果你是指雙擊運行和編譯執行的區別的話,麻煩看一下你代碼目錄下有沒有debug文件夾(VS工程),裡面有你編譯好的程序,可以雙擊執行。
4、提這個問題說明你的學習之路還很長……
編譯器讀題目好費勁
私以為就是這個程序自身在運行了一個程序的主程序xx.exe後,程序會自行在系統中、文件目錄中尋找需要調用的文件,這些文件可能是一些子程序,也可能是一些資源文件或者配置文件。通過這些文件繼續調用直到調用的資源滿足了需求為止就是一個遞歸調用過程
如果是說不同文件間的使用的話,在編寫程序的過程中就有相關的調用函數,最後會變為可執行的0101。如果是說調用函數的實現的話,那就是操作系統到CPU的事了。
推薦閱讀:
※能不能用c#和c/c++以及其他語言寫一個完整的IDE(類似visual studio)?
※圖中的最長路徑問題怎麼算?
※為什麼X86的寄存器數量沒有隨著性能的提升而增加?
※為什麼要有指針?
※Android 會像 Windows 一樣,打敗 iOS 嗎?
TAG:微軟Microsoft | 計算機科學 | IT行業 | CC | 理論計算機科學 |