写点什么

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:362507

评论

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

架构实战营模块1作业指导

华仔

#架构实战营

计算机原理学习笔记 Day10

穿过生命散发芬芳

计算机原理 4月日更

架构实战营作业2

冷酷小绵羊

简单了解InnoDB底层原理

leonsh

MySQL 数据库 innodb

浅谈JVM和垃圾回收

leonsh

Java JVM JVM虚拟机原理 垃圾回收算法

百度大脑3月新品推荐:EasyDL视频目标追踪全新发布

百度大脑

百度大脑 EasyDL

如何在云中构建数字核心

云计算

开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?

阿里巴巴云原生

Java 微服务 云原生 中间件 API

欢迎参与 KubeVela 官方文档翻译活动

阿里巴巴云原生

容器 云原生 开发工具 OAM 资源调度

推进智慧城市建设 博睿数据亮相长三角城市数字化转型高峰论坛

博睿数据

数字化转型高峰论坛

翻译:《实用的Python编程》09_03_Distribution

codists

Python

使用Agora SDK开发React Native视频通话App

RTE开发者社区

RTC React Native 声网 RTE

未来已来,HarmonyOS 开发者日全记录

清秋

华为 开发 物联网 新闻 HarmonyOS

融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系

Apache Flink

flink

斗智亦斗棋,零售云市场的“楚河汉界”突围赛

脑极体

浅谈在探索数分之路上的“数据思维”论述

小飞象@木木自由

数据分析 数据分析体系 数据思维 数据分析方法论

GitHub面试题库+阿里巴巴2021年Java岗面试26大核心专题,成功助我砍下7家大厂Offer

Java架构追梦

Java 阿里巴巴 架构 面试

趣题与算法(1)

阳龙生

如何提高Linux水平

cdhqyj

知乎万赞回答:程序员面试为什么被要求造航母,而工作拧螺丝?

Java架构师迁哥

最新分享:如何避免线程安全的坑?看这一篇就够了

学Java关注我

Java 编程 程序员 架构 计算机

面试4轮字节Java研发岗,最终拿下Offer(原题复盘)

码农之家

编程 程序员 互联网 面试 字节

Excelize 2.4.0 正式版发布, 新支持 152 项公式函数

xuri

GitHub 开源 Excel Go 语言 Excelize

【全球年青人召集令】Hello World,Hello 2050

阿里巴巴云原生

容器 开发者 云原生 活动

方寸之间,书写天地

石云升

4月日更 1 周年盛典 我和写作平台的故事 InfoQ 写作平台 1 周年

深入理解Java虚拟机-HotSpot

华章IT

Java JVM 虚拟机

Python 爬虫实战(一) 爬取自如网租房信息

U2647

python 爬虫 4月日更

为什么我愿意持续做这样一件看似没有价值的事情

帅安技术

坚持 持续写作 长期价值

奇绩创坛2021秋季创业营开始报名

奇绩创坛

Linux free 命令

一个大红包

linux命令 4月日更

架构实战营 模块2 课后作业

༺NPE༻

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