Dart的衰落和崛起,Google的J

中科医院 http://pf.39.net/bdfyy/zjft/161225/5154126.html

谷歌于年推出了通用编程语言Dart,同年年底发布Dart1.0,Dart拥有自己的虚拟机(VM),用于在Chrome浏览器中运行本机应用程序。

Dart的语法类似于C,习惯C++、Java和JavaScript的开发人员应该对它感到很熟悉。此外,Dart的开发者还添加了泛型(generics)、静态类型(static)和SIMD支持以提高吞吐量。

最大的问题是谷歌的初衷是否打算用Dart取代JavaScript(据报道,谷歌的工程师当初在为Gmail和谷歌地图维护大量JavaScript代码库感到精疲力竭,便开始研究替代语言)。该公司甚至发布了“Dartium”,一个以Dart为核心的浏览器,当时有取代Chrome的可能。无论谷歌的意图是什么,当时的开发人员仍倾向于使用JavaScript。Dart的生命周期并没有因此结束。由于Flutter(谷歌官方的Dart框架)的出现,它的地位也与日俱升。

Google在Flutter的支持上一直没有停歇,使用它来开发和运行内部应用程序,例如适用于iOS和Android的GoogleAds。但对于第三方开发者来说,问题有点多,例如,Flutter能否实现某些原生框架利用的功能,但这不影响Flutter成为新项目和现有项目的重要组成部分的原因。需要强调的是,Google的Fuchsia(一个开源操作系统)也是用Dart构建的,而且最近推出的GoogleHomeHub将来可能会运行Fuchsia。Fuchsia最终会取代Android吗?这是一个更难回答的问题,因为Android庞大的安装基础使其难以根除。

Dart2.0

一些开发人员喜欢将Dart与Apple最新的编程语言Swift。您可以在此网页上看到两种语言之间的相似之处,该网页提供了Dart、Swift和Kotlin之间的并排比较。

年初,Dart2.0推出,它对客户端开发进行了改进,包括强类型和“UI即代码”(即消除上下文切换的需要,因此开发人员不必继续翻转编程语言和单独的UI标记语言之间)。

虽然这些改进无疑让已经使用Dart的开发人员更容易,但该语言还没有进入PYPL流行指数的前20名;同样,它还没有进入TIOBE指数的前20名。尽管如此,我完全希望它最终在排名中上升。

为什么?对于初学者来说,Flutter很容易编程,并且忙碌的开发人员通常喜欢使用单个代码库进行跨平台开发。Flutter/Dart还支持VisualStudioCode、AndroidStudio和IntellijIdea等IDE。

Dart的其他优势包括各种编译类型。在移动设备上,它必须提前编译代码(AOT),从而实现快速执行和低启动时间;但对于开发,它也可以实时编译(JIT)。这提供了两全其美的优点,因为纯粹的AOT编译会使开发变慢,一旦您尝试过热重载,您将不想在开发过程中回到AOT编译。

此外,Dart有第三个编译选项,即编译为JavaScript,从而可以在移动应用程序和Web应用程序之间共享代码。

Flutter

Dart允许Flutter以每秒60甚至帧的速度更新显示(如果硬件支持),这是游戏中更典型的帧速率。Flutter采用了与ReactNative类似的架构风格,只是编译后的Dart代码直接处理像素。它通过自己的小部件来实现这一点,而不是在iOS或Android中提供的小部件。

二十年前有句话说“Windows中的一切都是窗口”,而在Flutter中也是如此:“一切都是小部件”。对于iOS,Flutter包括Cupertino,这是一个用于类似iOS的控件的小部件包。

FlutterWidget是不可变的,只有在需要更改时才会存在;然后创建一个新的小部件树。因此,Flutter能够始终以高帧率运行,并使用Dart的快速垃圾收集来实现这一目标。

下面的MyApp类是一个简单的“HelloWorld”小部件示例;与main()调用一起,它是最小的Flutter应用程序。第一次编译需要一分钟多;之后,时间减少到不到一秒(感谢热重载):

voidmain()=runApp(MyApp());classMyAppextendsStatelessWidget{

overrideWidgetbuild(BuildContextcontext){returnnewCenter(child:Text("HelloWorld!",textDirection:TextDirection.ltr));}}

一种新的编程风格

虽然Dart是典型的静态类型OOP语言,但在Flutter中使用它有点不同;对于习惯了Java或Swift的移动开发人员来说,它需要一种不同的方法。没有类似于XamarinForms中的.xaml文件或iOS中的.nib的声明性语法。一切都是通过为小部件创建Dart代码来定义的。

乍一看,这可能听起来很乏味,但热重载可以非常快速地尝试复杂的用户界面。缺点是你有一些大文件来定义小部件;例如,在RedBrogdon的开源flutterflipreversi中,主游戏板小部件大约有行长。

另一个优点:Dart的格式不会出现问题,因为Dart插件包含一个Dart格式器;在其中一个IDE中单击右键即可整理您的代码。

结论

Flutter/Dart可以很好地协同工作。我遇到的唯一问题是在IDE之间导入项目;Dart和FlutterSDK的位置因人而异,因此需要对其进行配置。如果您是当前的iOS或Android开发人员,如果您选择拥抱Flutter,您可能会面临一些学习曲线。然而,这是值得的,无论是为了热重载,还是为了有机会跨平台工作。




转载请注明:http://www.aierlanlan.com/rzdk/2953.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了