¼òÎö
.NET Core ¹¹³ÉÌåϵ
Roslyn ±àÒëÆ÷
RyuJIT ±àÒëÆ÷
CoreCLR & CoreRT
CoreFX(.NET Core Libraries)
.NET Core ´úÂ뿪·¢¡¢²¿Êð¡¢ÔËÐйý³Ì
×ܽá
ǰÎĽéÉÜÁË.NET Core ÔÚÕû¸ö.NET ƽ̨Ëù´¦µÄµØÎ»£¬ÒÔ¼°Óë.NET FrameworkµÄ¹ØÏµ(ÔÎÄÁ´½Ó)£¬±¾ÎĽ«Ïêϸ½éÉÜ.NET
Core ¿ò¼ÜµÄ¹¹³ÉºÍ¸÷Ä£¿éÖ÷Òª¹¦ÄÜ£¬ÒÔ¼°ÈçºÎʵÏÖ¿çÆ½Ì¨¡£

ÉÏͼÃèÊöÁË .NET CoreµÄϵͳ¹¹³É£¬×îÉϲãÊÇÓ¦Óò㣬ÊÇ¿ª·¢»ùÓÚUIÓ¦ÓõĿò¼Ü¼¯£¬°üÀ¨ÁËASP.NET
Core(ÓÃÓÚ´´½¨web app)£¬ºÍ UWP(ÓÃÓÚ´´½¨Windows10 app)¡£
Öмä²ãÊǹ«¹²¿â(CoreFX),ʵÏÖÁË.NET Standard Library ,ÄÒÀ¨Á˳£ÓÃϵͳ¼¶²Ù×÷ÀýÈ磨Îļþ¡¢ÍøÂçµÈ£©¡£
ÔÚCoreFxÏÂÊÇÔËÐÐʱ»·¾³£¬.NET Core °üº¬ÁËÁ½ÖÖÔËÐÐʱ(CoreCLR¡¢CoreRT),CoreCLRÊÇÒ»ÖÖ»ùÓÚ¼´Ê±±àÒë³ÌÐò(Just
in time compiler,JIT)µÄÔËÐÐʱ,ËüʹÓÃÁË¿çÆ½Ì¨¿ªÔ´µÄ±àÒëÆ÷RyuJIT,¶øCoreRTÊÇʹÓÃÌáǰ±àÒëÆ÷(Ahead
of time compiler,AOT)µÄÔËÐÐʱ,Ëü¼È¿ÉÒÔʹÓÃRyuJITÀ´ÊµÏÖAOT±àÒëÒ²¿ÉÒÔʹÓÃÆäËûµÄAOT±àÒëÆ÷¡£ÓÉÓÚAOTÌáǰ±àÒëIL³ÉÁË»úÆ÷Â룬ÔÚÒÆ¶¯É豸ÉÏÒ²¾ßÓиüºÃµÄÆô¶¯ËٶȺͽÚÄÜÐÔ¡£
×îºó»¹ÒªÌáµ½Ò»¸ö¿ªÔ´µÄ¿çƽ̨Դ´úÂë±àÒëÆ÷Roslyn£¬ËüÓбðÓÚ¸Õ²ÅÁ½¸ö±àÒëÆ÷£¬JITºÍAOT±àÒëÆ÷Ö÷ÒªÓÃÓÚ½«IL±àÒë³É±¾»ú»úÆ÷Â룬¶øRoslynÊǽ«C#
»ò VB.net ´úÂë±àÒë³É³ÌÐòÖмäÓïÑÔ(intermediate language,IL)¡£
Roslyn ±àÒëÆ÷
Roslyn±àÒëÆ÷ÓÃÓÚ½«C#»òVB.Net´úÂë±àÒëΪ³ÌÐò¼¯(assembly)£¬ËüµÄ±àÒë¹ý³ÌÊÇÒ»¸ö¹ÜµÀʽµÄ´¦Àí¹ý³ÌÒ»¹²°üº¬4¸ö²½Ö裬¾ßÌå¹ý³Ì¼ûÏÂͼ¡£

A. Parser(½âÎö)
¸ù¾ÝÓï·¨¶ÔÔ´´úÂë½øÐнâÎö¡£
B. Declaration (ÉùÃ÷)
Ϊ´úÂëÉú³ÉÔªÊý¾Ý(metadata),ÔªÊý¾ÝÊÇÒ»¸öÊý¾Ý±íµÄ¼¯ºÏ£¬ÃèÊöÁËÔÚµ±Ç°´úÂëÖж¨ÒåµÄÊý¾ÝÀàÐͺͳÉÔ±£¬Í¬Ê±Ò²ÃèÊöÁËÒýÓõÄÀàÐͼ°³ÉÔ±¡£
C. Bind(°ó¶¨)
½«Éú³ÉµÄIL´úÂëÓëÃèÊöËüµÄÔªÊý¾Ý°ó¶¨ÔÚÒ»Æð£¬Éú³ÉÍйÜÄ£¿é(managed module)¡£
D. Emit(Éú³É)
½«Ò»¸ö»ò¶à¸öÍйÜÄ£¿éºÏ²¢Éú³É³ÌÐò¼¯(assembly)¡£
RyuJIT ±àÒëÆ÷
ÔÚ³ÌÐòÔËÐÐÖÐÐèÒªÖ´ÐÐijһ¸ö·½·¨£¬Ê×ÏÈÐèÒª½«ÒѾ±àÒëºÃµÄILת»»±¾»úµÄ»úÆ÷Â룬¶øÕâ¸öÈÎÎñ¾Í½»¸øÁËRyuJIT¡£ËüÊÇÐÂÒ»´úJIT±àÒëÆ÷£¬µÚÒ»´ÎʵÏÖÁËAMD64µÄ¼Ü¹¹£¬RyuJITÄܹ»±ÈJIT64(ÉÏÒ»´ú±àÒëÆ÷)¸ü¿ìµØÉú³É´úÂ룬ÒÔÌá¸ß³ÌÐòÔËÐÐЧÂÊ(²âÊÔÏêÇéÁ´½Ó)¡£
CoreCLR & CoreRT
CoreCLR ºÍ CoreRT ¶¼ÊÇ.NET CoreµÄÔËÐÐʱ(Runtime),
ËüÃÇÌṩÁËÓë.NET Framework CLR ÀàËÆµÄºËÐŦÄÜ(ÄÚ´æ¹ÜÀí¡¢³ÌÐò¼¯¼ÓÔØ¡¢°²È«ÐÔ¡¢Òì³£¡¢Ï̹߳ÜÀíµÈ)£¬¿ÉÓÉÃæÏòÓÚÔËÐÐʱµÄËùÓÐÓïÑÔʹÓá£
CoreRT ºÍ CoreCLR ²»Í¬µÄÊÇ£¬CoreRT ÌṩÁËÒ»Ì×
AOT µÄ»úÖÆ,¿ÉÒÔ½«.NET Core³ÌÐò±àÒë³ÉÔÉú´úÂ룬²»ÒÀÀµ .NET ÔËÐÐʱ¶øÔËÐÐÔÚËÞÖ÷»úÆ÷ÉÏ¡£³ý´ËÖ®ÍâÁ½¸öÔËÐÐʱ´ó²¿·Ö¹¦ÄÜ´úÂëÊǹ²ÏíµÄ£¬±ÈÈçGC¡£AOTµÄÓÅ»¯´øÀ´²»Éٺô¦£º
±àÒëºóÉú³ÉÒ»¸öµ¥Îļþ£¬°üº¬ËùÓеÄÒÀÀµ£¬°üÀ¨ CoreRT£¬ÎÞÐè°²×°Framework
Æô¶¯Ê±ÊÇ»úÆ÷Â룬²»ÐèÒªÉú³É»úÆ÷Â룬Ҳ²»Òª¼ÓÔØJIT±àÒëÆ÷
¿ÉÒÔʹÓÃÆäËûÓÅ»¯±àÒëÆ÷£¬°üÀ¨ LLILC ,IL to CPP
CoreRTÓÐÁ½¸ö·½Ê½Éú³É»úÆ÷Â룬µÚÒ»¸öʹÓÃÊÇÖ±½Ó±àÒëIL³É»úÆ÷Â룬ĬÈÏÇé¿öÏ£¬RyuJIT ×÷Ϊһ¸ö
AOT ±àÒëÆ÷½«IL±àÒë³É»úÆ÷Â룬ÁíÒ»¸ö·½Ê½Êǽ«C#´úÂë±àÒë³ÉC++´úÂ룬Ȼºóµ÷ÓöÔӦƽ̨µÄC++±àÒëÆ÷ÓÅ»¯±àÒë³É»úÆ÷Âë¡£
ʹÓà RyuJIT ±àÒë³É»úÆ÷Âë
dotnet restore
dotnet build --native --ilcpath <repo_root>\bin
\Product\Windows_NT.x64.Debug\packaging\publish1
±àÒëÉú³É C++ ´úÂë
dotnet restore
dotnet build --native --cpp --ilcpath <repo_root>\bin\Product\Windows_NT.x64.Debug\packaging\
publish1 --cppcompilerflags /MTd
CoreRTÒ²Óв»×ãÖ®´¦£¬ËüÐèҪΪ²»Í¬Æ½Ì¨±àÒëÒ»´Î£»µ«·²ÊÂÓе«ÊÇ£¬ËüÔÊÐí¹¤³Ìʦ¿ÉÒÔ²»·¢²¼µ½²»ÏëÖ§³ÖµÄƽ̨£¨±ÈÈçijÓÎÏ·½öÖ§³Ö×ÀÃæ£¬²»Ö§³ÖÊÖ»ú£©¡£
×¢£ºÕâÁ½¸öÃüÃûÔÚ.NET Core RC2 °æ±¾ÖоùÎÞ·¨Ê¹Ó㬰´ÕÕ¹Ù·½Ëµ·¨ÊÇÔÚµ±Ç°°æ±¾ÖÐÒÑ¾ÒÆ³ýÕâ¸öÃüÁîÁË£¬¾ßÌåµÈ6ÔÂ27ÈÕÕýʽ°æ·¢³öºó²ÅÖªµÀ×îºóµÄÇé¿ö
CoreFX(.NET Core Libraries)
CoreFXÖ÷Òª°üº¬Êý¸ö¹«¹²¿â£¬ÀýÈç System.Collections, System.IO,
System.XmlµÈ¡£CoreFXÊÇ .NET Standard Library µÄʵÏÖ£¬Í¬ÑùµÄ.NET
Framework 4.6.3Ò²ÊÇ»ùÓÚ.NET Standard LibraryµÄʵÏÖ¡£ËüÃÇĿǰ¶¼ÊÇ»ùÓÚ.NET
Standard Library1.6°æ±¾£¬¾ßÌå¼ûÏÂ±í£º

.NET Core ´úÂ뿪·¢¡¢²¿Êð¡¢ÔËÐйý³Ì

´ÓÉÏͼ¿ÉÒÔ¿´µ½Ê¹ÓÃJIT±àÒëºÍʹÓÃAOT±àÒëÔ´´úÂë²¢ÔËÐгÌÐòÊÇÁ½ÖÖ²»Í¬µÄÁ÷³Ì¡£
Èç¹ûʹÓÃJIT±àÒëÆ÷²¿Êð³ÌÐòʱֻÐèÒª½«³ÌÐò´ò°üΪILµÄassemblies£¬ÔÚ·½·¨µÚÒ»´ÎÖ´ÐÐǰ±àÒëÆ÷½«IL±àÒëΪĿ±ê»ú»úÆ÷Âë(Native
code)£¬¶øAOT±àÒë»áÔÚ±àÒëʱ½«Ô´´úÂëÖ±½Ó±àÒëΪĿ±ê»ú»úÆ÷Âë¡£
AOT½«Ô´´úÂë±àÒëΪ»úÆ÷Â룬ӵÓÐÈçÏÂÌØÐÔ£º
Óþ²Ì¬´úÂëÌæ»»·´É䣬ÀýÈçÈç¹ûÒ»¸öÖµÀàÐÍ(value type)ûÓÐÖØÐ´ ValueType.Equals
µÄequalsµÄ·½·¨£¬Ä¬ÈÏÇé¿öÅжÏÏàµÈ£¬»áʹÓ÷´ÉäÕÒµ½filedinfoÒÔÈ·¶¨typeÊÇ·ñÏàµÈ£¬È»ºóÔٱȽÏvalueÊÇ·ñÏàµÈ¡£¶øÔÚAOT±àÒëÖÐÓÉÓÚÌæ»»ÁË·´ÉäÒò´ËÖ»ÄܱȽÏvalueÊÇ·ñÏàµÈ¡£
ÒÀÀµµÄµÚÈý·½Àà¿âÒÔ¼°.NET Libraries¾ù´ò°üÖÁ×îÖÕ±àÒëµÄ³ÌÐòÖС£
´ò°üºóµÄ³ÌÐòÔËÐÐÔÚÒ»¸ö¾«¼ò°æµÄÔËÐÐʱÉÏ(CoreRT)Ö÷Òª°üº¬À¬»ø»ØÊÕÆ÷£¬¶øÔËÐÐʱҲ»á´ò°üÔÚappÎļþÖС£
ËäÈ»±àÒëʱ»áÌæ»»·´Éä´úÂ룬µ«Óö¶¯Ì¬·´Éä´úÂëÎÞÄÜΪÁ¦£¬ÔËÐÐʱÈôÓö¶¯Ì¬·´Éäµ÷ÓÃÔò»áÒòÕÒ²»µ½¶ÔÓ¦µÄÔªÊý¾Ý¼°ÊµÏÖ¶øÅ׳öÒì³£¡£½â¾ö°ì·¨ÊDZàÒëǰÅäÖÃÔËÐÐʱָÁîÎļþ(Runtime
directive file)Ö¸¶¨ÐèÒªÓõ½µÄ³ÌÐò¼¯¡£
×ܽá
±¾½Ú½éÉÜÁË.NET CoreµÄ¹¹³ÉÌåϵ£¬°üÀ¨ÐÂÔöµÄ¶à¸ö±àÒëÆ÷ÒÔ¼°×ñÑ.NET Standard LibraryµÄCoreFX,×ÜÌåÀ´Ëµ.NET
Core½Ï֮ǰµÄ.NET Framework ´ÓÐÔÄܺͿª·¢Ð§ÂÊÉ϶¼ÓкܴóµÄÌáÉý¡£¹Ø¼üÊÇÊ×´ÎʵÏÖÁË.NETµÄÍêÈ«¿çƽ̨ÄÜÁ¦µÄ»ù´¡¼¼ÊõÕ»¡£
.NET Core »ùÓÚ¿çÆ½Ì¨ÄÜÁ¦£¬²¢Ã»Óн«Óë GUI ¸ß¶ÈÏà¹ØµÄ API ÒÆÖ²µ½ .NET Core
ÄÚ£¬Òò´ËÏñÊÇ Windows Forms »òÊÇ Windows Presentation Foundation
(WPF) ²¢Î´ÒÆÖ²µ½ .NET Core¡£.NET Core Ö§³Ö¿ØÖÆÌ¨Ó¦ÓóÌÐò (Console
Application) ÒÔ¼°Àà¿â (Class Library) ÀàÐ͵ÄÏîÄ¿¡£
²»¹ý΢ÈíÔÚÆä Universal Windows Platform (UWP) ¿ª·¢Æ½Ì¨Ê¹ÓÃÁË .NET
Core£¬²¢ÇÒÀûÓà .NET Native ¼¼Êõ½«ÆäÐÔÄÜÌáÉýÖÁÊ®·Ö½Ó½üÔÉúÂëµÄËÙ¶È¡£
ASP.NET Core ÔòÒÔ¿ØÖÆÌ¨Ó¦ÓóÌÐòÇý¶¯ÆäÍйܻ·¾³ Kestrel Server ÒÔÖ§³Ö
ASP.NET Core ³ÌÐòµÄÔËÐС£
|