注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韩国恺的博客

hanguokai.com

 
 
 

日志

 
 

Dart 语言技术概述  

2011-10-25 03:10:46|  分类: Dart |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文链接:Technical Overview
更新日期:2012年11月14日

Dart 帮助开发者高效构建面向现代浏览器的高性能应用。以现代桌面和移动浏览器为目标,Dart 应用能够原生在 Dart 虚拟机中运行或者被编译为 JavaScript 。

简单(simplicity)高效(efficiency)可伸缩(scalability)为开发目标,Dart 语言将强大的新语言特性与熟悉的语言构造组合成为清晰、可读的语法。但是 Dart 不仅仅是一门语言。Dart 的开源项目也包括了各种库(libraries)包管理工具(package manager)和全功能编辑器这样的工具

另外,Dart 的各种开源项目和 Pub 包管理工具帮助开发人员变得更有生产力。例如,开发者可以使用 Pub 获得与 JavaScript 互操作的能力、web UI 框架、单元测试库、用于游戏开发的库等等。

Dart 语言已经开始稳定,Dart 团队正在改进性能。Dart VM 已经在两个重要的基准测试中比 Chrome 使用的 JavaScript V8 引擎快很多了。更多最新的情况请查看这个性能对比页面

设计目标
下面这些指导设计目标正在持续演进和精炼:
  • 创建一种结构化但灵活的 web 编程语言。
  • 使 Dart 让程序员感到熟悉并符合直觉,因此易于学习。
  • 确保所有的 Dart 语言构造允许高性能和快速启动应用
  • 使 Dart 适用于所有的web设备,包括手机、平板、笔记本和服务器。
  • 提供工具使 Dart 能够在所有现代浏览器上快速运行。
这些设计目标定位于解决当前 Web 开发者所面对的问题:
  • 小的脚本经常演化为没有明显结构的大型 web 应用,他们难以调试和维护。另外,整体应用不能切分,所以不同小组不能独立的工作。当 web 应用变大之后很难有生产力。
  • 脚本语言的流行是因为他们轻量型的本质使其很容易快速编写代码。通常应用与其它部分的契约是写在注释中的而不是在语言自身的构造中。因此,作者以外的人难以阅读和维护一段特定的代码。
  • 在现存的语言中,开发者被迫在静态语言和动态语言中做出选择。传统的静态语言要求重量型的工具链并且代码风格感觉死板和过度约束。
  • 开发者没有创建出一种同时适用客户端和服务端的均衡系统,除了少数情况如 Node.js 和 GWT。
  • 切换使用不同的语言和格式,很麻烦并增加了编码的复杂性。

语言特性
Dart 语言的关键特性包括:类、可选类型、词法作用域(lexical scoping)、库、isolate 和工具性(toolability)。

尽管 Dart 的设计让人感到熟悉,但我们趁此机会修正了一些大众语言中的错误特性。我们也从一些较少熟知的语言中引入了一些好的特性。一些你可能没有期望的 Dart 特性包括顶层函数、可选参数、字符串插值、多行字符串、动态方法处理(noSuchMethod)、方法级联(..)和函数快捷语法(=>)。更多细节请看语言向导

类提供了一种有效地定义 API 的易于理解的机制。每个类都隐式定义了一个接口。类和接口使方法与数据能够被封装和重用

可选类型
可选类型可以帮助 Dart 程序从快速原型成长为复杂的、模块化的应用程序。小程序或原型可能不需要类型标注,但你随时可以选择添加它们。类型使程序的意图更清晰,这可以帮助开发者理解代码。类型也为编写和调试代码提供了更强大的工具支持。

词法作用域
Dart 中的作用域规则符合直觉。每个标示符在它所声明的块中起作用,这意味着你可以通过查看代码中的花括号 { ... } 来确定变量的作用域。即使是在循环中的闭包,变量的值也是你直觉上期望的。

开发者可以创建和使用在运行时保证不会被改变的库。因此独立开发的代码段可以依赖于共享库。

Isolate


工具
Dart 包含了一组丰富的执行环境、库和开发工具来支持语言。这些工具允许富有生产力地、动态地开发。

Dart 代码示例
下面是一些 Dart 代码片段,让你感觉一下 Dart 代码的样子。

类和接口
Dart 中的类即接口。接口和类给你提供一组可重用、可扩展的构建块。接口定义了一组方法和常量,有时继承自其它接口。类可以实现多个接口,但只能继承自一个超类。

下面的代码定义了一个接口和实现了该接口的类及其子类:

abstract class Shape {
num perimeter();
}

class Rectangle implements Shape {
final num height, width;
Rectangle(num this.height, num this.width); // Compact constructor syntax.
num perimeter() => 2*height + 2*width; // Short function syntax.
}

class Square extends Rectangle {
Square(num size) : super(size, size);
}



可选类型
从程序员的观点看,Dart 提供了静态与动态类型混合的语法。在做实验时,可以编写没有类型的代码实现简单原型。当程序变得更大更稳定时,可以在期望的地方添加类型以辅助调试和加强结构。

例如,这是一段没有类型的 Dart 代码,创建了一个 Point 类,它有两个参数x、y,两个方法 scale() 和 distance():

import 'dart:math';

class Point {
var x, y;
Point(this.x, this.y);
scale(factor) => new Point(x*factor, y*factor);
distance() => sqrt(x*x + y*y);
}

main() {
var a = new Point(2,3).scale(10);
print(a.distance());
}


下面这段代码有类型的样子,确保了x、y 和 factor 是 num 类型,一个 Point 包含了两个 num 类型的值:

import 'dart:math';

class Point {
num x, y;
Point(num this.x, num this.y);
Point scale(num factor) => new Point(x*factor, y*factor);
num distance() => sqrt(x*x + y*y);
}

void main() {
Point a = new Point(2,3).scale(10);
print(a.distance());
}




如何使用Dart
Dart 的几种运行方式:
  • 把 Dart 代码编译为 JavaScript 在浏览器中运行:Chrome, Safari 5+, 和 Firefox 4+ 
  • 直接在 Dart VM 中运行
  • 在浏览器中使用新的 MIME 类型,而不需要编译为 JavaScript

Dart Editor
Dart Editor 是创建、修改和启动 Dart Web 应用的工具。点击一下就可以把一个 Dart Web 应用编译到 JavaScript 并在浏览器中启动这个应用。
Dart Editor 利用了 Dart 语言的结构化特性,支持方法名的自动完成和重构功能。
更多使用 Dart Editor 的信息请参考  Dart Editor 向导

新的 MIME 类型
你可以把 Dart 程序直接嵌入到 HTML 页面中。这是提出的MIME 类型,“application/dart”:

<!DOCTYPE html>

<html>
<head>
<title>Simple Dart Web App</title>
</head>
<body>
<h1>Simple Dart Web App</h1>
<h2 id="status">dart is starting up...</h2>
<script type="application/dart" src="SimpleDartWebApp.dart"></script>
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>

如果浏览器不支持 Dart,上面这个 dart.js 文件将把 application/dart 的代码替换为等价的 JavaScript 代码。
下面是这个页面中嵌入的 Dart 代码:

import 'dart:html';

class SimpleDartWebApp {
void run() {
write("Hello World!");
}

void write(String message) {
// the HTML library defines a global "document" variable
document.query('#status').innerHtml = message;
}
}

void main() {
new SimpleDartWebApp().run();
}



工具
Dart 语言包含了一系列帮助快速原型、编码和调试的工具:
  • Dart Editor
  • dart2js 编译器
  • Dart VM
  • Dartium:嵌入了 Dart VM 的 Chromium
在客户端,你可以使用两种方式部署 Dart 应用。对于不支持 Dart VM 的浏览器,可以通过 dart2js 把 Dart 代码编译为 JavaScript。这个编译器会把 Dart 代码转换为 ECMAScript5 兼容的 JavaScript 代码。对于支持 Dart VM 的浏览器可以直接在浏览器中运行,包括 Dartium 和 未来的 Chrome。

在服务器端,Dart 代码可以直接在命令行中运行。
Dart 语言技术概述 - hanguokai - 韩国恺的博客
 
类库
Dart 提供了下面这些类库支持客户端和服务器端开发:
核心库:包含通用数据结构和操作的接口。
HTML库:包含了支持 HTML5 DOM 的接口。
I/O 库:包含读写文件、目录、网络套接字和运行 HTTP server 的接口。
Isolate 库:包含创建 isolate 和 与 isolate 通信的接口,是 Dart 程序中用于并发和安全的机制。
Crypto 库:包含创建单向哈希 (SHA1, MD5, SHA256) 和 HMAC 支持的接口。
JSON 库:包含解析和生成 JSON 编码文本的支持。
单元测试库:包含用于编写 Dart 单元测试的函数和类。



  评论这张
 
阅读(7734)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018