C++ 和 C# 哪个容易开发出用户体验好(占用资源小&好看&稳定&反应快)的跨 macOS/Windows 平台的桌面程序?

2022 年 3 月 20 日
 rv54ntjwfm3ug8

Electron 不考虑,没见过用 Electron 写的用户体验好的程序,公认优化好的 VS Code 启动也很慢,剩余内存一不够就卡得要死。

目前是有一点 C++ Qt 和 C# WinForm 开发经验。想写一个桌面程序,因为比较喜欢 C#(很多功能都不用自己实现,而且我更熟悉一点),而且听说 C# 的 Avalonia 框架可以用来非常方便地开发好看的跨平台 GUI 程序,于是打算用 C#来写。但 Google 了一下,很多人说 Avalonia 在 macOS 上有很多 non-native 行为,例如复制键变成了 Control-C 而不是 macOS 默认的 Command-C ,而且不是很稳定,经常崩溃,也没有什么知名开源项目在用,资料不好找。想问问 C++ 和 C# 哪个容易开发出用户体验好(好看&稳定&反应快&占用资源小)的跨 macOS/Windows 平台的桌面程序?或是还有什么更好的方案?

好看很重要,最好能方便地实现一些过渡动画。

17110 次点击
所在节点    程序员
131 条回复
FrankHB
2022 年 3 月 20 日
@g00001 你这方案看上去可能一些方面维护成本很可能会相当地高:www.cnblogs.com/yaoyue68/p/14327559.html
bthulu
2022 年 3 月 20 日
为什么没人考虑用 java 呢, jetbrains 就是 java 一把梭, win, ios, linux 全支持
shawnsh
2022 年 3 月 20 日
占用资源小&好看&稳定&反应快,不可能都达到,达到两个是现实
g00001
2022 年 3 月 20 日
@FrankHB
呵呵,这么 low 的帖子居然能被你扒出来,那么不顺手扒一下别人怎么回复的吗?

Jacen
————————————————————————————————————
有一个现象无法解释,能学好其他编程语言的,学 aardio 都很快,
很多人告诉我几乎拿上手就会用,比任何编程语言都容易。

而说 aardio 难学的 —— 这些人几乎学不好任何编程语言,
做 aardio 这十几年我看到的喷 aardio 不好学,却能学好其他编程语言的 —— 我一个都没见到。

上次看到博客园的遥月长篇大论的喷 aardio ,然后还刷了几天 C# 的学习心得,其实我很期待他真的能学好一样其他的编程语言,但是一年过去了,他人间蒸发了,C#他学了十几年都没学会,可他就是愿意跪舔 C#。

如果 aardio 精心打磨了 17 年的教程你觉得还不方便让你入门。
如果 aardio 提供的系统而完善的使用手册、库函数手册 —— 你觉得不够容易。
如果 aardio 提供的大量篇幅短小的快速入门教程,从最简单的程序到一步步做出精美的界面,有图文,有视频,涉及到 aardio 的各个方面 —— 你又觉得不够系统。

那没有理由继续为难自己用 aardio 啊,为什么不换一个更好的呢?!更好的编程语言那么多。

如果你对编程教学、鉴别品评编程语言都很有心得,那为什么不对自己好一点,选一个好语言给自己?!

如果你对编程教学极有心得,那为什么不对自己好一点,把这些好的教学方式用到自己身上?!

不是不想改进,aardio 一直在努力倾听和前行,活跃更新了十几年。但是这些地图炮式的吐槽 —— 你自己都没办法用这些方法教好你自己,又怎么肯定用你的方式能教好其他更多的人?!

这是昨天一个用户发给我的感谢信:
------------------------------------------------
感谢 aardio 作者,我是刚开始用 aardio 写界面(实在不想用 pyqt 了),python 写数据处理业务,感受到了 aardio 的强大和奇妙。我想把 python 数据处理过程的信息反馈到前端界面中,《这回让我们把 Python 玩出花来》看完后,用了几分钟搞定!!!实在令人惊讶 aardio 的强大!!!再次感谢 aardio 作者的奉献!!!
------------------------------------------------

他才刚接触 aardio 几分钟而已,看了一个简单的教程就用 aardio 写出了自己想要的软件。
有不计其数的用户学不好其他编程语言,却学好了 aardio 。

luohexi
————————————————————————————————————
我是非专业的,疫情以来这两年就想做点文件处理的工具,主流软件都摸索了一遍,今天发现了 aardio ,学了一天就整出来了一个工具,正是我想要到效果。真是相见恨晚啦,太感谢作者大神了,中国人的思维太了不起了。功能强大而直观,不像所谓到那些主流语言弯弯绕太多。
ragnaroks
2022 年 3 月 20 日
只考虑 windows 就 dotnet 这套,考虑 linux 就 QT ,别整其它花里胡哨的
duke807
2022 年 3 月 20 日
@bthulu 用 java 不如用 python ,python 用途更廣。
java 寫的 gui 的界面經常卡死,曾經用 quartus 的 ip wizard ,現在用的 stm32cubemx 都是經常卡死,resize 窗口后,需要重新繪圖的區域變成白色。把 ibus 輸入法關掉可以避免界面卡死。
g00001
2022 年 3 月 20 日
Google 一下 Python + aardio 的文章
https://www.google.com/search?q=python+aardio
不同的编程语言不一定非要互撕,也可以团结合作。
timpaik
2022 年 3 月 20 日
@g00001 跨平台的话 aardio 就不太行了,题主要求跨 MacOS/Windows.....
FrankHB
2022 年 3 月 20 日
@g00001 我没听说过(或者听说过忘了),随便百度了一下。
一般开发者倒不怎么首先会关心难不难学的问题,而是开发资料是不是容易找。
于是这社区建设看起来比较捉急。
或者至少 SEO 没做好,以至于直接搜就是那么 low 的评论。
而且看上去不是一个两个的问题,怕是快人人喊打了,也是蔚为奇观……
zhihu.com/question/39393984
像这个是不是更 low 。不过你都直接上镜了啊……
v2ex.com/t/249946#r_2808385
倒是理解为什么 SEO 上弃疗了。
Cielsky
2022 年 3 月 20 日
试试 tauri ?虽然也是 web 吧,不过至少打包体积少了很多
BigDogWang
2022 年 3 月 20 日
flutter 桌面版有个致命的缺陷。因为其引擎机制问题,导致桌面版不支持多窗口,很难受
g00001
2022 年 3 月 20 日
@timpaik 你说的很对,这个主要是楼上那位转到额外的话题了。
跨平台有很多种,其实没有真正的完全跨平台,都是部分跨平台,还得生成不同平台的执行程序,开发中还是不得不面对各种专有平台的问题,在 Electron 群里就经常看到他们在纠结一些很初级的问题。

首先在事实上 macOS + Linux 的桌面市场份额小于过气的 Win8 。跨平台的方案通常会带来不必要的负担,像 Python 开发本来是很利索的,但因为有跨平台的负担,所以写桌面界面,不如 aardio 轻快。

如果考虑事实上的 “部分跨平台” ,将一些公共的代码做成组件,用 C++ 或 C# 写都可以,或者如果用 WebView2 这种网页套壳 —— 网页部分也可以做成公共组件。

那么如果说是这种部分跨平台的话,aardio 就非常方便了,aardio 可以调用十几种编程语言以及这些语言的组件,像 C# 组件 C# 函数,或者 C,C++ 函数这些都不用写中间代码,直接可以调,更不要说调网页有多方便了。
FrankHB
2022 年 3 月 20 日
@duke807 你的确没直接说图形界面不重要,但是如果稍微多使用一点,就会发现即便只是日常使用,gitk 都相当不够用(再怎么说 gitk 也只是集中 log ,而 log 外各种各样的重要功能太多了。)所以如果真关心的话,一般很容易发现不足而比较过流行的同类产品,这样就更不应该发表那么轻率的观点(哪怕你只是把各个软件的主界面截图搜一下都能看出不少差别)。
不过你显然连 TortoiseHg 的官网都没找到或者仔细看,否则不会那么容易误认为“第三方”。所以我有理由怀疑你认为 GUI 至少在这里不太重要。

同时我也没妖魔化命令行。我只是说 git 的命令行尤其不好用(乃至于有用户自己包装命令行),GUI 只是新手的救星。同样是命令行,hg 就正常得多(虽然也有些问题)。
而且即便是 TortoiseHg 也不是完全覆盖了日用场景的命令,也需要命令行补充(其实 TortoiseHg 自带控制台能输入命令,但是我的系统上有其它包源安装的 hg ,我经常开终端混着用),特别是还有非官方插件。(我日常 push 就是基本在终端连续操作,因为 hg push OSDN+(hg-git) hg push GitHub 之后顺手还要 git push 到其它 git mirror ,还是全终端顺手。)

(我在其它地方有时候的确会“妖魔化”命令行,但一般是黑 shell 不够靠近“正常”的编程语言,是以 API 而非 UI 的角度来说的。作为 CLI ,黑命令行基本都是黑 cmd ,偶尔黑一下 ps1 。)
nashaofu
2022 年 3 月 20 日
老哥可以看看这个呢?安装包体积很小,开发效率不错 https://github.com/tauri-apps/tauri
webview 实现方案
g00001
2022 年 3 月 20 日
@FrankHB
觉得你很有趣,
说了一下 C# 写的软件可以导出源代码,你就上升到 “人类命运共同体” 吓我一跳。

提了一下国产的 aardio ,
你这就卖力地搜索 aardio 的所谓 “黑料”,
说实话我看得莫名其妙,你到底是想表达啥意思?!

你在知乎扒了这么久,不扒到别人在问为什么同是国产语言,aardio 在网上一直是好评居多?!这就是你所谓的“人人喊打了,蔚为奇观 ……” 是你的人类命运共同体这么跟你说的?!
FrankHB
2022 年 3 月 20 日
@timpaik 直接切中要害所以我本来不想复读,不过这里关于 Aardio 还有个公共问题。

就跟我上面评论为什么 wx 不好(或者说不指望有什么好的未来)一样,一个主要问题是本身的结构导致可扩展困难,在二次开发集中体现的。
这导致的长期后果是继续保持市场上桌面 GUI 开发方案的碎片化,不够解决 OP 纠结的问题,还可能加剧恶化这种状况。

我找了下,Aardio 似乎就根本不提供核心实现的源代码。这就是更极端的问题了:根本不可能实现对核心进行二次开发。
如果开源,即便不提供官方支持,或许还有哪个第三方可能有兴趣移植(尽管可能跟.NET 一样过于依赖 Windows 而长期不成气候),还有资格在这个问题里作为候选;但没源码直接就是画地为牢,自绝于(专业)用户了。
即便库给源代码,但是 Aardio 又不是标准化的语言,市场占有没优势,也没什么超过 Python 之类其它流行语言独立开发的特色,有多少专业用户有兴趣贡献源代码?
所谓部分跨平台,你要 C/S 分开说还好,但看样子全是客户端的,有多少实际案例? B/S 方面,相比 cef+前端全家桶,有什么优势?
面向非专业用户的低代码工具么,看例子实际代码量也不少。只是省掉中间代码,能吸引多少用户姑且蒙在鼓里。
所以除满足需求的能力存疑外,这个定位各种方向上都很迷。
g00001
2022 年 3 月 20 日
Google 一下 Python + aardio 的文章有很多
https://www.google.com/search?q=python+aardio
谁喊打了?!你那个自称 Python 用户的遥月?!

知乎上尽挖坟挖到了那些没人关注的帖子?!
500 赞的介绍 aardio 的贴子你神奇地没找到?!
https://www.zhihu.com/question/453979660/answer/1841544999
这是你说的人人喊打吗?

又开始扯 aardio 不开源吗……
aardio 官网首页的回答这个问题的这篇文章你也选择性忽视了?!
https://mp.weixin.qq.com/s/VBV5px3IPrJR40kpEk5M-w
FrankHB
2022 年 3 月 20 日
@g00001 作为桌面开发者,我对 OP 面临的半吊子开发方案到处都是的碎片化现状极其不满意。
不说 BS 应用,不说移动端,桌面 GUI 的整体需求应该足够明确了,市场够大,投入不小,为什么几十年来会整成这样?
“人类命运共同体”就是在黑整个业界各玩各的,谁也不服气谁,结果不说产品级方案够不够跨平台,就没整个像样的选型指导结论共识出来,搞得下游的开发者被迫站队跟着各玩各的。

原则上,你要提供一种新的方案当作选择没什么问题,但是没解决原有的问题还会有效添乱的话,那我自然不会有什么好话。
你所谓的好评,我自忖了一下,大概占据这个市场的比例不会多。当年我会按键精灵的小屁孩水平可不怎么有把握学会这一大坨,但是真会专业开发技能时,又发现这些东西完全不够看了。
而有希望成为 Aardio 目标用户的,如同上面我找到的第一个 low 的链接所说一样,可能真只有所谓的“熟手”(先不管别的方面说的是不是真的 low ),也就是退役的职业桌面开发者或者怀旧党。
具体问题很多,比如你支持 Aardio+Python ,表面降低门槛,但实际上新手连 Python 都不熟练,要同时掌握两套体系有那么容易?

另一方面就是严格的 GUI 开发本来就有隐含的门槛。
比如 GUI metaphor 和所谓控件的联系,比如事件循环,这种东西怎么明确通过 API 中的实体表现出来?讲不清楚这种道理,只是鼓吹什么样的显示效果和表面上怎么短的代码对应,是不可能简单到哪去的。(我黑 imgui 不算 GUI 库道理也类似。)
遗憾的是,我找了一圈没找到系统化描述这方面整体设计的相关内容(也可能是我没找到)。
即便是专业开发者,也得猜哪里要有等价的功能;要是能随便容忍这种缺陷,这就不只是专业 GUI 开发者,而是框架 hacker 了,自己有资源就一定能手糊出整个解决方案的那种。这种用户的忍耐是用在 Qt 这样的业界主流而不是 Aardio 这种小众方案上的。

再上纲上线一点,随便挑一个出来讲水都深得很。
比如事件循环,说白了是所有交互式程序(包括 REPL 和像样的 GUI 应用)的公共框架,作为 trampoline 是一类解释器的实现的 top-level ,也是 CESK 这样对应现代的形式语义的抽象机乃至当前物理 CPU 的顶层逻辑结构。所有这几样东西我都像模像样地自己独立实现或参与制造过,不是在工作中就是现役仍在日用的私货上,所以有第一手经验证明这不是理论废话。
基本上这些东西都有一些现实上的缺陷而让我不能满意。所以我对现状的不满其实已经收敛了许多,你觉得我有兴趣纠结区区一个局部的坑上,特意针对具体方案来形而上地黑嘛?

最后,你应该能看懂,我之前说了那么多,完全是站在鄙视区区一个桌面 GUI 都还要纠结跨平台的整个业界的专业用户立场上的。所以你觉得我是 Aardio 面向的用户群体嘛?
jones2000
2022 年 3 月 20 日
这种就看预算, 和开发周期了。 要用户体验好,肯定是 c++用直接调用底层 GDI/GDI+绘图( chrome 也是用 c++). 这种定制的 c++ 价格不便宜, 没有 8-9 年的 c++客户端开发经验也搞不出来的。
duke807
2022 年 3 月 20 日
@g00001 看了一下你說的官方官網首頁的文章,表示被噁心到了。。。

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

https://v2ex.ih06.com/t/841554

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

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

© 2021 V2EX