Dart 3.5更新对普通开发者有哪些影响?

news2024/11/23 12:09:28

哈喽,我是老刘

Flutter 3.24以及Dart 3.5不久前发布了。
突然觉得时间过得好快。六年前刚开始使用Flutter 1.0的场景还在眼前。

image.png

之前写了一篇文章盘点Flutter 3.24的新功能对普通开发者有哪些影响。
Flutter 3.24 对普通开发者有哪些影响?icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/Lo23Q7munNGVW81d8sDpew
本文站在编程语言的角度,单独看看Dart 3.5的新功能有哪些是我们普通开发者会用到的。

Web 平台和 JS 互操作性

这个功能是为了将 Flutter Web 应用编译为 WebAssembly 服务的。
从Dart 3.5开始这个功能从预览进入稳定版。

官方计划在下一个 Dart 版本中弃用旧的互操作 API (dart:html、dart:js、package:js 等),并在明年晚些时候完全停止支持它们。
也就是说大家都应该尽快迁移到新的web库:package:web 。

image.png

从Flutter for web的长期路线图来看 WebAssembly 会是未来Flutter在Web端的唯一方案。

Dart 原生互操作性

Dart 原生互操作性得到改进,可以直接调用 C、Java、Kotlin、Objective-C 和 Swift。

  • C 互操作通过 FFI 库实现,

    • Dart 3.5 版本中增加了直接传递 Dart TypedData 对象指针给 FFI 的功能,减少了内存复制。
  • Java 和 Kotlin 互操作通过 JNIgen 生成器实现,支持了性能改进和对 Java 异常及 Kotlin 顶级函数的支持。

    image.png

  • Objective-C 互操作基于 FFI 和 FFIgen 生成器,增加了对 Objective-C 协议和常见类型(如 NSString)的支持。
  • 未来版本将继续投资于互操作性,包括完善现有库和支持 Swift。

原先在Flutter中是通过Flutter的channel来实现Dart代码与原生通信的。
但是这种方式终究需要通过原生应用的壳中转一层,运行效率、开发效率和灵活性都受到了影响。
比如在Windows系统上想调用Java的功能,只能先通过channel调用到原生的C++代码,然后再通过C++调用Java。
现在则可以直接在Dart中调用Java的相关功能。

当然这个功能也会带来一些架构上的复杂度。
比如原先所有的原生调用都是走channel的,从架构上看非常清晰。日志、调试等方面也很统一方便。
后续这种统一性被打破,可能会带来一些原先没有的复杂度提升,这一点需要开发者统筹考量了。

官方消息说:Dart 语言和编译器团队目前的大部分时间都花在推进非常大的语言特性宏上。
宏是我非常关注的一个语言特性。
老刘早年是做网络安全的,使用的编程语言是c,平台是基于linux内核定制的系统。
我们当时的命令行体系非常复杂,一条普通的配置命令动辄十几个关键字。
因此当时的命令行系统就是基于c语言的宏开发的一套专门的DSL。
而且因为我们同时支持x86、mips和arm多种cpu,也基于宏定制了很多编译期针对不同cpu体系的差异化编译过程。

image.png

所以宏绝对是一个为编程语言打开一片全新世界的利器。
当然,宏带来的复杂度提升也绝对是把bug的复杂度提升到了新的维度。
所以这绝对是一个非常强大但是一个用不好就自损三千的武器,只能说运用之妙存乎一心了。

另外从官方的消息中能看出两个信息来:
1、Dart不是只为Flutter服务的,投入如此大的资源在宏这种语言特性上,其所图非小。
2、投入大量的资源在这种短期看不到任何收益的内容上,可以看出团队有很长远的长期规划。那么还在担心Flutter会不会哪天就被放弃的同学,应该可以暂时放心了。

总结

Dart 3.5 站在整个Dart语言的发展路径上看不是特别重要的版本。
但是未来比较重大的变化在这个版本上都有体现,因此可以让我们对整个语言的发展趋势有清晰的了解。
1、完善面向底层系统的兼容能力
Dart在持续补完语言层面和运行平台间的互操作能力,包括C、Java、Kotlin、Objective-C 和 Swift这样的系统级平台语言,也包括web上的js互操作。
这一方面为Flutter提供了更多的便利性和可能性,另一方面也为Dart语言超越Flutter的范畴,成为真正意义上的通用跨平台语言提供了可靠的保证。
比如我们使用Dart编写一些命令行工具,如果需要用到视频编解码、文件加解密之类的功能,就可以通过FFI调用现成的so库。如果需要调用系统功能,也可以通过原生互操作完成系统调用。

2、提供面向开发者的多种抽象能力
这一点主要是通过来实现的。
我们目前工程界常用的编程语言要么面向过程,比如c。
要么面向对象,比如Java、OC。
要么在面向对象中加入对函数式编程的支持,比如Kotlin。
但是不管哪一种,语言所提供的抽象方式都已经固定下来了。
但是如果能提供类似c/c++的宏功能。
开发者就可以针对具体的项目场景定义针对性的DSL。

如果前面说的向上和向下的两部分语言特性都能完全打通。
我们完全可以基于Dart实现很多非常庞大的系统。
比如向下突破语言性能和功能的限制,基于原生互操作实现高性能要求的功能如视频剪辑、硬件调用。完成底层系统差异的封装。
中间基于Dart实现我们的业务逻辑。
向上为其它开发者、甚至非程序员提供领域专用的DSL接口。
比如为测试人员提供专用的测试接口,帮助他们完成系统的自动化测试。

好了,以上是对Dart 3.5功能的盘点和未来发展的一些展望。
不过至少到目前为止Dart还主要是为Flutter开发者服务的。
对于Flutter开发者来说,Dart能做到的事情越多,我们0学习成本能开发的东西就越多,所以未来可期。
如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s?__biz=MzkxMDMzNTM0Mw==&mid=2247483665&idx=1&sn=56aec9504da3ffad5797e703c12c51f6&chksm=c12c4d11f65bc40767956e534bd4b6fa71cbc2b8f8980294b6db7582672809c966e13cbbed25#rd

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

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

相关文章

两个方法,设置Word打开密码!

想要保护word文件中的内容,我们可以给文件设置一个打开密码,这样只有知道密码的人才能够打开查看文件,今天分享两个word文件设置打开密码的方法。 方法一: 打开word文档后,点击【文件】-【信息】-【保护文档】这里有…

推荐让你事半功倍的5款实用软件

​ 今天我要向大家推荐5款超级好用的效率软件,无论是在学习还是办公中都能够极大地提高效率。这些软件可以帮助你解决许多问题,而且每个都是真正的神器。 1. 音乐管理——MusicBee ​ MusicBee是一款功能强大的音乐管理和播放软件,适合音乐…

STM32CubeMx学习笔记——GPIO使用

一、新建工程 1、选择芯片型号 2、配置时钟RCC 选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器) ​ 3、时钟树配置 在clock Configuration中将HCLK配置为最高频率然后回车 ​ 4、选择调试模式 SYS 设置,选择 Debug 为 Serial Wire …

iOS开发者新技能:将Flutter集成到你的原生应用中

如何在iOS原生项目中嵌入Flutter 一、创建一个新的iOS项目 首先,在 Xcode 中创建一个新的 iOS 项目,选择 Swift 作为开发语言,因为它的语法简洁,易于理解。 二、打包Flutter项目 在将 Flutter 模块集成到 iOS 项目之前&#xf…

Windows conda常用方法

这里写目录标题 conda链接jupyter conda链接jupyter 列出当前所有环境: conda env list 创建新环境: conda create -n your_env_name pythonX.X(2.7、3.6、3.8等) 激活环境: conda activate your_env_name 链接jupyte…

大模型微调有必要做吗?LoRa还是RAG?

我需要对大模型做微调吗? 想自定义大模型时,选择:微调还是RAG还是ICL? 需要对大模型做微调? 在人工智能的世界里,大型语言模型(LLM)已经成为了我们探索未知、解决问题的得力助手。…

uniapp业务实现

uni.requset添加异常判断提示,以及加载动画 /*** 该函数用于发送网络请求获取数据* 请求失败时会弹出相应的错误提示* 请求成功时会检查返回的数据是否存在错误,并根据错误代码做出相应处理* 如果数据请求成功且无错误,则将返回的数据赋值给pets变量*/fu…

NVIDIA Triton Inference Server 部署 yolov5

文章目录 一、拉取 tensorrt 、yolov5、tritonserver 镜像二、下载 yolov5-6.2、tensorrtx/yolov5-6.2源码三、pt转wts四、wts转engine五、创建triton推理服务器六、创建客户端进行测试 一、拉取 tensorrt 、yolov5、tritonserver 镜像 docker pull hakuyyf/tensorrtx:trt8.2_…

群晖NAS本地部署Photopea在线图片PS编辑工具

文章目录 前言1. 部署Photopea2. 运行Photopea3. 群晖安装Cpolar4. 配置公网地址5. 公网访问测试6. 固定公网地址 前言 本文主要介绍如何在群晖NAS本地部署Photopea在线图片PS编辑工具,并结合cpolar内网穿透实现公网环境远程访问本地部署的Photopea处理图片. Phot…

JAVA开源项目 员工绩效考核系统 计算机毕业设计

本文项目编号 T 021 ,文末自助获取源码 \color{red}{T021,文末自助获取源码} T021,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例分析 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行…

梧桐数据库|中秋节活动·抽奖领取大闸蟹

有话说 众所周不知,我的工作就是做一个国产的数据库产品—中国移动梧桐数据库(简称WuTongDB)。 近期我们举办了一次小活动,来提升梧桐数据库的搜索量和知名度,欢迎大家来参加,免费抽奖领取大闸蟹哦~~~ 具…

AIGC入门:Comfyui整合包,解压即用!

前言 今天给大家分享的Comfyui的整合包,无需复杂的操作,解压即可使用。 整合包已经打包好了,获取方式放在👇,需要的朋友可以自行领取哦。 什么是Comfyui ComfyUI采用节点式的操作方式,这种方式让用户能…

有哪些好用的终端行为审计系统?

终端行为审计软件是用于监控、记录和分析计算机终端操作行为的工具,它们对于提高企业信息安全管理、防止内部数据泄露和提升内控水平至关重要。 1. 金刚钻信息网站行为审计系统:通过细粒化审计终端用户行为,提供文件操作日志、文件外发日志、…

WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟

查看原文>>>WRF-LES与PALM微尺度气象大涡模拟及ChatGPT在大气科学领域应用 针对微尺度气象的复杂性,大涡模拟(LES)提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟,这些过程往往与天气…

2024年身份验证技术应用的10大发展趋势

文章目录 前言一、无密码身份验证1、流行的无密码身份验证方法二、基于行为的身份识别技术1、主流的行为身份识别技术三、社交媒体授权登录1、应用社交媒体授权登录的好处四、去中心化身份验证1、去中心化身份验证的主要功能和优点五、自适应身份验证六、身份威胁检测和响应(I…

远程搜索:remote-method

为了启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果el-option是通过v-for指令渲染出来…

吐血整理nacos 作为springcloud的配置中心和注册中心

吐血整理nacos 作为配置中心和注册中心 环境版本nacos 版本 nacos启动单机模式启动配置数据库 Spring cloud 连接注册Nacos配置中心导入依赖 注册中心 环境版本 SpringBoot版本SpringCloud版本cloud Alibaba版本2.6.132021.0.52021.0.5.0 参照依据 spring-cloud-alibab 对应…

公众号赠书给您,祝您教师节快乐!

在此教师节即将来临之际,《人工智能怎么学》公众号恭祝各位老师们节日快乐! 为了对各位老师表示最崇高的敬意,特开展教师节赠书活动。您只需要在9月15号22点前扫描下方二维码填写登记表,前5位登记的老师,每人均可获赠…

关于网卡用一会就无法使用的处理

1、背景 使用ubuntu 18操作系统,部署的.net 6的数采程序,使用嵌入式边缘计算终端,有一个网口,一个 wifi,一个中兴随身WIFI。数据程序通过网口与三菱Q系例PLC的转换器网口通讯,采集频率每60秒读一次PLC的点位…

DFS算法专题(二)——穷举vs暴搜vs深搜vs回溯vs剪枝【OF决策树】

目录 1、决策树 2、算法实战应用【leetcode】 2.1 题一:全排列 2.2.1 算法原理 2.2.2 算法代码 2.2 题二:子集 2.2.1 算法原理【策略一】 2.2.2 算法代码【策略一】 2.2.3 算法原理【策略二,推荐】 2.2.4 算法代码【策略二&#x…