前言
前两天写了几篇文章,谈了谈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
更适宜开发后端?
这个问题,当前再说。
发表回复