IDE的本質

經過十幾個小時的折騰vim中的IDE,我不得不回去思考一下到底什麼叫做IDE。IDE全名叫集成開發環境(Integrated development environment)。

IDE簡史:

先來看看IDE的發展歷史。在50年代的時候,人們是通過打孔卡來作爲機器的輸入。程序員都是先離線的用打孔機將程序寫好後,放到讀卡機中,作爲輸入,然後,計算機中的monitor(原始操作系統)將程序調入內存,再將編譯器調入內存,再編譯一下。如果,沒有出錯,那麼就執行程序。如此這般的寫程序方式,自然沒有IDE的說法,因爲程序員和機器都是相隔離的。後來,計算機的歷史進入了分時系統的時代,一個大型計算機身上掛着很多個終端,程序員通過終端來寫程序調試程序。這樣才使得IDE成爲可能。根據維基百科上的說法,Dartmouth BASIC(1964)是第一個擁有IDE的語言。此時的IDE與我們現在的IDE,完全不同,沒有GUI,沒有menu,沒有鼠標。更奇特的是,他使用的是叫做行編輯器,傳說中這種編輯器只能讓你看到一行的代碼,然後修改也只能指定哪一行然後修改,相比之前那個打孔卡的方式可是先進了很多。之所以叫他是IDE我想大概因爲,它編輯代碼和執行普通命令行命令(包括run命令)是可以一起進行的吧。Maestro I(1975)成了世界上第一個IDE.(維基上就是這麼說的,到底誰是第一個?)Softbench(1989)是世界上第一個有插件功能的IDE,它運行在unix上,使用unix的工具以及X windows,也就是說它是由GUI的。

現在的幾種IDE:

歷史發展到如今,現在常見的IDE大約有那麼幾個。Eclipse (2001)最初來自IBM的項目,現在變成了一個提供多種語言開發的,開源的IDE。之前,用它寫過python程序(用一個pydev包),感覺非常舒心,真是寫程序成了一種享受。也許是因爲之前在用notepad++在寫python,既沒有補全也沒有調試有錯誤也要找老半天。

Microsoft Visual Studio(1995-4)可以說是windows下開發的標準IDE,同時也是一個巨型航母,包含了VC++,C#,VB等等。回想起高中的時候,我的第一個GUI程序就是用VB6.0寫的。現在寫程序也基本上都在用VC。最近也已經發展到了2012版。在這上面寫程序感覺也挺好,主要的問題是它太臃腫了,不管是啓動還是調試的時候都比較慢。另外,就是他是商業軟件,價格不菲。雖然,現在在中國不是問題,但未來總有可能成爲問題。

Qt Creator是一個跨平臺的C/C++開發IDE,主要是用來寫Qt程序的。我當時也是爲了寫跨平臺的界面才接觸到Qt。如果要寫Qt,那麼它就是不二選擇。Qt有點類似於微軟的MFC,但是,不得不說它比MFC要簡單明瞭易學得多。加上Qt Creator寫界面什麼的就快很多了。

還有其他一些比如:Code Blcok,dev c++,Xcode,NetBeans等等,雖然聽過,但是沒有用過。看了看維基中的IDE比較,發現開源的比商業不開源的要多。

IDE的本質:

有人將上面的那種IDE比喻成品牌機,然後就有對應的組裝機了,也就是通過拼湊一些程序來組成自己的IDE。傳說中,黑客(常常就指linus了)一般都是用自組IDE的,或者連IDE都是不需要的。有時候,我都懷疑他們不會是用行編輯器的吧。好吧,這就是個傳說。在說自制IDE之前,不妨先來看看到底IDE的本質是什麼。

寫程序的最低工具要求:

level1:說的極端點,其實只要有人就可以了,計算機都可以不需要。圖靈機就是程序,所以可以用大腦想想就行了。

level2:打孔卡那個年代,有臺機器,然後程序員用打孔卡作爲程序和數據輸入。

level3:當然,在現實中,寫程序,畢竟是希望程序要幹活的,所以計算機是需要的。

  1. 計算機(包括鍵盤和顯示器的),性能好壞不論。要是能跑程序的。
  2. 編輯器,也許是行編輯器。
  3. 最基本的彙編器,以及連接器如果需要的話。

在這個情況下,寫程序的方式就是:先用編輯器寫代碼,然後編譯執行。如果,出錯了,回去靜態的看代碼,可能需要改改代碼,或者用print大發調試。unix(1969)最初就是這麼寫出來的,(當然,後來又用C重寫了一遍。)現在有沒有呢?就我所知,一個叫os-z的個人愛好操作系統就是用x86彙編寫的。

level4:。。。。

歷史的發展:

在當下,level3應該是可能的最低要求了,其他的條件都是發展需求了。站在這樣一個點上,來看後來的寫程序方式的發展。它們都爲了一個目的,那就是更高效的寫程序。歷史大概做了如下發展:

計算機語言:從最初的敲0101,到彙編語言,再到現在的高級語言,程序語言的發展是越來越貼近人類語言,也越來越貼近人類思維(比如:OO),也越來越遠離機器硬件(比如:java,C#這樣的虛擬機語言,python,ruby這樣的解釋語言,或者是js這樣的網頁語言)。

計算機語言的庫:語言也不斷表現出一種拼包的特點,只是爲了讓語言標準庫充足,寫程序更爲方便。

計算機語言的編譯器(or解釋器):編譯器也變得越來越複雜,一方面做着更強的代碼優化,另一方面也希望給出有意義的報錯甚至糾錯。C/C++的編譯器也是種類繁多,msvc,gcc,clang,intel c++等等。

編輯器:必須不是行編輯器。基本都有代碼作色,自動縮進,代碼摺疊,查找,替換,複製,粘貼等等(這樣類似的編輯器我也寫過)。跟進一步的要求就是代碼的補全,實時的代碼錯誤提醒。

調試器:print大發,畢竟太侷限了,調試器必須是有的。單步進入,單步跳過,查看堆棧,查看變量,條件斷點等等都是一個調試器該有的。

make:誰也不想一個文件一個文件的手工編譯過去,所以make就出現了。IDE中的工程管理大致是類似的功能。

版本控制:管理代碼版本,方便多人協同工作。

建模軟件:構建程序框架模型,可能還有輸出代碼的功能。比如:UML建模軟件就可能有這功能。

重構,文檔管理等等。

IDE:本文所講的東西。它是將上面這些全部集合在一個環境中,極大方便了使用。

自制IDE:

寫程序基本上是用在編輯器裏面寫,所以IDE不管是不是品牌機都是以編輯器爲中心,然後其他的工具掛在旁邊。品牌機它可以特別製造一個編輯器,但是組裝機,就需要自己去找現成的編輯器了。現在的編輯器大致可以分爲兩類(排除notepad和word之類的編輯器)。GUI編輯器和命令行編輯器。GUI編輯器代表有notepad++(windows),utraledit(windows) , gedit(linux)。命令行編輯器代表有vim(Cross-platform),emacs(Cross-platform)。因爲,這些編輯器的目標就是編輯器,而不是IDE。所以,要想讓它們變成IDE,就需要利用它們本身的擴展。否則,就沒有辦法做了。最爲簡單比如將某個鍵盤按鍵組合定義成編譯,另一個又定義成執行。

在GUI編輯器中,以我常用的notepad++爲例,它本身自帶多種語言的着色,有簡單的代碼補全,可以將鍵盤按鍵映射到某個命令,有命令行組件,也有簡單的工程管理。可以組成一個輕量級的IDE。

在命令行編輯器中,以我正在做的vim爲例,它本身有很強的擴展能力,可以用vim,python,pearl等來擴展它。所以,爲架設複雜且高度定製的IDE打下了很好的基礎。但它的問題也是比較大的,由於,他不是天生要做IDE的,像在vim中調試代碼和補全代碼這類功能,即便是能通過插件加入到vim中,但是整合的還是不好,與品牌機還是有差距。

品牌機vs組裝機:

各有好處,具體就看使用着跟看重那些 因素了。

  1. 品牌機省心,下載了,安裝一下就可以用了,什麼該有的都有了。相比組裝機非常之費神,什麼東西都要自己去找。而且組裝機不流行,資料什麼的少得很。時間投入是個無底洞啊,我在做的時候就想砸電腦了,各種麻煩,各種問題。
  2. 品牌機他們是專業做這個的,一般來說總比業餘的要強。各種麻煩的問題,也會去提前解決,不會給用戶留麻煩。
  3. 做一件事情纔有可能把它做到最好,什麼都做那就什麼都做不好了。組裝機,可以找各種優秀的產品然後組裝在一起。但是,品牌機又不是什麼都做,它幾乎就是在做一個外殼,他爲什麼不在選擇時,選擇優秀的產品呢?
  4. 組裝機提供了個性化的機會,每個人可能需求不同,但是品牌機能夠修改的就少得多了。就像vim首推可定製。

上面說的這些對比是本質上都存在的,下面這些是現階段的差異:

  1. 品牌機比組裝機流行,哪怕都是開源,後者的支持相對要少得多,結果就是更多的麻煩,會讓更少的人去使用,也會有更少的人願意去開發。比如:vim中的代碼補全clang-complete已經1年多沒什麼更新了,代碼中存在一些問題,比如平臺間的問題,python2與python3的問題,clang的問題。又比如gdb很早就出來了,但是vim中的源代碼調試工具一直不怎麼樣。但是,各種開源IDE都是使用gdb作爲調試後端的。
  2. 各自工具可能都很優秀,但是要將其組裝在一起,未必是簡單的事情。結果未必好用。更加未必比品牌機好用。

總的來說,組裝機的唯一優勢就是可定製。品牌機可以在平均情況下取得最好,但是如果個人針對個人進行定製有可能達到更好。這也就是爲什麼現實世界是這樣的。大部分人使用品牌機,而小部分人使用組裝機,並且堅信組裝機好。(在使用vim和emacs的人中大有存在。)

而我花費大量時間來做將vim變成IDE,也就是希望做一個我自己的定製,能讓我自己喜歡,比如我希望界面簡潔,但是不喜歡功能殘缺。可是,我遇到了很多的問題,雖然,到現在已經實現了代碼補全和調試這兩個關鍵功能。但是,實現結果是差強人意的,與品牌機的功能還有差距,功能整合的不太好。原本希望是之後基本只用這個平臺,但現在看來,這也只能是其中一個選項。具體如何將vim變成IDE,會有後續博文出現。

後記:

雖然,我也曾經用過各種各樣的IDE,但直到最近才幡然醒悟,原來我可以不用VS寫windows程序的。之前,總是有種慣性,寫windows程序一定是用VS/VC++的。最近想來,就算是我要用windows API,也不見着非要用VS,單純的MingGW也可以啊。用VC寫代碼,有時候都搞不清楚這到底是C/C++標準裏面的還是VC創造的,平白無故的失去了平臺間的可移植性。IDE的本質就是如此,完全沒有必要死抱着哪一個。

參考:

維基百科。

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章