当前位置: 首页 > 后端技术 > Python

继续发烧,说说Dart语言的静态编译,你能挑战Go吗?

时间:2023-03-26 19:47:01 Python

前言前两天写了几篇文章,讲了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编写应用程序后,你可以使用dartcompile命令将其编译成最终文件。比如使用下面的命令直接编译成exe文件:dartcompileexebin/main.dart会得到main.exe文件,这个文件在win平台下可以直接运行,但是在linux下无法执行.能否编译成所有平台通用的通用文件?当然。执行以下命令dartcompilekernelbin/main.dart得到main.dill文件,该文件是一个二进制文件,可以在所有平台和所有CPU架构上使用。熟悉go的同学一头雾水,抄我的?当然也可以执行如下命令编译成aot文件dartcompileaot-snapshotbin/main.dart有一个不好的地方,win平台编译出来的aot文件在linux下是不能用的。同样,在linux下编译的,在win下是不能用的。当然,它最大的特点就是性能最好,所以也是最推荐的。还有什么需要补充的吗?在Dart的官方文档中,有一个关于编译页面的特别提示https://dart.dev/tools/dart-compile就是这个页面,里面有这样的描述,请注意:exe和aot-snapshot子命令有一些knownlimitations:...Nosupportfordart:mirrorsanddart:developer...说明在exe和aot这两种模式下,有一些限制,比如:dart:mirrorsreflectiondoesnotsupportdart:有的同学很多开发者工具可能天天写基本的增删改查,可能不知道反射的用处。其实很好用,包括java领域的SpringBoot框架,PHP领域的Laravel框架。在实际运行中,需要通过反射函数获取运行类的属性信息和方法信息,完成一些自动化处理。.但是Dart禁用了反射,给框架编写带来了极大的不便。当然,Dart给出的理由是禁用反射,一是库不稳定,二是可以提高性能。嗯,我相信。综上所述,Dart的编译方式依然是主流,充分考虑了易用性和性能,没有任何缺陷。不像PHP在这方面饱受诟病,它为后端开发铺路。除了文章开头改进的另外两个特性,异步和并发,我更推荐在公司使用Dart作为主力。有同学要说了,为什么不用好的Java,Dart比Java更适合做后端开发呢?这个问题会在后面讨论。