明天回家,今天下午瞅时间翻译了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. hdu 4975 最大流问题解决队伍和矩阵,利用矩阵dp优化

    //刚開始乱搞. //网络流求解,假设最大流=全部元素的和则有解:利用残留网络推断是否唯一, //方法有两种,第一种是深搜看看是否存在正边权的环.见上一篇4888 //至少四个点构成的环,另外一种是用 ...

  2. ABP领域层——工作单元(Unit Of work)

    ABP领域层——工作单元(Unit Of work) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ...

  3. 【LaTeX排版】LaTeX纸排版<两>

    1.文件夹的生成     直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...

  4. Java数据结构与算法(20) - ch08树

    树的主要算法有插入,查找,显示,遍历,删除,其中显示和删除略微复杂. package chap08.tree; import java.io.BufferedReader; import java.i ...

  5. ASP.NET WebAPI从入门

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  6. oracle_彻底删除oracle

    例如ORACLE安装路径为:C:\ORACLE 实现方法: 1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 2. 开始->程序->O ...

  7. TS流文件

    简单介绍编辑 随着从HDTV录制的高清节目在网上的流传,烧友们对TS这个名词大概已经不陌生了.但随之而来就是怎样播放.怎样加入字幕等等的一系列问题.本文将重点介绍一下这方面的应用操作. 先来简要介绍一 ...

  8. Microsoft Build 2015

    Microsoft Build 2015 汇总   简要概括(GitHub 完成约 45%): Visual Studio Code Preview Visual Studio 2015 RC Vis ...

  9. unicode编码和中国的相互转换

    如果你的原始文件1.properties(该文件的编码中国).要转换unicode的 在cmd通过进入你在哪里在这种类型的文件夹: native2ascii -encoding gb2312 1.pr ...

  10. 在Eclipse下导入vlc-android并编译

    在Ubuntu14.04下载好了VLC的源代码后,VLC的Eclipseproject存放在"vlc-android"文件夹 root@dzt-VirtualBox:/home/d ...