写点什么

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

评论

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

新一轮SocialFi浪潮来袭,Atem Network 再次打响注意力争夺战

股市老人

不会写代码了?2分钟看完,这5个技巧你一定要收好。

代码生成器研究

罗拉ROLA告诉你如何正确、合理使用静态IP代理?

Geek_bf375d

从稳定性、响应速度、可用率全面测试行业标杆罗拉ROLA-HTTP代理

Geek_bf375d

从DPlayer说起,有哪些开源的H5播放器

魂祈梦

前端 js

容器中sh脚本明明存在,为何会报"no such file or directory"的错误?

大伟

git Docker autocrlf

CSS选择器

阡陌r

CSS 选择器 伪元素 伪类

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

不在线第一只蜗牛

人工智能 GitHub AI

为什么开发不能兼任测试?普通人不知道的冷知识指南

代码生成器研究

WorkPlus Meet视频会议系统,可私有化部署,保障内部数据安全

BeeWorks

ETL数据转换工具类型与适用场景

谷云科技RestCloud

ETL

无代码/低代码编程是否走错了路?

代码生成器研究

WorkPlus私有化部署的即时通讯软件,企业内部沟通协作的利器

BeeWorks

WorkPlus AI助理知识问答机器人,助力企业级私有化AI构建

BeeWorks

小程序开发经费紧张,华为云这份省钱秘笈请点赞收藏

YG科技

罗拉rola-ip详解长效代理IP和短效代理IP的区别是什么?

Geek_bf375d

IP长效代理,稳定、高效网络罗拉rola-ip代理服务

Geek_bf375d

大语言模型|人工智能领域中备受关注的技术

许思王

人工智能 大语言模型

彩虹桥架构演进之路-性能篇

得物技术

数据库 nio 中间件 高性能

『亚马逊云科技产品测评』活动征文|如何使用Docker compose快速搭建个人博客?

鸽芷咕

Docker 容器 云服务器

是效率利器还是程序黑盒?为什么程序员都抵制低代码?

代码生成器研究

罗拉rola-ip带你看使用代理IP时有哪些小技巧?

Geek_bf375d

推出链上美债产品的 ProsperEx:RWA 衍生品赛道的早期玩家

股市老人

解锁数据潜力:为什么你应该考虑使用向量数据库

熬夜磕代码、

数据库

如何快速将钉钉员工信息同步到飞书

谷云科技RestCloud

Linux设备树(DTS)

芯动大师

Linux

2023 年是无代码的一年,还要程序员吗?

伤感汤姆布利柏

前端 低代码 开发

低代码自动化,程序员真的还有前途吗??

代码生成器研究

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