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

哈喽,我是老刘

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.mzph.cn/bicheng/53681.shtml

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

相关文章

vivado 设置物理约束

设置物理约束 在本实验中,您将为CPU网表设计创建物理约束,观察中的操作 GUI转换为Tcl命令。使用Tcl命令,可以轻松编写复杂的操作脚本 用于在流动的不同阶段重复使用。 注意:如果您从实验1继续,并且您的设计已打开&…

Centos7.9 安装Elasticsearch 8.15.1(图文教程)

本章教程,主要记录在Centos7.9 安装Elasticsearch 8.15.1的整个安装过程。 一、下载安装包 下载地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-15-1 你可以通过手动下载然后上传到服务器,也可以直接使用在线下载的方式。 wget https://artifacts…

【学术会议征稿】2024年智能驾驶与智慧交通国际学术会议(IDST 2024)

2024年智能驾驶与智慧交通国际学术会议(IDST 2024) 2024 International Conference on Intelligent Driving and Smart Transportation 智能驾驶和智慧交通利用新兴技术,使城市出行更加方便、更具成本效益且更安全。在此背景下,由中南大学主办的2024年…

LLMs技术 | 整合Ollama实现本地LLMs调用

前言 近两年AIGC发展的非常迅速,从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型,再到后来的小参数模型,从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化,还有模型的使用方式。…

65、Python之函数高级:装饰器实战,通用日志记录功能的动态添加

引言 从系统开发的规范性来说,日志的记录是一个规范化的要求,但是,有些程序员会觉得麻烦,反而不愿意记录日志,还是太年轻了…… 其实,如果个人保护意识稍微强一些,一定会主动进行日志的记录的…

python_openCV_计算图片中的区域的黑色比例

希望对原始图片进行处理,然后计算图片上的黑色和白色的占比 上图, 原始图片 import numpy as np import cv2 import matplotlib.pyplot as pltdef cal_black(img_file):#功能: 计算图片中的区域的黑色比例#取图片中不同的位置进行计算&…

关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.总线超时,自动断开连接 当 SDAOUT 或 SCLOUT 为低电平时,将启动内部定时器。定时器仅在相应输入变为高电平时重置。如果在 30ms (典型值) 内没有变为高…

国产芯片LT9211D:MIPI转LVDS转换器,分辨率高达3840x2160 30Hz,碾压其它同功能芯片

以下为LT9211D:MIPI TO LVDS的芯片简单介绍,供各位参考 Lontium LT9211D是一款高性能MIPI DSI/CSI-2到双端口LVDS转换器。LT9211D反序列化 输入MIPI视频数据,解码数据包,转换格式化的视频数据流到LVDS发射机输出AP与移动显示面板或…

ppt模板简约下载哪个?这些模板简约又大气

中秋节,作为中国传统节日中最具诗意的一个,月圆人团圆的美好寓意总是让人心生向往。 想在国际网站上宣传这一传统节日的独特魅力,却担心自己的PPT不够吸引人?别急,使用精美免费的ppt模板,可以让你的演示瞬…

Python Flask_APScheduler定时任务的正确(最佳)使用

描述 APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务,在使用过程当中也遇到很多问题,例如在定时任务调用的方法中需要用到flask的app.app_context()时&#…

【Canvas与艺术】菊花孔雀螺旋

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>菊花孔雀螺旋</title><style type"text/css">…

.net MAUI应用生命周期

.NET Multi-platform App UI (.NET MAUI) 应用通常有四种执行状态&#xff1a;“未运行”、“运行中”、“已停用”和“已停止”。 当应用从未运行状态转换为运行状态、从运行状态转换为已停用状态、从已停用状态转换为已停止状态、从已停止状态转换为运行状态&#xff0c;以及…

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理&#xff08;二&#xff09;&#xff1a;基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制&#xff08;ABAC 鉴权&#xff09;2.基于节点的访问控制&#xff08;node 鉴权&#xff09;2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…

【AcWing】861. 二分图的最大匹配(匈牙利算法)

匈牙利算法&#xff0c;他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少 匹配指的是边的数量&#xff0c;成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。 匈牙利算法可以返回成功匹配的最大匹配数是多少。 #incl…

四、搭建网站服务器超详细步骤——解决宝塔界面无法登录问题

前言 本篇博客是搭建网站服务器的第四期&#xff0c;也到了中间的一节 先分享一下我在搭建网站时的个人感受&#xff0c;我在这个环节卡住了很久 后来突然醒悟了&#xff0c;然后成功进入了宝塔界面 现在就来分享一下&#xff0c;我所遇到的问题 小伙伴们坐好了 …

通信工程学习:什么是FMC固定移动融合

FMC&#xff1a;固定移动融合 FMC固定移动融合&#xff0c;即Fixed Mobile Convergence&#xff08;固定移动网络融合&#xff09;&#xff0c;是指通过固定网络与移动网络之间的融通、合作&#xff0c;实现全业务及融合业务的经营。这一技术旨在打破传统固定网络和移动网络之间…

使用 Parallel 类进行多线程编码(上)

用 C# 进行多线程编程有很多方式&#xff0c;比如使用 Thread 对象开启一个新线程&#xff0c;但这已经是一种落后的写法了&#xff0c;现在推荐的写法是使用 Parallel 类&#xff0c;它可以让我们像写传统代码一样编写多线程的程序&#xff0c;Parallel 类有三个常用的方法如下…

C#笔记8 线程是什么?多线程怎么实现和操作?

这和前面的学习内容可能有点不太连贯&#xff0c;但是呢我们一般来说的学习就是遇到什么困难就去学习什么&#xff0c;这也是为什么看那些循序渐进的教程虽然学的很饱满&#xff0c;但是我们有时会学了前面忘记了后面&#xff0c;或者对某个板块理解不深&#xff0c;乃至于写代…

大学物理实验-杨氏双缝干涉实验

一、实验目的 1.理解杨氏双缝干涉现象的基本原理&#xff1b; 2.掌握用光具座调整杨氏双缝干涉装置的光路&#xff1b; 3.用CCD观察杨氏双缝干涉的实验现象&#xff1b; 4.学会用干涉法测量未知光波的波长。 二、仪器用具 FB760-6型光学实验仪多功能光学片 三、实验原理 1.波…

智能提取:OfficeImagesExtractor让文档图片提取更简单

“科技是国之利器&#xff0c;也是民之福祉。” 在数字化办公日益普及的今天&#xff0c;我们对文档处理的需求也在不断增长。尤其是对于Office文档中的图片、视频和音频等多媒体内容的提取&#xff0c;传统的方法是繁琐且效率低下的。在这样的背景下&#xff0c;一款能够高效、…