明天回家,今天下午瞅时间翻译了Cyril Mottier的另外一篇有关Android前景的文章。

原谅地址是:http://cyrilmottier.com/2014/06/12/shaping-the-future-of-android-with-dart/,大家可以查看一下。

全文翻译内容如下:

在过去的这周中,有大量关于一些新型现代的编程语言的讨论、微博(Tweets)、博客、文章等。不容置疑,这些突然而起的漩涡因苹果公司在WWDC 2014上揭开了名叫Swift的崭新语言的神秘面纱而激起。在过去两周的假期中,我读到了大量关于Swift编程语言的东西,它的语法,它的特性、它的OC(Objective-C)互通性等等。但是我也看到一些人从开发人员的角度宣扬Android相比于iOS已经过时了。为什么?因为它是基于Java的。

坦诚地说,我认可他们的说法。我宣扬Google应当抛弃Java而转向其它语言已经时间不短了。情况是:我觉得Google一直在开发一种替代编程语言,至少和Apple秘密开发Swift一样久了。所以呢?这种现代编程语言是什么呢?一些人觉得Go语言很匹配这种传言,但我个人认为Dart更恰当一些。在假期中,我阅读和学习了大量关于Dart的东西。在我看来,在许多层面,Dart比Go更适合Android:它更成熟,基于虚拟机(就像Java一样),更适合Google生态系统,并且,在保持语言简单性的同时,它有了极其简单的学习弧线。对于Google而言,的确是时候将Dart成为Android,乃至,从全球而言,成为公司本身的未来。

Java在退休室中已有位置

我爱Java。真的。但是Java正在变老,已老到该退休了。即便Java 8被认为是其编程语言历史上最大的变革之一,Java依然携带着许多的弊端、局限性和问题。这些问题中大多数从第一天开始就一直在那儿,并且,将由于语言向后兼容的天性而持续存在。另一方面,Dart从被创建的第一天开始就一直牢记简单的一点:修复这些普遍且复现的问题。Dart在编程流中解决了许多麻烦,并且给开发人员创建了极其强大且流畅的API。下面是Dart语言的一些基础却现代的特性列表:

  1. 非原始类型。Dart中,一切皆是对象。甚至bool,等价于Java中的boolean,也是一个对象。纯面向对象编程语言应该是完全关乎对象的。Java中的原始类型仅仅是实现的细节。
  2. 大幅简化的冗杂语法。创建编译期已知的公开常量可能通过关键字const来完成。不再有public static final。关键字public和private不再是语言的一部分。变量、方法和类的可见性基于Dart的命名规范:一切默认为public。如果实体名以”_”开头,那么它就是private的。
  3. 已命名和工厂构造函数。Java要求构造器依据类名命名,例如Rectangel。如果创建了Rectangle(int left, int top, int right,int bottom)和Rectangle(int left, int top,int width, int height),那么你将以编译期错误结束。因为Java使用参数来分辨构造器。解决这个问题的一种方式是创建一个静态工厂方法。Dart以允许你创建已命名(和可选的工厂)构造函数的方式方法修改了这个问题。
  4. 现代参数传递:Dart支持按位和已命名参数。他们是可选的,并且具有默认值。
  5. 还有:混合类型(mixins),隐式接口,isolates(简单的并发模型)。

是开发人员而非律师制造软件

Google和Oracle在Android平台上Java的使用已经斗了好久。Google VS Oracle案很可能是计算历史上最重要的案例之一。我们目前似乎正处在两大巨型公司之间的和平时代……或者是冷战。不必再说对于Google而言继续依靠竞争对手管理的编程语言过于危险。他们显然不能负担得起继续遭受官司的伤害。

控制语言,使之发展

为了能够向前发展,Google必须完全控制他们正在使用的编程语言。例如,Java  8成为微小的圣杯已经有段时间了。在过去我们听到了许多关于它的东西。而且,大量特性和增强已经被延期了。现在,Java 8拥有了一些诸如闭包的特性。我们有可能在Android平台上不会拥有这些特性太久……

通过控制他们使用的语言,Google可以在无论任何必要的时候持续地在所有平台(移动,网页和服务器)上维护和改进这种语言。Apple在过去和现在都依旧完美地如此对待OC和Swift。例如,他们仅仅通过改进OC的方式在3年前就引入了闭包的概念。时间再近一点,ARC和字面值引入进来。Apple现在控制这门语言。他们可以使之发展并且在恰当的时候这样做。Google对于Dart处于相同的位置,就像Dart官网所陈述的那样:

Dart是个开源项目,由Google和别的地方贡献力量。—Dart官网:www.dartlang.org/...

理论上讲,这段话表明任何个人都可以通过访问源码和提交补丁和增强来参与这门语言。实际上,就像Android开源项目一样,只有Google控制Dart,因为它是唯一一家有充足资源来维护这个项目并使之前进的公司。个人层面来讲,只要Google保持Dart开源并倾听其它的贡献者的声音,我对Google控制这门语言完全表示OK。

一门语言控制所有

通过引进Android平台的Dart,Google将填平Google开发生态系统上唯一残留的鸿沟。Dart已经允许开发人员为网页和服务器创建应用。将Dart导向Android将是这座大厦的最后一块基石。的确,这将使Dart成为运行在所有主要平台上的唯一编程语言:移动,网页和服务器,且是所有软件公司都想达成的“一次编译,到处运行”的座右铭的更进一步。

最后,Dart是简化Google开发语言投入的一次机遇。的确,Google在过去一直在使用多种不同的语言:C++,Python,Java,Javascript等。Dart语言会是联合所有语言以使Google产品/服务的SDK更加协调紧凑的十字路口。

发射Dart升空的火箭

Dart很优秀,且已出现多年。不幸的是,它还没有达到被认为是网页开发中的必然语言的临界规模。这主要是因为这样一种事实:网页开发人员似乎并不认为Dart带来了足够的改进提升以使这种转变是值得的。使Dart成为Android平台的默认语言将会是推动自身到下一层次并最终使其成为编程语言景观中的一流公民的最优一步。

要求开发人员使用一门崭新的语言在起初的时候总是很难推动的。然而,当你知道你要将要学习的语言能够用于其它平台的时候,这将是非常鼓舞人心的。作为一名Android开发人员,我将非常乐意在Android上使用Dart,而且能够在任何想要的时候轻易地创建一个小的网站。

总结

推动Dart到Android上显然表示Google将不得不努力工作以解决诸如性能、兼容性和互通性等问题。在Dart起初是为桌面网页浏览器开发的前提下,如何确保Dart能够像受限设备上的Java一样运行高效呢?如何确保新的基于Dart的应用能够在多数设备上运行呢?通过只将DartVM嵌套在Android 4.5(这仅仅是个猜测,我不知道下一下Android开发版本。也是是5.0……事实上我并不在乎。我想要的仅仅是一个拥有一些新的很酷的ART特性的Android版本)之上的设备?通过dart2dex程序将应用转化成Dex?如何促使人们在Dart中使用Java API或在Java中使用Dart API? 所有的这些问题都很难解决,但这正是Google的优势所在:找到所有这些问题的方案。如果你像我一样觉得Android应该转向Dart,你可以在这个Dart bug追踪器(http://dartbug.com/19266)上加星标。Google I/O大会在即, 我期待着6月25号的主题演讲上倾听Google揭露Android未来的一切东西。Google,是时候勇敢起来了。让我们通过抛弃Java、揭开Dart作为Android应用上的新编程语言的神秘面纱来开启一段新的旅程~

[翻译]用Dart塑造Android未来的更多相关文章

  1. 用Dart开发Android应用(sky应用)

    此文运用的是优雅的Markdown而书 流弊的Google公司,为了解决Android的卡顿问题,为此下了是不少的决心,这不最新研发的Sky移动应用UI框架,在用户界面和高质量的UI交互设计,很是让人 ...

  2. (翻译) TFS源代码控制的未来 (TFSVC vs. Git)

    说明:由于博客园的限制,之前转发的MVP卢建晖的文章不能放入首页,但我会继续转发,感兴趣的同学请到我的博客首页查看. 博主: 翻译自微软Visual Studio ALM产品组老大Brian Harr ...

  3. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试

    问题: 你想要测试app的Android组件. 解决方案: 使用新的测试类实现JUnit风格的测试. 讨论: 测试像activities,services等的Android组件,需要将app部署到连接 ...

  4. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.5——使用Android Libraries

    问题: 你想要在app当中增加新的library模块 解决方案: 使用library插件,增加一个library模块作为依赖. 讨论: 不可以通过使用java库给app增加许多功能,通常是使用jar包 ...

  5. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.7——使用Android Studio签署发布apk

    问题: 想要使用Android studio生成签名配置,给他们分配build类型. 解决方案: Build菜单提供了生成签名配置,Project Structure窗口有tab用于分配不同的type ...

  6. 粗谈Android未来前景

    Andriod作为智能手机机兴起的操作系统,有着非同寻常的地位.而相对于他的竞争对手ios,两大系统各有自身的优缺点,有太多的不同点,但相比较用户体验来说ios略胜一筹. Android系统极具开发性 ...

  7. [Android]在Dagger 2中使用RxJava来进行异步注入(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客: # 在Dagger 2中使用RxJava来进行异步注入 > 原文: 几星期前我写了一篇关于在Dagger 2中使用*Producers*进行 ...

  8. [Android]使用Dagger 2来构建UserScope(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6237731.html 使用Dagger 2来构建UserSco ...

  9. [Android]使用Dagger 2进行依赖注入 - Producers(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6234811.html 使用Dagger 2进行依赖注入 - P ...

随机推荐

  1. git 如何让单个文件回退到指定的版本

    1.进入到文件所在文件目录,或者能找到文件的路径查看文件的修改记录 1 $ git log MainActivity.java 结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. C++ 虚函数表决心

    C++ 虚函数表解析 xml:namespace prefix = o /> 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制. 关 ...

  3. Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:孙立伟 链接:http://www.zhihu.com/question/20140085/answer/14107336 ...

  4. ACM核武器

    工欲善其事必先利其器,给大家介绍一下ACM里面经常使用的一些工具,平台,作为第一发福利. 详细看这里,我直接粘贴过来有些代码没贴过来  http://wuyiqi.net/house/acm_weap ...

  5. 修改Oracle XE Listener 占用的1521、8080端口

    修改Oracle XE Listener 占用的1521.8080端口今天在帮开发人员Demon安装oracleXE时,有这么一段提示: [sql]   Destination Folder: D:\ ...

  6. easyUI 插件写法 ---Validatebox 插件为例

    easyui 的每个组件都有属性.方法和事件.用户可以很容易地对这些组件进行扩展. js地址:jquery-easyui-1.3.3/jeasyui-extensions/jeasyui.extens ...

  7. 准备战争“软测试”之DB基础知识

    "数据库"东西这个陌生和数据,进入提高班,从第二年开始接触,的项目还是自考的学习加起来也有3遍了.这仅仅是一个開始,软考又要对数据库进行全面的分析,那么如今就让我们再一次剖析它吧! ...

  8. oracle substr功能

    substr(string dealstr, int startposition, int sublength) dealstr:截取字符串 startposition:串dealstr,起始位置0 ...

  9. Android Application.java以及它的作用

    What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...

  10. 点击鼠标获取元素ID

    原文:点击鼠标获取元素ID public partial class Form1 : Form { public Form1() { InitializeComponent(); } private ...