鸿蒙语言ArkTS(更好的生产力与性能)

ArkTS是鸿蒙生态的应用开发语言

image.png

ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。

同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。

针对JavaScript(简称JS)/TS并发能力支持有限的问题,ArkTS对并发编程API和能力进行了增强。

ArkTS支持与JS/TS高效互操作,兼容JS/TS生态。

ArkTS设计理念

  • 为更好地支持HarmonyOS应用的开发和运行,从Harmony OS NEXT Developer Preview 0版本开始,ArkTS在TS的基础上,进一步通过规范强化静态检查和分析,这样做有两个好处:许多错误在编译时可以被检测出来,不用等到运行时,这大大降低了代码运行错误的风险,有利于程序的健壮性;2.减少运行时的类型检查,从而降低了运行时负载,有助于提升执行性能。
  • ArkTS保留了TS大部分的语法特性,这可以帮助开发者更容易上手ArkTS。同时,对于已有的标准TS代码,开发者仅需对少部分代码进行ArkTS语法适配,大部分代码可以直接复用。
  • ArkTS支持与标准JS/TS的高效互操作,兼容JS/TS生态。HarmonyOS也提供了标准JS/TS的执行环境支持,在“更注重已有生态直接复用”的场景下,开发者可以选择使用标准JS/TS进行代码复用或开发,更方便兼容现有生态。

ArkTS相比TS特性差异

ArkTS通过规范约束了TS中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性,下面通过代码片段说明部分约束特性。

image.png

1.不支持在运行时更改对象布局

image.png

以上TS代码片段展示了如何在运行时通过添加和删除某些属性来更改对象的布局。运行时支持此类特性需要大量的性能开销,ArkTS不支持在运行时更改对象的布局。

在ArkTS中,可以使用可选属性和给该属性赋值undefined的方式来替代。

2.对象字面量须标注类型

image.png

以上TS代码片段展示了没有类型的场景。如果编译器不知道变量point的确切类型,由于对象布局不能确定,编译器无法深度地优化这段代码,造成性能瓶颈。没有类型也会造成属性的类型缺少限制,例如point.x的类型在此时为number,它也可以被赋值成其他类型,造成额外的运行时检查和开销。

在ArkTS中,需要为对象字面量标注类型。

image.png

3.不支持structural typing

image.png

以上TS代码片段展示了structural typing特性。在ArkTS已经采用了nominal typing类型系统的前提下,如果额外支持structural typing给语言实现和开发者均会带来不必要的复杂度。在示例中,foo虽然声明参数类型是C,但也可以传递类型D的变量,这种灵活性可能不符合开发者的意图,容易带来程序行为的正确性问题。另外,由于类型D和类型C布局不同,那么foo中对c.s这个属性访问就不能被优化成根据固定偏移量访问的方式,从而给运行时性能造成瓶颈。

c4239e28a4e48de5e1bbf2ecb8e239cd.jpeg

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

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

相关文章

Quantitative Analysis: PIM Chip Demands for LLAMA-7B inference

1 Architecture 如果将LLAMA-7B模型参数量化为4bit,则存储模型参数需要3.3GB。那么,至少PIM chip 的存储至少要4GB。 AiM单个bank为32MB,单个die 512MB,至少需要8个die的芯片。8个die集成在一个芯片上。 提供816bank级别的访存带…

贪心第一天,别太贪了

今天是贪心第一天,做376. 摆动序列时脑子都要干烧了,贪心的题还是很有意思的,对于理论知识,我觉得做题的时候就想这两个问题吧: 如何找到局部最优解呢?用这个局部最优解模拟示例后能通过吗? 455…

智慧公厕的主要应用

在现代社会中,随着城市化进程的加速推进,公共卫生设施的建设和管理变得愈加重要。而智慧公厕作为一种新型城市公共设施,正以其智能化、高效化的特点,成为改善城市卫生环境的重要手段。智慧公厕运用物联网、互联网、大数据、云计算…

线索化二叉树(先序,中序,后序)+线索化二叉树的遍历【java详解】

目录 线索化二叉树的基本介绍: 举个栗子: 二叉树的中序线索化: 创建HeroNode类,表示节点信息: 编写中序线索化方法代码: 中序线索化遍历代码: 测试代码: 测试结果&#xff1a…

OpenCV库及在ROS中使用

OpenCV库及在ROS中使用 依赖 cv_bridge image_transport roscpp rospy sensor_msgs std_msgsCMakeLists.txt添加 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(pub_img_topic ${catkin_LIBRARIES} ${Opencv_LIBS}) C …

视觉设计师的项目评审复盘攻略:如何提升设计质量与效率

视觉设计师的角色是至关重要的,以确保设计项目满足预期的质量和结果。作为一名视觉设计师,有必要进行定期的项目审查,以确保项目在正轨上进行,并尽早解决任何问题。在本文中我们将讨论可视化设计人员如何做好项目评审,…

每日五道java面试题之java基础篇(十)

目录: 第一题 JVM有哪些垃圾回收器?第二题 垃圾回收分为哪些阶段?第三题 线程的⽣命周期?线程有⼏种状态?第四题.ThreadLocal的底层原理第五题.并发、并⾏、串⾏之间的区别 第一题 JVM有哪些垃圾回收器? ● 新⽣代收集…

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

Nginx (window)2024版 笔记 下载 安装 配置

前言 Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理&#xff08;Reverse Proxy&#xff09;服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 反向代理方式是指以代理服务器来接受 internet 上的连接请求&#xff0c;然后将请求转发给内部网络上的服…

反转链表【基础算法精讲 06】

视频地址 反转链表【基础算法精讲 06】_哔哩哔哩_bilibili 概念 链表的每一个结点都包含节点值 和1指向下一个结点的next指针 , 链表的最后一个结点指向空; 206 . 反转链表 用cur记录当前遍历到的结点 &#xff0c; 用pre表示下一个结点 &#xff0c; 用nxt表示cur的下一个…

点亮代码之灯,程序员的夜与电脑

在科技的海洋里&#xff0c;程序员是那些驾驶着代码船只&#xff0c;穿梭于虚拟世界的探险家。他们手中的键盘是航行的舵&#xff0c;而那台始终不愿关闭的电脑&#xff0c;便是他们眼中永不熄灭的灯塔。有人说&#xff0c;程序员不喜欢关电脑&#xff0c;这究竟是为什么呢&…