最适合做 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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 
这取决于计算机语言所拥有的图形用户界面库 库写的好就好

UI语言杂集的更多相关文章

  1. 跨平台移动开发UI语言 -XAML

    Xamarin.Forms 把XAML (Extensible Application Markup Language, XAML) 带进了ios,android的界面开发,也就使得使用Xamarin ...

  2. [Asp.net 5] Localization-Asp.net运行时多语言

    本节介绍的是Microsoft.AspNet.Localization工程.该工程是运行在Asp.net 5环境中的运行时多语言设置. ASP.net 5中间件技术 在新的Asp.net 5中,可以将 ...

  3. ios获取当前语言

    上代码: + (NSString*)getPreferredLanguage { NSUserDefaults * defaults = [NSUserDefaults standardUserDef ...

  4. windows官方多语言方案

    编写 Win32 多语言用户界面应用程序 Windows 2000 针对全球市场制定了新的增强支持标准,提供了许多国际化功能,例如完全支持 Unicode.预设支持数百种语言以及用于从右向左语言的镜像 ...

  5. 本地化SilverLight应用程序(多语言支持)

    原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...

  6. Flex 国际化(中英语言适配)

    原文地址:http://www.cnblogs.com/meteoric_cry/archive/2011/01/13/1934404.html(由于此贴时间久远,已做微调) 1.新建Flex Pro ...

  7. WPF 多语言解决方案 - Multilingual App Toolkit

    1.首先安装Multilingual App Toolkit   2.新建项目,在VS中点击"工具" -> "Multilingual App Toolkit&qu ...

  8. 在SOUI中使用动态多语言切换

    动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...

  9. winform 不同语言(中文,英文等)

    Visual Studio 对于.NET 程序的本地化提供了完整的支持,这里仅介绍实现多语言版本本地化程序的简单步骤.注意黑体处为关键点.一. 窗体本地化    对于Windows 窗体,你需要做的第 ...

随机推荐

  1. 在windows系统搭建Flutter开发环境

    开发环境搭建(Windows) 系统要求 设置FLutter镜像(非必须) 获取Flutter SDK Android开发环境设置 安装Flutter插件 系统要求 在Windows上要安装并运行Fl ...

  2. UTC ISO 8601

    如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z.Z是相对协调世界时时间0偏移的代号.如下午2点30分5秒表示为14:30:05Z或143005Z:只表示小时和分 ...

  3. 如何解决AndroidStudio下载资源慢的问题

    https://blog.csdn.net/LiangJianxiong/article/details/87881150方法1.build.gradle里的buildscript和allprojec ...

  4. Tomcat安装应用部署及配置文件解读

    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat和Nginx,APa ...

  5. Linux CentOS 7修改内核启动默认顺序

    1.查看系统有几个内核 a.进入grub2.cfg文件中进行查看 b.通过grub界面查看 3.设置默认启动内核 grub2-set-default "内核版本" 配置默认内核4. ...

  6. known

    邻接表 https://blog.csdn.net/Violet_ljp/article/details/80556460 Dijkstra 算法实现原理 https://www.jianshu.co ...

  7. HelloWorld入门代码

    A:定义类 B:写main方法 C:写输出语句 D:Java程序开发运行与工作原理 E:编译和运行程序 class HelloWorld { public static void main(Strin ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-2.中大型公司里面项目开发流程讲解

    笔记 2.中大型公司里面项目开发流程讲解     简介:讲解一个项目如何从零到上线,经历过怎样的步骤和流程                  1.一个中大型项目的开发流程,从需求调研到项目上线    ...

  9. Linux下的C的开发之GCC的初级使用

    <span style="font-family: Arial, Helvetica, sans-serif; "><span style="white ...

  10. HTML DOM firstChild lastChild nextSibling previousSibling 属性_获取属性值的undefined问题

    <html> <head> <title>HTML示例</title> <style type="text/css"> ...