.net native 跟 CLR 到底是啥关系
泻药。微软官方的说法是:.NET Native optimizes Store apps for device scenarios in all stages of compilation. We optimized the .NET Native runtime (a refactored and optimized CLR) to make apps start faster and consume less memory.实际上它并不是一个单独的东西,而是整个下一代开发平台的一部分:http://blogs.msdn.com/b/dotnet/archive/2014/04/03/the-next-generation-of-net.aspx 简单的说,.NET开发确实会带来大变革,但你所学的知识并没有浪费,实际上你很少能感觉到有什么区别,只是程序跑得更高更快更强了~
■网友
放上一个别人写得很好的答案:如何看待 .NET Native,真能达到 C++ 的性能、C# 的生产效率吗? - RednaxelaFX 的回答那个问题下还有另外一个高票答案,也值得一看。.NET Native不是要淘汰CLR的,目前也做不到。.NET Native做了非常多的优化,多到连很多反射操作都没法用,元数据编程会变得很困难,调试也会很困难(VS做了很多工作才把.NET Native程序的调试体验做到今天这个样子)。编译过程也和 @飞龙说的不一样。如果仔细看编译阶段的命令行输出的话,其实它还是会先编译成IL,然后会有下一阶段的编译器再编译成Native代码。此外,编译器还会做很多的优化(例如没有用到的类是不会包含在最终的二进制文件里的),这也直接导致了很多API没法用,因为编译器只能做静态分析(这就是为什么会有一个Compatiblity Report)。这一点也是.NET Native和NGEN很大的不同。这样做有好也有不好:好处是启动更快、占用内存更少、运行速度*可能*会更快(我忘记这个时候是否还有GC了,可能有也可能没有);不好是,再也不可能不同平台用同一份二进制文件,你得为每个目标平台提供一份相应的.NET Native版二进制文件。.NET Native关注的是Post-IL阶段(在csc.exe完成编译以后)的优化,并没有取代传统CLR的地位。你所认识的CLR运行时行为,仍然是有效的,微软也希望你按着找个角度去想;只是.NET Native会用一个兼容的实现替换掉它,但大部分时候都是以不破坏Invariants(不变式)为前提的。仔细看了一下发布声明,目前也只是在Windows Store端引入的,还没有要做大规模的推广。所以题主更不用担心。
■网友
是啊,毕竟是微软么,有事没事必须淘汰掉点旧东西,就跟F#淘汰C#,WinJS淘汰C#一样。
■网友
编译方式不同。native就是直接编译成native代码,clr就是先编译成msil,运行时再由clr解释成native代码。然而你写的c#代码是不变的。
推荐阅读
- Python 的开发速度比 C#.net 或 Vb.net 更快吗?
- |百万元级改装MPV LUMMA CLR V实拍解析
- .Net程序员,算不算在大家常说的“程序员”里面
- .Net 怎样实现前端代码模块化?
- 微信小程序为啥没有直接采用react native来做
- 怎样理解.net开发的框架是咋运作的
- 大三通信工程专业,现在想去培训java与嵌入式,.net在未来哪个发展更好
- ReactNative和OC开发应用,哪个门槛更低
- 腾讯汽车|德国改装品牌LUMMA正式进入中国 LUMMA CLR V售138万起
- 大型reactnative项目怎样代码分层呢
