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 平台的桌面程序?或是还有什么更好的方案?

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

17113 次点击
所在节点    程序员
131 条回复
wakarimasen
2022 年 3 月 21 日
桌面端选型都快成 V 站月经问题了。这个问题我没有话语权,但是我推荐你用 Qt + CEF
timpaik
2022 年 3 月 22 日
@g00001 第一贴就专门提到 Gif123 和 WubiLex 了其实,不过我想说的是后面提 aardio 算 OT 了,并不能解决楼主的问题。其他跑题的我没提是因为你回复了我,就提了一嘴关于 aardio 的(

关于 win32 ,当然没啥不好的,我甚至觉得 win 开发就应该用 win32 ,而不是 qt 的重写的那堆库

aardio 绝大部分就是 aardio 写的这当然很好,开源也很好文档很全
至于系统依赖嘛。。有些库的 XP 支持还是不太好,inet 有些东西会崩(不过没啥人用 XP 是真的,我就是闲的没事试试)

现阶段,跨平台的主要概念是帮开发者屏蔽系统的底层差异,这个东西会让开发者很舒服,但有利有弊,专用于 win 的 aar 在 win 舒服,跨平台的 qt 强大

然而我目前是个 archlinux user ,没啥好的 aardio 替代品,就写 gtk 了( x

不过,还是说,没有其他的意思啊,我为什么感觉,这语气好像校长( aardio 公众号运营者官方)啊,真的好像啊

遣词用句,感叹号和问号,都简直一模一样
就是那种,真的很像
g00001
2022 年 3 月 22 日
已经 Block 这货了,为什么还能 @我?!
又变成了我不该提 Gif123 , 不该提 WubiLex ?!这些都是很受欢迎的软件,很多大网站都卖力的免费帮推广啊,开源免费的软件我提了一下,这么洁癖?!

还我用了感叹号就像校长了?!校长是谁啊?!蔣校长,还是王校长啊?!
你很熟悉校长的语气吗?!喜欢校长也不用舔到这个程度吧,一大堆的 BB 这些东西就跟主题有关了?!

我的身份是谁关你毛事?!你谁啊?!你真实身份又是谁啊?!我管你是谁,别再
g00001
2022 年 3 月 22 日
我管你是谁,别再 @我,BB 个没完,你烦不烦?!理你你又说我不该向你推广,又不停换小号 @我,@我,今天一天都 @来 @去,特别骚扰到我了,明白吗?!别再 @ 我 !!!! 不喜欢我说的话,Block 不会?!你要网上人人说话让你喜欢,你谁啊?幼稚不幼稚?!
g00001
2022 年 3 月 22 日
aardio 对 XP 支持不太好,inet 会崩 …… ?!
为什么不直接发代码?! aardio 别的不行,最强的就是几句代码就是一个独立程序,发代码没难度吧?!

既然关注了 aardio 公众号,看样子还每天舔作者写的文章,很熟悉作者的语气,
那么为什么不直接去反馈 BUG ,却跑到 V2 来讲这事?!对于这么 “关爱” aardio 的家伙来说不合理啊。

我管你跟作者有什么私人恩怨,我就一普通爱好者,别乱开地图炮。
FrankHB
2022 年 3 月 22 日
@g00001 我不清楚 xxx KB 的 yyy 解决了什么问题和这里的问题有什么关系;我也没这种问题。我就知道 OP 想跨平台,你的方案都不合适。
但是既然你一直想发散,那我只能指点出你的常识性错觉。

>“开发速度快”
熟练的和不熟练的可以差很多。
还是那句话,搜索资料的成本都有潜在风险。据我搜到的东西来看,我没法相信新手算上学习熟悉的时间后能快哪去。

>“代码少”
怎么说呢……虽然一般算是优点,但非得强调小到几百 K 的话,除了网络攻击渗透作弊之类的非常规的“专业细分”市场,小到这个程度是普遍很不被的用户在意的,如果不是反而可疑的话。
大部分的桌面用户,不是要求折腾 Qt 的 debug 库之类的玩意儿,一般桌面大个几百倍也不是不能接受。
所以你能确保把几 G 砍到几十 M 这个算是活菩萨,但接着砍到几百 K 这就算是大部分用户基本无感知而不那么值得解决的问题。

>“无外部依赖”
真依赖系统调用接口写应用虽然不是不可能,但很脱离实际。而且一但依赖的真出问题,要做安全更新之类的就蛋疼了。
所以实际上,跟智子锁死百度 GCC3.3 的笑话一样,基本只能实现强迫用户使用系统自带的低版本用户空间古董依赖罢了。
另一方面,这也是在纵容旧版本系统和过气的软件实现栈。
Web 就不说了,主流桌面开发者也很烦这个。这不仅在现在的 Windows 阵营很不受待见,别的生态也一样,特别是没第一方维护的版本,连带系统(比如 CentOS )和专业倒腾这种环境的开发者一起鄙视。
所以不说还好,一股吹起来,这个越看越是缺点。

其实无外部依赖这点我和不少最终用户也不那么在意。一点相关的题外话:我倒是会例行鄙视刻意鼓吹“无运行时依赖”的语言设计:说得好像操作系统提供的运行时和 CPU 提供的硬件运行时就都不是运行时依赖的一样。
硬件提供的撑死了只是方便部署,也就是在包管理之类的系统部署方案残疾的环境中才会有原则性区别。部署有问题不想着怎么取解决反而砍功能需求,这也是活久见。
(点名批评静态链接党,包括传统意义上的 cat-v 逗比以及 go 和 rust 之流的。Aardio 如果只是擅长在这里做文章的话,就很荣幸跟这些货色并列被婊了。)
同样的道理,这些语言也就是吹“写小工具”的时候,这类不灵活的缺陷才能接近于零。软件规模往上堆,被坑是迟早的了。

> VC++ 不开源,所以没解决问题的资格?!
倒不是说资格的问题,而是除了为了错误的选型等历史包袱买单,没理由去用。
VC++的 C++实现长期被开源实现吊打,直到最近微软的 C++标准库实现开源以后才在进度上扳回一城。

> Delphi 不开源,所以没解决问题的资格?!
> VB 不开源,所以没解决问题的资格?!
这俩字面意义上地过气了。如果开源的话,可能还能抢救一下。
虽然也就是抢救一下。
FrankHB
2022 年 3 月 22 日
@g00001 哦,我上面那个“代码少”主要只是目标程序的。虽然你没明确说源程序,我还是先澄清一下我从来就没觉得少。
你拿库举例虽说是显示跨平台意义可疑,但刚好这方面有点搞笑,所以我借用一下:基本上随便一个通用点的语言都能这样写,就是看包装库的工作量。
( Aardio 的库基本全是第一方提供的,以至于库是不是容易让一般用户写得出来就成了疑问。这反倒是在给语言的抽象能力打反广告。)

不但不少,我还嫌弃一些重复废话多。
比如你先前贴的有几行 dataTable.Columns.Add 重复的源代码。这个要是窗体设计器生成的还好说,让人手写就别说少了,实在没下限。
你要能改写出这种:
map dataTable.Columns.Add ("名称", ("计数", System.Type.GetType("System.Double")), ("选择",System.Type.GetType("System.Boolean")))
然后确定 map 这种高阶函数之类的不是语言内置特别开洞的规则或者“关键字”,而是开发者自己也能轻易实现的,那才算真的有资格说能“代码少”,否则适应性太低了。(但是这样其实基本规则不会简单到哪去。)
也就是类似的原因我很早就对 RAD 界失去兴趣了。
这倒也不是针对 Aardio 这样的具体方案。地图炮撂这儿:大多数画窗体和表单走量的,自己整不出框架的,都对估计源代码复杂性一样少跟筋,口味也属实有问题。

话说回来,硬要把 TrustedInstaller 这种无中生有的接口移植到不支持的环境也行,报错得了嘛……当然看上去有点蠢,做无用功。
但比起支持可移植性,对大多数一般开发者来讲,首先支持 TrustedInstaller 这种旮旯才显得更离谱。
这种非通用机制本就不常用,再好用也掩盖不了你一个开发工具在最重要的“提供通用抽象”的问题上的无能——基本功就是干掉不是用户自己主动引入的平台依赖。

其实只要别往这种一般需求上凑热闹,你只要承认 Aardio 脱离 Windows 一大半活就开发者自己都实现不出来也没啥子嘛。没那么通用罢了。
我觉得你好像就不会用“胶水语言”这个调调来包装——其实这才算是 Aardio 看上去比较正常的定位。但这样就是在抢 Python 饭碗了;是不是觉得大不敬,不敢造次了?
FrankHB
2022 年 3 月 22 日
说到 VC++,倒是想起了个亲身经历的笑话(?)——某个 CAD 软件的扩展 API 只提供静态库并且只支持 VS2008SP1 的 libcmt ,搞得扩展项目连 msvcrt 都链接不上去。为了复用另外更多的其它组件( C++标准库),不得不同时安装 VS2010 ,另外糊了一坨 nmake 才自动化。
如果一开始给源码而不是静态库的话就不会是这个光景了。(甚至只给 dll 都比给静态库强。)
VC++的 V 的部分:简单来说就是被 VC#去掉 C#以后的部分吊打的份,不用自取其辱了,余略。
Delphi 么,想黑 ObjectPascal ,又不值这铜币,也略。

@g00001 “别忘记一个最简单的事实”之前你得记得更简单的常识:指名道姓地惦记具体系统的支持总是比无视差异更累。
凭什么开发者就得记住这种所谓的事实才能开发出桌面应用?注意,就说开发出能用,不说优化适配。
除了系统厂商本身始作俑者,还不就是因为看到跪舔具体几个“占有高”的实例偷换桌面系统的概念的开发工具作者多了,搞的平台差异千疮百孔不但没尽本分掩盖住反而更随便就暴露了,才逼得下游开发者鸟这个问题,进一步让最终用户吔翔的么。
系统不是你造的也就算了锅不都该你背,但什么时候劣化这种局面还光荣了?扯远点说,用户对 Linux QQ 矮痤丑的怨气,你这样跳出来不务正业强辩的,也是得老实接住的(而不是数落 Linux 社区无能,毕竟丫一开始就没打算对 userland 负责)。
g00001
2022 年 3 月 22 日
@FrankHB

我已经说了不要再 @我,
你把这个贴子里的人几乎 @遍了,也没有人理你,有意思吗?!

你所谓:不适合你
---------------------------------

V2 每个人回复一个贴子都要适合你?!

你可以在网上 Google 到很多人用 aardio 用得舒服的案例,适合别人就行了。

你这只用百度扒负能量贴子的坏习惯能不能先改改?! 用用 Google 吧。


你所谓:aardio 与跨平台无关
---------------------------------

谁这样糊弄你的?! 你还就真信了?!

EXE 能跨平台吗?!

所有跨平台的开发工具都要生成 EXE ,这说明所有跨平台开发工具都与跨平台无关?!

Java,Python 可以跨平台吗?!

你可以 Google 到非常多 aardio + Python 开发的文章分享。

aardio 可以非常方便的与非常多的跨平台语言混合开发,并且带来巨大的好处。


你所谓:没解决主题的问题
---------------------------------

V2 是一个问答网站吗?!

不能解决主题问题不能发?!你自己解决啥问题了?!

或者你自己开发的桌面软件在哪?!

人家这不行那不行,你自己的成功案例在哪?!


你所谓:你没法相信新手算上学习熟悉的时间能快哪去
---------------------------------
也没有人让你相信啊,可这就是事实啊。

你没看到别人写的心得用 aardio 分分钟上手啊,

这种反馈在网上能搜到很多啊,你百度这么利索,尽扒人家负面的消息,

正能量的你一个都看不到,一个都不相信?!人家需要你相信吗?!


你所谓:你所谓你不相信 aardio 开发速度快
---------------------------------
你不相信有啥用?!

aardio 开发速度就是快啊,

去看看 aardio 首页的 aardio 几句代码能做什么。

看看我上面发的开源软件,WubiLex 这些,你觉得人家不快,你做一个试试?!你可能要花 10 倍的时间,做出来的软件可能还有 10 倍的体体。

你所谓:代码少体积小用户普遍不在意
---------------------------------
全世界的用户就这么被你代表了?!

你可以搜索一下整个网络有多少人在抱怨 Electron 生成的软件体积太大,他们都告诉你他们不在意了?! GitHub 上还有作者说用了 QT 4 年,写一点东西就 60 MB ,还没有多少功能,最后换回 aardio ,要不了几句代码就完成要写的软件,体积还非常小 ……他们都跟你说了其实他们不在乎体积?!

你所谓:无外部依赖也算缺点
---------------------------------
这一段你写得最长,可是逻辑错乱,不值一驳。

你所谓:VC++ 也没理由去用,也没解决问题的资格,也被吊打
---------------------------------
你真的膨胀得要上天了。

你去看看那些开源的跨来台的解决方案,有哪个离得开 VC++。

不开源就没解决问题的资格,

你忘了 Windows 就不开源?! Windows 都没解决问题的资格?! Windows 都没资格你在这里大谈桌面软件开发?!

你所谓:BB 这么长了还觉得不够要补刀,库多就可以代码少?!
---------------------------------

C++ 的库比 aardio 多一万倍,要不要我发几个 aardio 范例让你翻译一下? BB 你没完没了,写代码真的行不行?!


你所谓:dataTable.Columns.Add 窗体设计器生成让人手写就别说少了,实在没下限。
---------------------------------
你眼神是不是有点问题?!

我有说 .Net 自己窗体设计器生成的代码少?少不少跟 aardio 有什么关系?!

C# 的窗体设计器生成的代码,可以直接放到 aardio 里 —— 这才是我要说的特性。

我说的是不需要中间层封装的代码,能听懂?!

觉得 aardio 代码不少?!你用任何一个非 .Net 语言试试能不能像 aardio 这样简单、方便地调用 .Net 控件?!

你所谓:TrustedInstaller 这种无中生有的接口
---------------------------------
TrustedInstaller 叫无中生有的接口?!谁给你的勇气?!

完全跨平台的方案,注定不可能封装所有专有平台特性的接口。这样的例子很多。

你用跨平台的开发工具写一个 WubiLex 试试看看会不会把你自己累哭?!

或者你去把 aardio 里面的范例一个个翻译到你所谓跨平台的开发工具,看看会不会把你自己累哭?!
g00001
2022 年 3 月 22 日
都 Block 你了还要连珠炮地 @ 我,别再 @ 我了,真想写,别 @ 我。

小号习惯分析:
————————————————————————————————
1 、一个小号连续发言的时候,另一个小号会进入静默,衔接时间以分钟计。小号在遇到尴尬问题的时候,会突然短暂失去应有的活跃度,换账号发言。

2 、不同小号会伪装出不同的发言风格,但攻击的对象和维护的根本立场不变。

3 、喜欢用小号的人,在同一个网站会有不同小号,在不同的网站也喜欢上不同的小号,这些小号有一个他自己往往特别不会注意到的一个特征,点击他们的发言记录,在同一个网站的活动频率基本接近,另外,这些人活跃度通常超过普通账号。


至于有人在那暗戳戳暗示我是小号。
我 2013 年注册,将近 10 年这是我在 V2 的唯一账号。


有人试图在这里代替 V2 站长制定新的社区行为准则
————————————————————————————————
1 、既然要以行为准则约束他人,就先要约束你自己,准确而清晰的定义你的行为准则,例如我上面举的例子,如果只提到国外的语言,是否侵犯你的行为准则?!还是你的行为准则只针对特定的语言,只针对发言人特定的身份?!

2 、关于扣 “推广”的帽子,给别人扣帽子不能乱扣,同样应当有清晰的准则,如果我提到了一个完全开源免费、很多网站都在积极推荐,干净得没有一个字广告的软件 —— 这叫推广。 如果我提到了一个开发了 17 年,完全免费,一个字的商业广告都没有的几近公益的软件 —— 这也叫推广。 如果我在一个讨论桌面开发的主题里 —— 提到了一个好用的桌面开发工具 —— 这也叫推广。 那么在你的准则里,什么不叫推广?!你要在 V2 行为准则里加上不能提及国产软件吗?!

3 、关于扣没解决主题问题的帽子,
请问哪位解决了主题的问题?! V2 是问答网站吗?还是那句话,EXE 不跨平台,所有跨平台开发工具都要生成 EXE ,然后所有开发工具都与主题无关了?! Python,Java 可以跨平台,这些跨平台的语言都可以用于 aardio 生成 EXE ,更好地解决跨平台语言适应专用平台的问题,例如网络上就能搜到大量 Python + aardio 的分享文章。Python 的应用也与跨平台无关吗?!

扣的这几顶帽子你自己都解释不通
————————————————————————————————
别!!!再!!!@!!!我!!!
ajan
2022 年 9 月 6 日
点赞 aardio !

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

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

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

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

© 2021 V2EX