nota.lukhnos.org

學校不教的工作技能之一:使用 IDE 調整 compiler 參數

事實上不要說是學校不教,絕對多數教你寫程式的書,也不會教這個技能。越是低階的語言(例如 C)這問題就越大。

寫程式是解決問題的主體,但是要會調 compiler 參數才能把事情完成。

我第一個會用的 C compiler 及 IDE 是 Turbo C。即使是 16 位元的 PC 上面,這種不算業界級的工具(當時我認識的很多人甚至歧視 Turbo C 的使用者,認為要用 Microsoft C 才是正道),都至少有 10 個主要參數是隨便一個 project 會調整到的。當時經常要做的決定有:要用哪種定址模式 (small, medium, large, huge)、字元要不要當成 unsigned char、要不要調整字串常數的位置安排、要不要做 struct 的 alignment 等等。

雖然來到了 64 位元的時代,那些參數以及背後的基本精神其實改變得不大。當然要決定跟能改變的參數就更多了,例如 exception handling 的作法、記憶體管理策略、要不要提出安全性警告、symbol visibility、最佳化選項等等。任何一個主要平台的 C compiler 連同 toolchain (linker, resource compiler, manifest tool, code signing tool) 大概隨時都有 100 個參數可以調整,而且每個專案仍然大概有機會調整大約一打左右的參數,因此對這些參數有個概括性的掌握,就變得非常重要。

我覺得困難的地方在於,這東西要怎麼教導、傳授給別人。說來調整參數跟使用 IDE 一樣可能都得靠經驗的累積。另一方面好比像 iPhone SDK 這樣的開發工具,本身就以極高的速度在演化,而且開發工具甚至仍然每季都有一點面貌的不同,如果因此而必須花很多時間在解決使用 IDE 與調整參數,對專案的進行可能是很不利的。

目前能想到的粗淺建議是,任何有心投入新平台開發的人,一定要親自建立至少五六個研習用的專案(我稱之為 study project),而且類型或針對的發佈環境要不太一樣,才能夠摸清楚一個梗概。這東西只靠當 code contributor 參與計畫或是跟隨別人已經建立好的 build system 是不行的。好比說,ObjectiveFlickr 論壇上還有我私下就經常收到來信詢問怎麼把 OF 加到他們的軟體專案,幾乎佔了所有問題的 3/4 ,但麻煩的地方就在於這東西如果沒有對 Xcode 以及 gcc 變數有基礎掌握,根本難以用言語指導。

最後是一點個人經驗。2007 年的時候因為一個專案的需要,我開始寫一點 Windows 的程式。在此之前我寫了幾年的 Mac 程式,而且很多年沒再使用過微軟的開發工具。這再一次說明了只會寫程式是不足以成事的──如果沒辦法在 Windows 上使用正確的開發工具,再多的 code 也無法解決專案的問題。我的確用上述的方法,自己設計了一個不太正式也不嚴格的學習計畫,但還是盡可能把所有 Visual Studio C++ 環境中所提供的專案範本給都開來建立一遍,並了解每一個範本建立出來的 solution 以及 project file 的設定差距。當然,我還有一點 Windows 軟體開發的殘餘記憶,憑著記憶大概知道 EXE/DLL 的專案類型和設定有別,Windows 也有像使用靜態連結程式庫或是 CRT DLL 程式庫的選項。有了這些 study project 的幫助,我才得以掌握 Visual Studio 說來並不成功的設定功能(C# 的 IDE 一定程度上改善了不少 C++ IDE 的缺陷,可惜我負責的部份用不上 C#)。只是,我還是不知道要怎麼把這大約 100 多個選項(其中我必須調整的約有 20 多個)確實代表的意義跟工作方式,有系統地傳達給其他人了解。