郑州模板网站工程施工公司
news/
2025/10/5 4:11:28/
文章来源:
郑州模板网站,工程施工公司,策略网页游戏大全,多久可以做网站作者#xff1a;RednaxelaFX 链接#xff1a;https://www.zhihu.com/question/28554410/answer/41486461 来源#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权#xff0c;非商业转载请注明出处。
先解决些大问题再回到题主的具体问题。
首先#xff0c…作者RednaxelaFX 链接https://www.zhihu.com/question/28554410/answer/41486461 来源知乎 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
先解决些大问题再回到题主的具体问题。
首先请确定自己是不是真的想深入到VMCLR层面的代码。是不是其实有些好奇的地方在.NET Core的库层面就已经够用是的话请看dotnet/corefx而不是CoreCLR。
然后如果是已经对C#有所了解但想进一步了解CLR的话《CLR via C#》值得一读。通过它先了解CLR都提供了一些怎样的服务各种服务之间是如何联系起来的有个大体概念。 另外还有两本书可以伴随《CLR via C#》一起读。一本是《Pro .NET Performance》另一本是《Writing High-Performance .NET Code》。两本的切入点都是编写高性能.NET代码都涉及一些关于CLR的知识可以让读者了解到CLR的某些功能或者说优化会如何反映到应用的性能上。
再次在深入CLR之前先打好MSILMicrosoft Intermediate Language也叫做CILCommon Intermediate Language的基础是件值得做的事。熟悉MSIL所提供的功能之后带着“CLR要如何逐一实现MSIL的功能”的问题去整理知识脉络钻进CoreCLR去看比没头绪乱看一通要有效的多。 这个可以阅读CLICommon Language Infrastructure规范ECMA-335也可以读一些现成的书例如《Inside Microsoft .Net Il Assembler》、《Expert .NET 2.0 IL Assembler》等。
接下来确定想了解CoreCLR源码但没有任何基础的话请先仔细阅读《Shared Source CLI 2.0 Internals》。这是一本免费发布的书讲的是Shared Source Common Language Infrastructure 2.0 ReleaseSSCLI 2.0的实现其中很多内容对应到CoreCLR里仍然适用或大致思路仍然一致SSCLI 2.0与CLRv2的主要区别是JIT编译器和GC的具体实现不同runtime涉及PAL的部分也可能不同而runtime的其它部分几乎一样。通读一遍此书能让初学者至少有个概念CLR的源码会涉及什么方面的知识有啥看不懂的可以先有针对性的补充背景知识。 相比《CLR via C#》这本书更多的涉及到代码但仍站在比较抽象的角度去描述CLR各部分的功能和联系适合当作阅读代码的线索。
微软在CLRv2之后还给CLR添加了许多新功能这些新东西自然在SSCLI 2.0没有反映在看CoreCLR代码时得另找资料去学习。 例如说security model的差异。SSCLI 2.0反映CLRv2的情况其security model主要还是“Code Access Security”CAS需要在安全检查是做栈遍历stack walkCoreCLR实现的是transparency modelMono里直接把这个叫做CoreCLR security model不需要做栈遍历。
再接下来读完SSCLI 2.0书之后请在钻进CoreCLR源码前先阅读CoreCLR源码中自带的Book of the RuntimeBotR。这是CoreCLR自带的文档写得非常好而且专门为CoreCLR更新了内容与时俱进。微软还在慢慢更新BotR的逐渐放出更多内容出来值得持续关注。 说BotR好主要是因为CoreCLR里有很多代码细节不太直观如果没有文档描述大体概念和思路的话直接钻进代码里很容易被大量奇怪的细节淹没——除非您对managed runtime已经非常熟悉了。但就像
代码豆
大大的回答所说BotR跟实际代码之间还有一定距离光靠它还不足以深入到CoreCLR的枝末细节一边调试一边学习是最靠谱的。 CoreCLR的代码有着浓厚的微软色彩——存在大量仅为维持向后兼容性的代码。最初入门阅读代码时要自己知道如何自动忽略掉它们才行。
最后如果要深入到JIT编译器和GC的话请另外阅读专门书籍。 SSCLI 2.0里的JIT编译器是一个非常简单的FJIT基本上就是把MSIL一条条对应到各自的汇编模版生成出来不涉及多少编译原理CoreCLR里的JIT编译器是RyuJIT里面需要用的知识大多是传统编译原理书上会讲到的可以挑几本自己喜欢的编译原理书读读来打基础。 GC方面的话《The Garbage Collection Handbook》是学习的不二之选。
还有可以多骚扰
代码豆
大大让他多写点介绍文哈哈 然后回到题主的问题
1、CoreCLR是用什么IDE编写的根本不重要。 CoreCLR的build系统可以在第一次build之后生成出Visual Studio的solution所以可以很方便的在Visual Studio里开发和调试。这些solution包括C和C#的projectCLR自身的代码主要用C实现而mscorlib.NET标准库的核心部分则主要用C#实现。 实际上CLR开发们里emacs党比较多吧。以前看Channel 9的访谈几乎没看到他们有用Visual Studio来开发CLR的。所以说用啥IDE根本不是重点。 - 更新CLR组里工作的
代码豆
大大提醒说现在内部还是用VS的多用emacs的少。请参考他的回答。2、学习此类开源代码要如何入手比较合适“此类”就是“托管运行时”managed runtime咯或者叫“虚拟执行环境”virtual execution environment或“虚拟机”virtual machine。先从我前面说的那些资料入手至少对学习CoreCLR来说是条好路线。 如果是说别的类似的东西例如JVM我以前发过一个书单可以参考从表到里学习JVM实现 作者代码豆 链接https://www.zhihu.com/question/28554410/answer/41572753 来源知乎 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。 不请自来不是大牛只是在CLR混了1年说说体会吧。首先你要明白你到底了解那块一上来就想把CoreCLR全部搞定这个说实话不现实。有个大体概念比如CLR有那几块组成然后每块的分工是什么然后挑一个自己觉得有兴趣的点入手。材料
RednaxelaFX
都说的很详细了就不多说了。还有个人感觉对于大多数人来说一上来就想通过看源码直接了解CLR这个不现实而且这个是我们组的认同实话讲CLR的内部资料写的其实不是很好Book of runtime虽然不错但也只是告诉你大体的概念非常具体东西还是没有涉及到。所以很多尝试直接看源码的人开始还行后来就开始被转晕了。组里大部分人学习的办法还是靠mentor辅导和修bug然后通过修bug扩大知识面比如你修了一个简单EH bug然后你可以尝试看一下CLR是怎么处理EH的怎么做stackwalking的慢慢就有感觉了。如果是作为external的dev你在github直接联系我们就行了coreclr还是有很多bug我们想要修但没时间管的所以如果你要是想帮忙大家还是很高兴的。对了还是要说一点我上面说的只是针对普通人我知道也有人是特殊的存在。比如我知道一个大牛他之前在windows组有8-9年的经验来了CLR后从来都不看什么资料或者问别人对于他来讲有什么不懂得直接看代码就行了。还有一个我不得不说他和组里其他大牛的区别就是扫地僧和少林历任主持的区别大多数是都是对自己在组的知识极为精通同时对CLR其他部分有大体了解他基本上是对所有的部分都极为精通。。。而且他的办法感觉就是记代码。。。没错就是记代码那哥们传说强大到你问他CLR的任何问题他都可以直接告诉你去哪个函数修改然后还基本都能成。。。如果你是这两种人大哥请受小弟一拜 然后回答一下第一个问题虽然我们IDE用VS但不是真正意义上的用只是当text editor和代码阅读所以有部分人也会用emacs代替。而VS的build和debug功能因为我们会搭建自己的private runtime用VS debug的话有时候会不管用所以大家debug普遍喜欢用windbg而VS的build基本就不用我们都是用自己内部写的脚本调用msbuild。github的版本是为了方便非CLR的人使用专门修改过的所以你要是build的话还是以github上方式为主。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927851.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!