前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net8的CLR/JIT未来的方向

.Net8的CLR/JIT未来的方向

作者头像
江湖评谈
发布2023-08-31 21:31:36
2180
发布2023-08-31 21:31:36
举报
文章被收录于专栏:天下风云天下风云

1.概念 CLR构建内存模型,调度托管函数运行,以及垃圾回收(GC)等。JIT则是进行IL代码的IR变形构建,然后进行托管/非托管函数的编译两大功能。目前CLR/JIT跟.Net版本一起迭代到8代了,本篇来看下未来的方向。

2.进化 编程语言发展今天这个地步,实质上有一个比较重要的特征就是所有的编程语言都向自举方向发展。也就是一整套的编译流程下来,必须是被编译的这个语言作为主力来编写编译的运行平台。以.Net平台为例,它上面运行的主力语言就是C#,那么C#语言的编译必须运行在C#语言编写的编译器平台上。

这里简单来看下.Net平台的编译流程

1.Roslyn(把C#源码编译成托管DLL或者非托管Exe) 2.CLR接管托管的DLL,构建内存模型,调度托管函数调用JIT即时编译 3.JIT把MSIL导入,然后进行变形机器码编译,编译成汇编运行。

可以看到C#语言如果被编译,它涉及到了三种技术。Roslyn/CLR/JIT。这里面除了Roslyn是C#语言写的,其它的CLR/JIT都是C/C++编写的。

自从.Net7引入了AOT之后,这种游戏规则就改变了。AOT因为完全不同于JIT的即时编译,相当于另起炉灶。AOT利用ILC编译器,把C#源码经过复杂的过程调用了llvm编译成了目标文件,然后通过链接器把它链接成可执行文件在各个平台上(macos/linux/win)上二进制运行。

ILC编译器是C#写的,链接器一般的都是额外提供.这里可以看到,CLR/JIT不见了,取而代之的是C#语言编写的ILC编译器.这即时自举的表现.这种情况在其它的语言上比如Go/Java/Swift/Kotlin上面都有体现。

自举的好处有哪些呢?目前的认知 1.可以单独提供可执行的文件,不需要部署安装。简洁,明了。 2.可以通过主力语言(比如C#),你可以一整套下来通过C#理解.Net平台,而不需要额外的二进制,C++,汇编等知识

任何事情都有两面性,好处自然伴随坏处,坏处有哪些呢? 1.目标编译降低了程序的性能,远不如即时编译器智能化 2.自举还不成熟,某些方面无法真正的自举。

在不久的将来,随着各种新技术概念的出现和提升。性能和简洁应该并存而行,而非舍弃一取其二,其二应该能囊括100%的程序构建场景。而C++的钳制可能成为过去,只能是引导比如bootstrap或者是作为底层托管的dllimport库调用.

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-21,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 江湖评谈 微信公众号,前往查看

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com