[Windows] 求生手冊:Windows 在程式開發上的各個面向

【分享文章】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    前言

    在上一篇文章中,我們簡述了 Windows 在程式開發上的不足之處,相信讀者已經有一些初步的概念。在本篇文章中,我們會就程式開發的各個面向,探討 Windows 不足之處,以及提供相對應的解決方案。

    由於本篇是概論的性質,不會深入講解各個面向,對於有經驗的讀者,可依照本篇的內容自行尋找解決方案;若不熟悉這些內容,也不需要擔心,在後續的文章會陸續介紹。

    對類 Unix 系統使用者來說,在類 Unix 系統下,有許多不同面向的工具,包括:

    • 命令列環境
    • 命令列工具
    • 編輯器或 IDE
    • 腳本語言
    • 編譯語言

    而在 Windows 中,對於工具的思維不同,例如,注重圖形介面而忽視命令列,使得類 Unix 系統使用者覺得綁手綁腳。不過,經由許多人的努力,在 Windows 上,也有不少解決方案可採用,使得在 Windows 上撰寫程式較先前更容易。

    Windows 10 加入了 Linux 子系統,這個專案仍在持續進化中,不知道未來的支援度如何。但 Windows 上的 Linux 子系統只限定於 Windows 10 可用,其他版本的 Windows 系統沒有這項好康。我們會分門別類介紹目前可行的專案,大部分的方案不限於 Windows 10。我們盡量以具有跨平台思維的工具為主,供各位讀者參考。

    命令列環境 (Console Environment)

    Windows 內建的命令列環境有兩種,一種是原先的 DOS 模擬環境,變成視窗化的終端機程式,功能相對陽春。另為一個則是 PowerShell,此終端機環境較原先的 DOS 環境有許多改良,增加許多功能。

    然而,不是所有版本的 Windows 系統都支援 PowerShell,而且不同版本的 Windows 系統所支援的 PowerShell 版本相異。故 PowerShell 在 Windows 間的可攜性不是很好。

    所幸,在 Windows 下有一些第三方終端機環境,提供類似類 Unix 系統的操作性。在 Windows 下最知名的 GNU/Linux 模擬環境是 Cygwin,這套軟體,提供一套類似於 GNU/Linux 的命令列環境,而且附帶相當多的套件。

    不過,原來的 Cygwin 不太親民,需要調校一陣子後才會比較好用,為免浪費時間在調整設定上,建議安裝 Babun,這是一套調校過的 Cygwin 環境,幾乎裝好即可立即使用。

    除了前述的 Babun/Cygwin,Cmder 是一套調校過的 Windows 終端機軟體。和 Babun/Cygwin 相異的點在於 Cmder 跑的是原生的 Windows 終端機環境,而非 GNU/Linux 子系統。

    Cmder 內部使用 ConEmu,但又加上的其他第三方軟體,幾乎不用調整就可以直接使用,使用起來的手感也相當接近類 Unix 系統的終端機環境。Babun/Cygwin 和 Cmder 的取向不同,兩者可以同時安裝,視自身需求切換使用。

    由於 Windows 的命令列環境整合不佳,我們在從事不同任務時往往要切換不同的命令列環境,無法在單一命令列環境完成所有的任務。這和 GNU/Linux 的命令列環境差異較大。

    命令列工具 (Console Utilities)

    由於 Windows 系統對命令列環境不友善,連帶地 Windows 程式人也很少開發命令列程式,惡化了一般使用者對命令列的印象。Babun/Cygwin 除了移植命令列環境以外,也帶著許多命令列工具,如果有需要使用一些來自自由軟體的工具,就可以在 Babun/Cygwin 中使用這些工具。

    我們先前提到的 Cmder 除了提供改良過的命令列環境,也加入一些來自於類 Unix 系統的命令列工具。透過 Cmder 開發團隊的調校,使用 Cmder 的手感已經相當接近類 Unix 系統的命令列環境了,筆者現在甚少開 Babun/Cygwin 來用。

    有時候,我們仍然需要使用 Windows 的原生命令列環境,而非 GNU/Linux 子系統。這時候,可以試試看 GnuWin32 或是 UnxUtils,這些專案移植了許多命令列工具到 Windows 下,安裝後即可直接使用。上一節介紹的 Cmder 也附帶了一些常見的類 Unix 平台命令列工具。

    編輯器 (Editor)

    由於 Windows 自帶的記事本相當陽春,對於撰寫程式碼和命令稿幾乎沒有幫助,通常會另外安裝另一個程式編輯器。除了使用 Cygwin 環境下的編輯器外,以下是數個可在 Windows 原生環境下使用的編輯器:

    • Atom
    • Sublime Text
    • Visual Studio Code (VSCode)
    • Notepad++ (Windows only)
    • Vim
    • Emacs

    其中,Vim 是在 Windows 終端機下表現最好的編輯器,筆者之前有在用 Vim 時,Windows 和 GNU/Linux 都可以共用同一套 Vim 設定檔,相當方便;而 Emacs 雖然也支援終端機,但受限於其設計,使用起來不若在 GNU/Linux 上方便。

    由於 Vim 和 Emacs 相對較難上手,如果使用終端機的頻率沒有很高,可自行試用其他的圖形化編輯器。

    如果不需要在終端機環境下使用編譯器,目前 VSCode 應該是最好的選擇。因為 VSCode 可免費取得、是自由軟體、跨平台、功能豐富、外掛多,而且 VSCode 的開發團隊仍持續活躍開發 VSCode。

    整合式開發環境 (IDE)

    傳統的 Unix 文化著重於結合各種終端機下的工具,而 Windows 文化在早期就會使用整合式開發環境 (IDE, integrated development environment)。現在絕大部分的桌面用作業系統都有圖形介面,包括 GNU/Linux 或 FreeBSD 等類 Unix 系統在內,倒也不一定要堅持只用終端機下的工具。

    近幾年來出現數個跨平台的 IDE,其中一些例子包括:

    • Code::Block (C、C++、Fortran)
    • KDevelop (C、C++、JavaScript 等)
    • IntelliJ IDEA (多種語言,商業軟體)
    • CLion (C 或 C++,商業軟體)
    • Komodo IDE (多種語言,商業軟體)
    • Android Studio (Android)
    • RStudio (R 語言)

    由於 IDE 的介面通常較複雜,要很有效率地使用各個 IDE 往往要一段時間才能上手,使用跨平台 IDE 的好處在於減少學習新軟體所需的時間。

    如果想讓自己的專案在不同編輯器和 IDE 間移動,最好不要依賴 IDE 的專案管理工具,而使用一些獨立於 IDE 或編輯器的專案管理軟體。像是 Node.js 的 NPM,只要有 Node.js 運行環境即可使用,不會被特定 IDE 或編輯器綁住。

    腳本語言 (Scripting Languages)

    通常類 Unix 系統使用者或多或少會使用某種腳本語言協助自己工作,如果是在 Cygwin 環境下,大抵下 GNU/Linux 下的命令稿也可以拿來使用。如果需要在 Windows 原生環境下使用腳本語言,則需另行安裝相關軟體。

    以下是各個常見的腳本語言的 Windows 版本:

    • Perl

      • StrawberryPerl:接近 Unix-like 系統下的使用經驗
      • ActivePerl:商業版本,可免費使用,附有自己的套件管理程式
    • Python

      • CPython:官方所提供的 Windows 版本 Python
      • ActivePython:商業版本,可免費使用,附有自己的套件管理程式
      • Anaconda:商業版本,可免費使用,附有自己的環境和套件管理程式
    • Ruby

      • RubyInstaller:將 Ruby 包裝成容易安裝的形式
      • ActiveRuby (beta):商業版本,可免費使用,目前仍在 beta 階段

    另外,如果有一些 Java 的基礎,也可使用 Groovy 做為自己的腳本語言。Groovy 直接在 Java 平台上跑,比起前述以 C 為基礎的語言易於跨平台使用,但 Groovy 的教學資料較少。

    Go 語言 (golang) 雖然不是腳本語言,但其語法相對簡單,可以做為腳本語言的替代品。而且 Go 語言是編譯語言,想發佈程式給他人使用時,可以直接發布執行檔。

    在 Windows 上使用腳本語言時,如果只使用標準函式庫的功能,通常不會有什麼大問題;但是,如果使用到第三方函式庫時,則有時候會無法安裝,尤其是一些以 C 或 C++ 撰寫的延伸模組,這時候,需要 C 或 C++ 編譯器及相關函式庫。

    如果綜合考量資源豐富度和在 Windows 上的易用性,則 Python 或 Golang 是目前較佳的選擇。

    編譯語言 (Compiled Languages)

    對 C 或 C++ 來說,Windows 是一個不太友善的環境,主要的問題是對於 Autotools 等編譯工具不相容,以及缺乏套件管理軟體。近年來,微軟推出 vcpkg 專案,這個專案是搭配 Visual Studio 用的 C 或 C++ 套件管理軟體,目前這個專案還在發展中,可以持續關注該專案後續的情形。

    MinGW 專案將 GCC 工具鏈及編譯環境移植到 Windows 上;不過,原來的 MinGW 較不親和,建議採用 MSYS2,該專案將 Arch Linux 的套件管理程式 pacman 及一些常用函式庫移植到 Windows 上,安裝起來相對容易。

    另一個類似的專案是 Win-builds,該專案將一些常用軟體包裝成一個易用的安裝檔,不過,缺乏 MSYS2 的套件管理功能。

    如果有時想要撰寫一些小型程式,又覺得 C 或 C++ 不易撰寫,可以考慮學習 Golang,這個新興語言比 C 或 C++ 相對易學易寫,有部分腳本語言的特質,又可以很容易地編譯出不同系統使用的執行檔,有興趣的讀者可自行學習。筆者在這裡提供 Golang 的教學,需要的讀者可以前往觀看。

    虛擬機器

    除了前述的解決方案,我們也可以使用完整的虛擬機器 (virutal machine),建立一個獨立的 GNU/Linux 或 FreeBSD 環境,在某些任務上,會比前述的其他方案都來得好。

    不過,本書的目標是找尋適用於 Windows 上的方案,使用虛擬機器則不是本書討論的範圍。在虛擬機器上安裝 GNU/Linux 系統沒有驅動程式的問題,會比在實體機器上安裝來得簡單,有需要的讀者可自行嘗試。

    結語

    在本文中,我們簡單地介紹一些可在 Windows 上可用的程式開發相關工具,有興趣的讀者,可以自行選擇所需的專案。透過本章介紹的工具,可使 Windows 上的程式開發更自在。

    【分享文章】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤網站】
    Facebook Twitter Plurk
    臉書討論區
    【支持本站】
    Buy me a coffeeBuy me a coffee
    標籤: INTRO, WINDOWS