最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Dart 增强了异步编程

  • 2015-03-31
  • 本文字数:1179 字

    阅读完需:约 4 分钟

谷歌发布了 Dart 1.9,带来了全新的异步编程支持。

谷歌的产品经理 Kevin Moore 说,本次发布的 1.9 版本在已有的 Future API 的基础上引入了 async 方法和 await 表达式。

开源 web 程序语言一直都是采用 Future API 进行异步操作,但是 Moore 说这很难处理假定的情况和错误。

Moore 在《 Dart 1.9:你翘首以盼的版本》中详细说明了本版本的改进,说开发人员“现在可以使用熟悉的控制流特性——for/while 循环、if 块和 try/catch 去处理复杂的异步交互了。”

谷歌软件工程师 Gilad Bracha 在《 Dart 语言异步支持:阶段 1 》中演示了使用 async 和 await 的好处。

第一个例子没有使用 async 和 await:

复制代码
import "dart:html"
main() {
var context = querySelector("canvas").context2D;
var running = true; // Set false to stop.
tick(time) {
context.clearRect(0, 0, 500, 500);
context.fillRect(time % 450, 20, 50, 50);
if (running) window.animationFrame.then(tick);
}
window.animationFrame.then(tick);
}

Bracha 说,虽然它还不太复杂,但也不“那么简单”,看看我们用新语言特性是如何实现的:

复制代码
import "dart:html";
main() async {
var context = querySelector("canvas").context2D;
var running = true; // Set false to stop game.
while (running) {
var time = await window.animationFrame;
context.clearRect(0, 0, 500, 500);
context.fillRect(time % 450, 20, 50, 50);
}
}

关于 async 方法和 await 表达式,Moore 说,团队也引入了生成器方法 sync* 和 async*,“这更易于生成信号序列”,他说打算“几乎消除所有需要开发人员创建自定义迭代器和手工管理流的情况。”

Dart 1.9 还带来了几个其他重要的更新——包括对枚举的完整支持和一些核心类库的变更。Moore 重点列举了“新模型适用于共享的服务器 socket,不需要 Socket 引用,可在所有平台上实现”,还有 regexp 引擎的改进。

对于 dart:io API,有如下的变化:

  • ServerSocket.bind、RawServerSocket.bind、SecureServerSocket.bind 和 RawSecureServerSocket.bind 方法增加了新的共享参数。
  • 已经将 SocketReference 方法和类标注为已弃用的。
  • Socket 和 RawSocket 静态方法增加了 sourceAddress 参数。

这次发布的新版本受到开发者社区的热烈欢迎。在 Hacker News相关的讨论中, blossom.io 的联合创始人 Thomas Schranz评论说:“恕我直言,这是自1.0 以来最令人兴奋的版本了。”

用户 ahoge 附和了 Schranz 的观点,他说“这是自 1.0 以下最大的一次发布。Async/await 和生成器非常受欢迎。可共享的服务器 socket 和更好的隔离性更是锦上添花。”

公告仅过了一天,谷歌就推出了 Dart 1.9 版本,它将主要专注于由 Dart 编译成 JavaScript 的努力,并决定不再把 Dart VM 集成进 Chrome 浏览器中了。

查看英文原文 Dart Adds Support for Asynchronous Programming

2015-03-31 05:361917

评论

发布
暂无评论
发现更多内容

解读《深入理解计算机系统(CSAPP)》第8章异常控制流

小明Java问道之路

操作系统 异常 csapp 异常机制 7月月更

记一次uniapp的经历

是乃德也是Ned

uni-app 7月月更

OAI L3与L2接口分析

柒号华仔

5G 7月月更

Qt中 connect的多种方式

小肉球

qt 7月月更

到底应不应该使用 lombok

HoneyMoose

iOS 中的 Protocol

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

飙车资深老教练-手撸一个EventBus

芝麻粒儿

android EventBus 7月月更

面试突击65:为什么要用HTTPS?它有什么优点?

王磊

Java 面试题

redis安装

想要飞的猪

接口测试进阶接口脚本使用—apipost(预/后执行脚本)

Xd

接口测试

LeetCode第二题,裂开了..

为自己带盐

LeetCode 7月月更

jQuery

Jason199

jquery js 7月月更

【Docker 那些事儿】关于Namespace隔离机制的奥秘

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

分布式——Maven多模块管理

Java学术趴

7月月更

重温算法之颜色分类

自由

算法刷题 7月月更

企业级容器安全风险与最佳实践

明亮安全观

网络安全 安全架构 容器安全

自定义spring boot starter三部曲之一:准备工作

程序员欣宸

spring springboot 7月月更

【萌新解题】两数之和

面试官问

LeetCode 哈希表 两数之和

Ceph分布式存储初步认识(一)

Lansonli

私有云 Ceph 云存储 7月月更

3000字11张图硬核科普:什么是边缘计算?与云计算有什么联系和区别?

wljslmz

云计算 边缘计算 7月月更

不习惯的 Vue3 起步五 のapiHooks封装

空城机

Vue3 7月月更

斐波拉契数最小步数与合法括号序列判断

未见花闻

7月月更

密码密钥硬编码检查

Tom(⊙o⊙)

密码 软件安全 信息泄露 静态代码检查 密钥管理

Ark UI 中的问题汇总【系列 2】

坚果

HarmonyOS OpenHarmony Open Harmony 7月月更

查找——顺序表的查找和有序表的查找

乔乔

7月月更

浅入浅出Mybatis(二)

ES_her0

7月月更

读书笔记之数据密集型应用的可靠性

宇宙之一粟

读书笔记 7月月更

shell脚本定时备份mysql数据库

乌龟哥哥

7月月更

zookeeper-认识zookeeper

zarmnosaj

7月月更

《高绩效教练》:如何用提问激发潜能?

郭明

读书笔记

Qt | 读取文件内容并删除文件 QFile

YOLO.

File 文件操作 qt 7月月更

Dart增强了异步编程_JavaScript_James Chesters_InfoQ精选文章