Dart语言是Google力推的新语言,本书全面介绍这门语言。本书总计9章,前6章对Dart的对象、库、函数、类型、表达式与语句等基础知识进行了详细介绍;第7、8章对反射和isolate等进阶内容进行了深入讲解;第9章为总结。本书与众不同之处是,除了介绍语言特性,更着重于讲解语言背后的原理和思想。
Google力推新语言,语言创造人Gilad Bracha亲自执笔,不仅介绍了语言特性,还介绍了语言背后的原理和思想
戴虬,毕业于华东交通大学,现在在广州联亿网络科技有限公司任Web开发工程师,并且是Dartlang社区负责人。热爱Dart编程语言,希望这门语言有很好的发展,并不遗余力地推广、维护。
前言
本书与其他Dart书籍有什么不同?其他Dart书籍都注重于实操,本书着重于讲解原理和思想。
Dart的实操非常重要,但它们可能会逐年变化,并可能一直变化下去。相比之下,Dart背后的原理应该很少会随时间而改变。如果你对激发Dart语言设计的想法及它们是如何实现的,还有如何权衡现实世界对Dart的需求等感兴趣,那么你应该阅读本书。
Dart的主要思想之一是可选类型。我在几十年前就开始从事可选类型的工作,今天我们看到使用可选类型系统的语言在飞速增加,我对此感到非常欣慰。虽然Dart和它的任何竞争对手都不像我想要的那样实现可选类型,但可选类型成为主流的事实才是最重要的。
更重要的思想是,Dart是一种面向对象的语言,这不等同于传统意义上的类、继承或其他大多数开发者所理解的概念,它的深层含义可以表述为,一个对象最重要的是它可观察的行为。同样,Dart对这个想法并没有完美地实现,但比大多数主流语言要好。
本书中涉及的另一个关键思想是反射。大部分关于编程的书籍都没有很好地讨论反射。因此,我非常渴望在本书中探讨反射。然而,Dart的反射历史却意外地曲折。
一方面,很多Dart用户都渴望使用反射,有时只是为了用而用,但并不一定适用。另一方面,某些作为Dart编译目标的平台存在严重限制,使得对反射的支持异常昂贵,尤其是需要考虑代码的体积。这种双向压力使Dart的反射陷入尴尬的境地。
我们从一开始就知道代码体积和反射对其影响的敏感性。这个问题及其解决方案在2011年11月的第1个Dart反射设计文档中被讨论。然而,直到实现解决方案且开发者可以轻松使用时,已经花费了四年。
我希望本书有效地传达上述及其他语言设计相关的想法,但它们的好坏由读者来判断。我们可能可以创造一门更加纯粹的语言,并做得更好,但另一方面,我们也不清楚是否可以得到大家的认可。也许有一天我会进行那样的尝试。
本书的写作历时很久。直到我能完整讲述一个关于反射的合理故事,我才完成本书。拖延本书写作的另一个原因是,本书的主题发展得如此之快,以至于它总是面临过时的风险。这种风险还没有过去,但在某个时刻我们需要说“适可而止”。
Dart并没有完美实现驱动其设计的思想。没有人比它的设计者更了解这个事实。然而,它是一门真正的语言,已经被用来书写数百万行的关键任务代码。它以某种方式推动了编程文化的发展,最引人注目的是在可选类型领域。正如有人在丹麦说的:“它本可能更糟”。
致谢
Dart编程语言是大团队努力的结果。Dart的开发工作让我收获许多快乐,我需要跟许多同事合作,其中有很多人更可以称为朋友,跟他们合作是一件非常愉快的事情。我非常荣幸地在本书及Dart语言规范中列举部分曾经和我合作过的同事。
Dart语言是由Lars Bak和Kasper Lund构思和设计的,所以没有他们,本书就不可能存在。Lars是我长期的朋友和同事,从一开始就管理Dart项目。除此之外,Lars让我参与Dart的设计工作,为此,我特别感谢他。Lars和Kasper不仅是非常有天赋的系统设计师和实现者,而且很好相处!
特别感谢Erik Meijer,和他共同开发Dart的异步功能是一种快乐。Erik是一名真正的编程语言专家,且属于非常少见的那种。
如果本书第8章的完成需要感谢Erik,那么第7章的完成就需要感谢Ryan Macnak、Peter Ahé、Erik Ernst的帮助了,他们分别实现了Dart VM中mirrors、dart2js中的mirrors及reflectable库。
本书的写作,不仅得到了Lars的支持,也得到了我的经理Ivan Posva的支持。在过去的四年里,我与Ivan和VM团队的其他成员共享办公空间,他们是:Zachary Anderson、Daniel Andersson、Siva Annamalai、Régis Crelier、Matthias Hausner、Ryan Macnak、John McCutchan、Srdjan Mitrovic和Todd Turnidge。感谢他们的愉快陪伴。
我经常拜访位于丹麦奥胡斯的Dart总部,其过程充满乐趣(即使实际旅途并不有趣)。Linda Lykke Rasmussen的行政支持是无价的。
我对Dart语言规范的编写工作是本书的直接基础来源。这项工作得益于许多人的建议,但只有Lasse Nielsen对细节的不寻常的觉察,使他捕捉到了许多微妙的问题。
我也参与了Dart的标准化工作,Anders Sandholm帮我承担了其中的大部分工作,我对他表示感谢。我还要感谢Dart标准委员会ECMA TC52的其他参与者。
如果没有其他Dart团队成员一直以来的工作,Dart不可能有今天。人很多,这里不便一一列出,但他们都为Dart的今天付出了努力。
和我长期合作的编辑Greg Doench一直非常耐心,我很高兴能与他合作。
和往常一样,我的妻子Weihong和我的儿子Teva,让这一切都是值得的。
Gilad Bracha
加利福尼亚州 洛思阿图斯
2015年11月
本书第三章部分,第47页最后一行代码和第48页得第一行代码contents,应该改为_contents;
没有资源就删掉IX这一页下面的文字嘛,真是多此一举哦
是的 源码无法获取 麻烦更新下资源
哪有”下载资源”啊?
源码资源失效,同上