持续发烧,聊聊Dart语言的静态编译,能挑战Go不?

前言

前两天写了几篇文章,谈了谈Dart做后端开发的优势,比如:

《Dart开发服务端,我是不是发烧(骚)了?》

《持续发烧,试试Dart语言的异步操作,效率提升500%》

《持续发烧,聊聊Dart语言的并发处理,能挑战Go不?》

如果没有看过的同学,可以先看一下。

今天,我们再来谈谈 Dart 的另外一大优势,那就是静态编译。估计 phppython 直接认输, javago 冷眼旁观?

提前预告,内容略干,请自带矿泉水。

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 更适合开发后端?

这个问题,以后再说。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容