# 為什么選擇Atom? #
來源:https://github.com/atom-china/manual
這個世界上有那么多種編輯器,為什么你要花時間學習和使用 Atom 呢?
雖然 Sublime 和 TextMate 之類的編輯器已經非常好用了,但它們僅提供了很有限的拓展性。而在另一個極端,Emacs 和 Vim 提供了靈活的拓展性,但它們并不是很友好,需要使用專用的編程語言來配置和拓展。
我們覺得我們可以做得更好。我們的目標是在保證易用性的同時提供充分的可拓展性(hackability):這個編輯器會受到第一天學習編程的新生歡迎,而且當他們成長為編程專家時也難以割舍。
當我們使用 Atom 來開發 Atom 的時候,隨著它的逐漸完善,我們愈發覺得已經離不開它了。從表面上來看,Atom 是一個能滿足你的期待的,現代化的桌面文本編輯器,而在表面之下,這是一個值得你去一同完善的系統。
## Atom 的核心
Web 技術雖然有其缺陷,但經過二十年的發展,Web 已經逐漸成長為了一個強大的具有活力的平臺。所以當我們計劃寫一個自用的可拓展的文本編輯器時,Web 技術顯然是一個好的選擇,但首先我們需要擺脫來自 Web 的限制。
### 混合本地代碼與 Web 技術
Web 瀏覽器很適合用來瀏覽網頁,但寫代碼是一種需要可靠的工具的專業活動。更重要的是,瀏覽器出于安全的考慮,嚴格限制了對本地系統的訪問,但對一個文本編輯器而言,不能向本地系統寫入文件是不可接受的。
因此,我們沒有把 Atom 構建為一個傳統的 Web 應用,Atom 是一個專門被設計用作文本編輯器,而不是網頁瀏覽器的 Chromium 定制版。Atom 的每一個窗口實際上都是一個本地渲染的網頁。
所有來自 Node.js 可用的 API 在 Atom 窗口的 JavaScript 中同樣可用,這種結合帶來了一種獨一無二的開發體驗。
因為一切都是本地的,你不需要將靜態資源打包、不需要關注腳本的異步加載,如果你希望加載一些代碼。只需要在文件的最頂部 `require` 它即可,Node.js 的模塊系統允許你將一個系統分割為小的、專注于某一功能的包。
### JavaScript 與 C++ 的結合
與原生代碼交互也很簡單。例如,你基于 Oniguruma 正則引擎開發了一個用來提供對 TextMate 語法識別的支持。在瀏覽器里,你可能需要使用 NaCl 或 Esprima, 而在 Node 里這個過程變得非常簡單。
在 Node.js 的 API 之外,我們還提供了一些 API 例如使用系統的對話框、使用菜單欄和右鍵菜單、操縱窗口尺寸等等。
### Web 技術:最有趣的部分
另一個好消息就是當你為 Atom 編寫代碼時,這些代碼一定會被允許在最新版本的 Chromium 中。這意味著你可以無視與瀏覽器兼容性有關的黑科技,使用全部的最新的 Web 功能。
例如,Atom 的工作區和窗格都是基于 flexbox 來進行布局的。這是一項剛剛出現的技術,從我們使用它之后也發生了很多變化,但不要緊,因為它工作得很好。
我們確信將 Atom 構建在 Web 技術之上是一個好的選擇,因為整個行業都在推動著 Web 技術的發展。原生UI技術不斷產生又不斷淘汰,而 Web 是一個每年都變得更加強大和普及的標準。我們對于深入探索這一強大的技術感到無比興奮。
## 一個開源的文本編輯器
GitHub 的目標是幫助大家構建更好的軟件,而 Atom 則是實現這一目標的重要補充。Atom 是一項長期的投資,GitHub 會持續投入開發力量來推動它的發展。但我們也意識到不能讓它受限于我們的能力,就像之所以 Emacs 和 Vim 在過去的三十年間被廣泛使用,是因為只有開源,才能構建一個持久的、有活力的文本編輯器社區。
整個 Atom 編輯器都是免費且開源的,你可以在 <https://github.com/atom> 這個組織下找到它。