基本上图形界面开发技术主要分为三类
(1) 基于组件和 layout开发
代表作 c++的 qt , c#的 winform
新生的比如 dart语言的 flutter
这种引擎的优点就是原生,内存占用小,效率高
(2) 基于某种特定领域模型语言仿前端开发
代表作 html+ css + js的 Electron, 移动端的 cordova/PhoneGap
其他的类库主要有
xaml + c#的 wpf
qml + js + c++的 qtquick
html + css + c# 的 blazor MAUI
html + css + js + rust 的 tauri
html + css + js + c/c#/python/rust 的 sciter
此类引擎的主要目标有两点 1. 跨移动端 2. 利用web前端的存量生态
html + css +js 的缺点主要是内存占用大,解析复杂,js语言不怎么滴
大部分都围绕着如何改进这些缺点而进行。
比如用 xaml 和 qml 来代替 html + css, 比如用 c# 脚本代替 js脚本
用 c++/rust/c#来代替 javascript进行后端开发
(3)由游戏引擎, opengl/3d技术发展而来的框架
比如 fltk,Unity 比较偏门, 就不讨论了
对于第一类型的框架,争议不大, 已成经典。
二代里纯 web技术栈开发的 Electron 没有问题, 其他各种类型的第二类仿制品,虽然从设计思路上是领先的,却很难成功,有以下几点原因:
1) xaml + qml + blazor + sciter 不能完全兼容html+css+js前端技术, 重建生态太难
前端不用 js 脚本使用 c#的 wpf, blazor实际上是条邪路
2) 大部分方案均为使用其他后端语言代替 js开发, 这些语言真的适合后端开发吗?
c++/rust根本不适合后端开发,只有前端js调用后端 java/c#可能只部分互联网公司的需求,目前没有一个这种方案的, 真做后端 js未必比 java/c#差, 而且还是前后端语言统一有优势, 对于c++/rust开发者来说,用前端方案自讨苦吃
3)使用特定领域描述语言进行开发,未必就比control/widget组件开发更合理
大部分图形界面开发是简单的, 但是在一些部分专业领域的图形来说, 就需要很强的扩展能力并使用极为专业的特殊技术,比如opengl, 面向组件开发,能够很好的区分这些不同。
而对于 XAML/QML 这种引擎来说, 需要理解其架构和底层技术才能够进行扩展,学习曲线十分陡峭。对于简单的开发,和widget难度差不多,对于特定数据扩展,则难度要远大于面向组件开发, 还要在不同的技术栈之间跳来跳去。
即使是对于纯 html 5的 js 方案, canvas 和 webgl也是让人望而却步的, 大部分人都要远离这些东西, 索性前端确实是标准化影响大, 才有 threejs这种东西。但是微软或者qt公司,可没这么大影响力了
从开发语言的生态来说, c++/c#/js的比较成熟, rust/go/dart(flutter)的生态太差。从效率上来说则以 c++/c#/rust优先, 而其他语言大多偏向于后端。
总体来说,还是推荐经典的 qt widget/ c# winform/ Electron做界面开发, 近些年出现这些东西,投入进去坑可能比较多, 从语言的角度来说 c#几乎是完美的前后端统一语言, 但是微软总是尽可能在开发平台上排挤linux, 不太靠谱啊
--
修改:iwantfly FROM 111.199.191.*
FROM 111.199.191.*