10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

自建开发工具系列-Webkit内存动量监控UI(二)

Tim

typescript 大前端 YARN ES5

业务架构模块8作业:设计消息队列存储消息数据的MySQL 表格

好吃不贵

Python+OpenCV创建级联文件(Windows7/10环境)

不脱发的程序猿

Python OpenCV 目标对象识别 OpenCV创建级联文件

果果世界APP系统开发内容

小牛XNT挖矿APP系统开发

XDD手机挖矿系统开发资料

数据库部署在Docker中,Are You Crazy ?

喵叔

7月日更

Go 学习笔记之 Map

架构精进之路

Go 语言 7月日更

记录一次Neokylin_Server_V5系统已有分区的扩容操作

星河寒水

分区扩容

如何高效便捷的画出炫酷神经网络图

不脱发的程序猿

人工智能 神经网络图工具 神经网络可视化

王者荣耀商城异地多活架构设计

thewangzl

第二周作业-熊猫潘戈项目利益相关方

小夏

产品经理训练营 邱岳

直接上干货!这些细节在Android面试上要注意了

欢喜学安卓

android 程序员 面试 移动开发

图像的模板匹配,Python OpenCV 取经之旅第 29 天

梦想橡皮擦

7月日更

架构实战营-模块8作业-消息队列MySQL表格

Lane

架构实战营 - 模块 8- 作业

请弄脏我的身体

架构实战营

模块8作业

wade

#架构实战营

正式加入字节跳动!如何才能更容易拿到大厂Offer

欢喜学安卓

android 程序员 面试 移动开发

ACM金牌选手整理的【LeetCode刷题顺序】

编程熊

Java 面试 算法 面经 笔试

架构师实战营 模块八总结

代廉洁

架构实战营

BJIA数字星座乐园软件系统开发模板

进来偷学一招,数据归档二三事儿

楼下小黑哥

Java 数据库 系统设计

模块一作业

架构0期-Bingo

TEMS模型--衡量你的人生资源

俞凡

认知

模块一作业

上善

iOS开发 · 一套iOS底层试卷-我想和你分享

iOSer

ios 面试 iOS底层 iOS 知识体系

Ta想做一粒智慧的种子

白洞计划

Dlx Coin手机挖矿系统软件开发公司

Yuumi悠米挖矿APP系统开发模板

记一次简单的渗透测试

网络安全学海

黑客 网络安全 信息安全 漏洞

我赌一包辣条这是全网最详细的代码审计(没有之一)

网络安全学海

黑客 网络安全 信息安全 代码审计 漏洞分析

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