【在主畫面加入捷徑】
       
【選擇語系】
繁中 简中

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

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
【贊助商連結】

    前言

    在上一篇文章中,我們簡述了 Windows 在程式開發上的不足之處,相信讀者已經有一些初步的概念。在本篇文章中,我們會就程式開發的各個面向,探討 Windows 不足之處,以及提供相對應的解決方案。由於本篇是概論的性質,不會深入講解各個面向,對於有經驗的讀者,可依照本篇的內容自行尋找解決方案;若不熟悉這些內容,也不需要擔心,在後續的文章會陸續介紹。

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

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

    而在 Windows 中,對於工具的思維不同,例如,注重圖形介面而忽視命令列,使得類 Unix 系統使用者覺得綁手綁腳。不過,經由許多人的努力,在 Windows 上,也有不少解決方案可採用,使得在 Windows 上撰寫程式較先前更容易。一個新的消息是:Windows 10 會有 Bash 環境,然而,這個專案仍在持續進化中,不知道未來的支援度如何;而且,只限定於 Windows 10 可用,其他版本的 Windows 沒有這項好康;由於這個專案才剛起步,不確定 Microsoft 願意維護這個專案多久。我們會分門別類介紹目前可行的專案,這些方案,盡量以跨平台思維的工具為主,供各位讀者參考。

    命令列環境 (Console Environment)

    在 Windows 上的命令列環境有兩種,一種是原先的 DOS 模擬環境,只是變成一個視窗化的終端機程式,功能相對陽春;另為一個則是 PowerShell,此終端機環境較原先的 DOS 環境有一些改良,增加許多功能,但不是所有版本的 Windows 系統都支援 PowerShell。

    所幸,在 Windows 下有一些第三方終端機環境,提供類似類 Unix 系統的操作性。在 Windows 下最知名的 GNU/Linux 模擬環境是 Cygwin,這套軟體,提供一套類似於 GNU/Linux 的 shell 環境,而且附帶相當多的套件。不過,原來的 Cygwin 不太親民,通常需要調校一陣子後才會比較好用,為免浪費時間在調整設定上,建議安裝 Babun,這是一套調校過的 Cygwin 環境,幾乎裝好即可立即使用。

    除了前述的 Babun/Cygwin,Cmder 是一套調校過的 Windows 終端機軟體。和 Babun/Cygwin 相異的點在於 Cmder 跑的是原生的 Windows 終端機環境,而非 GNU/Linux 子系統。Cmder 內部使用 ConEmu,但又加上的其他第三方軟體,幾乎不用調整就可以直接使用,使用起來的手感也相當接近類 Unix 系統的終端機環境。Babun/Cygwin 和 Cmder 的取向不同,兩者可以同時安裝,視自身需求切換使用。

    命令列工具 (Console Utilities)

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

    有時候,我們仍然需要使用 Windows 的原生命令列這時候,可以試試看 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 相對較難上手,如果使用終端機的頻率沒有很高,可自行試用其他的圖形化編輯器。

    整合式開發環境 (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 的好處在於減少學習新軟體所需的時間。

    腳本語言 (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 是目前較佳的選擇。

    編譯語言 (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++ 不易撰寫,可以考慮學習 Go 語言,這個新興語言比 C 或 C++ 相對易學易寫,有部分腳本語言的特質,又可以很容易地編譯出不同系統使用的執行檔,有興趣的讀者可自行學習。筆者在這裡提供 Go 語言的教學,需要的讀者可以前往觀看。

    虛擬機器

    除了前述的解決方案,我們也可以使用完整的虛擬機器 (virutal machine),建立一個獨立的 GNU/Linux 或 FreeBSD 環境,在某些任務上,會比前述的其他方案都來得好。不過,本書的目標是找尋適用於 Windows 上的方案,使用虛擬機器則不是本書討論的範圍。在虛擬機器上安裝 GNU/Linux 系統沒有驅動程式的問題,會比在實體機器上安裝來得簡單,有需要的讀者可自行嘗試。

    結語

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

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【贊助商連結】
    標籤: INTRO, WINDOWS
    【贊助商連結】
    【分類瀏覽】