zoukankan      html  css  js  c++  java
  • 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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    这取决于计算机语言所拥有的图形用户界面库 库写的好就好
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10901871.html
Copyright © 2011-2022 走看看