මම ඩී ගැන වැඩි යමක් නොදනිමි, නමුත් මා දන්නා බොහෝ සී ++ ක්රමලේඛකයින් එයට බෙහෙවින් අකමැති වන අතර, මම පෞද්ගලිකව එකඟ විය යුතුය- මම ඩී පෙනුමට කැමති නැති අතර වඩාත් සමීප එකක් නොගනු ඇත.
ඩී වැඩි කම්පනයක් ලබා නොගන්නේ මන්දැයි වටහා ගැනීම සඳහා, ඔබ C ++ වෙත මිනිසුන් ආකර්ෂණය කරන්නේ කුමක් දැයි තේරුම් ගැනීමෙන් ආරම්භ කළ යුතුය. වචනයෙන් කියනවා නම්, අංක එකේ හේතුව පාලනයයි. ඔබ C ++ හි වැඩසටහන් කරන විට, එවිට ඔබට ඔබේ වැඩසටහන පාලනය කළ හැකිය. සම්මත පුස්තකාලය ප්රතිස්ථාපනය කිරීමට අවශ්යද? ඔයාට පුළුවන්. අනාරක්ෂිත පොයින්ටර් කැස්ට් කිරීමට අවශ්යද? ඔයාට පුළුවන්. නිරවද්යතාවය උල්ලං to නය කිරීමට අවශ්යද? ඔයාට පුළුවන්. මතක විබෙදුම ප්රතිස්ථාපනය කිරීමට අවශ්යද? ඔයාට පුළුවන්. අමු මතකය එහි වර්ගය නොසලකා පිටපත් කිරීමට අවශ්යද? ඔබට ඇත්තටම අවශ්ය නම්. බහු ක්රියාත්මක කිරීම් වලින් උරුම වීමට අවශ්යද? එය ඔබේ අවමංගල්යයයි. නිරය, ඔබට බොහම් එකතු කරන්නා වැනි කසළ එකතු කිරීමේ පුස්තකාල පවා ලබා ගත හැකිය. එවිට ඔබට කාර්ය සාධනය වැනි ගැටළු ඇති අතර එය පාලනය සමීපව අනුගමනය කරයි- ක්රමලේඛකයෙකුට වැඩි පාලනයක් ඇති වන තරමට ඔහුට තම වැඩසටහන වඩාත් ප්රශස්ත කළ හැකිය.
කුඩා පර්යේෂණයක් කර එය අත්හදා බැලූ පුද්ගලයන් කිහිප දෙනෙකු සමඟ කතා කරන විට මා දුටු කරුණු කිහිපයක් මෙන්න:
ඒකාබද්ධ වර්ගයේ ධූරාවලිය. C ++ භාවිතා කරන්නන් උරුමය භාවිතා කරන්නේ ඉතා කලාතුරකිනි, බොහෝ C ++ ක්රමලේඛකයින් සංයුතියට වැඩි කැමැත්තක් දක්වයි, සහ වර්ග සම්බන්ධ කළ යුත්තේ උරුමය හරහා පමණි. එසේ කිරීමට හොඳ හේතුවක් තිබේ නම් පමණි. වස්තුව පිළිබඳ සංකල්පය සෑම වර්ගයක්ම සම්බන්ධ කිරීමෙන් මෙම මූලධර්මය දැඩි ලෙස උල්ලං lates නය කරයි. ඊට අමතරව, එය C ++ හි මූලික මූලධර්මවලින් එකක් උල්ලං ting නය කරයි- ඔබ භාවිතා කරන්නේ ඔබට අවශ්ය දේ පමණි. වස්තුවෙන් උරුම වීම පිළිබඳ තේරීමක් ලබා නොදීම සහ ඒ සමඟ යන පිරිවැය, ක්රමලේඛකයාට තම වැඩසටහන පාලනය කිරීමට අනුව භාෂාවක් ලෙස C ++ නියෝජනය කරන දෙයට වඩා දැඩි ලෙස විරුද්ධ වේ.
කාර්යයන් සහ නියෝජිතයින්ගේ ගැටළු ගැන මම අසා ඇත්තෙමි. පෙනෙන විදිහට, ඩී හි ක්රියාකාරීත්වයන් සහ නියෝජිතයන් යන දෙකම ධාවන කාල ඇමතුම් කළ හැකි ශ්රිත වර්ග ලෙස ඇති අතර ඒවා එක හා සමාන නොවන නමුත් ඒවා එකිනෙකට හුවමාරු කළ හැකි හෝ ... යමක් තිබේද? මගේ මිතුරා ඔවුන් සමඟ ගැටලු කිහිපයක් ඇති කළේය. මෙය නියත වශයෙන්ම C ++ වෙතින් පහත හෙලීමකි, එය දැන් ඇති std::function
අතර ඔබ අවසන් කර ඇත.
එවිට ඔබට අනුකූලතාවයක් ඇත. D විශේෂයෙන් C ++ සමඟ නොගැලපේ. මම කිව්වේ, කිසිම භාෂාවක් සී ++ සමඟ නොගැලපේ, එයට මුහුණ දෙමු, සී ++ / සීඑල්අයි හැර, එය යම් ආකාරයක වංචාවකි, නමුත් ඇතුල්වීමට බාධකයක් ලෙස, එය සඳහන් කළ යුතුය.
එවිට තවත් කරුණු කිහිපයක් තිබේ. උදාහරණයක් ලෙස, විකිපීඩියා ප්රවේශය කියවන්න.
import std.metastrings;
pragma(msg, Format!("7! = %s", fact_7));
pragma(msg, Format!("9! = %s", fact_9));
printf
gets
පැරණි සී ස්ටෑන්ඩර්ඩ් පුස්තකාලය වැනි විශාල ගැටළු ඇති එකම පවුල තුළ මෙතෙක් සැලසුම් කර ඇති වඩාත්ම ආරක්ෂිත කාර්යයන්ගෙන් එකකි . ඔබ එය Stack Overflow හි සොයන්නේ නම්, එය වැරදි ලෙස භාවිතා කිරීම සම්බන්ධ බොහෝ ප්රශ්න ඔබට හමුවනු ඇත. මූලික වශයෙන්, DRY උල්ලංprintf
violation නය කිරීමකි- ඔබ ආකෘතියේ නූල් වර්ගය ලබා දෙන අතර, ඔබ එය තර්කයක් දෙන විට එය නැවත ලබා දෙයි. DRY උල්ලං violation නය කිරීමක් නම්, ඔබ එය වැරදියට තේරුම් ගන්නේ නම්, ඉතා නරක දේ සිදුවනු ඇත- කියන්න, ඔබ යතුරු ලියනය 16-බිටු නිඛිලයක සිට බිටු 32 දක්වා වෙනස් කළහොත්. එය කිසිසේත් දීර් able කළ නොහැකිය- සෑම කෙනෙකුම තමන්ගේම ආකෘති පිරිවිතරයන් නිර්මාණය කළහොත් කුමක් සිදුවේදැයි සිතා බලන්න. C ++ හි අයෝස්ට්රීම් මන්දගාමී විය හැකි අතර, ඔවුන්ගේ ක්රියාකරු තෝරා ගැනීම විශාලතම නොවිය හැකි අතර, ඔවුන්ගේ අතුරු මුහුණත වැඩ භාවිතා කළ හැකි නමුත් ඒවා මූලික වශයෙන් ආරක්ෂිත බව සහතික කර ඇති අතර DRY උල්ලං is නය නොවන අතර ඒවා පහසුවෙන් දීර්. කළ හැකිය. මෙය කිව හැකි දෙයක් නොවේ printf
.
බහු උරුමයක් නොමැත. ඉතා තියෙන්නේ නැහැ C ++ ක්රමයක්. C ++ ක්රමලේඛකයින් ඔවුන්ගේ වැඩසටහන පිළිබඳ පූර්ණ පාලනයක් අපේක්ෂා කරන අතර ඔබට උරුම කර ගත නොහැකි දේ බලාත්මක කරන භාෂාව එම මූලධර්මය උල්ලං is නය කිරීමකි. ඊට අමතරව, එය උරුමය (ඊටත් වඩා) බිඳෙනසුලු කරයි, මන්ද ඔබ පෙරනිමි ක්රියාත්මක කිරීමක් හෝ යමක් සැපයීමට අවශ්ය නිසා ඔබ අතුරු මුහුණතක සිට පන්තියකට වර්ගයක් වෙනස් කරන්නේ නම්, හදිසියේම ඔබේ පරිශීලකයාගේ සියලු කේත කැඩී ඇත. එය හොඳ දෙයක් නොවේ.
තවත් උදාහරණයක් වන්නේ string
සහ wstring
. C ++ හි දැනටමත් ඒවා අතර පරිවර්තනය වීමට සිදුවීම තරමක් වේදනාකාරී වන අතර මෙම පුස්තකාලය යුනිකෝඩ් සඳහා සහය දක්වයි, මෙම පැරණි C පුස්තකාලය පමණක් භාවිතා කරයි const char*
, ඔබට අවශ්ය නූල් තර්ක වර්ගය අනුව එකම ශ්රිතයේ විවිධ අනුවාදයන් ලිවීමට සිදුවේ. උදාහරණයක් ලෙස, වින්ඩෝස් ශීර්ෂයන්, ඔබේම කේතයට බොහෝ විට බාධා කළ හැකි ගැටළුව සමඟ සාර්ථකව කටයුතු කිරීම සඳහා අතිශයින්ම කුපිත කරන මැක්රෝස් ඇත. dstring
මිශ්රණයට එකතු කිරීමෙන් තත්වය තවත් නරක අතට හැරෙනු ඇත, දැන් නූල් වර්ග දෙකක් වෙනුවට, ඔබට තුනක් කළමනාකරණය කළ යුතුය. නූල් වර්ග එකකට වඩා තිබීම නඩත්තු වේදනාවන් වැඩි කිරීමටත්, නූල් සමඟ කටයුතු කරන පුනරාවර්තන කේත හඳුන්වා දීමටත් හේතු වේ.
ස්කොට් මේයර්ස් මෙසේ ලියයි.
D යනු නවීන මෘදුකාංග සංවර්ධනයේ අභියෝගයන්ට මුහුණ දීම සඳහා ක්රමලේඛකයන්ට උපකාර කිරීම සඳහා ගොඩනගා ඇති ක්රමලේඛන භාෂාවකි. එය සිදු කරනුයේ නිරවද්ය අතුරුමුහුණත් හරහා අන්තර් සම්බන්ධිත මොඩියුලයන් පෝෂණය කිරීමෙනි, තදින් ඒකාබද්ධ වූ ක්රමලේඛන පරාමිතීන්ගේ සම්මේලනය, භාෂාව බලාත්මක කරන ලද නූල් හුදකලා කිරීම, මොඩියුලර් වර්ගයේ ආරක්ෂාව, කාර්යක්ෂම මතක ආකෘතියක් සහ තවත් දේ.
භාෂාව බලාත්මක කරන ලද නූල් හුදකලා වීම වැඩි නොවේ. C ++ ක්රමලේඛකයින් ඔවුන්ගේ වැඩසටහන් පිළිබඳ පූර්ණ පාලනයක් අපේක්ෂා කරන අතර යමක් බල කරන භාෂාව අනිවාර්යයෙන්ම වෛද්යවරයා නියෝග කළ දේ නොවේ.
සම්පාදක-කාල නූල් හැසිරවීම ගැන ද මම සඳහන් කරන්නෙමි. සංයුක්ත වේලාවේදී ඩී කේතය අර්ථ නිරූපණය කිරීමේ හැකියාව D ට ඇත. මෙය ප්ලස් නොවේ. සියළුම ප්රවීණ C ++ ක්රමලේඛකයින් විසින් හොඳින් දන්නා C හි සාපේක්ෂව සීමිත පූර්ව සකසනය නිසා ඇති වන දැවැන්ත හිසරදය සලකා බලන්න, ඉන්පසු මෙම අංගය කෙතරම් දරුණු ලෙස අපයෝජනයට ලක් වේදැයි සිතා බලන්න. සම්පාදක වේලාවේදී ඩී කේතය නිර්මාණය කිරීමේ හැකියාව විශිෂ්ටයි, නමුත් එය අර්ථකථන විය යුතුය , සින්ටැක්ටික් නොවේ.
ඊට අමතරව, ඔබට යම් ප්රතීකයක් අපේක්ෂා කළ හැකිය. D හි කසළ එකතු කිරීමක් ඇති අතර, C ++ ක්රමලේඛකයින් ජාවා සහ සී # වැනි භාෂාවන් සමඟ සම්බන්ධ වන අතර ඒවා දර්ශනවාදයට තරමක් directly ජුව විරුද්ධ වන අතර සින්ටැක්ටික් සමානකම් ද ඒවා මතකයට නංවනු ඇත. මෙය අනිවාර්යයෙන්ම වෛෂයිකව යුක්ති සහගත නොවේ, නමුත් එය නිසැකවම සැලකිල්ලට ගත යුතු දෙයකි.
මූලික වශයෙන්, එය C ++ ක්රමලේඛකයන්ට දැනටමත් කළ නොහැකි තරම් ප්රමාණයක් ඉදිරිපත් නොකරයි. සමහර විට ඩී හි සාධකීය මෙට්රොග්රෑම් ලිවීම පහසු විය හැකි නමුත් අපට දැනටමත් සී ++ හි සාධකීය මෙට්රොග්රෑම් ලිවිය හැකිය . සමහර විට ඩී හි ඔබට සම්පාදක කාල කිරණ-ට්රේසරයක් ලිවිය හැකිය , නමුත් කිසිවෙකුට එය කෙසේ හෝ කිරීමට අවශ්ය නැත. C ++ දර්ශනයේ මූලික උල්ලං lations නයන් හා සසඳන විට, D හි ඔබට කළ හැකි දේ විශේෂයෙන් සැලකිය යුතු නොවේ.
මේ දේවල් මතුපිට ගැටළු පමණක් වුවද, මතුපිටින් ඩී ඇත්ත වශයෙන්ම සී ++ මෙන් නොපෙනීම බොහෝ සී ++ ක්රමලේඛකයින් ඩී වෙත සංක්රමණය නොවීමට හොඳ හේතුවක් විය හැකි බව මට හොඳටම විශ්වාසයි. සමහර විට ඩී වඩා හොඳ රැකියා ප්රචාරණයක් කළ යුතුය.