UI 那么多年了,为什么没有一个标准能一统天下?

2022-09-19 16:29:46 +08:00
 tool2d
HTML 一个标准,安卓一个标准,IOS 一个标准,VC 一个标准,QT 一个标准,WX 一个标准。

有 JSON/XML/PLIST 格式,反正大家都不服谁。这样对代码的移植,有很大的伤害。

一般来说,界面设计在各个平台上都是相似的,都是按钮+窗体+子控件,只有具体逻辑运行指令是不同的。可行业几十年下来,就是无法做到互相兼容。
8949 次点击
所在节点    程序员
76 条回复
seakingii
2022-09-20 13:04:04 +08:00
地球那么多年了,为什么没有一个国家能一统天下?
-
我认为

技术上来说,目前没有一个 UI 框架是完美的
另外除非各个公司联合起来,不然谁也不敢把这个标准交给别的公司控制
个人或者非公司要搞这个,实力又难以做到,因为跨平台 UI 框架是个非常复杂的工作
SekiBetu
2022-09-20 13:09:08 +08:00
html 统一的前提是用的同一个浏览器啊,即使同一套代码,不同的浏览器展示效果不一定也一样
qrobot
2022-09-20 13:27:32 +08:00
@tool2d 你说的这个和 gtk qt 这种 ui 框架有啥区别,gtk 也可以通过 port 来通过 webgl 投射到浏览器中, 这没有意义。
kongkx
2022-09-20 13:46:08 +08:00
光界定 ui 的范围就已经不是一件容易的事情
Jirajine
2022-09-20 14:04:53 +08:00
Web 可以说是 GUI 领域的事实标准了。
rpish
2022-09-20 15:15:28 +08:00
@mainjzb 好事,两强争霸的结果就是快速稀释第三极。
em70
2022-09-20 16:04:05 +08:00
@yvescheung #58 人衰老的标志就是拒绝尝试新事物,不淘汰这部分人世界就不能前进,这是死亡的意义
wanguorui123
2022-09-20 16:12:25 +08:00
物种的多样性和优胜劣汰并不矛盾
CodingIran
2022-09-20 16:13:17 +08:00
没有人谈到,移动端和 PC 端等不同端设备的交互操作是不一样的,那其对应的 UI 就不可能是一套标准。
UI 强如苹果,在 iOS 和 Mac OS 上在 Swift UI 之前都是两套 UI 库( UIKit 和 AppKit ),即便 Swift UI 同一套代码在 iPhone 和 Mac 上渲染出的效果也不尽相同。
lidegao899
2022-09-20 16:24:55 +08:00
我来,操作系统的大佬这么多都统一不了,搞前端的更没这个能力(狗头)
Jooooooooo
2022-09-20 16:25:04 +08:00
你可能没看过那个四格漫画

"太多规范了, 我得搞一个统一的"

"-尝试弄了一个统一的规范-"

"*规范+1*"
yvescheung
2022-09-20 17:02:54 +08:00
@em70 尝试之后不喜欢就得被淘汰是吧(笑),那咱确实得赶紧给年轻人腾位置了
em70
2022-09-20 17:30:01 +08:00
@yvescheung 尝试后不喜欢那就找另一个或者自己做一套,各行各业一味守旧肯定要被淘汰.所以大一统永远不会实现,总会有更先进的东西出来
349865361
2022-09-20 19:28:10 +08:00
谁都认为谁优秀 开发语言都不能统一何况 UI java 和 c++谁厉害
secondwtq
2022-09-21 03:27:37 +08:00
我不知道楼主说的“统一”是指不同平台的可移植性还是指库之间的可移植性

首先 Qt 不是“一个”标准,分 QtWidgets 和 QML 。
然后 iOS 也不是“一个”标准,分 Objective-C 和 Swift ,然后又分 UIKit 和 Swift UI 。
MSVC 更不是“一个”标准,更像是“你是一个一个一个一个标准啊”
就连 Java 这个一开始就打着“一次编译到处运( tiao )行( shi )”旗号的平台,自己都裂出了 AWT ,Swing 和 JavaFX 。
Web 那边各种框架就不说了 ...

Gamedev 里 dear imgui 目前主要用来做开发工具(这次 GTA6 泄露貌似就看到一堆),还没见过正经游戏 UI 流行 dear imgui 的
说起游戏 UI 这又是一个大坑,你会发现它和传统 GUI 程序的 UI 根本不是一类东西,而 dear imgui 明显更适合做传统类型的(准确来说,是“游戏中的传统 UI”这一超级细分领域)
这上面继续展开还有试图用猴版 HTML 做游戏 UI 的 libRocket 之类的存在。我最近也在搞 Unity ,你知道现在 Unity 作为最流行的通用游戏引擎,官方提供的 UI 框架就有俩么( UGUI ,UI Toolkit )。可见 Gamedev 自己也在试图分裂标准。还什么 Gamedev 已经统一了,上面有句好话是怎么说来着,“你说统一我都觉得有些好笑”。

如果你仅仅是要跨平台可移植代码,我建议你一开始就在 Qt ,HTML ,Swing ,JavaFX 和 wxWidgets 里面选。这几个都是桌面平台间可移植的,不存在“对代码的移植,有很大的伤害”这种事。如果你还要兼容 Web 平台,那选择很明显了就是 HTML 。

移动平台很明显目前较严重的偏离了桌面传统 WIMP 体系,不存在和桌面平台“统一”的基础,你要统一的话 HTML 和 QML 都可以,后者就是用于 application 的 HTML 。

不说一堆 Qt 原生的软件,Beyond Compare 知道吧,人家是 Pascal 写的,把 Pascal 在桌面领域打出来的是 Delphi 7 ,这玩意当年是 Windows 上桌面开发的“瑞士军刀”(这词和 Delphi 7 流行的年代差不多 ...),但是现在能用 Locutus (划掉) Lazarus 做到跨桌面平台。Lazarus 做的事情其实和 wxWidgets 很像,它就是自己实现了 Delphi 的 API ,然后底下转成各种其他的库( Win32 ,Qt ,GTK 之类)。如果你用 Pascal ,那这就是你的首选——没有其他选择。
(问题来了,现在还有几个人用 Pascal 呢?也许这就是 Pascal 用户“没有其他选择”的原因吧,反观 Web 和 Rust 的 GUI 场景那叫一个热闹)

再说一遍,如果你一开始就选了 wxWidgets ,那直接就可以在桌面平台之间互相移植,不存在“对代码的移植,有很大的伤害”这种事。当然后来可能会面对要移植到 Web 的情况——问题是你一开始为什么不能预见到这种情况并在选型上做出调整?

最后 HTML 本来是用来做“Hypertext”的,“Hypertext”就是“互相链接的文档”,不是用来做 GUI 的。有一部分人用 HTML 做 GUI (包括我 ...),这是削足适履。但实际上目前 HTML+CSS+JavaScript 是目前唯一能够勉强做到跨全平台的交互式布局方案,所以一堆人用 HTML 做 GUI 其实恰恰就是对“没有一个 GUI 标准能一桶浆糊”这一现状的反应。

而且以上除了 HTML 一系之外都不能称为“标准”,压根就没有像样的 spec 文档。非要说的话早年 X ,OpenStep 倒是标准。

不过说到正经的“标准”,桌面 UI 真正在库级别的统一标准目前还不存在,不过放到更低级别的话还是存在的。
UI 的 WIMP 往下是绘制指令,这一层级的标准主要体现在 HTML Canvas 上(当然苹果好像也喜欢用 Display PostScript )。所有的 UI 元素都可以转化为一堆 Bézier Curve 和若干 bitmap 的组合。你会发现 HTML Canvas 和实现类似功能的库,比如 CoreGraphics ,Skia ,Cairo 和 GDI+ 的基本功能都是差不多的,核心概念也都是 Path ,Stroke ,Gradient 这些东西。这一层级可以方便地实现几乎所有的传统平面 GUI 。
再往下,如果你使用 GPU 加速,那么有 3D API 标准给你用,Bézier Curve 最后会转换成 vertex 和 triangle (如果你没有偷懒直接用 NV_path_rendering 那个扩展的话 ...)。桌面平台基本都支持 OpenGL 和 Vulkan 。移动的话 GLES 凑合用,当然某个本站最喜欢的公司似乎不太喜欢 ... 这一层级也可以 cover AR/VR 的 UI 。
再往后到屏幕上就是一堆像素,你输出个 PNG 就行 ...
以上都是像模像样的标准,代码都是可移植的,比如 QML 的官方教程专门 address 了移植 HTML Canvas 代码的问题( https://www.qt.io/product/qt6/qml-book/ch08-canvas-port-from-html ),因为人家的 API 就 TM 跟 HTML Canvas 是一模一样的 ...

层级越高越难统一,比如编译器底层可以统一 LLVM/JVM ,系统可以统一 Windows/Mac 或 Linux ,但是往上就不好说了,为啥编程语言不统一?为啥笔记软件不统一?为啥你不跟张小龙“统一”?
seelight
2022-09-21 14:43:21 +08:00
啊这,您这要求也太高了,Apple Google MS 这仨就不可能尿到一个壶里,反正现在流行的 UI 框架全部能写 MVVM 这点我已经很满足了,wpf 、前端、swiftUI 、Compose ,都挺好的。(可能是我被 delphi/winForm/jq 荼毒过,所以要求变低了)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX