• UI语言杂集


    最适合做 GUI 的是 DSL 或者 XML(以及 XML 的扩展)之类的标记语言,而不是编程语言。

    例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及大家都再熟悉不过的 HTML/CSS,包括 JavaFX 也有 FXML。

    一门编程语言如果想更适合定义界面,那么它的语法就得往 DSL 方面靠拢(或者支持 DSL 风格)。



    作者:绅士喵
    链接:https://www.zhihu.com/question/276815517/answer/390718261
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:曹之忽
    链接:https://www.zhihu.com/question/276815517/answer/402998275
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    GUI这个东西的特性就是变化多端,细节复杂,需要怼大量人力完成。所以适合GUI的语言,必然是可以节省人力的特性。从编程语言角度,越能更快给到编程者反馈,语言写法越接近最终成品的用户界面,基本是更好的。

     

    0. 书写简单。语法简洁,杂音少,不需要写boilerplate。支持function closure是基础了。Kotlin里UI DSL还有大括号实际上也不是特别干净,最好能像CoffeeScript一样用缩进表达。

    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语言就是

    CoffeeScript的语法 + TypeScript的类型系统 + Kotlin的语法糖DSL + Dartlang的热加载 + C#的async/await/Rx

     

    与其问什么语言最适合做 GUI,倒不如问做 GUI 需要语言/框架具有哪些特性。

    首先用代码来“画”界面在现在来看是很怪异的,所以用 DSL + 完善的布局系统来写界面一定是趋势。对应的技术有 WPF、Qt Quick、JavaFX、Android Layout XML...

    其次,界面不能脱离了数据,而如何将数据与界面之间建立起关系是至关重要的,双向数据绑定无疑是最好的实现方法。对应的技术有 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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    这取决于计算机语言所拥有的图形用户界面库 库写的好就好
  • 相关阅读:
    CSV 文件的读写(函数)
    携带cookies请求github个人信息(类封装)
    网络和http协议理论
    思卡乐科技发布SR3系列RFID产品
    爱立信开始大规模mesh网络测试
    NB-IoT物联网,来了
    想象力是我们的局限,蓝牙5应用初探
    RFID电动车管理,智慧城市物联网建设的入口
    蓝牙模块选择经验谈
    RFID电动自行车与共享单车之物联网比较
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10901871.html
Copyright © 2020-2023  润新知