Dart 2正式发布了,除了Web外它还想搞定App开发

2018 年 2 月 23 日 前端之巅 覃云

Dart 作为企图替代 JavaScript 地位的语言,它的努力和其它很多语言一样,都失败了。不过,Dart 团队并未灰心丧气,有传言 Google 开发的新操作系统Fuchsia里,Flutter 将作为重要开发工具,显然 Google 并未放弃对 Dart 的期望。

今天,Google 正式发布了 Dart 2,最新的版本诠释了 Google 对 Dart 这门语言的新认识:Dart 是针对 Web 和移动客户端开发进行独特优化的语言

以下全文来自 Dart 产品经理 Anders Thorhauge Sandholm 对 Dart 2 的一些解读。

Dart 2 大大加强和精简了类型系统,清理了语法,并重建了大部分开发工具链,使移动和 Web 开发变得更加愉快和高效。Dart 2 还融合了包括 Flutter、AdWords 和 AdSense 在内的语言早期使用者的经验教训,以及针对客户反馈的成千上万大大小小的问题进行了改进。

Dart 的核心原则

Google 为什么认为 Dart 能够满足客户端开发人员的需求?Google 认为除了现代通用语言所必需的属性之外,客户端开发还应受益于语言的以下特性:

  • 高效。语法必须清晰简洁,工具简单,开发周期接近即时。

  • 快速。即使在小型移动设备上,运行时的性能和启动也必须非常出色且可预测。

  • 便携。客户开发人员今天必须考虑三种平台:iOS、Android 和 Web,这门语言需要在所有这些平台上运行良好。

  • 易用。如果这门语言希望让数百万开发人员受用,那么它就不能脱离实际。

  • 反应式。这种语言应该支持反应式的编程风格。

Dart 已经用于 Google 和其他公司的 Web、iOS 和 Android 平台上许多高质量、关键性的应用程序,它对移动和 Web 开发有着巨大的益处:

  • Dart 加快了开发人员的速度,因为它具有清晰、简洁的语法,并且能够使用 JIT 编译器在 VM 上运行。后者允许在移动开发过程中进行有状态的热重载,从而实现超短的开发周期,您可以在设备上运行的应用程序中编辑、编译和替换代码。

  • 凭借其能够提前有效地编译为本地代码的能力,Dart 在移动设备具有可预测性、高性能和快速启动的能力。

  • Dart 支持编译为本地代码(ARM,x86 等)以实现快速的移动性能,并且可以将其转换为用于 Web 的高效的 JavaScript。

  • Dart 对于许多现有的开发人员来说是易用的,这要归功于其不容忽视的面向对象和语法特点—— 它允许任何使用 C ++、C#、Objective-C 或 Java 的开发人员在几天之内迅速提高工作效率。

  • Dart 适用于反应式编程,其核心库包括 streams 和 futures 它也通过其世代垃圾收集器来管理短暂对象。

Dart 2:更好的客户端开发

在 Dart 2 中,Google 采取了进一步措施巩固 Dart 作为客户端开发语言的霸主地位。特别增加了一些新功能,包括强大的类型功能,以及将 UI 定义为代码。

  强大、健全的类型功能

AdWords 和 AdSense 背后的团队已经使用 Dart 构建了一些 Google 最大和最先进的 Web 应用,以管理那些给 Google 带来大部分收入的广告。就是在与这些团队进行密切合作合作之后,Google 发现了增强 Dart 类型系统的大好机会,这有助于 Dart 开发人员在开发过程早期发现 bug,并更好地扩展到大型团队构建的应用程序中,提高整体代码质量。

当然这不是唯一的方式,在广袤的 Web 生态系统中,向 JavaScript 添加类型注释的趋势也在增长。例如,TypeScript 和 Flow 都使用类型注释和推理来扩展 JavaScript,以提高分析代码的能力。

在下面的小例子中,Dart 2 的类型推断有助于发现一些微小的错误,并因此帮助提高整体代码质量。

void main() {
  List<int> prices = ['99', '27', '10000', '20000000'];

  // Sort in place from smallest to largest
  prices.sort();

  print('Lowest price is ${prices[0]}!');
}

这段代码代表了什么?你可以合理地预期它会打印“27”,但是,如果没有启用 Dart 2 的声音类型系统,它将打印“10000”,因为按照字典顺序排列,这恰好是字符串列表中最小的元素。但是,使用 Dart 2 时,此代码会给出类型错误。

  将 UI 作为代码(UI as code)

在创建 UI 时,你必须在单独的用户界面标记语言和编写应用程序的编程语言之间进行切换,Google 正在努力使 UI 变成一种愉快的体验,以显著减少对上下文切换的需求。Dart 2 可选newconst。这个非常强大的功能本身非常有价值,也为其他事情的发展指明了方向。例如,有了newconst两种选择,我们可以清理 UI 小部件的定义,以便它不再使用单个关键字。

// Before Dart 2
Widget build(BuildContext context) {
  return new Container(
    height: 56.0,
    padding: const EdgeInsets.symmetric(horizontal: 8.0),
    decoration: new BoxDecoration(color: Colors.blue[500]),
    child: new Row(
      ...
    ),
  );
}

// After Dart 2
Widget build(BuildContext context) =>
  Container(
    height: 56.0,
    padding: EdgeInsets.symmetric(horizontal: 8.0),
    decoration: BoxDecoration(color: Colors.blue[500]),
    child: Row(
      ...
    ),
  );
view raw
Dart 的客户端用途
  移动

Dart 最重要的用途之一就是 Flutter,它是谷歌新的移动 UI 框架,为 iOS 和 Android 制作高质量的原生界面。

开发人员曾使用 Flutter 构建一个非常受欢迎的节目 Hamilton 的官方应用程序,并在构建时间上打破了记录。Flutter 使用反应式编程风格并逐个像素控制整个 UI。对于 Flutter 而言,Dart 在易学性、反应式编程、出色的开发速度以及具有快速的垃圾回收器、高性能运行系统等方面都符合要求。

推荐阅读:

为什么说 Flutter 是革命性的?

为什么原生应用开发者需要关注 Flutter?

  Web

Dart 是经过关键性 Web 应用程序验证的平台。它拥有为 Web 量身打造的库,如dart:html,以及完整的基于 Dart 的 Web 框架,使用 Dart 进行 Web 开发的团队会对速度的改进感到非常激动。正如 Google AdWords 工程副总裁 Manish Gupta 所说的那样:

AdWords 前端庞大而复杂,对 Google 的大部分收入至关重要。

我们之所以选择 Dart 是因为其高性能、可预测性和易学性,完善的类型系统,以及完美地支持 Web 和移动应用。

现在,我们的工程师比以前的工作效率高出两到三倍,这让我们十分欣慰。

未来发展

借助 Flutter 和 Dart,开发人员终于有机会使用共享代码库,为 Android、iOS 和 Web 编写高质量的应用程序。此后,团队成员可以在平台之间进行无障碍的切换,并通过代码审查等互助。到目前为止,我们已经看到 AdWords Express 和 AppTree 等团队在移动和 Web 中共享其代码的 50%到 70%。

Dart 是一个开源项目和开放的 ECMA 标准。Google 欢迎对 Dart 核心项目和 Dart 软件包生态系统的改进提出建议的开发者。

你可以在命令行中试用 Flutter 中的 Dart 2 和 Dart SDK。至于 Dart SDK,可从开发通道获取最新的 Dart 2 预发行版,并确保使用具有--preview-dart-2标志的版本运行代码。

今天发布的 Dart 2 是一款高效、简洁、已通过实战检验的语言,能够应对现代应用程序开发的挑战。它已经被这个星球上一些最苛刻的开发者所喜爱,希望你也会喜欢它。

  相关链接

Flutter:

https://github.com/flutter/flutter/wiki/Trying-the-preview-of-Dart-2-in-Flutter

Dart SDK :

https://www.dartlang.org/install

原文链接:

https://medium.com/@asandholm/announcing-dart-2-80ba01f43b6

前端之巅

「前端之巅」是 InfoQ 旗下关注前端技术的垂直社群,加入前端之巅学习群请关注「前端之巅」公众号后回复 “ 加群 ”。投稿请发邮件到 editors@cn.infoq.com,注明 “ 前端之巅投稿 ”。

活动推荐:

随着人工智能、物联网等技术的普及,从未来的端来看,端已经不仅仅是手机和 PC,会涉及到各种各样的端的交互和展现形式。QCon 北京 2018,与淘宝高级技术专家寒冬、新浪微博技术专家聂永、百度资深前端工程师彭星等技术大咖探索前端技术实践,以及实践中的思考和经验参考。目前大会 8 折报名中,立减 1360 元。有任何问题可咨询购票经理 Hanna,电话:15110019061,微信:qcon-0410。

登录查看更多
0

相关内容

Google 发布的面向结构化 web 应用的开语言。 dartlang.org
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
FPGA加速系统开发工具设计:综述与实践
专知会员服务
63+阅读 · 2020年6月24日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
105+阅读 · 2020年1月2日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
2018年7月份GitHub开源项目排行榜
算法与数据结构
15+阅读 · 2018年8月3日
在浏览器中使用tensorflow.js进行人脸识别的JavaScript API
人工智能头条
6+阅读 · 2018年7月2日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
ROS 2正式版终于来了,还增加了这些新特性
量子位
3+阅读 · 2017年12月11日
Arxiv
8+阅读 · 2018年5月15日
VIP会员
相关资讯
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
2018年7月份GitHub开源项目排行榜
算法与数据结构
15+阅读 · 2018年8月3日
在浏览器中使用tensorflow.js进行人脸识别的JavaScript API
人工智能头条
6+阅读 · 2018年7月2日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
ROS 2正式版终于来了,还增加了这些新特性
量子位
3+阅读 · 2017年12月11日
Top
微信扫码咨询专知VIP会员