2013年9月23日 星期一

C語言程式設計閒聊(0)程式開發環境-Windows下開發環境閒聊

Windows-based environment

有鑑於大部分學生都只會用Windows-based的開發環境,所以通常助教會介紹Windows的開發環境。我是覺得基於容易上手這件事情教Windows下的開發環境也不是不行啦,但是某些老師限定使用Windows VC開發環境、甚至使用Windows only(或甚至是VC only)的一些函式庫其實是不太妥的(甚至是DOS時代的conio.h),當附錄談談就算了,如果在教學時使用這些限定OS的函式,會導致學生後來使用其他編譯器和OS時會有很大的問題,也搞不清楚哪些函式是windows限定,我個人並不覺得這是一個好的教學方式...。當然在我自己擔任助教的課程當中,我們和我老闆的共識都是,要都盡量避免此種狀況的發生,盡量不談OS-dependent的東西。

由於Windows下的CLI(Command Line Interface)功能十分的薄弱,CLI還停留在MS-DOS年代的能力,雖然後來MS有增加了PowerShell,但是似乎也仍是罕有人用,通常需要加上如Cygwin之類的平台來模擬「類UNIX環境」才會有比較好的CLI介面。

也因此,大多數人在討論Windows開發環境時,大多數時候談的是圖形化的IDE(整合式開發環境),但其實配合Cygwin的話,亦可使用編輯器+編譯器的開發方式,我自己擔任助教期間也遇過有人使用此種開發環境,其實也是不錯啦。但如果問我看法的話,我會覺得如果習慣CLI的人,直接來投奔我們泛UNIX OS就好啦XD

下面就我自己曾經接觸過或看過有人使用過的環境給一點個人的心得評價
  1. IDE
    • Code::Block
      • 這是我目前推薦在Windows上使用的IDE之一,他是GPLv3授權的開源軟體,而且是跨平台的,在Windows/Mac/Linux上都可使用,作為教學上推廣給學生使用的IDE,教一個跨平台的IDE(而且計中電腦自帶Code::Block)當然是比較推薦的
      • 比較麻煩的是他的變數、函式自動補完相較起其他IDE比較起來比較弱,如果可以的話我自己會建議在撰寫程式碼的時候使用Sublime等自動補完很強大的編輯器,再透過Code::Block來編譯和除錯
      • Code::Block使用心得文[待補]
    • Dev C++
      • Dev C++其實是一個令人又愛又恨的IDE,他在2006年我剛念大學的時候很潮,大家「私底下」(等一下會解釋為什麼是私底下XD)都用Dev C++,但是他2005年之後就都沒有更新,版本一直停留在4.9.9.2,裡面編譯器則是停留在gcc 3.4.2,如此舊的gcc版本會使得許多新的編譯器功能無法支援。
        此外,許多當代IDE必備的功能:自動補完、自動排版、除錯工具整合、監控工具整合等等,不是殘缺不全就是沒有支援,在八年(遺毒)沒有更新的狀況之下,近年來其實不太推薦使用Dev C++,甚至採用Dev C++還會成為網路戰文的戰點(詳參:李大師您多久沒寫程式了 ? 一百個你不應該繼續用Dev C++的理由
      • 但是,自2011年開始,有位神手Orwell大大(詳參:Orwell Dev-C++)將舊有的Dev C++自行fork出一條branch,將內部的gcc、gdb升級,並加上了當代IDE或程式編輯器必備的自動補完與自動排版功能,並且一路到今年2013都還有在維護,故其實我個人蠻推薦Orwell Dev-C++的,去年我也有推薦學生使用。
      • 但是因為歷史的包袱,許多人仍然會不小心載到舊的Dev-C++ 4.9.9.2,而非新的Orwell Dev-C++,故實際Demo時仍會出現一些遠古的問題...
      • 總而言之,如果你是自己要使用的話,Orwell Dev-C++是個蠻不錯的現代IDE,但是如果你是助教要教學用的話,你可能會遇到有學生還是載舊的Dev C++過來問你問題......
      • DevC++使用心得文[待補]
    • Visual Studio
      • VS其實我有用過,但是其實我除非萬不得已不然不會使用他,原因是他綁太多Windows only的東西,而且雖然功能上相當的完善,絕對符合我評斷現代IDE的標準,但是因為我自己大多數開發的環境不是在Windows上,故我沒有花太多時間研究VS。
      • 作為初學時使用的開發平台的話,因為他基本上都要使用專案形式開啟,故在能編譯出第一個程式所需要調教的設定比Code::Block和Orwell Dev-C++比較起來多得很多,初學者用起來會比較辛苦。但作為一個IDE的完整性來說,卻是比Code::Block和Orwell Dev-C++的完整,我也不會說他不好啦,只是我自己不太愛就是了
    • Turbo C 
      • 這個年輕人應該都沒聽過才對,因為他是DOS時代的IDE(使用影片參考:http://www.youtube.com/watch?v=TfvvpS1eIMQ
      • 但是我大一時候老師卻是叫我們用這個= =,我是2006年修的課不是1996年耶
      • 所以才會有大家私底下是用Dev C++之說,因為上課時候官方是說用Turbo C
      • 雖然說開發環境只是工具,其實用的順手都沒差,但是Turbo C不僅沒有當代IDE該有的自動補完、自動排版、當代除錯器、監控器,更大的問題是,他必須要到DOS模式下開啟,並且是WTF的16位元編譯環境!!!
      • 也就是說,我大一記得的int大小是32767~-32768,這個是16-bit OS下的值,在現在主流的32-bit上早就不是這個範圍了,現在連iPhone都上64bit了,是有多少人在16-bit的OS下開發啦(掀桌)
      • 然後聽說上了Win7之後,因為把DOS模擬器拿掉了,據說Turbo C變得更難裝起來了(茶),大家可以與時俱進嗎...... 該淘汰的東西就該淘汰了~
  2. 編輯器+編譯器
    • 編輯器
      • 記事本(Notepad)
        • 除非走投無路,不然別用。
        • 他連幫程式碼關鍵字上色都不行,這就別拿出來丟人現眼了吧...
      • Notepad++
        • 開源自由軟體
        • 看Code的時候很好用,因為他會幫程式碼上色
        • 他可以列印XD(Sublime不知道為什麼沒有列印功能)
        • 有自動排版功能
        • 唯一的問題是似乎沒有自動補完
      • UltraEdit
        • 付費軟體
        • 在沒有Notepad++以前,他是看程式碼時的好幫手
        • 現在在Notepad++出來後,基本上較少看到有人在用(但我以前年輕時候用過)
      • Sublime
        • 付費軟體(但有免費版)
        • 跨平台軟體(Windows/Mac/Linux)
        • 有相當好的自動排版與自動補完功能
        • 有相當好的套件管理與插件功能
        • 插件自由度高,可自行修改,可把自動補完需要補的內容依照自己的需求修正
        • 他沒有列印功能(我也很想知道他為什麼不做...)
        • (參:我的Sublime使用經驗[待補]
        • 在視窗環境上是相當不錯的開發環境,我除了用vim以外,另外的開發環境就是用Sublime
      • vim
        • vim是源自泛UNIX平台下的編輯器,主要操控以鍵盤操控為主
        • 在Windows上可以用gVim,亦可以用Cygwin裡面的vim
        • 本體輕巧,可自由加裝套件,加裝套件之後可擁有相當強大的變數自動補完能力(參:如何改裝vim成為C語言編譯環境[待補]
        • 學習門檻高
        • 雖然一開始看到別人用vim會覺得很奇怪為什麼有滑鼠不用一直用鍵盤操控,但是對vim派來說,因為寫程式本身就是大量使用鍵盤的工作,如果中間為了操控而切換到滑鼠,反而會中斷你的思維,而且手勢很不順。
        • 所以對vim派的人來說,大部分寫程式的時間手都不會離開鍵盤,因為包含打字和環境操控都是用鍵盤處理,所以速度會快很多
        • 一直用鍵盤下指令看起來很威XD
        • 會發現你和你的前輩都是同樣用vim寫程式會覺得很溫馨
        • 如果你在Windows下vim用熟了之後就可以準備投靠Mac/Linux等泛UNIX環境了
      • emacs
        • 我沒用過他(因為我是vim派XD),但我當助教的時候有學生在用,而且是Cygwin配emacs
        • 雖然我是vim派,但是我覺得用emacs或vim都ok啊,這兩者在使用上我覺得沒有什麼真正影響程式開發環境的部份
        • 只是聽說學習門檻也不比vim低就是了 
    • 編譯器 
      • gcc
        • 裝Cygwin的時候通常會自帶,基本上對入門的來說只要知道編譯指令怎麼下、如何執行你寫的檔案就好了
        • 只可惜他現在是GPLv3
      • LLVM
        • 其實我沒在Windows上用過LLVM  orz
        • 我怎麼記得LLVM到Windows上的porting好像很困難,好像還在弄的樣子


    接下來的文章,將談在其他泛UNIX平台上的開發環境,因為我自己現在幾乎沒有使用Windows,所以接下來的文章才是我自己事實上習慣使用的環境。

    沒有留言:

    張貼留言