点击我的视频网校,学习编程课程,或者关注我的微信公众号“编程之路从0到1”,了解课程更新

为什么是 Dart ?

为什么是 Dart ?

为什么选择Dart语言,这是很多人的疑问,让我们先来看看,最近Dart 编程语言的发展情况:

2022年2月TIOBE编程语言排行榜:

很遗憾,Dart在前20名之外,但好消息是它还处于前30名之内!

在这个排行榜中,值得我们注意的是Dart语言仍然处于Kotlin之上,虽然优势并不明显。让我们再来看一看 IEEE Spectrum 最新发布的2021年度的编程语言排行榜 Top Programming Languages 2021

在IEEE Spectrum 的榜单中,Dart 处于第14位,并且与Kotlin拉开了更多差距。这份榜单是以2021整个年度来衡量的,显然比TIOBE的排名更均衡。另外,TIOBE的排名主要参考当月搜索引擎的搜索热度,这有点类似于热搜排名。而IEEE Spectrum 的榜单除了参考热搜,还要参考Github的仓库数量,一些技术论坛的发帖数量等等,因此IEEE Spectrum榜单更能衡量一门编程语言的生态情况。

总而言之,Dart语言仍然是极具潜力的一门编程语言,非常值得学习。

有部分人曾在我面前极力吹捧Kotlin语言,给了我Kotlin远超Dart语言的感觉,但我们回到大数据面前,Kotlin的热度似乎还赶不上Dart,真是让人情何以堪呐…更何况同为JVM语言,Kotlin可以直接使用Java的库,它直接借助Java庞大的生态,发展得也不过如此。

事实上,我不是编程语言宗教的信奉者,在我眼里没有谁是最好的语言,只有最合适的语言。我信奉的是工具论,每种编程语言都是一种工具,是人来主导工具,而不是人被工具主宰!我理解最完美的状态,是干什么活,就用什么工具,而不是因为我手上只有这把锤子,所以看什么都是钉子。

作为一个跨平台的移动开发者,Kotlin也好,Swift也好,都是需要学习的,如果有人固执的认为,学一种就够了,一招鲜吃遍天,那么他说不定什么时候就得踩一个大坑。

好了,现在让我们回到一开始的问题,Flutter为什么选择了Dart语言,我们为什么要拥抱 Dart 语言?

背景

从历史上看,计算机语言被分为两类:静态语言(例如Fortran 或 C,其中变量在编译时静态类型化)和动态语言(例如,Smalltalk 或 JavaScript,其中变量的类型可以在运行时改变)。静态语言通常被编译为目标机器的本地机器码(或汇编代码),这些程序在运行时由硬件直接执行。动态语言由解释器执行,不产生机器码。

当然,事情最终变得更加复杂。虚拟机(VM)的概念变得流行起来,它实际上只是一种在软件中模仿硬件机器的高级解释器。虚拟机使得将一种语言移植到新的硬件平台变得更加容易。在这种情况下,VM 的输入语言通常是一种中间语言。例如Java语言被编译成一种中间语言(字节码),然后在虚拟机(JVM)上执行。那么虚拟机和解释器之间有什么区别呢?简单说,解释器是直接解释执行编程语言的源代码,这些源代码是字符串;虚拟机解释执行的是由源代码翻译之后生成的字节码,这些字节码是二进制,但同时,这些字节码并不是真正的机器码,不能被任何硬件直接理解执行。

此外,现在还有即时(JIT) 编译器。JIT 编译器在程序运行期间执行编译,因此称为即时编译。在程序创建期间(编写完源代码)进行原始编译的编译器现在称为提前(AOT) 编译器

一般来说,只有静态语言适合 AOT 编译为本机机器码,因为机器语言通常需要知道数据的类型,而在动态语言中,类型并没有提前固定。因此,动态语言通常被解释或 JIT 编译。

在开发过程中完成 AOT 编译时,总是会导致开发周期变慢(从对程序进行修改到能够执行程序以查看修改结果之间的时间)。但是 AOT 编译导致程序可以更可预测地执行,并且在运行时无需暂停分析和编译。AOT 编译的程序也执行得更快(因为它们提前就被编译好了)。

JIT 编译可以提供更快的开发周期,但会导致执行速度变慢或不稳定。特别是,JIT 编译器的启动时间较慢,因为当程序开始运行时,JIT 编译器必须先进行分析和编译,然后才能执行代码。

如上图,早期直接由虚拟机这个软件去解释执行字节码性能较差,为了解决这个问题,就提出了JIT编译。JIT编译就是在虚拟机这个软件中再内置一个编译器,当用户运行Java编写的程序时,虚拟机会对字节码进行分析,对于频繁执行,且比较耗费性能的部分代码,就由JIT编译器在运行时将其编译成机器码,这样就可以将这部分直接交给CPU来执行,提升性能。因此,支持JIT编译的虚拟机,首次运行程序可能会更慢,因此它在运行时还要进行编译工作。有人可能会说,既然如此,为什么不在运行之前,就将所有代码编译成机器码,运行时直接交给CPU执行,这样不就速度更快了吗?是的,这就是AOT!

Dart

2011 年 10 月 10 日,谷歌的两名工程师在 GOTO 会议上推出了“ Dart ”,作为一种全新的编程语言,旨在帮助开发人员构建 Web 应用程序。Dart 1.0 于 2013 年 11 月 14 日发布。

在开发 Dart 之前,Dart 团队成员在高级编译器和虚拟机方面做了开创性的工作,包括动态语言(如用于 JavaScript的V8 引擎和用于 Smalltalk 的Strongtalk )和静态语言(如用于 Java的Hotspot 编译器)。他们利用这一经验使 Dart 在编译和执行方面异常灵活。

Dart 是极少数非常适合同时编译 AOT 和 JIT 的语言之一。支持这两种编译为 Dart 和(尤其是)Flutter 提供了显着的优势。

在开发过程中使用 JIT 编译,使用速度特别快的编译器。然后,当应用程序准备好发布给用户使用时,它会被编译为 AOT。因此,借助先进的工具和编译器,Dart 可以实现两全其美:极快的开发周期,以及快速的执行和启动时间。

Dart 在编译和执行方面的灵活性并不止于此。例如,Dart 可以编译成 JavaScript,以便浏览器执行。这允许在移动应用程序和 Web 应用程序之间重用代码。开发人员报告称,他们的移动和 Web 应用程序之间的代码重用率高达 70% 。Dart 也可以通过编译为本机代码或编译为 JavaScript 并与node.js一起使用来在服务器上使用。

最后,Dart 还提供了一个独立的 VM

结论:Dart 可以高效地编译 AOT 或 JIT、解释或转译成其他语言。Dart 不仅编译和执行异常灵活,而且速度特别快。

学习Dart的理由

  • Dart 非常灵活。Dart 是一种灵活的编程语言,你可以编写代码,然后在任何地方运行,没有任何限制。

使用 Dart 和 Flutter 编写的移动应用程序是跨平台的原生应用程序;因此它们可以在 Android、iOS、Windows、Linux、MacOS上运行。甚至可以编写 Web 应用程序,让代码在浏览器上运行。从开发人员的角度来看,语言的灵活性和可移植性非常重要。毕竟,谁不想编写一些代码并在尽可能多的平台上运行呢?

一旦你熟悉了面向对象的一般原则,在 Dart 中编码就会感觉很自然。Javascript 遵循无类型哲学,因为根据 JS,无类型意味着灵活性。但是开发人员经常说,过多的灵活性会扼杀你的软件。有时你想使用类型,而有时则不想。有了 Dart,你可以做到两全其美。

  • Dart 很容易学习。Dart 语法看起来非常熟悉,即使是第一眼。哪怕你之前没有看过 Dart 代码,也可以轻松理解它而不会费力。Dart 语言结构良好,因此如果你已经了解 C、Java 、JavaScript或 C#等任意一门编程语言,那么 Dart 上手将非常容易。

  • Dart 有很好的工具支持,确保了生产力。除了各种静态工具,它有一个现代化的仓库——pub,可以很容易的依赖我们需要的第三方库,也可以很方便的发布我们开源的库。

  • Dart 是一种健壮的语言。Dart 是一种开源、面向对象、可选类型和基于类的语言,它对函数式编程和响应式编程具有出色的支持。与 Java 不同,Dart 一点也不臃肿。事实上,它是一种相对简单、现代且高效的类似于 C 的编译语言,它在2.12之后发布的空安区特性,极大的提升了代码的健壮性。

除了Dart本身的优秀特性,学习Dart语言最核心的理由,当然是为了Flutter!Flutter是一种极为优秀的跨平台UI框架,并且是谷歌最新的 Fuchsia 操作系统默认的App开发框架,而Dart也是Fuchsia系统默认的几种开发语言之一,可以说,Dart未来的潜力巨大。

懒惰是人类的天性,我能理解为什么有编程语言宗教。许多人因为工作的关系,业务的驱动,好不容易从Java语言切换到kotlin语言,结果现在来了Flutter,又要学一门Dart语言,Kotlin语言都还没捂热了,又要学,第一感触就是反感抵触。老实说,我第一次接触Flutter和Dart就非常排斥,即使我已经会写Java、JavaScript、Python、Go等一些语言,并且正在学习Kotlin,但是我仍然不太情愿为了用一用Flutter再学一种编程语言。为了Flutter,我决定一试,结果让我感觉非常好。当人们批评Java的冗余繁琐,大谈Kotlin简化代码提升生产力时,我反而觉得Java的那些痛点都被Dart解决了,我个人感觉Dart可能比Kotlin更加简洁。

如果我因为拖延症或其他原因,不想学习某种技术时,或许我也会拼命抵制它,搜遍互联网,找到所有的负面理由贬低它,并且大声疾呼,我使用的这种编程语言已经足够好了,它是我手上的锤子,它能解决一切问题!找遍了理由和黑点,可能起因只是因为懒得学而已。但我们知道这没有意义,不如开放胸怀,去拥抱变化。

切换新的语言和技术栈就像搬家,人们都很讨厌,很讨厌折腾,我们总是希望这是最后一次了,但往往可能还有很多次!如果我们总是这样想,只会收获一个糟糕的心情。曾经有网友说过一句话,编程语言对程序员来说就像女朋友,不同的是,程序员玩腻了总能换一门新的,这样,程序员的生活总是充满新鲜感!这话虽然很粗糙,但是Linus Torvalds也讲过,“大多数优秀的程序员做编程不是因为他们期望得到报酬或得到公众的奉承,而是因为编程很有趣。”

所以,学会享受!

最后送给大家一首 Dart 之诗:

When playing darts, it is agreed,

A steady hand is what you need.

A good eye and a perfect stance.

(For darts is not a game of chance!)


关注公众号:编程之路从0到1

编程之路从0到1

# Dart   Flutter  

评论

公众号:编程之路从0到1

公众号

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×