UI語言雜集

最適合作 GUI 的是 DSL 或者 XML(以及 XML 的擴展)之類的標記語言,而不是編程語言。css

例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及你們都再熟悉不過的 HTML/CSS,包括 JavaFX 也有 FXML。前端

一門編程語言若是想更適合定義界面,那麼它的語法就得往 DSL 方面靠攏(或者支持 DSL 風格)。vue



做者:紳士喵
連接:https://www.zhihu.com/question/276815517/answer/390718261
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
做者:曹之忽
連接:https://www.zhihu.com/question/276815517/answer/402998275
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

GUI這個東西的特性就是變化無窮,細節複雜,須要懟大量人力完成。因此適合GUI的語言,必然是能夠節省人力的特性。從編程語言角度,越能更快給到編程者反饋,語言寫法越接近最終成品的用戶界面,基本是更好的。java

 

0. 書寫簡單。語法簡潔,雜音少,不須要寫boilerplate。支持function closure是基礎了。Kotlin裏UI DSL還有大括號實際上也不是特別乾淨,最好能像CoffeeScript同樣用縮進表達。node

  1. tracing Garbage Collection。這一點也是書寫簡單,好比C/C++/Rust都不適合寫GUI,一個視圖的生命週期或者歸屬權須要想清楚在GUI編程裏太難了,就算想清楚了明天界面一變就又不對了。連objC的refcount都感受有點麻煩。
  2. 類型系統柔韌靈活。GUI編程套路太雜,整天又變。最好是structural typing,像GoLang或者TypeScript同樣。能臨時定義個類型或者類JSON的對象傳出去是最好的。
  3. 能反映視圖的DSL。能經過看代碼的視覺形狀想象出GUI形態是增長效率的重要手段,過程式地建立UI太囉嗦不直觀 。實際上不只是視覺組件能夠對應到DSL,組件上的事件處理(好比click handler)和樣式最好也能直接寫在DSL上。除了直觀的好處,還能結合邏輯代碼動態建立視圖,這點是寫模板(XML/HTML)作起來稍微麻煩點的。
  4. 能快速反應代碼變化。參考webpack的hot module reload和flutter的hot reload。上面說了UI是須要大量人力的,調整細節就是其中一項。hot reload是GUI語言加速開發減小人力最大的利器。
  5. 語言自帶異步編程。UI編程有大量須要等待用戶輸入/資源請求的場景。語言級別的異步編程很是重要。好比async/await的語法就是一種支持,或者Rx做爲標準庫也是一種支持。Golang那種CSP的異步模型就不太適合UI編程,仍是太羅嗦不直觀。異步編程到底怎麼支持纔好還沒想透徹,可是GUI語言自帶異步編程確定是必需品。

 

總之就是怎麼寫得快怎麼好咯。若是綜合上面幾點,最好的GUI語言就是webpack

CoffeeScript的語法 + TypeScript的類型系統 + Kotlin的語法糖DSL + Dartlang的熱加載 + C#的async/await/Rxangularjs

 

與其問什麼語言最適合作 GUI,倒不如問作 GUI 須要語言/框架具備哪些特性。web

首先用代碼來「畫」界面在如今來看是很怪異的,因此用 DSL + 完善的佈局系統來寫界面必定是趨勢。對應的技術有 WPF、Qt Quick、JavaFX、Android Layout XML...typescript

其次,界面不能脫離了數據,而如何將數據與界面之間創建起關係是相當重要的,雙向數據綁定無疑是最好的實現方法。對應的技術有 WPF、Cocoa、各類 Web MVVM 框架...編程

最後還有交互,交互是一件很複雜的事情,不要試圖用函數式的思想去解決這個問題,交互必定須要命令式的編程方式,而實現交互最基礎的一點就是事件系統,如何將視圖裏的控件事件與一段邏輯代碼聯繫在一塊兒?看看 Qt Signal/Slot 和 Cocoa 就知道了,這點須要一個語言特性叫反射。



做者:Cyandev
連接:https://www.zhihu.com/question/276815517/answer/401765634
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 
做者:銀杏林守望者
連接:https://www.zhihu.com/question/276815517/answer/389957690
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

按照個人理解,適合寫gui的語言應當有這些特色

  1. 自帶DSL,這很是重要。MFC能夠認爲是用c(oo都談不上。。)來過程式的生成界面,delphi是界面和代碼分離,界面是二進制/後來記得是xml。 java swing 也是用代碼生成界面,IDE生成的代碼上面一堆的警告讓你別動也是無奈。。。 語言自帶DSL能夠極其優雅的用語言自己生成界面而且DSL這玩意更加容易IDE友好
  2. 面向對象,這個不解釋。
  3. 支持函數式編程,開發GUI過程當中挺重要的,函數能夠做爲一等公民的話能夠極大的簡化GUI開發中的事件處理,對比js寫界面和java(8之前)就深有體會
  4. MVC,事件驅動,模型傳遞。
  5. 簡單
  6. 最好跨平臺

大概就這麼多,要我說,我認爲最適合的語言是

  • kotlin 可是目前kotlin沒太好的界面庫,swing和javafx都是迷之尷尬,並且過重,不過按照jetbrains的野心,用kotlin重構GUI是必定的事情
  • 將來的typescript,呃不是ts/js+h5,h5做爲DSL仍是很破碎和尷尬的。node上要是能搞個界面庫,用ts/js來實現原生gui是很不錯的。不過貌似沒有人蛋疼去作這個事情畢竟有webkit。呃,對了國人有個ide作的挺好的,就是js實現windows界面開發,那個寫起來比h5爽多了
 
能夠用C/C++作底層渲染引擎,而後用各類標記語言搭建界面,HTML, Qt的QML都是這種模式,理由是標記語言具備不用編譯,所見即所得,能夠作出美觀的界面。
 
 
 

ui 的關鍵部分

我我的以爲應該分爲四個部分。

第一:排版(包括佈局)

第二:附加屬性(外觀 顏色 邊框 陰影 行高 字體)

第三:事件(交互)

第四:數據

以上主要是對目前前端 這種UI範式進行的總結。

而排版(或佈局)須要一些比較自動化得 約定和機制。以便於確保 編程人員不用過多得考慮排版(反面教材就是winform 具體位置點這種的是最差的)。

附加屬性這個徹底能夠參考css 這種 設計模式。

事件和數據 沒啥好說的 參考下 相似 angularjs 或者vue 這種雙向綁定就是了。

 

那麼到底需不須要標記語言呢?

不必定。

由於也徹底能夠用 編程語言來佈局。關鍵是api的設計而已。



做者:ggff ss
連接:https://www.zhihu.com/question/276815517/answer/423970001
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 
這取決於計算機語言所擁有的圖形用戶界面庫 庫寫的好就好
相關文章
相關標籤/搜索