鸿蒙系统扫盲(五):再谈鸿蒙开发用什么语言?

前段时间,发表了鸿蒙系统扫盲(三):鸿蒙开发用什么语言?这篇文章,收到一些网友的提问,一一解答了,还有网友对我进行了严厉的批评和尖锐的指责,说我有点颠倒是非,ts的是脚本语言,Java是编译语言,我说ts的性能超过Java,是来搞笑的。

本着严谨学习的态度,我查阅了大量的资料,也向一些大神请教了,觉得有必要再深入,全面但用不要故作高深地、通俗易懂地拓展一下这方面的知识,这是一个开放交流的平台,如果有错误之处,希望大家指出来,一起学习进步!

1.Java是解释型语言还是编译型语言?

首先看一个事例:如果你是一个外交官,你要出访一个国家A,但是你不会A国的语言,这时候你就必须带一个翻译官,你说一句中文,他就会给你翻译成A国语言,讲给对方听,这个场景大伙应该不陌生,这就是解释型语言的运行过程;

形象化解释型语言整个过程

解释型语言的编译执行过程

而如果你会A国的语言,可以直接表达出你的想法,这个就是编译型语言的运作过程:

形象化编译型语言

编译型语言编译执行过程

很明显,编译型语言的运行效率要远远高于解释型语言,而我们常说的JVM(Java虚拟机)就是翻译官的经典代表,它的一部分职责就是做这个翻译的工作,当然它还有其他工作。而解释型语言的代表就是耳熟能详的C/C++、Rust,以及IOS应用的开发语言,Object-C、Swift等。所以现在应该能理解,为啥苹果就是流畅,安卓不管怎么优化都会卡,这是其中一个重要的原因。

在《编译原理》这门课程中,Java作为解释型语言的一个代表,它是不能脱离JVM而单独运行,但是后来Java为了提高运行效率,陆续推出了JIT技术、AOT等技术,以此来提高Java的运行效率,这也是很多人认为它是编译型语言的原因。

形象化JIT和AOT技术

JIT技术:类似于你说的一些高频词语,翻译官经常翻译后记住了,后面再有相同或者相似的词语句的时候,不需要再经过翻译,可以脱口而出,提高效率。

AOT技术:类似于一些开场固定话术,常用话术,你在见对方前,先背诵下来,直接说出来,比如“你好”,“很高兴见到你”等词语,可以一定程度上减少翻译官的翻译时间。

可以看到,JIT和AOT技术的引入,确实提高了整体的执行效率,但是,但是,你会一些A国语言,和你完全会这门语言还是有天差地别的区别的!

PS:补充几点

1)JVM的功能很强大,并不只有上面说的那么一点功能,具体不赘述了,容易跑题

2)Java代码本身也不能被JVM所识别,要先编译成字节码,然后才能被JVM识别,然后再由JVM翻译成机器码才能被执行

3)JVM因为功能很强大,所以很消耗资源,谷歌在安卓5.0的时候彻底启用了新的虚拟机,所以从安卓5.0开始,整个安卓的流畅性比4.4以前提高了很多

2.ts的性能能比肩Java?

通过开源鸿蒙的主页,能够看到,TypeScript代码量非常薄,主要的系统代码都在C/C++,Rust这些编译语言为主。

开源鸿蒙的语言占比

ts的性能在正常情况下,是比不过Java的,这是不争的事实!

不过,不过大家应该听过两个编译器:方舟编译器和毕昇编译器。

方舟编译器:这个大伙应该不陌生,在官网上有介绍,我这里不赘述了。

它按照官方说法,它的作用就是通过AOT技术把部分ets编译成机器可以直接识别的代码,另外一部分不能被编译成机器能识别的,就编译成方舟字节码,通过方舟运行时来执行,由于经过了各种优化,执行效率非常的高,开源鸿蒙里也有对它的详细介绍,链接如下:

方舟运行时子系统介绍

毕昇编译器:这是一个高性能深度优化的C/C++编译器,可以各种提高C/C++的执行效率!

在华为还在使用安卓系统的时候,通过方舟编译器优化过的同一应用,启动速度和使用的流畅度,都会得到一定的提升,这个网上有很多测试视频,感兴趣的朋友可以去搜搜。

根据上面的资料和总结,整体的系统运行应该是上图所示,首先ets代码量并不多,后端逻辑主要用C/C++去写的,C++这块经过毕昇编译后,效率得到了很大的提升,而ets的执行部分,也是经过了各种优化,效率得到了提升,所以整体的执行效率并不低。

3.纯血鸿蒙系统,内部还有“翻译官”吗?

正如2所说的,方舟编译器不能完全的翻译ets,一些不能翻译的代码,还是会通过“翻译官”翻译给机器,所以还是有的,只是它很轻量级,不像JVM那么重,对性能的影响非常小。

总结:

ets的性能在正常情况下是无法比得过Java的执行效率,而在方舟编译器和毕昇编译器的特别优化下,可以取得更高地执行效率;之所以选择ts作为开发语言,因为每一个系统都需要配套的生态软件才能长久,而Java需要拖一个JVM,会降低运行效率,而C++门槛比较高,所以选择了有一定开发者基数,没有版权问题,且还能通过编译器提高运行效率的语言,所以华为选择了TypeScript。

所有的技术,即使吹的再多,最终都是要回归到用户体验上来的,如果明年的鸿蒙Next版本不能给人丝滑流畅的感觉,那终归还是让人失望的,希望鸿蒙Next明年可以绽放光彩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【lesson9】表的约束(2)

文章目录 表的约束的介绍列描述测试建表 zerofill测试建表插入测试 修改表插入测试 修改表插入测试 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角…

经典策略筛选-20231212

策略1: 龙头战法只做最强:国企改革 ----四川金顶 1、十日交易内出现 涨停或 (涨幅大于7个点且量比大于3) 2、JDK MACD RSI OBV BBI LWR MTM 六指标共振 3、均线多头 4、 筹码峰 (锁仓) 5、现价>…

最强文生图跨模态大模型:Stable Diffusion

文章目录 一、概述二、Stable Diffusion v1 & v22.1 简介2.2 LAION-5B数据集2.3 CLIP条件控制模型2.4 模型训练 三、Stable Diffusion 发展3.1 图形界面3.1.1 Web UI3.1.2 Comfy UI 3.2 微调方法3.1 Lora 3.3 控制模型3.3.1 ControlNet 四、其他文生图模型4.1 DALL-E24.2 I…

Unity光照模型实践

光照作为3D渲染中最重要的部分之一,如何去模拟真实环境的光照是重要的研究内容,但是现实环境光照过于复杂,有很多经典好用的光照模型去近似真实光照。 根据基础的Phong模型 最终某个点的结果为 环境光Ambient 漫反射光Diffuse 高光Specula…

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码? CPU上电启动后被设计为去地址0x00000000位置处读取代码;首先会连续读取两个字,分别是栈指针初始值和复位异常处理函数的地址;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

在Spring Cloud中使用组件Ribbon和Feign,并分别创建子模块注册到Eureka中去

ok,在上篇文章中我们讲了在Spring cloud中使用Zuul网关,这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。 题外话,本篇博客就是配置子模块,或者说是微服务,然后将微服务正式启动之前…

Stimulus—需求形式化建模和验证工具

产品概述 Stimulus是法国达索公司产品,其目的是通过需求建模分析来验证需求的正确性。Stimulus的核心理念是运用“自然语言”对功能性需求进行建模,并通过仿真来查找需求中的缺陷,例如需求一致性、不二义性和完整性检查等。借助Stimulus可以在…

2023-12-05 Qt学习总结9

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十五 QFile文件操作总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 二十五 QFile文件操作 QFile是Qt提供的文件读写类&#xff0c;支持对文件进行读写、复制、重命名、删除等操作。常用C函数如下&…

内核上项目【通信】

文章目录 目的操作步骤逆向分析实现代码参考文献 目的 在Win7 64位系统上编写驱动利用ExRegisterAttributeInformationCallback注册回调进行通信 操作步骤 1.利用MmGetSystemRoutineAddress获取ExRegisterAttributeInformationCallback中ExpDisSetAttributeInformation、Exp…

接口自动化多层嵌套json数据处理代码实例

最近在做接口自动化测试&#xff0c;响应的内容大多数是多层嵌套的json数据&#xff0c;在对响应数据进行校验的时候&#xff0c;可以通过&#xff08;key1.key2.key3&#xff09;形式获取嵌套字典值的方法获取响应值&#xff0c;再和预期值比较 1 2 3 4 5 6 7 8 9 10 11 12 13…

Enabling Application Engine Tracing 启用应用程序引擎跟踪

Enabling Application Engine Tracing 启用应用程序引擎跟踪 By default, all Application Engine traces are turned off. To see a trace or a combination of traces, set trace options before you run a program. 默认情况下&#xff0c;所有应用程序引擎跟踪都处于关闭…

自动化测试基础知识:什么是自动化测试?需要学习哪些知识与工具!

1、自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常&#xff0c; 在设计了测试用例并通过评审之后&#xff0c;由测 试人员根据测试用例中描述的规程一步步执行测试&#xff0c;得到实际结果与期望结果的比较。简言之&#xff0c;自动化测试…

12.12 作业

1&#xff0c; 源代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);speerornew QTextToSpeech(this);idstartTimer(1000);//每隔一秒&#xf…

LLM之RAG理论(一)| CoN:腾讯提出笔记链(CHAIN-OF-NOTE)来提高检索增强模型(RAG)的透明度

论文地址&#xff1a;https://arxiv.org/pdf/2311.09210.pdf 检索增强语言模型&#xff08;RALM&#xff09;已成为自然语言处理中一种强大的新范式。通过将大型预训练语言模型与外部知识检索相结合&#xff0c;RALM可以减少事实错误和幻觉&#xff0c;同时注入最新知识。然而&…

【无标题】重生奇迹mu召唤萤石魂石最强搭配

荧光宝石搭配&#xff1a; 1、每个装备上都会有不同的孔洞&#xff0c;所镶嵌的3个宝石都是不相同的。 2、宝石也分为很多的种类。选择比较困难。 推荐搭配&#xff1a; 如果有宝石等级比较高&#xff0c;那么就选择高的来搭配。最好的搭配是就是同样的属性搭配一套&#x…

优雅玩转实验室服务器(一)登录服务器

这篇文章更加偏向于使用python程序进行研究的朋友们 原料 Windows主机实验室Linux服务器&#xff08;可以访问互联网&#xff09;一点点耐心 step.0 windows terminal is all you need 别跟我说什么putty&#xff0c;什么winscp&#xff0c;我就是单推Win11自带的软件——win…

005、Softmax损失

之——softmax与交叉熵 杂谈 我们常用到softmax函数与交叉熵的结合作为损失函数以监督学习&#xff0c;这里做一个小小的总结。 正文 1.softmax的基本改进 所谓softmax就是在对接全连接层输出时候把输出概率归一化&#xff0c;最基础的就是这样&#xff1a; 效果就是这样&…

【Android嵌入式开发及实训课程实验】【项目1】 图形界面——计算器项目

【项目1】 图形界面——计算器项目 需求分析界面设计实施1、创建项目2、 界面实现实现代码1.activity_main.xml2.Java代码 - MainActivity.java 3、运行测试 注意点结束~ 需求分析 开发一个简单的计算器项目&#xff0c;该程序只能进行加减乘除运算。要求界面美观&#xff0c;…

【异常解决】SpringBoot + Maven 在 idea 下启动报错 Unable to start embedded Tomcat(已解决)

Unable to start embedded Tomcat&#xff08;已解决&#xff09; 一、背景介绍二、原因分析2.1 网络上整理2.2 其他原因 三、解决方案 一、背景介绍 spring boot(v2.5.14) maven idea 启动项目 之前项目一直启动的好好的&#xff0c;都能正常运行。重启的时候突然就不能启…

汽车服务行业分析:预计2028年将达到38亿元

在推进加快检验机构建设同时&#xff0c;综合评估检验机构数量、分布和检测能力&#xff0c;探索试点汽车 4S 店开展检验&#xff0c;提供维修、保养、车检一体化服务。汽车服务主要是指围绕汽车展开的一系列服务活动&#xff0c;包括维修、美容、金融等&#xff0c;除具有一般…