前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >持续发烧,聊聊Dart语言的静态编译,能挑战Go不?

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

原创
作者头像
程序员汤汤
修改2021-07-02 17:42:55
2.8K2
修改2021-07-02 17:42:55
举报
文章被收录于专栏:汤哥搞开发汤哥搞开发

前言

前两天写了几篇文章,谈了谈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 文件

代码语言:txt
复制
dart compile exe bin/main.dart

将得到 main.exe 文件,该文件可以在 win 平台直接运行, 但是它不能在 linux 下执行

那能不能编译成通用的,各平台都通用的文件呢? 当然可以。

执行如下命令

代码语言:txt
复制
dart compile kernel bin/main.dart

将得到 main.dill 文件,它是个二进制文件,可以在所有平台,所有CPU架构使用。

熟悉 go 的同学一脸茫然,抄我的?

当然,你也可以执行下面的命令,将其编译成 aot 文件

代码语言:txt
复制
dart compile aot-snapshot bin/main.dart

它有一个不好的地方,win平台编译的aot文件,不能在linux下使用。

同理, linux 下编译的不能在win下使用。

当然,它最好的地方是性能最好,所以也是最推荐使用的。

还有哪些需要补充的吗

有的。

Dart 的官方文档中,关于编译的页面,有特别提醒

代码语言:txt
复制
https://dart.dev/tools/dart-compile

就是这个页面,其中有这样的描述,请一定要注意:

代码语言:txt
复制
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 更适合开发后端?

这个问题,以后再说。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Dart 语言支持哪些编译方式
  • 如何编译 Dart 编写的程序
  • 还有哪些需要补充的吗
  • 总结
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档