GUI程序界面設計用純C語言怎么做?
我們講理想,不講現實。
GUI這個東西的特性就是變化多端,細節復雜,需要懟大量人力完成。所以適合GUI的語言,必然是可以節省人力的特性。從https://www.52fb.cn語言角度,越能更快給到https://www.52fb.cn者反饋,語言寫法越接近最終成品的用戶界面,基本是更好的。
0. 書寫簡單。語法簡潔,雜音少,不需要寫boilerplate。支持function closure是基礎了。Kotlin里UI DSL還有大括號實際上也不是特別干凈,最好能像CoffeeScript一樣用縮進表達。
tracing Garbage Collection。這一點也是書寫簡單,比如C/C++/Rust都不適合寫GUI,一個視圖的生命周期或者歸屬權需要想清楚在GUIhttps://www.52fb.cn里太難了,就算想清楚了明天界面一變就又不對了。連objC的refcount都感覺有點麻煩。類型系統柔韌靈活。GUIhttps://www.52fb.cn套路太雜,成天又變。最好是structural typing,像GoLang或者TypeScript一樣。能臨時定義個類型或者類JSON的對象傳出去是最好的。能反映視圖的DSL。能通過看代碼的視覺形狀想象出GUI形態是增加效率的重要手段,過程式地創建UI太啰嗦不直觀 。實際上不僅是視覺組件可以對應到DSL,組件上的事件處理(比如click handler)和樣式最好也能直接寫在DSL上。除了直觀的好處,還能結合邏輯代碼動態創建視圖,這點是寫模板(XML/HTML)做起來稍微麻煩點的。能快速反應代碼變化。參考webpack的hot module reload和flutter的hot reload。上面說了UI是需要大量人力的,調整細節就是其中一項。hot reload是GUI語言加速開發減少人力最大的利器。語言自帶異步https://www.52fb.cn。UIhttps://www.52fb.cn有大量需要等待用戶輸入/資源請求的場景。語言級別的異步https://www.52fb.cn非常重要。比如async/await的語法就是一種支持,或者Rx作為標準庫也是一種支持。Golang那種CSP的異步模型就不太適合UIhttps://www.52fb.cn,還是太羅嗦不直觀。異步https://www.52fb.cn到底怎么支持才好還沒想透徹,但是GUI語言自帶異步https://www.52fb.cn肯定是必需品。總之就是怎么寫得快怎么好咯。如果綜合上面幾點,最好的GUI語言就是
CoffeeScript的語法 + TypeScript的類型系統 + Kotlin的語法糖DSL + Dartlang的熱加載 + C#的async/await/Rx