写点什么

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

评论

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

Spring5.0源码学习系列之Spring AOP简述

AI乔治

Java spring 架构

自动驾驶到底应该怎么实现?(28天写作 Day4/28)

mtfelix

自动驾驶 28天写作 智能电动车

在时间的缝隙里打了个盹「幻想短篇 4/28」

道伟

28天写作

漫谈分层架构:为什么要进行架构分层?

AI乔治

Java 架构 高可用系统的架构 高可用架构

突然明白 npm install xxx 的业务实际用处

blueju

大前端 npm

三分钟快速详细安装CentOS

程序员的时光

Linux centos 程序员 28天写作

关于选择的复盘(part 1)

.

28天写作

精选算法面试-队列

李孟聊AI

算法 队列 28天写作

原理竟然是这!GitHub上标星13k的《Android面试突击版》,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

Synchronized 精讲

伯阳

Java 多线程 高并发 synchronized java关键字

CSS ( Cascading Style Sheets )

roadup

CSS

我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?

冰河

分布式 微服务 dubbo 系统架构 服务治理

不可多得的干货!耗时两个礼拜,8000字安卓面试长文,内含福利

欢喜学安卓

android 程序员 面试 移动开发

网线如何制作和如何使用?

我与你地铁高峰期的邂逅,背后竟然是?

脑极体

[2/28]保障业务转化为开发需求

L3C老司机

扫盲帖:聊聊微服务与分布式系统

AI乔治

Java 架构 微服务 分布式系统

技术人小故事-团队愿景篇-第4段

Ian哥

28天写作

【薪火计划】11 - 学习总结

码上生长

管理 28天写作

读《关于中台的思考与尝试》,我竟然懂得了这么多!

李忠良

中台 方法论

synchronized只会用不知道原理?一文搞定

Java鱼仔

Java 面试 并发 synchronized

外行话之什么是好的游戏角色

Justin

28天写作 外行话 游戏设计

28 天带你玩转 Kubernetes-- 第四天(资源介绍)

Java全栈封神

Kubernetes k8s 28天写作 k8s教程 k8s资源

异步I/O -- posix aio 从入门到放弃的吐血实践

1412

workflow srpc 异步调度 posix aio kqueue

甲方日常 83

句子

工作 随笔杂谈 日常

数仓建设中最常用模型--Kimball维度建模详解

五分钟学大数据

大数据 数据仓库 数仓 维度建模

【Mysql-InnoDB 系列】锁

程序员架构进阶

MySQL innodb 28天写作

记录一下我离线依赖迁移安装的具体尝试过程

blueju

JavaScript 大前端 npm Node webpack

Spring Boot 使用slf4j进行日志记录

武哥聊编程

Java springboot SpringBoot 2 slf4j 28天写作

影响DevOps和DevSecOps采用的7种趋势

啸天

安全 DevSecOps 应用安全

hive JOIN操作分析

梧桐

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