[王垠系列]編輯器與IDE

無謂的編輯器戰(zhàn)爭

很多人都喜歡爭論哪個編輯器是最好的灵临。其中最大的爭論莫過于 Emacs 與 vi 之爭。vi 的支持者喜歡說:“看 vi 打起字來多快,手指完全不離鍵盤杆故,連方向鍵都可以不用训挡“闹瑁”Emacs 的支持者往往對此不屑一顧,說:“打字再快又有什么用澜薄。我在 Emacs 里面按一個鍵为肮,等于你在 vi 里面按幾十個鍵》艟”

其實還有另外一幫人颊艳,這些人喜歡說:“對于 Emacs 與 vi 之爭,我的答案是 {jEdit忘分, Geany, TextMate, Sublime...}”這些人厭倦了 Emacs 的無休止的配置和 bug棋枕,也厭倦了 vi 的盲目求快和麻煩的模式切換,所以他們選擇了另外的更加簡單的解決方案妒峦。

臨時解決方案 - IDE

那么我對此的答案是什么呢重斑?在目前的情況下,我對程序編輯的臨時答案是:IDE肯骇。

寫程序的時候窥浪,我通常根據(jù)語言來選擇最能“理解”那種語言的“IDE”(比如 Visual Studio, Eclipse, IntelliJ IDEA 等),而不是一種通用的“文本編輯器”(比如 Emacs, vi, jEdit, ...)笛丙。這是因為“文本編輯器”這種東西一般都不真正的理解程序語言漾脂。很多 Emacs 和 vi 的用戶以為用 etags 和 ctags 這樣的工具就能讓他們“跳轉(zhuǎn)到定義”,然而這些 tags 工具其實只是對程序的“文本”做一些愚蠢的正則表達式匹配胚鸯。它們根本沒有對程序進行 parse骨稿,所以其實只是在進行一些“瞎猜”。簡單的函數(shù)定義它們也許能猜對位置姜钳,但是對于有重名的定義坦冠,或者局部變量的時候,它們就力不從心了哥桥。

很多人對 IDE 有偏見辙浑,因為他們認為這些工具讓編程變得“傻瓜化”了,他們覺得寫程序就是應(yīng)該“困難”泰讽,所以他們眼看著免費的 IDE 也不試一下例衍。有些人寫 Java 都用 Emacs 或者 vi昔期,而不是 Eclipse 或者 IntelliJ》鹦可是這些人錯了硼一。他們沒有意識到 IDE 里面其實蘊含了比普通文本編輯器高級很多的技術(shù)。這些 IDE 會對程序文本進行真正的 parse梦抢,之后才開始分析里面的結(jié)構(gòu)般贼。它們的“跳轉(zhuǎn)到定義”一般都是很精確的跳轉(zhuǎn),而不是像文本編輯器那樣瞎猜奥吩。

這種針對程序語言的操作可以大大提高人們的思維效率哼蛆,它讓程序員的頭腦從瑣碎的細節(jié)里面解脫出來,所以他們能夠更加專注于程序本身的語義和算法霞赫,這樣他們能寫出更加優(yōu)美和可靠的程序腮介。這就是我用 Eclipse 寫 Java 程序的時候相對于 Emacs 的感覺。我感覺到自己的“心靈之眼”能夠“看見”程序背后所表現(xiàn)的“模型”端衰,而不只是看到程序的文本和細節(jié)叠洗。所以,我經(jīng)常發(fā)現(xiàn)自己的頭腦里面能夠同時看到整個程序旅东,而不只是它的一部分灭抑。我的代碼比很多人的都要短很多也很有很大部分是這個原因,因為我使用的工具可以讓我在相同的時間之內(nèi)抵代,對代碼進行比別人多很多次的結(jié)構(gòu)轉(zhuǎn)換腾节,所以我往往能夠把程序變成其他人想象不到的樣子。

對于 Lisp 和 Scheme荤牍,Emacs 可以算是一個 IDE案腺。Emacs 對于 elisp 當(dāng)然是最友好的了,它的 Slime 模式用來編輯 Common Lisp 也相當(dāng)不錯参淫。然而對于任何其它語言救湖,Emacs 基本上都是門外漢愧杯。我大部分時間在 Emacs 里面是在寫一些超級短小的 Scheme 代碼涎才,我有自己的一個簡單的配置方案。雖然談不上是 IDE力九,Emacs 編輯 Scheme 確實比其它編輯器方便耍铜。R. Kent Dybvig 寫 Chez Scheme 居然用的是 vi,但是我并不覺得他的編程效率比我高跌前。我的代碼很多時候比他的還要干凈利落棕兼,一部分原因就是因為我使用的 ParEdit mode 能讓我非常高效的轉(zhuǎn)換代碼的“形狀”楼肪。

當(dāng)要寫 Java 的時候唤崭,我一般都用 Eclipse溪烤。最近寫 C++ 比較多,C++ 的最好的 IDE 當(dāng)然是 Visual Studio踩窖。可惜的是 VS 沒有 Linux 的版本且叁,所以就拿 Eclipse 湊合用著油讯,感覺還比較順手。個別情況 Eclipse “跳轉(zhuǎn)定義”到一些完全不相關(guān)的地方田弥,對于 C++ 的 refactor 實現(xiàn)也很差涛酗,除了最簡單的一些情況(比如局部變量重命名),其它時候幾乎完全不可用偷厦。當(dāng)然 Eclipse 遇到的這些困難商叹,其實都來自于 C++ 語言本身的糟糕設(shè)計。

終極解決方案 - 結(jié)構(gòu)化編輯器

想要設(shè)計一個 IDE只泼,可以支持所有的程序語言剖笙,這貌似一個不大可能的事情,但是其實沒有那么難请唱。有一種叫做“結(jié)構(gòu)化編輯器”的東西枯途,我覺得它可能就是未來編程的終極解決方案。

跟普通的 IDE 不同籍滴,這種編輯器可以讓你直接編輯程序的 AST 結(jié)構(gòu)酪夷,而不是停留于文本。每一個界面上的“操作”孽惰,對應(yīng)的是一個對 AST 結(jié)構(gòu)的轉(zhuǎn)換晚岭,而不是對文本字符的“編輯”。這種 AST 的變化勋功,隨之引起屏幕上顯示的變化坦报,就像是變化后的 AST 被“pretty print”出來一樣。這些編輯器能夠直接把程序語言保存為結(jié)構(gòu)化的數(shù)據(jù)(比如 S表達式狂鞋,XML 或者 JSON)片择,到時候直接通過對 S表達式,XML 或者 JSON 的簡單的“解碼”骚揍,而不需要針對不同的程序語言進行不同的 parse字管。這樣的編輯器,可以很容易的擴展到任何語言信不,并且提供很多人都想象不到的強大功能嘲叔。這對于編程工具來說將是一個革命性的變化。

已經(jīng)有人設(shè)計了這樣一種編輯器的模型抽活,并且設(shè)計的相當(dāng)不錯硫戈。你可以參考一下這個結(jié)構(gòu)化編輯器,它包含一些 Visual Studio 和 Eclipse 都沒有的強大功能下硕,卻比它們兩者都要更加容易實現(xiàn)丁逝。你可以在這個網(wǎng)頁上下載這個編輯器模型來試用一下汁胆。

我之前推薦過的?TeXmacs?其實在本質(zhì)上就是一個“超豪華”的結(jié)構(gòu)化編輯器。你可能不知道霜幼,TeXmacs 不但能排版出 TeX 的效果沦泌,而且能夠運行 Scheme 代碼。

IntelliJ IDEA 的制造者 JetBrains 做了一個結(jié)構(gòu)化編輯系統(tǒng)辛掠,叫做?MPS谢谦。它是開源軟件,并且可以免費下載萝衩。

另外回挽,Microsoft Word 的創(chuàng)造者 Charles Simonyi 開了一家叫做Intentional Software?的公司,也做類似的軟件猩谊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末千劈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牌捷,更是在濱河造成了極大的恐慌墙牌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暗甥,死亡現(xiàn)場離奇詭異喜滨,居然都是意外死亡,警方通過查閱死者的電腦和手機撤防,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門虽风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寄月,你說我怎么就攤上這事辜膝。” “怎么了漾肮?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵厂抖,是天一觀的道長。 經(jīng)常有香客問我克懊,道長忱辅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任保檐,我火速辦了婚禮耕蝉,結(jié)果婚禮上崔梗,老公的妹妹穿的比我還像新娘夜只。我一直安慰自己,他們只是感情好蒜魄,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布扔亥。 她就那樣靜靜地躺著场躯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旅挤。 梳的紋絲不亂的頭發(fā)上踢关,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音粘茄,去河邊找鬼签舞。 笑死,一個胖子當(dāng)著我的面吹牛柒瓣,可吹牛的內(nèi)容都是我干的儒搭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芙贫,長吁一口氣:“原來是場噩夢啊……” “哼搂鲫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磺平,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魂仍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拣挪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擦酌,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年菠劝,在試婚紗的時候發(fā)現(xiàn)自己被綠了仑氛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闸英,死狀恐怖锯岖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甫何,我是刑警寧澤出吹,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站辙喂,受9級特大地震影響捶牢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巍耗,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一秋麸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炬太,春花似錦灸蟆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽可缚。三九已至,卻和暖如春斋枢,著一層夾襖步出監(jiān)牢的瞬間帘靡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工瓤帚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留描姚,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓戈次,卻偏偏與公主長得像轰胁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朝扼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容