RedditïŒ www.reddit.com/r/programming/comments/118y4m/dispelling_common_d_myths
ãšã³ããªãŒ
Dèšèªã®åžžé£ãŠãŒã¶ãŒã§ãããã¡ã³ã§ããç§ã¯ãåå¿è ã®éã§å®æçã«çºçããå€ãã®èª€è§£ãèª€è§£ã«æ°ã¥ããã«ã¯ããããŸããã§ããã
ãããã®èª€è§£ã¯ãã¹ãŠçè§£ã§ããŸãã å€ãã¯éå»ã«éèŠãªåœ¹å²ãæãããŠããåé¡ã«é¢é£ããŠããããããããã®æä»£é ãã®èŠè§£ãååšãç¶ããããšã¯é©ãããšã§ã¯ãããŸããã ãããã¯ãŸãã«Dã³ãã¥ããã£ãä»ã®ããã°ã©ããŒã«ã§ããéã説æãã¹ãé åã§ããããã«æããŸãã ãããã®ãããã¯ã¯æ¬¡ã®ãšããã§ãã
- Dçšã®IDEããããŸã
- DSourceã¯ãã§ãŒãããŸãããDãããžã§ã¯ãã¯ãããŸã§ä»¥äžã«æŽ»ââçºã§ã
- D1ãšD2ã®åå²
- ãã©ãã¹æšæºã©ã€ãã©ãªïŒ ããããã¿ã³ãŽã¯ã©ãã§ããïŒ
- D-ãªãŒãã³ãœãŒã¹
- Dã¯æåã¡ã¢ãªç®¡çãèš±å¯ããŸã
- éçåä»ãã¯éçç£çãªæå³ã§ã¯ãããŸãã
Dçšã®IDEããããŸã
DããµããŒãããIDEããéåžžã®æ§æã®åŒ·èª¿è¡šç€ºä»¥äžã®æ©èœãã»ãšãã©åããŠããªãå ŽåããããŸããã ããããä»ã§ã¯ããã§ã¯ãããŸããã æ¬æ Œçãªéçºç°å¢ã奜ããªå Žåã3ã€ã®äž»ãªãªãã·ã§ã³ãããããããããç©æ¥µçã«ãµããŒããããŠããŸãã
- MonoDevelopïŒ Mono-D
- Visual StudioïŒ ããžã¥ã¢ã«D
- EclipseïŒ DDT
DSourceã¯ãã§ãŒãããŸãããDãããžã§ã¯ãã¯ãããŸã§ä»¥äžã«æŽ»ââçºã§ã
æ°ãæã§èŠåçã«ããã®çš®ã®è³ªåãçºçããŸãããDã¯æ»ãã§ããŸããïŒ ç§ã¯DSourceã«è¡ããŸãããããã¹ãŠã®ãããžã§ã¯ãã¯æä»£é ãã§ãµããŒããããŠããªãããã«èŠãããã©ãŒã©ã ã¯ç©ºã§ããã Dã¯æ»ã«ãããŠããããã«æããŸããã
DSourceã¯ãDã§ãããžã§ã¯ãããã¹ãããããã®äºå®äžã®å Žæã§ãããæ³š-WASã çŸåšãã»ãšãã©ã®ã¢ã¯ãã£ããªãããžã§ã¯ãã¯GithubãšBitbucketã«ç§»è¡ããŠããŸãã å®éãåç §Dã³ã³ãã€ã©ãšæšæºã©ã€ãã©ãªãåãããªããžããªã§ãã1幎以äžGithubã§ãã¹ããããŠããŸãã ãã®éãéçºã®ããŒã¹ã¯å€§å¹ ã«å éããŸãããããã®éã¯ãããŸããã
æ»è ã®äžããã¢ã¯ãã£ããªãããžã§ã¯ããèŠã€ããããããããã«ãDSourceãæŽæ°ãã詊ã¿ãããã€ããããŸããïŒãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ãã¹ãã£ã³ã°ã¯ãæéã®çµéãšãšãã«å€ãã®æŸæ£ããããããžã§ã¯ããåéããéåœã«ããããšãå¿ããªãã§ãã ããïŒã ããããGithubãšBitbucketãéåžžã«äººæ°ããã£ãããããã®æ¹åã§ã®åªåã®äŸ¡å€ã¯åãã«è¶³ããªããšèããããŠããŸããã
èªããããåŸãªãããDSourceã«ã€ããŠãããªããšãèšãã®ã¯æ²ããã ç§ã¯åžžã«ãã®ãµã€ããé«ãè©äŸ¡ããŠããããã€ãŠGithubãšBitbucketãã»ãšãã©ãã¹ãŠã®ãªãŒãã³ãœãŒã¹ããã°ã©ããŒã«ãšã£ãŠäžè¬çã«ãªããã£ãšåã«ããã®ååšã¯D1ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¿ èŠãã€æçšã§ããã ãµã€ãããããã¯ãŒã¯ãã£ãã«ããã¹ãã£ã³ã°èªäœã¯Dã³ãã¥ããã£ã«å¯ä»ãããŸããïŒãŸã ãããŸãïŒïŒããã®ãããç§ã¯ããã€ã³ã¯ãŒã¯ã®ç²Ÿç¥ã§DSourceã«ã€ããŠè©±ãã®ã¯äžå¿«ã§ãã ãããããããã«ãããDSourceã¯çŸä»£ã®Dã€ã³ãã©ã¹ãã©ã¯ãã£ã§ã¯ã»ãšãã©äœ¿çšãããŸããããèšèªèªäœã¯éåžžã«çãçãããŠããã ãã§ãªããç®ã®åã§éçºãããŠããŸãã
Dã§ã¢ã¯ãã£ããªãããžã§ã¯ããæ€çŽ¢ããæ¹æ³ã«ã€ããŠã¯ãäžè¬çãªæ€çŽ¢ãšã³ãžã³ã«å ããŠã D Wikiããå§ãããŸãã ã¯ããç§ãã¡ã¯ãããžã§ã¯ãã®ææ°ãªã¹ããåããããŒãžãç¶æããã®ã«å®ç§ããã¯çšé ãããšãèªããŸãããããã§ãããŠä»ãç§ã¯èªåã®ãããããããä»ã®DãŠãŒã¶ãŒã«ãåãããšãæãåºãããããšãèªããŸãã
D1ãšD2ã®åå²
D2ã¯çŸåšã®ç¶æ³ã§ãã D2ã¯ãã§ã«å®å®ãããã©ã³ããšèŠãªãããŠãããD1ã¯éå»ã®éºç©ã§ãã D1ã«ã€ããŠã¯å¿ããŠãã ãããã¹ãã£ãã¯ã貌ãå¿ èŠãããããŸãããæ»ãã§ããŸãã
ãæ»ãã ããšèšããšããPython 2ãšã®é¡æšã§æ³åã§ãããããªæ»ãæå³ããããã§ã¯ãããŸãããã€ãŸããD1ã䜿çšãã人ã¯ã»ãšãã©ããªããšããããšã§ãã ãã¹ãŠã¯ãã§ã«é ããŠãD2ã«ãããŸãã D1ã®äœ¿çšã¯ã»ãšãã©ãªãããã®å ¬åŒãµããŒãã¯ä»å¹Žã®çµããã«çµäºããŸãïŒ1幎åã«çºè¡šãããŸããïŒã D1ã¯èª°ãæ°ã«ããŸããã ããã ãã§ãããã€ã³ãã
D2ã®ã¿ããããŸãã
ïŒç¿»èš³è ã®ã¡ã¢ïŒèè ã¯ããã§ãæ»ãã ããšå°ãè奮ããŸããããæ°ãããããžã§ã¯ãã«D1ã䜿çšãã人ã¯ããŸãããããã¯çŽç²ãªéºç£ã§ããïŒ
ãã©ãã¹æšæºã©ã€ãã©ãªïŒ ããããã¿ã³ãŽã¯ã©ãã§ããïŒ
ãã©ãã¹ãšã¿ã³ãŽã®ã¹ã¿ã³ããªãã«ã€ããŠèããããšããããããããŸããã éå»ãæ¯ãè¿ããšãããã¯æç¢ºãªééãDã§ããããåé¡ã¯ç¹å®ãããä¿®æ£ãããŸããã èŠããã«ã Phobosã¯æšæºDã©ã€ãã©ãªã®æéã§ãã Tangoã¯ãªãã·ã§ã³ããã³ãªãã·ã§ã³ã§ãããå®å šã«Phobosäºæã®ã©ã€ãã©ãªã§ãã ãã®ãããªãã®ã
ããããåžžã«ããã§ã¯ãããŸããã§ããã èå³ããã人ã®ããã®æŽå²ã®ãããïŒ
ãã€ãŠãD1ã®è¥ãã§ãAndrei AlexandrescuãããŒã ã«åå ãããã£ãšåã«ãæšæºã®ãã©ãã¹ã©ã€ãã©ãªã®ç¶æ ã¯æé«ãšã¯ã»ã©é ããã®ã§ããã ãã¡ããããã®èšèªã®äž»èŠãªéçºè ã§ããäžäººã®äººïŒWalter BrightïŒã«ãã£ãŠéçºãããŸããã圌ã¯ãèšèªãšã³ã³ãã€ã©ã®éçºã«å¿ããããŸããã ãããŠãããã€ãã®çç±ãããããã¯æ¬æ ŒçãªãªãŒãã³ãœãŒã¹ã§ã¯ãããŸããã§ããã
ãã®ãããæèœãªéçºè ã®ã°ã«ãŒããéãŸããæ¬æ Œçãªæšæºã©ã€ãã©ãªãäœæããŠãã®åé¡ã解決ããããšã«ããŸããã 圌女ã¯ã¿ã³ãŽãšåä»ããããæªå®æã®ãã©ãã¹ãããã¯ããã«åªããŠãããããäºå®äžã®æšæºã«ãªããŸããã
æ®å¿µãªãããéåžžã®æäœã§ã¯ãTangoã¯ã©ã³ã¿ã€ã ç°å¢ã«é¢é£ããPhobosã®äœã¬ãã«ã®äžéšã眮ãæããå¿ èŠããããŸããã ã©ã€ãã©ãªã¯äºææ§ããªããªããŸãã-äž¡æ¹ãåæã«äœ¿çšããæ¹æ³ã¯ãããŸããã§ããã ãã¡ãããããã¯PR Dã«ãšã£ãŠæ¬åœã®æªå€¢ã«ãªããŸããã
äžæ¹ããã©ãã¹ã¯å®å šã«ãªãŒãã³ãœãŒã¹ã«ãªããã¢ã³ãã¬ã€ã»ã¢ã¬ã¯ãµã³ãã¬ã¹ã¯ãéçºãæ åœããå°ããã€ãã©ãã¹ãããçŸãããããå®å šã«ãªããŸããã 圌ã¯ããã€ãã®å Žæã§ããªããã人ã§ããããããã¯ãã©ãã¹ãšã¿ã³ãŽã®éäºææ§ã®éèŠãªåé¡ãå©ããŸããã§ããã ãããã幞ããªããšã«ãDéçºã³ãã¥ããã£ã¯2ã€ã®æšæºã©ã€ãã©ãªã«é¢ããå€ãã®èŠæ ãèããåé¡ã®è§£æ±ºã«éäžããŸããã
åœæãD2ã¯ã¡ã€ã³ã®äžå®å®ãªãã©ã³ããšããŠéçºãããŠããŸããããD1ã¯äžäœäºææ§ãå£ã倿ŽãçŠæ¢ãããŠããå®å®ãããã©ã³ãã«ãªããŸããã ãŸããD2ã§ã¯ãPhobosãšTangoã®éäºææ§ãçãããããã¹ãŠã®æ©èœãåèšèšãããåå¥ã®ãšã³ãã£ãã£Druntimeã«ãªããŸããã ãã®ãããPhobosãšTangoã¯ã©ã¡ããDruntimeã䜿çšããå®å šã«äºææ§ããããŸãã ç«¶åã¯ãããããŸããã
ã©ã¡ãã䜿çšãã䟡å€ããããŸããïŒ ã¿ã³ãŽæ©èœã«å¯Ÿããç¹å®ã®ããŒãºããªãã£ãå Žåããã©ãã¹ã ããã¯ãããããããŸãããããã©ãã¹ã¯ãŸã çã®æšæºã©ã€ãã©ãªã§ãã
Tangoãå©çšã§ããçç±ã¯äœã§ããïŒ è¿œå ã®ã©ã€ãã©ãªãšåãçç±ïŒãªãã·ã§ã³ãšããŠãã®èšèšã奜ãå Žåã Tangoã¯ã¹ã¿ã€ã«çã«Javaã«éåžžã«äŒŒãŠããããã®èšèªããç§»è¡ãã人ã«å¥œãããããšããããŸãã ãŸãã¯ããã©ãã¹ã§ã¯äžè¬çã§ã¯ãªãã¿ã³ãŽã®äœããå¿ èŠã§ãããïŒ ããšãã°ãTangoã¯äžçæéã® XMLããŒãµãŒãå®è£ ããŠããŸã ã åæã«ãPhobosã®XMLã¢ãžã¥ãŒã«ã¯ãæåããåãçŽãããæžãæããããã¹ããã®ã®1ã€ã§ãã ïŒå¿é ããªãã§ããã©ãã¹ã®æ®ãã®éšåã¯åçŽã«è±ªè¯ã§ããïŒ
D-ãªãŒãã³ãœãŒã¹
Dã«ã¯3ã€ã®äž»èŠãªã³ã³ãã€ã©ããããŸãã
- DMDïŒåç §ã³ã³ãã€ã©ãŒ
- GDCïŒGCCããã¯ãšã³ãã䜿çšããã¡ã€ã³GCCããã±ãŒãžã«å«ãŸããããã»ã¹äž
- LDCïŒLLVMã䜿çš
GDCãšLDCã¯æããªã¢ã«ãªãªãŒãã³ãœãŒã¹ã§ãããäžéšã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãªããžããªã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ã«ãå«ãŸããŠããŸãã æšæºã©ã€ãã©ãªãšã©ã³ã¿ã€ã ãPhobosããã³Druntimeã¯ãOpen Source Initiativeã«ãã£ãŠæ¿èªãããBoostã©ã€ã»ã³ã¹ã®äžã§ã©ã€ã»ã³ã¹ãããŠããŸãã
ãã¹ãŠã®DMDãœãŒã¹ã¯Githubã§å ¥æã§ããŸã ã LDCãšãšãã«GDCã§ã䜿çšãããããã³ããšã³ãã«ã¯ãOSIæ¿èªã®Artisticã©ã€ã»ã³ã¹ãšGPLã©ã€ã»ã³ã¹ããããŸãã
æ£åŒã«ã¯ãªãŒãã³ãœãŒã¹ã§ã¯ãªãå¯äžã®ãã®ã¯ãDMDããã¯ãšã³ãã§ãã ãã®çç±ã¯ãSymantecã«ãã£ãŠäžåºŠã«ã©ã€ã»ã³ã¹ããããã®ã䜿çšãããWalterãã©ã€ã»ã³ã¹ã倿Žããããšã¯ã§ããªãããã§ãã ãããããœãŒã¹ã³ãŒãã¯å ¬éãããŠããããã«ãªã¯ãšã¹ãã¯ãã€ã§ãæè¿ããŸãã åºãããå¿é ã§ããïŒ ããã ãã®äŸ¡å€ã¯ãããŸããã ãŠã©ã«ã¿ãŒèªèº«ã«èããŠãã ãã ã ã©ã€ã»ã³ã¹ã¯åœŒã«èš±å¯ãæ±ããããšã矩åä»ããŠããŸãïŒç¿»èš³è ã®æ³šæïŒãã®ã³ããŒã©ã€ãã£ã³ã°äºä»¶ããã·ã¢èªã§ã©ã®ããã«å®åŒåãããã¢ããã€ã¹ããã®ã¯ããããã§ãïŒããããã¯çŽç²ã«æè¡çãªåœ¢åŒã§ãã 圌ã«èããŠãèš±å¯ãåŸãŠãã ããã æåŠã®åäžã®ã±ãŒã¹ã¯ãŸã ç¥ãããŠããªãã ãããŠãã¯ããå¿ããªãã§ãã ãããããã¯DMDããŸãã¯ãããããã¯ãšã³ãDMDã«ã®ã¿é©çšãããŸãã ãã以å€ã¯ãGDCãšLDCã®2ã€ã®ãã«ãã©ãŒãããã³ã³ãã€ã©ãå«ãããã¹ãŠããªãŒãã³ãœãŒã¹ã§ãã
D-ãªãŒãã³ãœãŒã¹ã åžžã«ããã§ãã£ãããã§ã¯ãããŸããããééããªãä»ã§ãã
Dã¯æåã¡ã¢ãªç®¡çãèš±å¯ããŸã
Dã¯ããã©ã«ãã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒãæ³å®ããŠããŸããã 管ç ã 眮æ ã å®å šã«åé€ ããŸãã¯æåã¡ã¢ãªç®¡çã䜿çšã§ããªããšããæå³ã§ã¯ãããŸããã
Dã«ã¯ãã€ã³ã¿ãŒïŒ@safeã¢ãŒãã§ã®ã¡ã¢ãªã»ãŒãæäœã«ããå¶éããããŸãïŒãšCã§ã®çŽæ¥é¢æ°åŒã³åºãããããŸããmalloc / freeã¯èªç±ã«äœ¿çšã§ããemplaceã䜿çšããŠååŸããã¡ã¢ãªã«äœã§ãé 眮ã§ããŸãã ãŸãã¯ãã¹ã¿ãã¯ãããã¹ã³ãŒãã¯ã©ã¹ã詊ããŠãã ããã ãŸãã¯åç §ã«ãŠã³ã¿ãŒ ã ãŸãã¯RAII ã ããã«ãçŸåšéçºäžã®ããã»ã¹ã«ã¯ãã«ã¹ã¿ã ã¢ãã±ãŒã¿ãŒã®ã·ã¹ãã ããããŸãã
éçåä»ãã¯éçç£çãªæå³ã§ã¯ãããŸãã
Dã¯éçã«åä»ããããèšèªã§ãããããã«ããC ++ãŸãã¯Javaã¹ã¿ã€ã«ã«é¢é£ä»ããããããšã¯ãããŸããã
% cat funWithRanges.d import std.algorithm; import std.range; import std.stdio; void main() { // All done lazily: auto squares = sequence!((a,n) => n^^2)(0); auto fibonacci = recurrence!((a,n) => a[n-1] + a[n-2])(1, 1); auto fibEven = fibonacci.filter!(x => x%2 == 0)(); foreach(v; zip(squares, fibonacci, fibEven).take(6)) writeln(v[0], "\t", v[1], "\t", v[2]); } % rdmd funWithRanges.d 0 1 2 1 1 8 4 2 34 9 3 144 16 5 610 25 8 2584
Dã¯ææ ®æ·±ã广çã§ããã ãã§ãªãã å®å šã§æ£ããã§ãã
䞊åèšç® ã åçŽãªãã³ãã¬ãŒã ã ã¡ã¿ããã°ã©ãã³ã°ããŒã« ãããã³äžè¬çã« ãªã£ã ããŸããŸãª ãŠãŒãã£ãªãã£ã® ããã«ããã䟿å©ãªãã®ã远å ããŸãã