什么叫可执行二进制

以前虽然看似也可以生成二进制执行文件, 类似 pub/flutter 命令, 但是那实际也是调用 dart 命令来完成的, 也就是说, 你必须具备 dart 环境才可以

比如以前的 c,后来的 go, 都可以编译成一个可执行文件, 比如./hello-world就可以运行, 然后在控制台输出结果

而在 dart 2.6 版本中, 这个东西变成了现实

如何做

main(List<String> arguments) {
  print("hello dart!");
}

使用$ dart2native bin/main.dart来完成编译过程, 然后会生成一个main.exe, 虽然看着是 exe, 但这个东西是一个当前系统下的可执行二进制文件

./bin/main.exe
hello dart!

嗯, 这东西目前还不支持交叉编译, 也就是 mac 只能生成 mac 的, windows 只能生成 windows 的, 但是应该有很多人请愿, 未来一定会有相关的支持

目前可以使用 github actions, 或者 docker 之类的东西来跨平台编译

好处

单文件的部署方便, 未来写工具也会很方便

劣势

不支持交叉编译

文件较大, 一个简单的 helloworld 就有 6.7mb 之大, 相对应的, c 可能只有几 k, go 默认情况下也不到 1m,经过优化也能接近 c 的大小

可用度

暂时是一个玩具, 在支持交叉编译前还是考虑使用 pub global 比较好

后记

本篇是 dart 2.6 新特性的一部分

以上