V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edis0n0
V2EX  ›  程序员

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

  •  
  •   edis0n0 · 2022-08-13 13:14:01 +08:00 · 1619 次点击
    这是一个创建于 615 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ericguo
        1
    ericguo  
       2022-08-13 13:34:17 +08:00   ❤️ 3
    Native 与否是指程序执行的时候是否是以本机机器吗方式运行。

    Qt 内核是 C++,编译为 Binary Code ,当然是 Native ,React Native 还是 JS 解释器执行的业务逻辑,所以不是。
    ysc3839
        2
    ysc3839  
       2022-08-13 16:50:12 +08:00 via Android
    React Native 的 Native 指的是调用系统提供的界面库,而非自己实现一个界面库,代码逻辑部分不 Native 。
    secondwtq
        3
    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
        4
    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 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2949 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:44 · PVG 11:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.