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继续,并且您的设计已打开&…

面试—JVM

目录 JVM内存结构 类的生命周期 双亲委派机制 打破双亲委派机制 垃圾回收机制 判断垃圾回收算法 垃圾回收算法 G1垃圾回收器 JVM内存结构 程序计数器 记录要执行的字节码指令的地址,可以控制程序指令的进行,实现分支、跳转、异常等 在多线程执行…

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…

Python世界:力扣题43大数相乘算法实践

Python世界:力扣题43大数相乘算法实践 任务背景思路分析方案1方案2方案3方案4无测试套主调测试套主调 本文小结 任务背景 问题来自力扣题目43:字符串相乘,大意如下: Given two non-negative integers num1 and num2 represented a…

【学术会议征稿】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与移动显示面板或…

基于STM32L431小熊派设计的智能花盆(微信小程序+腾讯云IOT)(223)

文章目录 一、前言1.1 项目介绍【1】项目背景【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统框架图…

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

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

创新性处理Java编程技术问题的策略

在Java编程领域,解决技术问题的方式不断进化。本文将探讨一些创新性和针对性的技术问题处理方法,帮助开发者高效地应对挑战,提高代码质量和开发效率。 1. 动态代理与反射机制的优化 Java的动态代理和反射机制为程序员提供了强大的功能&#…

【性能】DJANGO + REDIS 缓存提速

不加REDIS缓存时,每次访问都要读取数据库,当访问量非常大的时候, 就会有很多次的数据库查询,会造成访问速度变慢,服务器资源占用较多等问题。 当使用了缓存后,访问情况变成了如下:访问一个网址时…

用户登录和注销

在Linux系统中,用户登录和注销是一个常见的操作,涉及到用户账户管理和服务管理等多个方面。下面分别介绍用户在图形界面和命令行下的登录和注销流程。 图形界面下的登录和注销 登录 登录界面: 当用户启动计算机时,通常会看到一…

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

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

无影云电脑:在最破的电脑上玩最顶配的游戏

关注卢松松,会经常给你分享一些我的经验和观点 我对云电脑很感兴趣,这几天我深度体验了无影云电脑的个人版.,我给大家分享下。这款云电脑到底能不能替代你的笔记本?到底能不能改变人们使用电脑的方式? 先说结论: (1)从草根创…

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

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

vue3实现打飞机(雷电)

代码可直接运行直接玩&#xff0c;而且要自己加上一些随机事件都很简单了&#xff08;例如发射速度变快&#xff0c;子弹变大&#xff0c;敌人变慢等&#xff09; <template><div class"flex items-center justify-center h-100vh w-full"><div>S…

.net MAUI应用生命周期

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