美文网首页
Dart语言特性

Dart语言特性

作者: 阳台的晾衣架 | 来源:发表于2019-05-29 13:26 被阅读0次
  • 所有变量的值都是对象,也就是类的实例。甚至数字、函数和null也都是对象,都继承自Object类。

  • 虽然Dart是强类型语言,但是显式变量类型声明是可选的,Dart支持类型推断。如果不想使用类型推断,可以用dynamic类型。

  • Dart支持泛型,List<int>表示包含int类型的列表,List<dynamic>则表示包含任意类型的列表。

  • Dart支持顶层(top-level)函数和类成员函数,也支持嵌套函数和本地函数。

  • Dart支持顶层变量和类成员变量。

  • Dart没有public、protected和private这些关键字,使用下划线“_”开头的变量或者函数,表示只在库内可见。

  • 健全的类型系统,同时支持静态类型检查和运行时类型检查。

  • 代码体积优化(Tree Shaking),编译时只保留运行时需要调用的代码(不允许反射这样的隐式引用),所以庞大的Widgets库不会造成发布体积过大。

  • 丰富的底层库,Dart自身提供了非常多的库。

  • 多生代无锁垃圾回收器,专门为UI框架中常见的大量Widgets对象创建和销毁优化。

  • 跨平台,iOS和Android共用一套代码。

  • JIT & AOT运行模式,支持开发时的快速迭代和正式发布后最大程度发挥硬件性能。

  • Dart中类似线程的概念叫做Isolate,每个Isolate之间是无法共享内存的,所以这种分配策略可以让Dart实现无锁的快速分配

  • Dart是单线程执行模型。但是它支持 Isolate(一种让 Dart 代码运行在其他线程的方式)、事件循环和异步编程。除非你自己创建一个 Isolate ,否则你的 Dart 代码永远运行在 UI 线程,并由 event loop 驱动。Flutter 的 event loop 和 iOS 中的 main loop 相似——Looper 是附加在主线程上的。Dart 的单线程模型并不意味着你写的代码一定是阻塞操作,从而卡住 UI。相反,使用 Dart 语言提供的异步工具,例如 async / await ,来实现异步操作。

Dart的垃圾回收也采用了多生代算法,新生代在回收内存时采用了“半空间”算法,触发垃圾回收时Dart会将当前半空间中的“活跃”对象拷贝到备用空间,然后整体释放当前空间的所有内存:

image.png

整个过程中Dart只需要操作少量的“活跃”对象,大量的没有引用的“死亡”对象则被忽略,这种算法也非常适合Flutter框架中大量Widget重建的场景。

Reference

Dart语法
Dart在线编译器

相关文章

网友评论

      本文标题:Dart语言特性

      本文链接:https://www.haomeiwen.com/subject/cuzetctx.html