百科问答小站 logo
百科问答小站 font logo



如何评价《原神》钟离专武名称「贯虹之槊」? 第1页

     

user avatar   shu-jie-nu-dun-22-52 网友的相关建议: 
      

咱也不玩原神,也不知道什么游戏的东西,单纯就是从古文献的角度,拿“白虹贯日”这个东西来说两句。

白虹贯日一方面确实是弑君之征兆,诚若对褚渊之评价所云:

轻薄子颇以名节讥之,以渊眼多白精,谓之“白虹贯日”,言为宋氏亡征也。[1]

这段在各个回答里也被反复提到了,这句话本身当然只是对褚渊其人罔顾国恩,助萧道成行宋齐易鼎之事之讽刺,当然,白虹贯日作为天象也确实代表了弑君,若《唐雎不辱使命》载:

夫专诸之刺王僚也,彗星袭月;聂政之刺韩傀也,白虹贯日;要离之刺庆忌也,苍鹰击于殿上。[2]

又汉代邹阳曾云:

昔者荆轲慕燕丹之义,白虹贯日,太子畏之。[3]

很明显,在这里,“白虹贯日”的天象被与聂政、荆轲刺杀韩傀、嬴政的历史事件相关联。所以可以说,在古人的认知中,“白虹贯日”应当确实与弑杀之类的行为有关。

我们必须确定,天象是死的,但人是活的,天象本身是客观的天文现象,但是人的解释具有主观性。因此,任何一个天象都不只有一重含义,甚至同一个天象本身也有吉有凶。《宋书》卷二十七《福瑞上》记载:

建安十九年正月,白虹贯日。《易传》曰:“后妃擅国,白虹贯日。”[4]

类似的,《晋书》卷十二《天文中》记载:

咸康元年七月,白虹贯日。二年七月,白虹贯日。自后庾氏专政,由后族而贵,盖亦妇人擅国之义,故频年白虹贯日。[5]

在这里,“白虹贯日”的天象又被解释为后妃擅权的征兆,咱不能只看《褚渊传》啊,要不把这里也释读为阴盛阳衰之征如何?

另外,东汉郎顗在奏疏中称:

臣窃见今月十四日乙卯巳时,白虹贯日。凡日傍气色白而纯者名为虹。贯日中者,侵太阳也;见于春者,政变常也。……又《易传》曰:“公能其事,序贤进士,后必有喜。”反之,则白虹贯日。[6]

那么,大约在绝大多数的情况下,“白虹贯日”的核心应当是在于“侵太阳”,也就是君主专制受到损害。——无论是《褚渊传》里的“宋齐易鼎”,还是《福瑞上》里的“后妃擅国”,又或者是《郎顗传》里的“政常变”、不能“序贤进士”,大抵对于政治而言都绝非什么善事。

下一个问题就是,即便是“白虹贯日”四字,其能否被完全释读为“奸佞之徒”,我认为是不能的。词典里面确实把“贯虹”和褚渊联系在了一起。但是,如笔者先前所述,即便是“白虹贯日”作为天象,并非针对某一个特定个人,就算有,指定的也是皇帝。那么,回到褚渊的问题上,根据天象原有的涵义进行衍发,其针对的对象也应该是刘宋政权,或宋后废帝、宋顺帝。

明代有人云:

禇彦回美姿貌善容止时以方何平叔袁粲曰禇公眼睛白多所谓白虹贯日亡宋者终此人也[7]

在这里,称褚渊白虹贯日者不再是《南齐书》中的“轻薄子”,而是宋明帝托孤大臣之首的刘宋晚期名臣袁粲。当这个人物发生变换的时候,白虹贯日中的讽刺意味被进一步消解,核心也就变成了“亡宋者终此人也”的政治预言。

当然,明人写的东西可信度显然不高,最起码不会高过萧子显的《南齐书》。但是,从另一个侧面来讲,对于古人而言,即便是褚渊眼睛的“白虹贯日”,其也是更偏向“宋氏亡征”的政治预言,而非聚焦于褚渊其人拙劣之品行,更不用说再从褚渊个人衍伸为奸佞之人了。

但是,如我先前所说,单一天象本身也具有吉凶二重性,至于吉凶,完全依赖阐释者而决定。《开元占经》中记载:

日抱且兩珥一虹貫抱中日順虹擊者勝殺將……日重抱左右二眊有白紅虹貫抱順擊勝得二將有三虹得三將[8]

在这里,仍然是虹贯中日的天象,但是在《开元占经》的记载中,这却成为了“胜杀将”的吉兆。由此来看,白虹贯日的天象一方面对于政治而言,是最高权力出现波动的凶兆与政治预言,但如果在军事行动中,即便是“白虹贯日”的天象本身,也可以被释读为斩将破敌之征。——在这里,“日”不再是皇权的象征,而是敌军主帅的象征,所以顺虹而击,就可以像虹贯日一样斩杀敌将。

如果能将“贯虹”释读为“白虹贯日”,进而根据《褚渊传》之记载,认为这是奸佞之表征(其实已如前所述,白虹贯日并非指代奸佞,而是强调皇纲失统的政治预言)的话,我们显然也可以根据《开元占经》的记载,将贯虹释读为“胜杀将”,如此倒也未尝不可。

而且,如果放在武器的名字中的话,显然军事象征应该优先于政治预言,所以就算贯虹真的是“白虹贯日”,其实也更可能理解为“陷阵斩将”,而非皇纲失统(笑

下一个问题就是“贯虹”和“白虹贯日”之间到底有没有关联。有答主从语序的角度上说没有,当然,如果单纯走语序的话,贯虹确实更可能是气贯长虹之缩写,而非白虹贯日之缩写,但事也不能绝对。比如李白在诗里说:

笑尽一杯酒,杀人都市中。羞道易水寒,从令日贯虹。[9]

在这里,从“易水寒”来看,显然是化用了荆轲的典故,但李白并没有使用“白虹贯日”,而是将其倒置,变成了“日贯虹”。当然,明眼人都看得出,这是为了押韵。但是,这一情况似是孤例,将“虹贯日”倒置为“日贯虹”之现象并不多见,当然也有人会在诗词中写什么“白日贯虹”(没错,说的就是方岳),但这个就是彻彻底底的孤例了[10]。但是,方岳词中用“白日贯虹”似乎也不符合格律中“中平中仄”的平仄,若用“白虹贯日”反倒是符合的,所以不能排除原文是白虹贯日,但抄录出现错误(当然,古音不同于今音,笔者对古音了解较少,如果确实是古今音的问题,恳请指教)。

单纯“贯虹”的出现,几乎都是作为褒义而存在,如:

丈夫心肠如铁石,气概贯虹蜺,不免屈志于女人。[11]

又如:

致君意气日方中,许国精诚月贯虹。[12]

无论从哪个方面来看,“贯虹”二字除却极少数情况以外都不能与“白虹贯日”之天象勾连,更不用说和褚渊的特定典故挂钩了。总之,笔者才疏学浅,但也实在没有找到以“贯虹”二字用褚渊之典的例子。若是强行将“贯虹”理解为“白虹贯日”,再引申为褚渊,进一步阐释为奸佞之徒,并最后释读为勾罕见,这种思维之跳跃实是令人叹为观止。



截止目前,本回答46个赞,被压在这么下面,就离谱,天知道我挨了多少个踩。

参考

  1. ^ (梁)萧子显《南齐书》
  2. ^ (汉)刘向《战国策》
  3. ^ (汉)司马迁《史记》
  4. ^ (梁)沈约《宋书》
  5. ^ (唐)房玄龄等《晋书》
  6. ^ (刘宋)范晔《后汉书》
  7. ^ (明)陈耀文《天中记》
  8. ^ (唐)瞿昙悉达《开元占经》
  9. ^ (唐)李白《结客少年场行》
  10. ^ (南宋)方岳《沁园春》
  11. ^ (明)兰陵笑笑生《金瓶梅》(万历本)
  12. ^ (北宋)陈师道《寄子开》

user avatar   xiao-cao-87-98-63 网友的相关建议: 
      

这件事情,比起这个词语本身,更应该看到事件背后的意义。

这其实并不是一次商业性的舆论攻伐,而是起源于贴吧的魔怔乐子人(即大家所说的猴儿)的“反串”、“抹黑”行为。

互联网上,存在着这么一股非经济利益导向的闲人,专为攻讦他人而存。手段轻则造谣、重则网暴和人肉,可谓无所不用其极。

这其实代表了当前互联网混乱的情况,牛鬼蛇神横行,从造谣乐子人到1450,已经成为了一股不可忽视的力量。互联网长期的无规则自由,导致了人性恶的肆意蔓延。一个词语释义,如何被曲解,只是小事,普通人乃至国家如何面对从互联网溢出恶才是根本大事。

俄乌战争,更是向我们展现了舆论战的力量。这群猴,网暴普通人满足不了他们内心的恶,更要小心挑战国家秩序,这些猴,就是天生的免费颜色革命的先锋队,乐于攻击秩序。从攻击消防英雄,到网暴大使馆,渴求破坏秩序的心,真的跃然纸上。

说到底,一个词,小事而已。而小心这群东西成为国外舆论战的主力军以及颜色革命的先锋队,才是大事。完善互联网相关法律,打击网络邪教,打击颜色革命,已经迫在眉睫。


user avatar   bing-xue-tian-91-56 网友的相关建议: 
      

贯虹指汉奸?

人民柴世杰,浩气贯长虹。——陈毅

贯虹指汉奸?

我不关心那个sb什么时候把贯虹和白虹贯日等同,他可能心怀不轨,也可能单纯蠢而已,你打死人和被打死是一个意思?蜜蜂蜂蜜一个意思?

但现在把大喊贯虹等于汉奸

的,谁是汉奸那可不好说了吧。


user avatar   la-la-la-31-41 网友的相关建议: 
      

“牝鸡司晨”这个词在古代,指宦官弄权,奸佞当道,国家沦丧。

所以我怀疑“司机”这个职业有恶意污蔑嫌疑,建议取缔。




真就梦回60年代是吧


user avatar   zhang-you-88-36 网友的相关建议: 
      

这一波可以说是原神对内文化扫盲的典型案例了,而且还是文盲们自己跳出来说自己是文盲,旁观吃瓜者直呼过瘾。

一直以来,网上都充斥着很多所谓的“这几个词你一直用错了”,“这几个成语原来不是我们想的那个意思”,把古人的玩梗当作汉字本源的意思,把玩梗的意思当作汉字的唯一意思,把汉字的原意当作不存在的各种自媒体、营销号,完完全全在博人眼球,传播了一堆堆错误的观念。

举个例子,比如最经典的“人尽可夫”,意思就是单纯的人人都可以做自己的丈夫。用在不同的环境下,自然给人的感觉不一样。用来说一些烧鸡,就是讽刺他们谁都能上,这也是现在最常见的用法。然而一些营销号发现,这个词的出处和现在的用法不一样,“文化扫盲”就随之而来了。

像这样的词,它用来指什么的时候,就是用来指什么的。

爸爸和老公谁更亲?

答:爸爸只有一个,老公却是嫁给谁谁就是,而嫁给谁都行的,所以爸爸更亲。


这在古代是一个梗,但其本意就是字面意思,用来指它的原意怎么还成错的了?

现在说惯了菊花的梗,菊花就不是一种植物了?说惯鲍鱼的梗,鲍鱼就不是一种动物了?


再比如,衣冠禽兽,衣服上面画着禽和兽。所谓飞禽走兽,古人把会飞的动物统称为禽,走路的动物统称为兽。谁衣服上画着禽兽?官员们。所以,当官员们做个人的时候就是赞美,官员们不是人的时候,就是在骂他们。

换句话就是:“你衣服穿的真好看”,省略了后半句,后半句可以是“和你人一样美”,也可以是“人却真不是个东西”。放到现在就是一个你衣服真好看的梗而已。阴阳怪气,现在叫说这种讽刺话的人“阴阳人”。而阴阳人古时候又是在说太监。看明白了吗,完全就都是梗,就看你怎么用它。


但是玩梗也要适度好不好,不能本末倒置了,无视原意还出来带节奏。


白虹贯日:(白)白色的(虹)长虹(贯)贯穿了(日)太阳。古代认为这样的天象往往对应现实,出现这种天象时会有不好的事情。

被古人玩梗认为不吉利。



贯虹之槊:贯穿了长虹的槊。强调这把武器很厉害,能把虹贯穿。

被文盲认为是白虹贯日的槊。


总结一下就是,经典的又一次别有用心的坏人骗傻子,一起带节奏的戏码。最开始提这个的人既然知道白虹贯日,说明不是傻子,是坏人。憨憨群众要擦亮眼睛,别上了坏人的当。


user avatar   lay-64-23 网友的相关建议: 
      

我的评价是

满清都觉得离谱

这个词条该改改了,“世界历史为之罕见,中国历史上绝无仅有的文化恐怖制度。”在原神黑子面前,已经是个开明的政权了。


user avatar   nsyncer 网友的相关建议: 
      

这呆逼武器最开始设计出来可以见得策划组是真的想把钟离当武神大C用的,可惜设计跑偏了,结果弄成了历史遗留问题又不想改,就成了现在的五星第一垃圾。

变强也很简单,所有的攻击词条改生命即可。


user avatar   an-du-yin-wu-rui-en-45 网友的相关建议: 
      

挺搞笑的提问啊……

斯诺登都过去这么久了,

不会还有人不知道拉登塔利班什么的一开始都是美国资助的吧?

恐怖组织?

美国不管它们,它们发展的起来吗?

大部分恐怖组织不就是美国为了搞俄罗斯或者其他人搞出来的代理人吗?

====================

嗯,对了,不懂的可以去看这个,

神解读!姜子牙讲的其实是美国本拉登和斯诺登的故事_哔哩哔哩_bilibili


user avatar   selfish-10 网友的相关建议: 
      

因为intel换酷睿系列商标了:


user avatar   jing-lian-ju-shi-42 网友的相关建议: 
      

很少有人不基于框架直接写GUI界面啦,我这个回答就从GUI框架反过来推什么语言做GUI合适。(只聊桌面端GUI编程框架)

Qt

几乎是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

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

wxWidgets是1992年英国的一个大学教授开创的跨平台GUI软件,也非常成熟稳定,商业授权非常友好。它没有自绘引擎,而是对不同平台下的界面API做了整合和封装,这样开发者在Windows下开发的软件看起来就是Windows窗口风格、Linux开发的软件看起来就是Linux窗口风格,这对于某些软件来说,正是他们想要的,但要想搞一些花哨的特效就没那么容易了。它同样也提供了大量的系统相关的API供开发者使用。

它是C++开发的,所以对C++开发者非常友好,除此之外它还支持静态连接,也就是说开发个应用不用分发给用户一大堆dll,当然Qt也支持静态连接,但是你得自己编译Qt的源码(不是很方便),而且Qt的授权规则也不允许普通开发者这么做。

它会有些小问题,比如我之前提的:wxEVT_NOTIFICATION_MESSAGE_DISMISSED event emit twice,但总体来说还是非常稳的。除了开发的界面比较死板外,没啥大的问题。目前使用这个框架开发软件的人越来越少了。

FLTK

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

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

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,但复杂度还是有点高的,使用的时候要认真细心。

MAUI

这是微软的跨平台GUI框架,不仅仅支持桌面端,还支持移动端,但官方并不支持Linux的桌面端(黑人问号,感觉与微软近些年向开放、开源的大方针相悖),这个框架新的狠,至今还没发布稳定版。目前还没什么人用。而且不知道将来会不会被微软放弃。

它是.NET平台下的GUI框架,有自绘引擎,对C#开发者很友好,界面依然是用XAML描述的,可能很多人一听到XAML就直接弃坑了。XAML表现力确实弱一些,我觉得WPF没火起来跟XAML有直接关系。

使用这个框架开发桌面应用得封一个.NET框架给用户,当然有了.NET框架应用程序访问一般的系统级API也就不成问题了。

Compose Multiplatform

这是JetBrains搞的跨平台GUI框架,也非常新,前段时间刚刚推出1.0.0版本,但这个版本还不是很稳,至少比Flutter Desktop的第一个稳定版要差很多。同样也几乎没什么人用。

它的自绘引擎用的是Google的skia,这个自绘引擎稳的很,Chrome和Flutter都是用的它,所以排版、绘制、渲染之类的工作不太会出问题。比Java生态圈里的Swing和JavaFx要好很多。

JetBrains的东西当然对Kotlin开发者友好啦,Java生态下的很多东西你都能用,访问系统级API也没啥大问题,同样也得考虑封一个JRE给用户。

flutter-desktop

这是谷歌的跨平台开发框架,开源、免费、文档齐全、投入力度大且持久,同样也新的很,Windows版本刚刚发稳定版,Mac版本还没稳定。

如果你完全没搞过移动端的flutter,想用这个框架开发桌面应用,那么意味着你要学的东西还挺多的。好在dart和flutter入门都不是很难,学习曲线比较平缓。

由于flutter在移动端积累了很多年,所以界面上的一些东西在desktop端都比较稳(skia自绘引擎),与操作系统相关的东西还不成熟,生态也不太好,比如你想订制一下窗口的标题栏,想访问一下注册表这类工作可能得自己想办法。不过它有类似FFI的支持,跟C/C++语言打交道很方便。

开发者直接使用Dart语言描述界面,这会导致众多大括号嵌套在一起的问题,可能很多开发者不习惯。

webview2

这是微软Edge浏览器团队推出的跨平台GUI引擎,是闭源的,目前只支持Windows,对C#和C++开发者友好,如果使用C#开发,就得考虑把.NET运行时分发给用户,如果使用C++开发,就得自己处理系统级API的操作,webview2本身是不对系统级API做封装的。

这个框架推出也没多久,很多API也还不稳定,更值得担忧的是这个团队,他们前不久刚刚放弃了自己的浏览器核心转而使用Chromium浏览器核心,不知道他们会不会放弃webview2这个框架。

它的优势是可以复用系统当中已存在的webview2二进制资源,也就是说它虽然封了一个Chromium浏览器核心,但如果你可以确定客户电脑已经存在了基于webview2开发的应用,你的安装包体积可以足够小。

它也是多进程架构,甚至比Electron还要多一个进程(为了复用二进制资源),资源占用比较多。

webview

这个库使用操作系统的浏览器引擎来达到减小安装包体积的问题,Mac上使用Cocoa/WebKit,Linux上使用gtk-webkit2,Windows 10上使用Edge(也就是上一个小节里提到的webview2),它应该是不支持Win7的。开发者要考虑前端代码浏览器兼容的问题。

开源且免费(MIT)有go、Rust、Python等语言的绑定,不过官方支持的是go语言,C和C++,操作浏览器的API非常少,不支持自定义scheme,更别提系统级API了。

TAURI

采用的技术方案与webview类似,所以安装包也足够小,非常新,还没发布稳定版,开源免费。webview框架碰到的问题TAURI都有,

使用Rust开发,将来会支持Deno,作者说将来会直接使用webview的技术来支持多平台,

NW.js

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

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端有更多样的输入输出设备、更广阔的显示和交互的空间,更强的存储和计算能力。

希望桌面软件开发领域的从业者都能获得幸福。

满屏荒唐言,一把辛酸泪,一把辛酸泪,一把辛酸泪...





     

相关话题

  如果《原神》策划要出克制雷电将军的怪物,这怪物机制如何设计? 
  《原神》雪山中有一个会飞的球型怪物且会向你发射冰子弹,是什么怪物? 
  如何看待胡桃卡池复刻后《原神》服务器爆满? 
  你对游戏《原神》中最无感的角色是哪个? 
  57级大佬带我打深海龙蜥,若驼龙王,打了好几次都没打过,这正常吗? 
  我觉得原神非常非常好玩,但是在网上几乎都是喷原神的,是我游戏的品味太低吗? 
  《原神》里为什么总有四五十级的大佬申请加入我的游戏? 
  为什么我觉得塞尔达不如原神好玩呢? 
  如何评价明日方舟吧有人发布原神「可莉」的R18G图? 
  米哈游《原神》一周年周年庆为何争议这么大?福利是否代表游戏的一切? 

前一个讨论
官渡之战,曹操赤脚迎许攸之事,真的对整场战役起了决定性作用吗?
下一个讨论
你为什么还在坚持看黑白漫画?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利