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
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
 
这取决于计算机语言所拥有的图形用户界面库 库写的好就好
相关文章
相关标签/搜索