Qt 和 React Native 都是跨平台 UI 框架,为什么前者能跨语言用还叫 Native 开发,后者只能用 TypeScript 却不叫?

2022-08-13 13:14:01 +08:00
 edis0n0
1629 次点击
所在节点    程序员
4 条回复
ericguo
2022-08-13 13:34:17 +08:00
Native 与否是指程序执行的时候是否是以本机机器吗方式运行。

Qt 内核是 C++,编译为 Binary Code ,当然是 Native ,React Native 还是 JS 解释器执行的业务逻辑,所以不是。
ysc3839
2022-08-13 16:50:12 +08:00
React Native 的 Native 指的是调用系统提供的界面库,而非自己实现一个界面库,代码逻辑部分不 Native 。
secondwtq
2022-08-14 02:09:12 +08:00
考虑一下“Native 开发”这个词的意义,当你提到这个词时它一般是相对于“H5 开发”的( despite 你们多不喜欢这个说法,很多团队就是这么用的)

在技术不断演进的背景下,这两个词已经不是严格按照技术定义的了,真要按照工作内容来准确描述的话应该是“C++ Qt 开发”“Python Qt 开发”“QML 开发”“React 开发”“React Native 开发”,当你使用“Native 开发”和“H5 开发”这两个词时已经决定了你使用的是上面那套习惯性的语言,而不是下面这套更精确的语言

然后考虑“Native 开发”和“H5 开发”的区别,主要是开发效率,部署方式,开发语言,跨平台开发,性能和体验等,所以这个逻辑是先把技术方案的特点 map 到这些维度,计算它们与“Native”和“H5”的“理想型”的距离,也就是它不是一个维度的事情
abcbuzhiming
2022-08-14 10:09:52 +08:00
Native 的核心,是你的代码,要编译成本地二进制文件,也就是,和操作系统相关的二进制文件,可直接被操作系统执行。这个东西是不可跨平台的,windows 下的 PE 文件 Linux 就执行不了。

像 js runtime ,jvm ,.net runtime ,在这些都是在虚拟机上跑的,其代码直接编译成中间字节码,操作系统本身并不能识别并执行这种文件,必须借助一个中间环节翻译(大部分时候这个中间环节都是虚拟机)后才能执行,所以不能叫 Native 。

上一个时代,搞本地化编译很困难,因为那还是一个操作系统技术快速演进,各种新技术标准层出不穷的时代,本地二进制编译很不好做,基于这点,上一个时代的绝大部分能跨平台的语言都自带虚拟机(似乎就没有不带的,但是为了防止我才疏学浅有没见过的特例,我说是绝大部分)。但是后来操作系统的技术逐渐稳定,然后,本地二进制编译语言阵营这边诞生了一个非常有野心的家伙 LLVM ,LLVM 原本的名字是 Low Level Virtual Machine. 虽然它现在已经和虚拟机没什么太大关系了,但是在它诞生的时候,它的野心在于取代虚拟机。

之后本地二进制编译技术在 LLVM 带来的技术革新下就迎来了新的曙光,导致之后诞生的语言优先选择了本地二进制编译,代表人物就是 Go 语言。

因此,React Native 虽然带有 Native ,但是严格来说,至少现在,它不能叫 Native 开发。当然,这个时代几乎所有语言都在折腾本地二进制编译,js ,java ,.net 都在搞本地二进制编译,.net core 甚至基本已经接近成功了。所以没准以后的某天,React Native 就真的是 Native 了

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

https://www.v2ex.com/t/872601

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

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

© 2021 V2EX