
.NETã®ã¯ãã¹ãã©ãããã©ãŒã éçºã¯ãæ¥ã
ãŸããŸãçŸå®çã«ãªã£ãŠããŸãã ãããŠãæè¿
ã®å
¬åŒã®Linux / MacOSãµããŒãã®
çºè¡šåŸã幞ããªæªæ¥ã¯å°ãè¿ããªããŸããã ãœãŒã¹ã³ãŒãã¯çŸåšMITã®äžã«ãããããäžã®å³ã¯ä»¥åã®é¢é£æ§ã倱ã£ãŠããŸãã ãã ããã¯ãã¹ãã©ãããã©ãŒã ã®.NETã¢ããªã±ãŒã·ã§ã³ã¯é·æéäœæã§ããŸããMonoã¯ãããæ¯æŽããŸãã ããããã³ãã¥ããã£ã§ã®åœŒã«å¯Ÿããæ
床ã¯ããªããããŸãã§ãã ãã¢ãã¯æãã§ããã¹ãŠã3åé
ããªããããã¢ãã®äžã§ã¯äœãæ£åžžã«èµ·åããªãããªã©ã®èšèãããè³ã«ããŸãã ããã«ããããã®äººã
ããç¹å®ã®äºå®ãèãããšã¯éåžžã«ãŸãã§ãã 質åãäœãæ¬åœã«æãã§ããïŒããŸãã¯ãäœãæ£ç¢ºã«æ©èœããŸãããïŒãããããstè¿·ã«é¥ããŸãã ãã¹ãŠã§ã¯ãããŸããïŒå»ºèšçãªè°è«ãå¯èœãªãã®ããããŸãïŒããã»ãšãã©ã§ãã ã»ãšãã©ã®å Žåãinããçãã¯ãã¯ããäœãæ©èœããŸããïŒãã®ç²Ÿç¥ã§å§ãŸããŸãã ãããŠããããæ©èœããå Žåãéåžžã«é
ãã§ãïŒã äŒè©±ã®çµããã«ãMonoã§ã®æåŸã®åãã·ã³ã³ãã³ãã¯æ°åé
ããªãããœãŒã¹ã³ãŒãã®ååã«
throw new Exception()
ã§ãã
ãã®æçš¿ã§ã¯ãå°ãçµéšãå
±æããããšæããŸãã å°ãåã«ã
PassportVision補åïŒ
Habréã§ã®çºè¡š ïŒãLinuxã«ç§»æ€ããŸããã ããªãæ£åžžã«æ©èœããŠãããšèšããŸãã ã¯ããMicrosoftã®åŸæ¥ã®.NETïŒä»¥é-MS.NETïŒäžã®Windowsãããå°ãé
ãã§ãã ããããããã¯éåžžã«å®å®ããŠæ©èœããããã©ãŒãã³ã¹ã®äœäžã¯æ ¹æ¬çãªãã®ã§ã¯ãããŸããã åæã«ãåœç€Ÿã®è£œåã¯éåžžã«å€§ããããšã³ã¿ãŒãã©ã€ãºã®ã«ããŽãªãŒã«åé¡ãããCïŒ/.NETæ©èœãæ倧éã«æŽ»çšããŠããŸãã ãããã£ãŠã.NETçšã®å€§èŠæš¡ãªãµãŒããŒã¢ããªã±ãŒã·ã§ã³ãååŸããã®ã¯çŸå®çã§ã-èŠæããããŸãã ãŸããMonoã§äœããæžããŠããããŸããŸãªéçºè
ãšè©±ãæ©äŒããããŸãã-äž»ã«æåããç©èªã§ãã
ãããããªãã¢ãã«å¯ŸããŠããã»ã©åŠå®çãªã®ã§ããïŒ åé¡ã¯ã人ã
ãã©ã³ã¿ã€ã ã®éããæ¬åœã«ç解ããããªããšããããšã ãšæããŸãã Mono 2.4ã§Linuxçšã®.NETã¢ããªã±ãŒã·ã§ã³ãèµ·åããããããã«ã¯èµ·åããŸããã§ãããã€ãŸããMonoã¯å®å
šã«æªãã®ã§ã䜿çšããŸããã ãããŠæåŸã«ãå¯äžã®æ¹æ³ã¯éé£ããããšã§ããããã®å®è£
ã¯MS.NETãšã¯ãããã«ç°ãªããŸãã æ°ããMonoããŒãžã§ã³ã¯2ã¶æã«1åãªãªãŒã¹ãããå®è£
ã¯é·ãéä¿®æ£ãããŠããŸããã人ã
ã¯è©³çŽ°ãç解ããããšãæãŸãã貧ããMonoãæ©ãç¶ãã倧åã«ãç¶ããŠããŸãã
ä»æ¥ã¯ãã©ã³ã¿ã€ã ãç°ãªãå Žåã®äŸãããã€ã瀺ããŸãã
ãã¡ããããã¹ãŠã®éããæã¡åºãããšã¯ã§ããŸãã-ããªãã¯ããã«ã€ããŠæ¬å
šäœãæžãããšãã§ããŸãã ã¯ãããŸããéåžžã«ã¯ãŒã«ãªåé¡ã補åã³ãŒãããåŒãåºãããšãã§ããŸããããœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®ã³ã³ããã¹ãããããããåé¢ããŠãç解ããããå°ããªã³ãŒãã®åœ¢ã«ããããšã¯éåžžã«å°é£ã§ãã ä»æ¥ã®ç§ã®ä»äºã¯ãMonoãšMS.NETã®éããäŒããããšã§ãã ãããåå¿è
ã®Monoããã°ã©ããŒãããMono dumbããšããèšèãæ¯ãè¿ãã®ã§ã¯ãªããçºçããåé¡ãããåºãèŠãŠå¯ŸåŠããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
äŸ1.ç°ãªãããŒãžã§ã³ã®ã³ã³ãã€ã©ãŒ
éåžžã«ç°¡åãªäŸããå§ããŸãããã CïŒããã°ã©ã ãããããããã³ã³ãã€ã«ããããšããŸãã ç¥ã£ãŠããããã«ãæšæºã³ã³ãã€ã©ã¯åã«CïŒã³ãŒãã察å¿ããILã³ãŒãã«å€æããã¢ã»ã³ããªã®åœ¢åŒã§å®è¡ããŸãã ããã«ã翻蚳ããã»ã¹ã«ã¯ç¹ã«å·§åŠãªæé©åãå«ãŸããŠããŸãããJITãæé©åãæ
åœããŠããããã§ãã 翻蚳ã¯éåžžã«ç°¡åã§ãããçµéšè±å¯ãª.NETéçºè
ã¯å€ãã®å Žåãã©ã®ãããªILã³ãã³ããçºçããããææ¡ã§ããŸãã ããããäœããã®çç±ã§ãå€ãã®éçºè
ã¯ãã®ããã»ã¹ã
æ確ã§ããããšã確信ããŠããŸãã ããœãŒã¹ããã°ã©ã ãILã«ãããããæ¹æ³ã¯ãŸãã«1ã€ã§ããããšããããšã蚌æããããšãããªãç±çãªè°è«ãããã€ããããŸããã éåžžã人ã
ã¯
ãä»æ§ããããŸãïŒããšããçŽ æŽãããè°è«ã§ãããåæ©ä»ã
ãŸãã ä»æ§ã§ã¯å€ãã®æçšãªããšãè¿°ã¹ãããŠããããšãä¿èšŒãããã®ã§ãããä»»æã®çªçµãæŸéããããã®å¯äžã®ãªãã·ã§ã³ã«ã€ããŠã¯äœãèšãããŠããŸããã ããã«ãã³ã³ãã€ã©ã®ããŒãžã§ã³ãç°ãªããšã翻蚳ããžãã¯ãç°ãªãå ŽåããããŸãã ããã説æããéåžžã«ç°¡åãªäŸãåãäžããŸããã 次ã®ã³ãŒããæ€èšããŠãã ããã
var numbers = new int[] { 1, 2, 3 };
Mono 2.10+ããã³MS.NETã§ã¯ã次ã®ãããªãã®ã衚瀺ãããŸãã
IL_0000: ldc.i4.3 IL_0001: newarr [mscorlib]System.Int32 IL_0006: dup IL_0007: ldtoken field valuetype '<PrivateImplementationDetails>{de495e46-bf42-4605-a020-39ddddfe413c}'/'$ArrayType=12' '<PrivateImplementationDetails>{de495e46-bf42-4605-a020-39ddddfe413c}'::'$field-0' IL_000c: call void class [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle) IL_0011: stloc.0 // ... .field assembly static valuetype '<PrivateImplementationDetails>{de495e46-bf42-4605-a020-39ddddfe413c}'/'$ArrayType=12' '$field-0' at D_00004000 // ... .data D_00004000 = bytearray ( 01 00 00 00 02 00 00 00 03 00 00 00) // size: 12
äŸãããããããã«ããœãŒã¹èŠçŽ ã®å€ã¯ç¹å¥ãªãã€ãé
åã«ä¿åãããŸãã ããããMono 2.4.4ã®æ代ïŒä¿¡ããããŸããããããã䜿çšãã人ã¯ãŸã ããŸãïŒãã³ã³ãã€ã©ã¯ããã»ã©è³¢ããããŸããã§ããïŒ
IL_0000: ldc.i4.3 IL_0001: newarr [mscorlib]System.Int32 IL_0006: dup IL_0007: ldc.i4.0 IL_0008: ldc.i4.1 IL_0009: stelem.i4 IL_000a: dup IL_000b: ldc.i4.1 IL_000c: ldc.i4.2 IL_000d: stelem.i4 IL_000e: dup IL_000f: ldc.i4.2 IL_0010: ldc.i4.3 IL_0011: stelem.i4 IL_0012: stloc.0
å®éãããã§ã¯æ¬¡ã®ããšãèµ·ãããŸãã
var numbers = new int[3]; numbers[0] = 1; numbers[1] = 2; numbers[2] = 3;
æ©èœçã«ã¯äœãå€æŽãããŠããŸããããã³ã³ãã€ã©ã®ããŒãžã§ã³ãç°ãªããšç°ãªãã³ãŒããçæã§ããããšãããããŸããã ãã ããã³ãŒãã®åäœã¯åããŸãŸã§ããããããã®äŸã¯ããã»ã©èå³æ·±ããã®ã§ã¯ãããŸããïŒMonoã®å€ãããŒãžã§ã³ã®ããã©ãŒãã³ã¹ã®ããããªäœäžãé€ããŸãïŒã ããã«èå³æ·±ãäŸã«ç§»ããŸãããã
äŸ2. ILã䜿çšããäœæ¥ã®éã
å®è·µã§ã¯ãMS.NETãšMonoã§ç°¡åãªãèªæãªãã³ãŒããã»ãŒåãããã«æ©èœããããšã瀺ããŠããŸãã ãããŠãåé¡ã¯ãã³ãŒãã«ããã»ã©äºçŽ°ãªããšãçŸããªããšãã«æãããèµ·ãããŸãã å°ãåãŸã§ãJohn Skeetã¯
ãæååãæååã§ã¯ãªãã®ã¯ãã€ã§ããïŒã ïŒ
impwxããã®
ãã·ã¢èªç¿»èš³ ïŒãšãããã°ãããæçš¿ãæžããŸããã èŠããã«ãæçš¿ã®å
容ã¯ã次ã®äŸãèæ
®ããŠåæžãããŸãã
[Description(Value)] class Test { const string Value = "X\ud800Y"; }
CïŒã®æååã¯ãUTF-16ã®äžé£ã®åèªã§ãã ãããŠã
"X\ud800Y"
ã®å€ã¯ããŸãè¯ã
"X\ud800Y"
ãŸããããªããªã ãµãã²ãŒããã¢
0xD800
ã®
0xD800
ã¯ãŒããå«ãŸãããã®åŸ
0xD800
ã¯ãŒãïŒéé
0xDC00..0xDFFF
ïŒã
0xDC00..0xDFFF
ã¯ãã§ããã代ããã«
Y
ïŒ
0x0059
ïŒãä»ããŸãã ILã³ãŒãã§å±æ§ã³ã³ã¹ãã©ã¯ã¿ãŒã®åŒæ°ãæ ŒçŽããããã«UTF-8ã䜿çšããããããåé¡ãå§ãŸããŸãã ãã ããJohn Skeetã«ã¯ãã¹ãŠãéåžžã«ããæãããŠããã®ã§ãå
ã®æçš¿ãèªãããšããå§ãããŸãã
ãã®å°é£ãªç¶æ³ã§MS.NETãšMonoãã©ã®ããã«åäœãããã«èå³ããããŸããïŒ
詳现ãªã¡ã¢ ïŒã ãããŠããããã¯ç°ãªãæ¯ãèããããŸãã æåã®éãã¯ã³ã³ãã€ã«æã«èŠãããŸãã MS.NETã¯ã
58 ED A0 80 59
ãšããŠã¡ã¿ããŒã¿ã«æååå€ãé
眮ãã
58 59 BF BD 00
ãšããŠMonoãé
眮ããŸãïŒäž¡æ¹ã®å€ã¯ç¡å¹ãªUTF-8è¡ã§ãïŒã 2çªç®ã®éãã¯ãåä¿¡ããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšã§ç¢ºèªã§ããŸãã MS.NETã¯äž¡æ¹ã®ããŒãžã§ã³ãå®è¡ããå±æ§åŒæ°ã®å€ïŒãããã
0058 fffd fffd 0059
ããã³
0058 0059 fffd fffd 0000
ã®åœ¢åŒïŒãæ£åžžã«ååŸã§ããMonoã¯ãã®ãããªç¡å¹ãªæååããã§ãŒã¯ããŠãããããã®å Žåã«
null
ãè¿ã
null
ã ãã®ãããMonoã§å®è¡ããããšãããšããžã§ã³ã¹ããŒãã®å°ããªäŸãããã«èŠã€ãããŸããã
åé¡ã¯ããšã³ã³ãŒãã£ã³ã°éã§æååãå€æããç°ãªãå®è£
ã«ãããŸãã ãã®äŸãæ°ã«å
¥ã£ãŠããã®ã¯ããã®ããããªãºã ã«ãããMS.NETãšMonoã®äž¡æ¹ãã³ã³ãã€ã«æã«ç°ãªãILã³ãŒããçæããã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ç°ãªãILã³ãŒããçæã§ããããšã瀺ããŠããããã§ãã
äŸ3. Monoã®ãã°
ã¯ããMonoã«ã¯
ãã°ããããŸãã ãããŠãã¯ãã圌ãã¯éåžžã«å°ãªããããŸãããç§ãã¡ã¯ãããšå
±ã«çããªããã°ãªããŸããã 幞ããªããšã«ããããããããããå¿
èŠã¯ãã£ãã«ãããŸããããŸãããªãŒãã³ãªãã°ã®ãã¡ãé倧ãªãã°ã¯ããŸããããŸããã 1ã€ã®è©±ãããŸããããPassportVisionãMonoã«ç§»æ€ãããšããããŸãæ°ã«å
¥ããªãç¬éã«åºäŒããŸããã å€ãã®æ¡ä»¶ã«å¿ããŠãã³ãŒãçæãåŠçãããã®å Žã§ããžãã¯ã®äžéšãäœæããå¿
èŠããããŸããã
TypeBuilderã䜿çšããŠæ°ããåãäœæãããããã®åã¯ç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããŸããã Monoã§ã®ã³ãŒãçæã«ã€ããŠ
å€ãã®æ°ããããšãåŠã³ãŸã
ãã ããã®å€§éšåã¯ã³ã³ããã¹ãããç°¡åã«äŒããããšã¯éåžžã«å°é£ã§ãã ãããã1ã€ã®ãã°ãéåžžã«ç°¡åã«åçŸãããŸãã
TypeBuilder.CreateType()
ã¡ãœããã¯ã宣èšãããã€ã³ã¿ãŒãã§ã€ã¹ã®ã¹ã³ãŒãããã§ãã¯ããŸããã§ããã ã€ãŸãã³ãŒã
private interface IFoo {} // ... void Main() { var assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly( new AssemblyName("FooAssembly"), AssemblyBuilderAccess.Run); var moduleBuilder = assemblyBuilder.DefineDynamicModule("FooAssembly"); TypeBuilder typeBuilder = moduleBuilder.DefineType("Foo", TypeAttributes.Public, typeof(object), new[] { typeof(IFoo) }); typeBuilder.CreateType(); }
MS.NETã«è©²åœããŸããïŒããããã¹ãã§ãïŒããMonoã§ã¯æ£åžžã«æ©èœããŸããã ç§ã¯ãã®ç¶æ³ã«ããŸãæºè¶³ããŠããªãã£ãã®ã§ã
ãã°ãå§ããŸããã Xamarinã®ã¡ã³ããŒã«æ¬æãè¡šããŸã-5æ¥åŸã«
ä¿®æ£ããŸããã Mono 3.8.0ïŒ8æã«ãªãªãŒã¹ãããïŒã䜿çšããŠããå Žåããã®ãã°ã¯åŒãç¶ãååšããŸãããMono 3.10.0
ã¯ä¿®æ£ãããŸãã ã
ãã®åé¡ã¯ç¹ã«é倧ã§ã¯ãããŸããããããã§ãå€ãã®äžäŸ¿ãç§ã«äžããŸããã ãã ãããã°ãã©ãã«ãŒã«ã¯ãŸã
çŽ5,000件ã®æªè§£æ±ºã®åé¡ããããŸãã ãããã£ãŠãMonoã«ã¯ç¹å®ã®ãšã©ãŒããããå°ããªç¬éã®åäœãããŒãžã§ã³ããšã«å€ããå¯èœæ§ãããããšã«çæããå¿
èŠããããŸãïŒããããããã°ã¬ããŒãã®ããã«ãæŽæ°åŸã«èª°ããåäœãåæ¢ããããã§ãïŒã å¯èœã§ããã°ãMonoã®ææ°ã®å®å®ããŒãžã§ã³ã®äžã«åº§ã£ãæ¹ãè¯ãã§ãããã
äŸ4. .NETã®ãã°
ãã®ãããªäŒè©±ã®åŸãç³ã¯éåžžã¢ãã®æ¹åã«é£ã³å§ããŸãã圌ãã¯ããã¯äžçš®ã®æªãããšã§ãããããã«ãã°ããããšèšããŸãã ãããŠã誰ãããã€ã¯ããœããããã°ãè¡ã£ãŠããããšãã©ããããããå¿ããŠããŸãã 次ã®è©±ã§ã¯ãç§ã®å人ã«äžå®æ°ã®ç¥çµçŽ°èãããããŸããã 次ã®ã³ãããã®åŸããã«ããµãŒããŒã¯ãã¹ãã倱æããããšãå ±åããŸããã ããã«ã皌åäžã®ãã·ã³ã§ã¯ãã°ãããä»äºãããŸãããããã«ããµãŒããŒã«èœã¡ãŸããã ãã°ã®æ€çŽ¢æ¹æ³ã«é¢ããé
åçãªèª¬æã¯çç¥ããèŠç¹ã説æããŸãããã«ããµãŒããŒãšäœæ¥ãã·ã³ã«ç°ãªãããŒãžã§ã³ã®.NET Frameworkãã€ã³ã¹ããŒã«ãããŸããïŒ4.0ããã³4.5ã ãããããã°èªäœã¯ãã®è¡ã§ãã
new Uri("http://localhost/%2F1").AbsoluteUri
TargetFrameworkã«å¿ããŠç°ãªãçµæãçæããŸãïŒ
詳现ãªæ³š ïŒã 4.0ã§ã¯ãã¹ã©ãã·ã¥ãšã¹ã±ãŒãïŒå¥å
%2F
ïŒã®
ãã°ããããŸããããã®è¡ã¯
http://localhost//1
è¿ããŸããã ãã®ãã°ã¯
RFC 3986ã«åŸã£ãŠ4.5ã§ä¿®æ£ãããæ°ããçµæã¯
http://localhost/%2F1
ã
ãããŠãMonoã¯ã©ãã§ããïŒ ãŸãã8æã«ä¿®æ£ãããåæ§ã®
ãã°ããããŸããïŒä¿®æ£ã¯Mono 3.10.0ã«å«ãŸããŠããŸãïŒã ãã®äŸã¯ãåãåé¡ãç°ãªã.NETå®è£
ã§çºçããæ°ããããŒãžã§ã³ã§ä¿®æ£ã§ããããšãæããŠãããŸãã çã®ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒãžã§ã³ããšã«å€æŽããããã©ãããã©ãŒã æ©èœã䜿çšããªãããããŸããŸãªã©ã³ã¿ã€ã ã§æ©èœãç¶ããããã«éåžžã«æèœã«äœ¿çšããå¿
èŠããããŸãã
äŸ5.æšæºã¯ã©ã¹ã®å®è£
ã®åŸ®åŠã
å¥ã®æçãªè©±ããããŠãã ããã ããåªããäŒç€Ÿã®ç€Ÿå¡ã¯ãæ§é ãããã·ã¥ããŒãã«ã®ããŒãšããŠäœ¿çšããããšã決å®ããŸããã æªãããšã¯äœããããŸããã§ãããã¢ããªã±ãŒã·ã§ã³ã¯æ£åžžã«åäœããŸããã å°ãé
ããªããŸããããããã»ã©é倧ã§ã¯ãããŸããã ãããŠãããæ¥ãé£äžã¯Monoã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããããšã«ããŸããã ãããŠãèŠãïŒããã¯äœåãéãåãå§ããã ãããããªããŠè¯ãã¢ããªã®ãããã®äžã§ãã¹ãŠãã©ãã ãéãæ©èœããã®ãããšåœŒãã¯åãã ã ç§ãæ©ãŸããå¯äžã®ããšã¯ãããã§ã¯ãªããã©ãããééã£ãŠãããšããèãã§ããã
ãã®äŸãç解ããã«ã¯ãMS.NETã®æ§é ã«å¯ŸããGetHashCodeã®å®è£
ã«ã€ããŠå°ãèªãå¿
èŠããããŸãïŒ
åªãããããã¹ãïŒã ã€ãŸããããã·ã¥é¢æ°ã«ã¯2ã€ã®ããŒãžã§ã³ããããŸãã1ã€ã¯åç
§ãã£ãŒã«ããšãã£ãŒã«ãéã®ç©ºãã¹ããŒã¹ã®ãªãæ§é çšã§ããã1ã€ã¯ä»ã®ãã¹ãŠã®ããŒãžã§ã³çšã§ãã ææ
®æ·±ãèªè
ãæšæž¬ãããããããŸããããç§ãã¡ã®ä»²éã¯ããŒæ§é ã§ããŸããããŸããã§ããïŒã€ãŸãããã£ãŒã«ãéã«ãç©ŽãããããŸãã;æ瀺çãªGetHashCodeïŒïŒãç»é²ããããšã誰ãæ°ã«ããŸããã§ããïŒã ãããŠãã®å Žåãæ§é ã®æåã®ãã£ãŒã«ãã«åºã¥ããããã·ã¥é¢æ°ã®2çªç®ã®ããŒãžã§ã³ã䜿çšãããŸãã äŸãèããŠã¿ãŸãããïŒ
var a1 = new KeyValuePair<int, int>(1, 2); var a2 = new KeyValuePair<int, int>(1, 3); Console.WriteLine(a1.GetHashCode() == a2.GetHashCode()); var b1 = new KeyValuePair<int, string>(1, "x"); var b2 = new KeyValuePair<int, string>(1, "y"); Console.WriteLine(b1.GetHashCode() == b2.GetHashCode());
ãã®ã³ãŒãã¯ãMS.NETã§
False True
ãåºåããŸãã ããã·ã¥
a1
ãš
a2
ã¯ç°ãªãïŒãã¹ãŠã®ãã£ãŒã«ãã«åºã¥ããŠèšç®ãããŸãïŒã
b1
ãš
b2
ããã·ã¥ã¯äžèŽããŸãïŒæåã®ãã£ãŒã«ãã«åºã¥ããŠã®ã¿èšç®ãããŸãïŒã Monoéçºè
ã¯ãããŸããŸãªããŒãžã§ã³ã®ããã·ã¥é¢æ°ã«ç
©ããããªãããšã«æ±ºããŸããã圌ãã¯ããã¹ãŠã®ãã£ãŒã«ãã«åºã¥ããŠæ©èœãããã®ãäœæããŸããïŒ
GetHashCodeããã³
InternalGetHashCodeãåç
§ïŒã ãããã£ãŠãäžèšã®ã³ãŒãã¯ãã¹ãŠã®ããã·ã¥ãç°ãªããããã¢ãã©ã«ã®äžã§
False False
ãåºåããŸãã
ããã·ã¥ããŒãã«ã䜿çšããŠã楜ãã仲éã«è©±ãæ»ããŸãããã ç¶æ³ãæ£ããè§åºŠããèŠããšããã®ã¢ããªã±ãŒã·ã§ã³ã¯Monoã§ã¯åäœããŸããã§ããããMS.NETã§ã¯åäœãé
ããªããŸããã ãããŠãæåã®ãã£ãŒã«ããäžèŽãããããå€ãã®ããŒãåãããã·ã¥ãæã£ãŠãããšããäºå®ã®ãããé床ãäœäžããŸããã äºçŽ°ãªããšã®ããã«æããŸãããããã©ãŒãã³ã¹ã«ã¯ããªã匷ã圱é¿ããããŸããã
ãåç¥ã®ãšããã.NETã®å
éšæ§é ã«ã€ããŠèª°ãã«è©±ããšã圌ãã¯ãã°ãã°ãã¬ãŒãºã§ç§ãæ¹å€ããŸããããªãããããã¹ãŠç¥ãå¿
èŠãããã®ã§ããã ãã®ãããªå
éšå®è£
ã®è©³çŽ°ã¯ãçŸå®ã®äžçã§
ã¯æ±ºããŠåœ¹ã«ç«ã¡
ãŸãã ãã ãããŠãç§ã¯çããŸãïŒããŸãããã¡ããã圌ãã¯èª°ã«ã圹ã«ç«ããªãã§ããããã
.NEXT
ç§ã¯ãã®ãããªç©èªãéåžžã«é·ãéæ¯æ®ºããããšãã§ããŸããããã®æçš¿ã§ã¯ãäžè¬çãªåé¡ã®æŠèŠã瀺ãã人ã
ã«ããäžåºŠèãããããã ãã§ããã CïŒããã°ã©ã ãç°å¢ã«å¿ããŠç°ãªãåäœãããè€éãªäžçã«äœãã§ãããšããäºå®ãèããŠãã ããã åäœã®éãã¯ã.NETã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªãã©ãããã©ãŒã ã§è¿
éãã€å®å®ããŠåäœããããšãä¿èšŒããããã«å¯ŸåŠã§ããéåžžã«å
·äœçãªãã®ã«ããã£ãŠããŸãã
ãã£ãšããããã話ãèãããå Žåã¯ã
.NEXTã«ã³ãã¡ã¬ã³ã¹ïŒ2014幎12æ8æ¥ãã¢ã¹ã¯ã¯ãã©ãã£ãœã³ã¹ã©ãã£ã³ã¹ã«ã€ïŒã®äžç°ãšããŠç§ã®ã¬ããŒããã芧ãã ããã åŒãç¶ããããŸããŸãªãã©ãããã©ãŒã ã®ãããã¯ã«ã€ããŠèª¬æããŸããã¡ã¢ãªãæäœããMonoã®æ©èœãšãJITã³ã³ãã€ã©ã®å®è£
ã®éãã«ã€ããŠèª¬æããŸãã ãããŠãç§ã¯äžæ¥äžãµã€ããããŸããããšã«ãªãã®ã§ã.NETã«ã€ããŠãã£ããããŠãã£ããããããšãã§ããŸãã
ãŸããHabrazhiteliã®æ¥œããã¹ããŒãªãŒãååã«ããããšãé¡ã£ãŠããŸãã ç§ã¯åœŒããèããŠããããã§ã=ïŒ