当我主要使用c ++时,虽然了解汇编并写了一些非试验性的asm代码是至关重要的,这样我才能真正理解正在发生的事情.我现在主要做.net,虽然我对IL有所了解,但我并不精通.
IL是一个应该具备知识的技能,还是将更全面地学习IL继续告知我如何使用和编写.net代码?
Ree*_*sey 21
完全学习IL就像学习装配一样,在很多方面.
了解IL可以帮助您了解在实际编译.NET代码时会发生什么.这可能非常有用,特别是如果您遇到性能关键的性能分析情况(您发现了一个真正的问题,需要对其进行优化).
但是,对于大多数"日常"编程任务,我认为理解IL并不是必要的,就像大多数C++程序员并不真正需要知道如何编写汇编一样.
话虽如此,如果您了解具有C++背景的汇编代码,那么获得IL的一般概念将非常非常容易......
如果您只是想编写.NET应用程序,则不需要任何IL代码的工作知识.大多数.NET开发人员不知道如何编写IL代码.
如果您正在尝试了解真正发生的事情,IL会帮助您.您可以使用它在计算机上编写更高效的代码,这在您编写的.NET语言中可能并不明显.
除了显而易见的(实现虚拟机)之外,某些类型的任务需要对IL进行非常透彻的理解.
我个人最感兴趣的一个方面是检查IL语言对即时编译器的影响.与JVM和CLI形成对比的一个值得注意的例子是CLI具有非虚拟方法和直接分派的概念,这允许非优化(基线)编译器发出特别有效的调用.此分析在JVM中更昂贵,因此基线编译器无法优化尽可能多的情况.
一般来说,.NET开发人员不必担心学习CIL.如果您的工作涉及运行时/动态生成的方法,那么您应该评估Expressions API满足您需求的能力,因为它非常可用/可维护.我花了几周时间用ILGenerator发送CIL.我花了一个时间来转换为Expressions,保存了超过一百行代码并修复了我刚才没想到的旧错误.
对于实现CLI虚拟机或编写编译器(AOT或JIT)的任何人来说,详细了解CIL非常重要.我发现它既有趣又有用,但在"要知道成为富有成效的开发人员的重要事项"的范围内,它并不是那么高.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |