BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Dart增强了异步编程

| 作者 James Chesters 关注 1 他的粉丝 ,译者 夏雪 关注 0 他的粉丝 发布于 2015年4月1日. 估计阅读时间: 5 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

谷歌发布了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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT