支付宝听说这个好消息都能乐蹦起来
你们是微信的老顾客。
但你们都不懂老年人。
题主你有没有想过微信最大的敌人是谁?是支付宝?微博?抖音?还是同门师兄弟QQ? 或是市面上一大堆乱七八糟像“米聊”这样同质化的通讯软件?
都不是。微信最大的敌人,就是你手中现在端着的这个东西。那个四四方方的,上面有个玻璃屏闪着花里胡哨图案的东西。对,就是你的手机。
为什么它是微信最大的敌人。因为手机拥有两个与生俱来的功能:发短信和打电话。而且手机还有个独一无二的可以准确找到你的标识:手机号。说到底,手机的本质就是一个通讯工具。那微信的本质呢?可以发文字信息,可以发语音信息,可以打语音和视频电话。啊这,这不就是个虚拟化的手机吗?微信与手机虽然虽然一个是软件,一个是硬件,然而很神奇的是,他们俩之间的基本功能是可以相互替换的。
那么问题来了,发短信、打电话和用微信做同样的事有什么本质区别吗?有,因为微信是免费的。
打电话发短信需要买手机卡,而手机卡每个月是要交费的。以前发短信是一毛钱一条,打电话则是100分钟免费,超过100分钟开始计费。所以微信一出现,直接把短信和电话都干残废了,因为微信发信息不要钱,还可以发语音。当年一个月就可以帮一个在校大学生省下好几百块钱的话费,人家和女朋友有说不完的悄悄话,微信加WIFI就是他的救星啊。
现在微信要是收费,那我就要考虑考虑了,反正都是要钱,我已经付了话费了,我干嘛要再交一笔钱给微信?我发短信不好吗?我直接打电话不好吗?
我说微信我不用了,我加你QQ吧,你说我没有QQ;我说那我加你支付宝吧,你说支付宝还能聊天啊,我不会哎;我说我加你微博,你说我不玩微博;那我说我们俩加个米聊、UC,你一脸懵逼问什么玩意儿?但是无论如何你不会说我没有手机号对吧 。
总之你,要让别的软件取代微信不但要安装相应软件,还要让自己的社交网络也搬到这个软件平台上,这中间的繁琐程度就是微信的护城河。但是,对于手机本身,这个护城河是无效的!手机与手机之间的交流,不需要任何门槛。
微信要是打算开始收费,那就看腾讯怎么收。如果是给一两个月的过渡期,那我这个时间就不干别的,每天在朋友圈发个图片声明,写上我的手机号,告诉所有朋友一个月后这个微信号不再联系。如果是重要的客户或者是重要的朋友和亲人,就辛苦一下,一个个手动通知。我让你加我QQ或者抖音号别人会感觉怪怪的,但如果我让你加我个手机号有什么问题吗?
假如腾讯特别孙子,一天过渡期都不给,说我明天就开始收费,不给钱就不能用。得,算你狠,我认栽。我就充一个月会员,大不了一年嘛,这一年就重复上面做的事,告诉所有朋友一年后这个微信停用,有事手机联系。你给你朋友打个电话需要什么门槛?
还是那句话,微信并不是不可取代的。相反取代它的东西非常非常的简单,简单到我发现许多答主都没有意识到。
你用手机本身就是花了钱的,不花钱不行。那么身为正常人的你,请再想一想,你会不会在已经花了钱之后,再花一笔钱去买同样的服务呢?
我不会。
看到这个提问我才发现张小龙还能有退步空间。
你当腾讯傻子?曾经有一段时间,注册QQ是收费的……后来没多久就取消了
家里有祖辈,率部打过朝鲜战争,隶属第9兵团(27军80师)。
稍微了解历史的人,听到第9兵团,必然会紧接着想到长津湖战役,或者用美国人的说法,“朝鲜水库之战”。那次战斗中,志愿军战略战术都大体正确,但凡双方的海空保证和后勤装备在“一个数量级” - 差距能在十倍之内 - 最终也不会以第9兵团实质失去战斗能力的代价,才换得惨胜一场。
最终统计,双方减员大体上是5万:1万8。其中,因低温和后勤保障等原因,志愿军一方非战斗减员近3万人,很多都是生生冻死的。
连同第一、第三次战役,朝鲜战争前三次战役整体,是我国近代以来(等同于有史以来),面对西方工业国家(包括日本),第一次取得战役级别的全面胜利。
相信对于经历过、了解过这些历史,并把这些历史当作自己国家民族史不可分割的一部分的人,以下的那些歌词、旋律,确实就如龙应台在这次活动中所说,“所谓的经典,它一定是超越所有假造的规范跟强制的压迫,而能够触及到你最普遍的,人心深处最柔软的那一块的,一定会成为经典”:
-----------------------------------------------------------------------
“为什么战旗美如画,英雄的鲜血染红了它; 为什么大地春常在,英雄的生命开鲜花”
“越过高山,越过平原,跨过奔腾的黄河长江; 宽广美丽的大地,是我们亲爱的家乡。 英雄的人民站起来了!我们团结友爱坚强如钢。”
“好山好水好地方,条条大路都宽畅。
朋友来了有好酒,若是那豺狼来了,迎接他的有猎枪。 这是英雄的祖国,是我生长的地方; 在这片古老的土地上,到处都有青春的力量。”
-----------------------------------------------------------------------
后来来了美国,一个可能在不少“龙应台们”的眼中,灯塔一般的存在。这么多年下来,借用龙应台的那句话,“你或许在乎大国崛起,我只在乎小民尊严”,那么美国的真实状况恐怕就是,“我们既在乎大国统御,也在乎大民福祉,且互为保障,且互为天然因果”。
我不愿做一个在美国生活个几年就开始高谈阔论“美国怎么怎么样”的“公知”笨蛋,但姑且允许我用类似的文体表达:
在来美国之前,我并不知晓,
几乎每个大学里,都有“战争纪念碑”;
几乎每个城镇的小广场,都有“战死烈士纪念碑”;
重大体育比赛国歌仪式末尾,常会安排军机通场飞过;
每当有阵亡士兵归乡时,车队规模和迎接民众都类似国家元首一般;
......
绝大多数美国人,对其国旗和国歌的热爱,相比普遍的中国人,有过之而不及。
我想,这些“表征”背后的“情感”,必然也是基于对特定历史的经历、了解和认同,并把这些历史当成自己国家民族史不可分割的一部分,铭记于心。而正是因为这种“情感”,特定的艺术作品,才能“超越所有假造的规范跟强制的压迫,而能够触及到你最普遍的,人心深处最柔软的那一块”,成为经典:
-----------------------------------------------------------------------
“哦,你可看见,透过一线曙光,
我们对着什么,发出欢呼的声浪?
谁的阔条明星,冒着一夜炮火,
依然迎风招展,在我军碉堡上?
火箭闪闪发光,炸弹轰轰作响,
它们都是见证,国旗安然无恙。
你看那星条旗,不还在高高飘扬,
在这自由的大地,勇士的家乡?”
-----------------------------------------------------------------------
之后机缘巧合,在聚会中见过朋友家的祖辈,二战末期入伍的马润,打过太平洋战争和朝鲜战争。老爷子坚持认为朝鲜战争是平手,同时表示,没想到中国人比日本人还能打(可能是因为二战他打酱油为主吧,但他也确实对当时的日本人用了“animal”一词来形容)。同时他表示,美国现在如果选择和中国对着干,将是最大的愚蠢。不知这是来自于他对历史和现状观察后的系统思考,还是只是基于个人经历的,对“伟大的敌人”的惺惺相惜。不禁想到之前听家中祖辈谈起,对曾经的敌人,曾经在名义上战胜过的敌人,字里行间,总是多少充满敬意。
好,说回龙应台。我个人非常认同她在末尾做的一个比喻:“歌,它就像一棵树,树需要有根,根在土里头,非常地要看它是附着在什么样的土壤里头...”
她说的没错,所以我全文也就是在描写这种“土壤”,中国的土壤,美国的土壤。
这是一种非常底层的土壤,不会因为其他平行因素而被动摇甚至否定的土壤。
我清楚地知道,我的另两位祖上,父亲是23年的党员,儿子(我的外祖父)是大学教授,在文革中,父子二人莫名经历了那么多苦难,甚至这种扭曲的经历到今天都有影子一般的影响 -- 这也是一种土壤,一种可以长出“意识形态害死人”的“树”的土壤。相信也有一少部分中国人知道,第9兵团的宋时轮上将,生涯晚期曾经反对过某件事 -- 虽然对此我个人表示不置可否,但对一些人,也是一种土壤,能长出特定的“树”来。
美国人也清楚地知道他们的其他历史,如当年艾森豪威尔总统,直接调动101空降师来护卫最早的5个黑人孩子,安全地进入白人学校上学的历史 -- 这也是一种土壤,一种可以长出“人与人生来平等”的“树”的土壤。
俄国人也清楚地知道他们的其他历史,如当初的红色帝国,造得出上万颗核导弹,造不出不同款式的丝袜来 -- 这也是一种土壤,一种可以长出“计划经济行不通”的“树”的土壤。
但这些土壤,并不矛盾,正如“大国”和“大民”也绝无矛盾,更有可能是互为因果,互为保证一般。在追求最底层土壤的同时,我们也从未放弃过争取其他内容:自由、平等、文明、互助...吃得起茶叶蛋,买得起猪肉。
但我依然能理解龙应台的那种“恐慌”,甚至是“恐惧”,一种稍有洞察力的人,就能透过屏幕闻到的,无处不在的不自信和恐惧。这种“恐惧”其实也是“树”,而这颗“树”,也有“根”,也有“土壤”。这片“土壤”,对应的是这样的一个历史,这样的一个事实:
如果“你们”不选择和“我们”一起当“咱们”,那么“你们”就没有“国”,没有“民族”,没有“历史光荣”,没有“文明荣光”,是前朝的战败的弃民,是内战失利的败将,是大国博弈的砝码,是即将上不了台面的弃子。
说到底,如果“你们”不是“咱们”,而只是“你们”,那么“你们”连根都没有,谈何“土壤”?
美国和中国就像那云杉,而英国日本等“小国”,也必然算的上苍柏。而台湾呢?最恰当的比喻,恐怕就是松萝 -- 也有根,但是是气根。
于是,我终究也不会怪罪龙应台。毕竟,什么样的土壤,就会长出什么样的树,培育出什么样的人。台湾没有“土壤”,于是只能培养出松萝一般的龙应台来,临时依附在一颗大树上,觉得自己高高在上,然后因为附着的大树有根有土壤,就产生了自己也有根有土壤的幻觉。却不知,松萝这种植物,人称“空气质量的检测仪” -- 都不需要环境怎么腥风血雨,而只要空气质量稍稍下降,就会死掉。
而龙女士追求的,貌似不仅仅是作为松萝,一切静好地活下去,而是,不但要作为松萝优雅地凌空飞舞,而且要否定大树的根,大树的土壤,希望大树的根烂掉,大树尽快倒下去...甚至直接否定这棵树,一颗彻底摒弃了“假造的规范跟强制的压迫”,彻底由万亿人民“最普遍的,人心深处最柔软的那一块”凝练成的大树,将其描绘成“假造的规范跟强制的压迫”下的非本心产物...
那么,这可能依然无关是非,但必然有关立场。相信龙女士如果身体健康的话,有生之年必会看到,架空了国之尊严,你追求的小民之确幸,是多么地虚无缥缈,多么容易灰飞烟灭。
好在,虽然龙女士恐怕没得改变了,但她还是反复提到了一个词,“希望”,而年轻人永远有希望。这个希望,在此设定下,其实也异常简单:你要做没有根的“你们”,还是要做根深叶茂的“咱们”?怎么选,自己想,皮球在“你们”那里,“我们”真的无所谓。
-----------------------------------------------------------------------
“愿这石头比人更坚强”,俄罗斯,圣彼得堡(列宁格勒),卫国战争纪念碑
无名英雄之墓,美国,弗吉尼亚,阿灵顿国家公墓
此图不解释
有些“土壤”,以及土壤上面长出的“树”,在伟大的国家间,本质上是共通的,现在一些台湾人不理解而已。这是他们的不幸,可悲,可怜。
-----------------------------------------------------------------------
偶然看到本问题下一些匿名或非匿名的答文,我自己道行不够,还是忍不住多说两句:
我对龙的评价,对“龙应台”们的评价,可以翻我的答文历史,是一贯的,是基于对这个人的作品、历史、言论的较充分了解,而下的个人结论。依然,这只是个人结论,而不是客观真理,于是人人都可以表示不同意。但这结论确实与我是否知晓此次事件,看到的是3分钟?5分钟?21分钟?24分钟?还是一个半小时的视频,没有任何关系 - 我看的视频是21分钟版本,我觉得足够充分了。
同时我相信,但凡看过20+分钟“完整版”的人,如果对龙的立场和目的,依然表示无知无觉 -- 若你是真心的,我只能说你情商不足,辜负了龙的“一片苦心”,她要气背过气去了;若你是假意的,那么你对我来说,就只是“你们”,而不是“咱们” -- 如前所述,你愿意做“你们”,还是愿意做“咱们”,是你的事情,我无所谓。
这就引出了下一个很重要的话题,而以下的内容也是主要说给对我这篇答文多少表示认同的朋友讲的:我整篇答文,既没有对当时在场的大陆学生表示任何赞许,也没有对“香港学生”/“香港年轻人”的观感发表任何评价。这种评价的缺失,确实是我有意不为之。而我真实的评价就是:不知道、无所谓、不相关。我们也看到,本问题下面也有一些朋友提到了,在场的大陆学生“并不这么觉得”,在场的香港年轻学生“很少”,以及,“香港的年轻学生根本不这么觉得”。
于是,如果你们真的对港台真实民意有兴趣,还是建议不要因为这么一个单一的事件,而脑补出一些可能与真实状况相去甚远的想象,然后产生不必要的额外感动,最后口口声声说什么“龙应台被香港人打脸”之类的话,结果却让个别香港人跳出来说什么 “我们大多数人其实根本不这么想” 来刷存在感。非要总结一个“真实民意”的个体感知,现在的香港年轻人,对中国政权无好感的,过半大概无疑问 -- 这也无所谓;而真正重要的是,这群人之中,对“中国人”的身份有真诚的认同感的,是否过半?我还真没这个信心。
最终,正确的“姿势”只有一个,原答文也已经说过了:“你们”到底是愿意当“你们”,还是跟“我们”一起当“咱们”,皮球在“你们”那里,“我们”根本无所谓。如果“你们”选择跟“我们”一起当“咱们”,那也是“你们”自己的主观选择,“我们”可以表示“多一个不嫌多”而表示欢迎,但终究只是不置可否;但如果“你们”只想要当“你们”,乐于跟“我们”划分清楚,那“我们”一定表示“少一个不嫌少”,您自求多福;而如果“你们”不但不愿意跟“我们”一起当“咱们”,而且还轻则贬低“我们”的历史认同和现实追求,重则始终盘算着对“我们”的利益进行实质的损害,那么,“你们”也就不仅仅是不相关的“你们”了,而是“我们”的“敌人”。
所以最后真想说的是,为何一群没有血脉联系的人,愿意聚在一起当“咱们”,就是因为那些共同的历史烙印、文化脉络、意识形态设定,把我们天然地,不带任何强制和压迫地,绑定在了一起,才有了民族,才有了国家,才有了“同胞”一说。绝不是一个人,他身为“华人”,那就天然成了“同胞”,否则骆家辉也该是“同胞”了。对于那些无意与我们共享历史烙印、文化脉络、意识形态设定的“华人”,不但不该有让他们当“同胞”的强迫,甚至都不需要有对他们希望当“同胞”的期许。
21世纪,个体自由为大,一个人认同或不认同自己是“中国人”,一个人爱或不爱特定的社会符号,都是个体无所谓是非的个体核心自由。“龙应台们”愿意当无根之草,就让他们当去;一些不认同自己是中国人的香港人、台湾人,愿意在中国的土地上暂住,那就合法地暂住下去;住不下去了,愿移民就移民,也没人需要拦着。
谢邀!
高中的时候班里有个女孩子特好看,是那种攻击性长相,类似这种↓
当时军训的时候就被人拍下来发到学校,然后就被校友们肉出来了,就暂时叫它小a吧,后来分班的时候她分到了16班,就属于吊车尾的理科班,那个班一共就12个女生,她是里面最漂亮的,所以一开学就收到情书,小礼物什么的,她都没收过,就算是硬塞给她的东西她也一直保存着等找机会还过去,她的性格有一丢丢高冷,也没啥朋友,小a在高一从来没谈过恋爱,可能是追她的人都太低质了吧,后来她和一个小她一届的学弟在一起了,那个学弟长的也不错,但学习不错,属于年级的前30名,当时和小a谈恋爱的事全校师生几乎都知道了,老师同学们也劝过那个男生无数次,但他不听,和小a的关系一直很好,小a和他在一起之后成绩也再慢慢上去,老师们也就没再说什么。
后来高考了,小a没考上,那个男生考上了985的学校,小a为了能和她对象在一起,就去了男生上大学的地方打工,那个男生因为长的不错,到大学有很多人追,追她的女生都是超级优秀的,当然也有比小a漂亮的,那个男的都没答应,他和小a的感情超级好不过后来男的带小a回去见父母的时候,男方父母不同意他们,男的直接不和家里联系了,就自己生活,后来同学聚会的时候小a也是和他一起来的...
就是说,这男方真的很优秀,女方也是,郎才女貌,女孩后来做微商去了,直接比男方还牛,可能这就是真爱吧,最后说一句,小a我爱你
没错我就是小a男朋友,嘿嘿
人类的大脑实在太神奇了。
我出生以来,它24小时不间断工作,但却偏偏在考试的时候,大脑会猛的开始循环播放各类沙雕歌曲。
不会的题越多,想起的歌词越多。
题目越难,想起的歌词越沙雕。
我认为这种想法是非常不正常的想法,正确的做法是适应人类与生俱来肉食习惯。人类是一种名副其实的肉食动物,早在古代人类驯化各种动物的根本目的就是为了获得安全可靠的肉类来源。
经过一代又一代的培养,这些驯化动物可以说是越来越领会到人类的情绪也在主动去影响人类的情绪以避免被吃而成为种,这也导致了以牛为首的动物变得越来越“通人性”。
如果是某些所谓的“宗教信仰”或者生理吸收不了的原因而不愿意吃肉的话可以尊重,但是不能向外界宣扬传教,但是其他没有合理理由的一律认定为邪教。
不吃肉人的性格就会过于软弱,只吃肉人的性格就会过于急躁,两者都是属于典型的极端人士的饮食基础。欧美为什么会有那么多左右极端魔怔人?就是因为他们要么就不均衡地吃肉,要么就只吃蔬菜,而中华均衡饮食所以文化一直保持中庸。
很少有人不基于框架直接写GUI界面啦,我这个回答就从GUI框架反过来推什么语言做GUI合适。(只聊桌面端GUI编程框架)
几乎是C++领域最流行的跨平台桌面端软件开发框架了,这个框架是两个挪威人在1995年创建的,发展至今可以说历史相当悠久,稳定性也很有保障。很多大公司都在用它做界面比如金山的WPS。
它内置了自绘引擎,也就是说界面上的一个按钮,一个文本框,都是Qt的引擎自己画的,这保证了基于Qt开发的软件界面在不同操作系统上看起来是一模一样的。
它提供了大量的与界面无关但与软件开发息息相关的API,比如、网络、文件系统、剪切板等,而且让这些API在不同的操作系统下都有效,这极大的节省了开发人员的时间。
但它也有一些缺点,比如在处理一些特殊需求上很不方便,比如:目前Qt有没有比较好解决高分屏下缩放显示的方案?,Qt没有真正完美的无边框解决方案吗?等,在一些组件的渲染上也会出一些隐藏的较深的问题(QListItem),一旦遇到,就很难解决。
Qt近年来不太专一,qml,qtquick等,搞了很多,而且这些新玩意儿一直不温不火,有些模块做了又废弃了,比如:qt script,搞来搞去,搞的模块繁多且复杂,用起来不是很舒服。
Qt有界面描述语言(XML描述界面),可以通过设计器拖拽空间设计界面,编译期界面描述语言被转义成C++代码,性能上没啥损失。
Qt商业授权不太友好,开发商业应用一定要谨慎,之前听说有公司为此付出了高额的版权费。个人开发者可以免费使用。Qt的免费版本不允许静态链接,会有版权上的限制,但开发者还是可以通过一些特殊的编译方法静态连接Qt的库的。
除了使用C++开发Qt应用外,开发者还可以使用其他语言开发Qt应用,最流行的就是使用Python基于PyQt做Qt应用了,其他语言的绑定不是很成熟,但PyQt仍然有版权的问题。
GTK是1997年创建的,也非常成熟稳定,是C语言开发的,但有很多语言的绑定,比如官方支持的JavaScript、Rust等,当然用C++语言操作GTK也很方便,它也有自绘引擎(Cairo),也提供了大量系统相关的API,商业授权也非常友好,基于GTK开发商业软件不用担心收到律师函的问题,虽然它是一个跨平台桌面软件,但它似乎只在Linux操作系统领域流行,有非常多的Linux桌面软件都是基于GTK开发的。
这也直接导致GTK的维护者很重视Linux领域的发展,而忽视Windows和Mac领域。这个框架提供的很多API,只在Linux下有,Windows和Mac下没有。这样的API数量众多。甚至在Windows下编译一下GTK的源码都要比Linux下难很多。而且GTK的渲染引擎在Windows下性能表现也不如在Linux下好。
GTK在Windows上也没办法静态连接,它到不是因为版权的问题,而是它依赖MSYS2的一些库,这个库用于在Windows上模拟Linux环境,这也是为什么GTK在Windows上表现不佳的原因之一。
另外,由于GTK是C语言开发的,所以开发风格也很C语言化,这对于部分开发者来说可能觉得繁琐。
wxWidgets是1992年英国的一个大学教授开创的跨平台GUI软件,也非常成熟稳定,商业授权非常友好。它没有自绘引擎,而是对不同平台下的界面API做了整合和封装,这样开发者在Windows下开发的软件看起来就是Windows窗口风格、Linux开发的软件看起来就是Linux窗口风格,这对于某些软件来说,正是他们想要的,但要想搞一些花哨的特效就没那么容易了。它同样也提供了大量的系统相关的API供开发者使用。
它是C++开发的,所以对C++开发者非常友好,除此之外它还支持静态连接,也就是说开发个应用不用分发给用户一大堆dll,当然Qt也支持静态连接,但是你得自己编译Qt的源码(不是很方便),而且Qt的授权规则也不允许普通开发者这么做。
它会有些小问题,比如我之前提的:wxEVT_NOTIFICATION_MESSAGE_DISMISSED event emit twice,但总体来说还是非常稳的。除了开发的界面比较死板外,没啥大的问题。目前使用这个框架开发软件的人越来越少了。
fltk是1998年创建的跨平台开源GUI框架,历史悠久,商业授权友好,而且C++之父也用它,它非常轻量级,支持静态连接,一个简单的应用编译后只有500K左右,非常赞,
它有自己的自绘引擎,没记错的话用的是OpenGL,但它的重绘机制是按区域重绘的,如果组件A所在的区域上存在组件B,那么A组件重绘时,会把B组件的给重回掉,开发者必须自己写代码处理这种情况。想象一下,如果你想实现一个A组件fade out的同时B组件fade in的效果,就会非常麻烦。
FLTK提供的一些组件样式都比较刻板,绘图API也比较少,你想实现一个漂亮一点的圆角按钮(它内置圆角按钮的圆角大小是不能改的),必须自己画,而且还得借助一些非常奇葩的手段才行(如果你想知道,可以联系我)
它是C++开发的,但API不够现代,用起来总体还算舒服的,它有Rust绑定:fltk-rs。它的用户比前面三个都少。它提供了一些与界面无关的操作系统API,但非常少,几乎可以忽略。
Duilib
是2010年国内一个开发者开发的GUI开发框架,因为底层基于DirectUI开发,所以只支持Windows平台,不支持跨平台,开源协议友好,商用没有任何问题(需要附加Lincence文件),国内有很多大厂基于这个技术做桌面端应用,比如网易、腾讯、百度,这个框架是基于C++开发的,对C++开发者友好。但框架本身还有一些问题,比如对高分屏支持不佳、特殊控件绘制上也有一些小问题,除了界面相关的API外,几乎没有提供系统级的API,作者纯粹是用爱发电来开发这个框架,所以更新不是很及时。
相对来说网易基于Duilib开发的分支更完善一些:NIM_Duilib_Framework,添加了高分屏支持、多国语言、整合了多线程处理的支持,但环境搭建相对比较麻烦。如果开发者要用这个框架,一定要用develop分支下的代码,master分支下的代码问题很多,这个框架看上去也是作者一个人努力的成果。
Sciter是2006年创建的跨平台闭源GUI框架,足够稳定,商业授权不友好,但个人开发者可以随便用(只能用动态链接库),一旦公司规模超过3人,就得买版权了(有权静态连接)。
它内部封了一个浏览器核心,让开发者使用HTML,CSS,JS来创建界面,但对这个浏览器核心做了大量的精简,不像Electron和NW.js动辄上百兆的体积,它只要6M就够了。当然这也意味着有些浏览器特性它是不支持的,比如CSS3的flex布局,它就不支持(但它提供了自己的flex布局实现方式)。以前它使用自研的一个脚本语言(和JavaScript很像),自从集成了Fabrice Bellard大神的QuickJs之后,就全面支持JavaScript了。它还对一些特殊的场景做了内置的支持,比如渲染大列表。
它使用C++开发,对C++开发者很友好,有Rust、go、Python等语言的绑定,但都是社区提供的,质量堪忧。有很多知名厂商都用这个库做界面,比如360、teamviewer、赛门铁克等。
RmlUi和Sciter很像,可以看成Sciter的替代框架,但RmlUi这个项目有三界作者,一个一个的弃坑不知道新任作者会不会弃坑,目前还不是很成熟,比如我正在尝试帮作者解决的CJK输入法的问题,目前还不推荐大家使用这个框架。
CEF是2008年创立的,基于Chromium的跨平台GUI框架,稳定且商业授权友好,国内很多大厂都用的CEF:比如微信桌面端、网易云音乐桌面端、QQ桌面端、微信桌面端、MATLAB、FoxMail、OBS Studio,装机量破亿。
由于它几乎封了一个完整的Chromium,所以体积非常大,但支持所有的HTMLCSSJS特性,它几乎不提供任何与操作系统相关的API,创建个托盘图标、读写个文件啥的,都要开发者自己完成,它是C/C++开发完成的,对C++用户非常友好,它有gopythonjava等语言的绑定,但都是社区提供的,质量值得担忧。
它对Chromium封装的很好,避免了开发者直接与Blink、V8、Chromium等复杂的代码打交道,很多功能都有默认实现方式,遵从约定由于配置原则,有经验的C++开发者可以很轻松的驾驭CEF框架。
由于Chromium是版本弟,所以CEF版本发布也非常频繁,很多被标记为稳定的版本,还是会出一些莫名其妙的问题,选一个好的版本非常重要。
与Electron一样,它也是分主进程和渲染进程的,所以开发者要非常娴熟的运用跨进程通信的技术,虽然CEF提供了跨进程相关的API,但复杂度还是有点高的,使用的时候要认真细心。
这是微软的跨平台GUI框架,不仅仅支持桌面端,还支持移动端,但官方并不支持Linux的桌面端(黑人问号,感觉与微软近些年向开放、开源的大方针相悖),这个框架新的狠,至今还没发布稳定版。目前还没什么人用。而且不知道将来会不会被微软放弃。
它是.NET平台下的GUI框架,有自绘引擎,对C#开发者很友好,界面依然是用XAML描述的,可能很多人一听到XAML就直接弃坑了。XAML表现力确实弱一些,我觉得WPF没火起来跟XAML有直接关系。
使用这个框架开发桌面应用得封一个.NET框架给用户,当然有了.NET框架应用程序访问一般的系统级API也就不成问题了。
这是JetBrains搞的跨平台GUI框架,也非常新,前段时间刚刚推出1.0.0版本,但这个版本还不是很稳,至少比Flutter Desktop的第一个稳定版要差很多。同样也几乎没什么人用。
它的自绘引擎用的是Google的skia,这个自绘引擎稳的很,Chrome和Flutter都是用的它,所以排版、绘制、渲染之类的工作不太会出问题。比Java生态圈里的Swing和JavaFx要好很多。
JetBrains的东西当然对Kotlin开发者友好啦,Java生态下的很多东西你都能用,访问系统级API也没啥大问题,同样也得考虑封一个JRE给用户。
这是谷歌的跨平台开发框架,开源、免费、文档齐全、投入力度大且持久,同样也新的很,Windows版本刚刚发稳定版,Mac版本还没稳定。
如果你完全没搞过移动端的flutter,想用这个框架开发桌面应用,那么意味着你要学的东西还挺多的。好在dart和flutter入门都不是很难,学习曲线比较平缓。
由于flutter在移动端积累了很多年,所以界面上的一些东西在desktop端都比较稳(skia自绘引擎),与操作系统相关的东西还不成熟,生态也不太好,比如你想订制一下窗口的标题栏,想访问一下注册表这类工作可能得自己想办法。不过它有类似FFI的支持,跟C/C++语言打交道很方便。
开发者直接使用Dart语言描述界面,这会导致众多大括号嵌套在一起的问题,可能很多开发者不习惯。
这是微软Edge浏览器团队推出的跨平台GUI引擎,是闭源的,目前只支持Windows,对C#和C++开发者友好,如果使用C#开发,就得考虑把.NET运行时分发给用户,如果使用C++开发,就得自己处理系统级API的操作,webview2本身是不对系统级API做封装的。
这个框架推出也没多久,很多API也还不稳定,更值得担忧的是这个团队,他们前不久刚刚放弃了自己的浏览器核心转而使用Chromium浏览器核心,不知道他们会不会放弃webview2这个框架。
它的优势是可以复用系统当中已存在的webview2二进制资源,也就是说它虽然封了一个Chromium浏览器核心,但如果你可以确定客户电脑已经存在了基于webview2开发的应用,你的安装包体积可以足够小。
它也是多进程架构,甚至比Electron还要多一个进程(为了复用二进制资源),资源占用比较多。
这个库使用操作系统的浏览器引擎来达到减小安装包体积的问题,Mac上使用Cocoa/WebKit,Linux上使用gtk-webkit2,Windows 10上使用Edge(也就是上一个小节里提到的webview2),它应该是不支持Win7的。开发者要考虑前端代码浏览器兼容的问题。
开源且免费(MIT)有go、Rust、Python等语言的绑定,不过官方支持的是go语言,C和C++,操作浏览器的API非常少,不支持自定义scheme,更别提系统级API了。
采用的技术方案与webview类似,所以安装包也足够小,非常新,还没发布稳定版,开源免费。webview框架碰到的问题TAURI都有,
使用Rust开发,将来会支持Deno,作者说将来会直接使用webview的技术来支持多平台,
NW.js最早把Chromium和Node绑定到一起,用前端知识做界面,用Node技术访问操作系统,最早叫node-webkit,在2012年创建。NW.js基于MIT开源,可以无忧使用。没记错的话,微信小程序开发工具是用NW.js开发的。作者是英特尔的员工,英特尔的一些工具也是用NW.js开发的。
除了Chromium和Node的能力外,NW.js自己也封装了一些系统级API,类似托盘图标、剪切板、系统菜单这种,但数量明显比Electron要少。
NW.js可以在多个窗口间共享同一个Node.js上下文,而且还可以通过配置让Node的上下文和Dom上下文混合,这给开发者带来了很多便利。心智负担减少很多。不像Electron要时刻想着进程间通信,哪些模块当前进程不能用这类问题。
NW.js虽然起步早,但奈何没有杀手级应用,周边的生态和工具链没发展起来。用的人越来越少,维护的投入也不如Electron大,再加上Chromium更新非常频繁,导致NW.js的有些API也不是很稳,恶性循环加剧。
Electron的作者曾经在NW.js团队工作过(NW.js项目贡献第二多的人就是Electron的作者),后来辗转到了github公司,于2013年在创建了Electron,也是个开源免费的产品。由于VSCode、slak等国际型产品都选择了Electron,所以从者甚众,生态和周边工具链也完善的多。虽然开发方式上有点蹩脚的地方(多进程架构及模块归属进程),但瑕不掩瑜。
Electron每创建一个窗口都会多一个进程,这使Electron创建窗口的效率不高(秒级),NW.js有复用进程的机制,即使新窗口加载完全不同域的页面也不会创建新的进程(毫秒级)。这也是为什么很多基于Electron开发的应用都使用Dom模拟弹窗的原因。
无论是浏览器相关的API,还是系统级API,Electron提供的都比NW.js多。
--------2022-02-25更新--------
这些框架除了对开发者使用的编程语言有要求外,还有一个重要的差异就是有没有独立的界面描述语言(也就是UI DSL),这非常重要,涉及到一个框架表达业务的重要能力。
类似XAML、qt的ui文件、HTML+CSS都是界面描述语言,下面这种也可以算界面描述语言,但我感觉它不够纯粹(flutter、qml和Compose Multiplatform都是类似这样的):
panel { row { checkBox(...) row { textField(...) // indented relatively to the checkbox above } } }
但无论如何,显而易见的是,没有任何一个界面描述语言能比的上HTML+CSS组合。想想看:HTML里各种花里胡哨的语义化标签和Dom操作技巧,CSS里的布局方式、伪元素、动画描述...,对比之下你就会觉得XAML、qml直流都是弟弟。
除此之外,一个优秀的GUI框架还有两个重要的需求,这里我简单聊聊:
强大的事件处理机制必不可少。
想想这些:鼠标事件、键盘事件、触屏事件...界面加载完成、媒体播放结束、元素大小改变...网络状态变更、数据段传输完成...另外,还得处理事件冒泡、事件捕获、事件分发吧...
qt的开发者曾经说过qt的SIGNAL和SLOT机制是有性能问题的(但影响很小)
强大的异步处理机制必不可少
你不能在用户处理业务逻辑的时候,让界面渲染工作阻塞,这就需要一个强大的异步处理机制,让开发者自己去开线程去完成业务处理,无疑是又麻烦又会增加开发者的心智负担。
我记得很早之前在C# WinForm应用中,点击一个按钮,如果不用Invoke执行逻辑处理的话,界面就会卡死。
这么看来,在你的GUI应用里包一个浏览器核心还是挺有必要的,这样你就可以用HTML+CSS强大的能力来描述你的界面,用JavaScript强大的事件处理机制和异步处理机制来完成用户交互。
可能有人会想,这会带来很多问题呀,比如应用体积会增大的100M以上、会占用更多的CPU和内存资源,还会更耗电等等。
确实,目前来看这些都是问题,但仔细想想,这些问题应该不会持续太久,网络会变的更快,用户的磁盘和内存会变得更大,CPU处理能力也会更好,耗电的问题当然会持续存在,甚至会愈发耗电,但电的供应会持续增长呀。
web相关的技术之所以胜出,并不是这些技术的设计者有多厉害,而是这20多年间,有大量的人涌入了这个领域,前赴后继的推动着它前进。其他任何一个领域都没有这么热火朝天的景象。推荐大家看看我的另一个回答:
------------2022-02-27更新----------
用Web相关的技术做GUI应用的优势是,让开发者可以把大部分精力投注在业务本身上,而不是处理与GUI相关的技术细节。
实际上所有的框架,都应该是这个目的,比如ORM框架,目的应该是让开发者把大部分精力投注在业务与数据之间的关系上,而不是管理关系型数据的技术细节。
当然这肯定是有损耗的,在性能、稳定性、资源消耗上,都会有所削减。而且,因为有框架的存在,开发者很难深入到框架内部做一些特殊的事情。比如,我们该如何修改HTML的排版渲染机制呢?
所以,有些框架注重性能,有些框架注重开发效率,开发者做选择题的时候也应该衡量这两个问题,你的应用对哪些方面要求多一些呢?
你如果要开发一个视频监控系统,没多少业务功能,但要24小时不间断的记录视频数据,随时调取某一段时间的视频数据,这种应用可能Qt是最好的选择。
你如果要开发一个类似飞书的团队协作应用,业务逻辑复杂的一塌糊涂,而且要在短时间内满足更多用户的需求,占领更多的市场,那么Electron可能是更好的选择(目前飞书已经不再用Electron了,他们自己编译了Chromium核心,自己封了一个类似CEF的框架)
目前微软、谷歌、JetBrains等公司都非常重视桌面端开发框架,也在推各自的框架产品,说明桌面应用领域并没有没落,反而应该更加受到重视。
虽然移动端应用大行其道,但我认为,只有生活、社交、轻娱乐等方向上的应用在移动端有较好的发展。文档协作、大型游戏、开发工具、专业管控软件等应用还是在PC端发展的更好一些,毕竟PC端有更多样的输入输出设备、更广阔的显示和交互的空间,更强的存储和计算能力。
希望桌面软件开发领域的从业者都能获得幸福。
满屏荒唐言,一把辛酸泪,一把辛酸泪,一把辛酸泪...