AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

厦门等级保护测评机构地址在哪里?咨询电话多少?

行云管家

等级测评 厦门

AI时代,看用友iuap如何推动数智商业创新

用友BIP

AI 技术大会 数智底座 升级企业数智底座

Kubernetes 多集群网络方案系列 1 -- Submariner 介绍

Se7en

mysql invalid conn排查

蓝胖子的编程梦

MySQL 性能 线上故障 超时 连接池

Codepipeline 跨账号访问 Codecommit

亚马逊云科技 (Amazon Web Services)

NFT游戏开发交易系统搭建方案

薇電13242772558

NFT

mac虚拟机Parallels Desktop 常见问题解答

互联网搬砖工作者

一站式指标平台 Kyligence Zen 功能详解

Kyligence

数据分析 指标平台

一次goroutine 泄漏排查案例

蓝胖子的编程梦

golang 性能 协程 pprof 线上故障

一次系统延迟性优化案例

蓝胖子的编程梦

golang 性能 延迟 线上事故 线上故障

Nautilus Chain 上首个 DEX PoseiSwap 模型解析

鳄鱼视界

程序员如何打破需求魔咒:为什么人越招越多,活越干越累?

小红书技术REDtech

算法 活动回顾

首次解密小红书“种草”机制:大规模深度学习系统技术是如何应用的

小红书技术REDtech

深度学习 机制策略 活动回顾

openGemini 1.0版本,带来哪些新特性和性能提升?

华为云开源

数据库 时序数据库 sql

LED显示屏品质如何控制

Dylan

品牌 LED显示屏 全彩LED显示屏

号外!多个企业数智化领先实践将亮相2023用友BIP技术大会

用友BIP

技术大会 用友iuap 升级企业数智化底座 央国企数智化转型

低代码是什么意思

优秀

低代码

轻松几秒提升视频清晰度:Perfectly Clear Video Mac版

真大的脸盆

Mac 视频处理 视频增强 Mac 软件 视频画质

【云图说】云数据库GaussDB如何做到卓越性能

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

三维设计新帮手|Blender怎么入门?

Finovy Cloud

blender 3D软件

一次排查某某云上的redis读超时经历

蓝胖子的编程梦

redis 性能 线上事故 线上故障 超时

交大翟广涛教授:眼见不实,怎样评价媒体体验质量

小红书技术REDtech

深度学习

软件测试/测试开发丨Dubbo 接口测试原理及多种方法实践总结

测试人

dubbo 软件测试 接口测试

【基础知识】PCB布局设计入门步骤

华秋PCB

工具 电路 PCB 布局 PCB设计

不同云平台之间的纳管用什么工具好?有推荐的吗?

行云管家

云计算 云平台

复旦邱锡鹏教授:语言模型即服务的五类应用手段,你了解多少

小红书技术REDtech

深度学习 nlp

Web前端组件库OpenTiny项目如何使用?

英勇无比的消炎药

开源 前端 OpenTiny UI组件库

通过4种经典应用,带你熟悉回溯算法

华为云开发者联盟

人工智能 华为云 回溯算法 华为云开发者联盟 企业号 4 月 PK 榜

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