網際網路上各種IDE新創意不絕於耳,感興趣的朋友可以看看Bret Victor的視訊演示。Chris Granger在推介自己IDE的相關概念方面相當成功。Josh Marinacci探討了IDE改進的一些可能性。(譯註:還有一篇相關文章:即時C#)我在IDE開發領域已經工作了十幾個年頭,對於這些聲音我的感情非常複雜。一方面,為人們展示IDE可能提供的新功能並將他們從麻木中喚醒是一件好事。然而另一方面,我也擔心人們會把這些新創意和新功能應用到現有的程式語言上。我不認為“只要給Java或JavaScript加上一個完美的IDE世界就變得更加美好”,我擔心這樣只會帶來失望和悲觀。
程式碼同步執行是一個具有啟發性的功能:用實際執行結果作為程式碼的註釋,在編輯程式碼的同時可以看到語義變化,連除錯程式碼都不需要了!過去30年間,這個超酷的功能被人不斷提起。長久以來,程式碼同步執行功能始終沒能擺脫演示階段(包括我自己的工作),很多棘手的基本問題尚未解決。可變狀態要怎麼處理?(參考Circa)I/O要怎麼處理?非確定性和非同步要怎麼處理?只有階乘函式或之類的程式碼可以同步執行,那麼這個功能便無法應用到實際程式設計工作中。一般說來,你還是需要編輯無效程式碼並利用傳統的偵錯程式來檢查程式碼的執行情況。所以,一個複雜的IDE已經提供了你所需要的所有功能。為什麼還要畫蛇添足呢?
很多花哨的程式碼視覺化方案同樣因為折衷而被否決。數以百計研究查詢和視覺化程式碼的論文被發表。對於精心挑選的示例程式碼,它們都表現出色,但還是不能很好地應對現實的程式碼。那麼,為什麼還要設計用途有限卻如此複雜的功能呢?要實現通用的程式碼視覺化非常難,在不允許修改語言本身以提供幫助的時候時尤其如此。
IDE最根本的問題在於,它們受制於程式語言的語法和語義。我們的程式語言都是為文字編輯器設計的,也就難怪我們的IDE看上去像是濃妝豔抹的寫字板。同樣的,我們的程式語言都被設計成命令式語義,儘管與硬體配合很高效但卻不支援靜態視覺化。如果為舊語言直接設計一個全新的IDE就可以魔術般地改變語法和語義,這就是一種奇蹟。然而我不相信奇蹟會發生。
(譯者注:命令式語義:指令式程式設計語言,例如C#,Java或C++。語言特徵在於,程式碼除了體現出想要解決的問題,還要關心機器是如何處理的,例如會在程式碼裡寫for迴圈,if語句等等。)
語言和IDE彼此息息相關,牽一髮而動全身。這也就是我3年前開始擱置IDE的工作轉而關注語言設計的原因。擺脫命令式語義的束縛是工作的目標之一。另一個目標是去除原始碼檔案(同樣也需要擺脫AST——抽象語法樹,它承載了所有文字編碼資訊但不具備可讀性)。這項工作極其困難而且孤獨,甚至沒有人願意談論這些瘋狂的想法。儘管如此,我始終堅信只要採用組合語言的後代程式設計,就不可能擺脫由文字編輯器發展出來的開發工具。
英文原文: Jonathan Edwards 編譯:伯樂線上 – 唐尤華
【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】