前言
前两天写了几篇文章,谈了谈 Dart
做后端开发的劣势,比方:
《Dart 开发服务端,我是不是发烧 (骚) 了?》
《继续发烧,试试 Dart 语言的异步操作,效率晋升 500%》
《继续发烧,聊聊 Dart 语言的并发解决,能挑战 Go 不?》
如果没有看过的同学,能够先看一下。
明天,咱们再来谈谈 Dart
的另外一大劣势,那就是动态编译。预计 php
和 python
间接认输,java
和 go
冷眼旁观?
提前预报,内容略干,请自带矿泉水。
Dart 语言反对哪些编译形式
目前支流的开发语言,一般来说要么反对 JIT
模式,要么反对 AOT
模式,要么两种都反对。
关照小白, 稍稍解释下名词
JIT
即是 Just-In-Time
, 实时编译,简称 解释型
,简略的说就是代码运行后,边编译代码边运行代码,长处便于开发调试,毛病是执行效率不太行
AOT
即是 Ahead-Of-Time
, 事后编译,简称 编译型
,简略说是代码运行前就编译代码,长处是执行效率高点,然而开发调试不敌对
支流的后端语言,从 理论应用
上来说:
php
, python
都是 解释型
, 理论开发的时候,代码写的十分爽,但总是被埋怨性能低
java
, go
都是 编译型
,总是被埋怨编译一次,出门打个架都还没完结,我说的是 java
面对这样的状况,机智的同学看进去了,那开发的时候应用 JIT
模式, 运行的时候应用 AOT
模式不就好了吗,开发调试也不便了,执行效率也高了?
不错不错,小伙子你颇具慧根,你是对的,Dart
也是这样做的。
如何编译 Dart 编写的程序
当你应用 Dart
编写好应用程序后,能够应用 dart compile
命令来编译成最终文件
比方应用如下命令间接编译成 exe
文件
dart compile exe bin/main.dart
将失去 main.exe
文件,该文件能够在 win
平台间接运行, 然而它不能在 linux
下执行
那能不能编译成通用的,各平台都通用的文件呢? 当然能够。
执行如下命令
dart compile kernel bin/main.dart
将失去 main.dill
文件,它是个二进制文件,能够在所有平台,所有 CPU
架构应用。
相熟 go
的同学一脸茫然,抄我的?
当然,你也能够执行上面的命令,将其编译成 aot
文件
dart compile aot-snapshot bin/main.dart
它有一个不好的中央,win
平台编译的 aot
文件,不能在 linux
下应用。
同理, linux
下编译的不能在 win
下应用。
当然,它最好的中央是性能最好,所以也是最举荐应用的。
还有哪些须要补充的吗
有的。
在 Dart
的官网文档中,对于编译的页面,有特地揭示
https://dart.dev/tools/dart-compile
就是这个页面,其中有这样的形容,请肯定要留神:
The exe and aot-snapshot subcommands have some known limitations:
...
No support for dart:mirrors and dart:developer
...
意思是说,exe
, aot
两种模式下,有一些局限性,比方:
不反对 dart:mirrors
反射
不反对 dart:developer
开发者工具
有一些同学可能天天都是写根本的增删改查,预计不晓得 反射
有什么用。
实际上用途十分大,包含 java
畛域里 SpringBoot
框架, PHP
畛域里的 Laravel
框架,在理论运行的时候,都须要应用到 反射
性能,来获取运行的类的属性信息,办法信息,以实现一些自动化解决。
然而, Dart
禁用了 反射
,这就给框架编写带来了十分大的不便。
当然,Dart
给出的理由是,禁用 反射
,一是这个库还不稳固,二是能够进步性能。
嗯嗯,我信了。
总结
Dart
的编译形式还算支流,充分考虑了易用和性能,没有硬伤,不像 PHP
在这方面受人诟病,为后端开发铺平了路线。
加上文章结尾进步的其余两大个性,异步
和 并发
,所以我在公司主力举荐应用 Dart
。
有同学该说了,好好的 Java
为什么不必,Dart
还能比 Java
更适宜开发后端?
这个问题,当前再说。