系列教程 · 2023年3月15日

AOT会是.Net的未来吗?

AOT会是.Net的未来吗?或者说,有了AOT,.Net会有未来吗?说真的,这个题目很大,在开篇之前,我一直在犹豫自己有没有这个资格去回答这个问题。不算答案,仅仅说说个人的看法吧。

从.Net SDK 7.0开始,支持将程序编译为Native AOT模式,它不仅仅是打包成单文件,而是能完全摆脱对.net framework的依赖,在目标系统上独立运行;更重要的是,它能明显提高程序的加载速度;能基本杜绝对程序的反编译。目前来看,AOT还有很多局限,比如只能编译Console应用,不支持asp.net等等,但是在.Net SDK 8.0 版本中,这些局限性多数不复存在。

笔者是做物联网和工业自动化控制的,使用.Net做api,也做桌面应用。但说实话,用.Net做桌面应用确实需要极大的勇气,尤其是在工业控制领域,有一些控制逻辑和控制算法在一定程度上是需要保密的,但是.Net 程序的反编译太简单了,即使有混淆、加壳工具,其强度也不敢恭维。所以我们都是使用QT或者Lazarus写界面,一些对速度要求高的算法或者需要开放接口的dll等,就使用c++去写。对我个人来讲,QT用起来多少有些不习惯,而Lazarus使用的Pascal语法,也是有点头疼。Visual Studio ide + C#,对我这种用习惯了C的人来说,真的有很大的吸引力。但由于前述的安全原因,很少敢用到具体项目中。

如果AOT成熟,我倒很乐意用.Net去开发桌面应用试试。尤其它能支持跨平台的一次编程,随处编译,在对效率要求不高的情况下替代QT是没有问题的。说到运行效率问题,其实.net进入Core时代以后,其运行效率已经有很大幅度的提升。从多篇性能对比文章来看,其运行效率高于Java。

目前,.Net SDK 8.0刚刚发布preview 1,离成熟还有很长一段路要走,但我已准备好在下个项目中使用它了。不管AOT是不是.net的未来,至少在我这里,.net 有了未来。