C හි සම්පාදකයා ලියා ඇති භාෂාවක් C ට වඩා වේගවත් වන්නේ කෙසේද?


178

ජූලියාගේ වෙබ් පිටුව දෙස බැලීමෙන් ඔබට ඇල්ගොරිතම කිහිපයක් හරහා භාෂා කිහිපයක මිණුම් සලකුණු දැකිය හැකිය (වේලාවන් පහත දැක්වේ). සම්පාදකයෙකු සහිත භාෂාවක් මුලින් C හි ලියා ඇති අතර, C කේතය අභිබවා යන්නේ කෙසේද?

රූප විස්තරය මෙහි ඇතුළත් කරන්න රූපය: C ට සාපේක්ෂව මිණුම් සලකුණු වේලාවන් (කුඩා වඩා හොඳය, C කාර්ය සාධනය = 1.0).



389
මිනිසා විසින් සාදන ලද වස්තුවක් වන මෝටර් රථයක් මිනිසෙකුට වඩා වේගයෙන් ගමන් කරන්නේ කෙසේද?
බබු

19
වගුවට අනුව, පයිතන් සී ට වඩා මන්දගාමී ය. ඔබේ ප්‍රියතම සී සම්පාදකයාට සමාන කේතයක් ජනනය කරන පයිතන්හි සී සම්පාදකයෙකු ලිවිය නොහැකි යැයි ඔබ සිතනවාද? කෙසේ වෙතත් එය ලියා ඇත්තේ කුමන භාෂාවෙන්ද?
කාර්ස්ටන් එස්

6
බබුගේ ප්‍රකාශය ස්ථානගතව පැවතුනි, නමුත් මම හිතන්නේ නැහැ අපට එකම අනුවාද කිහිපයක් අවශ්‍ය බව.
රෆායෙල්

14
ආශ්‍රිත සිතුවිල්ලක්. බොහෝ සම්පාදකයින් ස්වයං සත්කාරක වේ , එයින් අදහස් කරන්නේ ඒවා ඔවුන්ගේම භාෂාවෙන් ලියා ඇති බවයි (බොහෝ විට එක්රැස්වීමක්) සහ එහි පෙර අනුවාදය සමඟ සම්පාදනය කර ඇත. එහෙත් සම්පාදකයින් වඩා හොඳ හා වේගවත් වේ. මනස පහර .
ෂ්වර්න්

Answers:


267

සම්පාදකයා ක්‍රියාත්මක කිරීම සහ සම්පාදකයාගේ ප්‍රතිදානය අතර අවශ්‍ය සම්බන්ධතාවයක් නොමැත. ඔබ, සිය වඩාත් පොදු නිර්මාණයන් ඉතා මන්දගාමී වන අතර, ඒ සම්පාදක ප්රතිදානය ඉතා ප්රචලිත කෙරෙන යන්ත්රය සී අභිබවමින් මෙම සම්පාදක ම සමත් කේතය හැකි නිසා, ක්රියාත්මක කිරීමට දීර්ඝ කාලයක් ගන්නා බව python, රූබි වැනි භාෂාවෙන් සම්පාදක ලිවීමට හැකි එහිකේතය මන්දගාමී භාෂාවෙන් ලියා ඇත. (වඩාත් නිවැරදිව කිවහොත්, මන්දගාමීව ක්‍රියාත්මක වන භාෂාවකින් ලියා ඇත. රෆායෙල් අදහස් දැක්වීමක දී පෙන්වා දෙන පරිදි භාෂා ඇත්තෙන්ම සහජයෙන්ම වේගවත් හෝ මන්දගාමී නොවේ. මම මෙම අදහස පහතින් විස්තාරණය කරමි.) සම්පාදනය කරන ලද වැඩසටහන එහි තරම් වේගවත් වනු ඇත ෆෝට්රාන් සම්පාදකයෙකු මෙන් එකම යන්ත්‍ර කේතයක් ජනනය කරන පයිතන්හි අපට සම්පාදකයෙකු ලිවිය හැකි අතර අපගේ සම්පාදනය කරන ලද වැඩසටහන් ෆෝට්රාන් තරම් වේගවත් වනු ඇත, ඒවා සම්පාදනය කිරීමට බොහෝ කාලයක් ගතවනු ඇත.

අපි පරිවර්තකයෙකු ගැන කතා කරන්නේ නම් එය වෙනස් කතාවකි. ඔවුන් අර්ථ නිරූපණය කරන වැඩසටහන ක්‍රියාත්මක වන අතරතුර පරිවර්තකයන් ක්‍රියාත්මක විය යුතුය, එබැවින් පරිවර්තකය ක්‍රියාත්මක කරන භාෂාව සහ අර්ථකථන කේතයේ ක්‍රියාකාරිත්වය අතර සම්බන්ධයක් ඇත. පරිවර්ථකයා ක්‍රියාත්මක කරන භාෂාවට වඩා වේගයෙන් ක්‍රියාත්මක වන පරිවර්ථන භාෂාවක් සෑදීම සඳහා යම්කිසි දක්ෂ ධාවන කාල ප්‍රශස්තිකරණයක් අවශ්‍ය වන අතර අවසාන කාර්ය සාධනය රඳා පවතින්නේ කේත කැබැල්ලක් මේ ආකාරයේ ප්‍රශස්තිකරණයට කොතරම් පහසුද යන්න මතය. ජාවා සහ සී # වැනි බොහෝ භාෂා, දෙමුහුන් ආකෘතියක් සමඟ ධාවන වේලාවන් භාවිතා කරන අතර එය පරිවර්තකයන්ගේ සමහර ප්‍රතිලාභ සම්පාදකයින්ගේ සමහර ප්‍රතිලාභ සමඟ ඒකාබද්ධ කරයි.

ස්ථිර උදාහරණයක් ලෙස, අපි පයිතන් දෙස වඩාත් සමීපව බලමු. පයිතන්ට ක්‍රියාත්මක කිරීම් කිහිපයක් තිබේ. වඩාත් සුලභ වන්නේ සී. හි ලියා ඇති බයිටෙකෝඩ් පරිවර්තකය වන සීපයිතන් ය. පයිපයි ද ඇත. එය පයිතන්හි විශේෂිත උපභාෂාවකින් ආර්පයිතන් ලෙස ලියා ඇති අතර එය ජේවීඑම් වැනි තරමක් දෙමුහුන් සම්පාදන ආකෘතියක් භාවිතා කරයි. PyPy බොහෝ මිණුම් සලකුණු වල CPython වලට වඩා වේගවත් ය; ධාවන වේලාවේදී කේතය ප්‍රශස්ත කිරීම සඳහා එය සියලු ආකාරයේ විස්මිත උපක්‍රම භාවිතා කරයි. කෙසේ වෙතත්, PyPy ධාවනය කරන Python භාෂාව හරියටම CPython ධාවනය කරන එකම Python භාෂාව වන අතර එය ක්‍රියාකාරීත්වයට බලපාන්නේ නැති වෙනස්කම් කිහිපයක් හැර.

අපි ෆෝට්රාන් සඳහා පයිතන් භාෂාවෙන් සම්පාදකයෙකු ලියා ඇතැයි සිතමු. අපගේ සම්පාදකයා GFortran මෙන් එකම යන්ත්‍ර කේතය නිපදවයි. දැන් අපි ෆෝට්රාන් වැඩසටහනක් සම්පාදනය කරමු. අපට අපගේ සම්පාදකය CPython මුදුනේ ධාවනය කළ හැකිය, නැතහොත් අපට එය PyPy මත ධාවනය කළ හැකිය, මන්ද එය Python හි ලියා ඇති අතර මෙම ක්‍රියාත්මක කිරීම් දෙකම එකම Python භාෂාවෙන් ක්‍රියාත්මක වේ. අපට සොයාගත හැකි දෙය නම්, අපි අපගේ සම්පාදකය CPython මත ධාවනය කරන්නේ නම්, එය PyPy මත ධාවනය කර, පසුව එකම Fortran ප්‍රභවය GFortran සමඟ සම්පාදනය කළහොත්, අපට එකම යන්ත්‍ර කේතය තුන් වරක්ම ලැබෙනු ඇත, එබැවින් සම්පාදනය කරන ලද වැඩසටහන සැමවිටම ක්‍රියාත්මක වේ එකම වේගයකින්. කෙසේ වෙතත්, එම සම්පාදනය කරන ලද වැඩසටහන නිෂ්පාදනය කිරීමට ගතවන කාලය වෙනස් වේ. CPython බොහෝ විට PyPy ට වඩා වැඩි කාලයක් ගතවනු ඇති අතර, PyPy බොහෝ විට GFortran ට වඩා වැඩි කාලයක් ගතවනු ඇත, නමුත් සියල්ලම එකම යන්ත්‍ර කේතය අවසානයේ ප්‍රතිදානය කරනු ඇත.

ජූලියා වෙබ් අඩවියේ මිණුම් සලකුණු වගුව පරිලෝකනය කිරීමෙන්, පරිවර්තකයන් මත ධාවනය වන කිසිදු භාෂාවකට (පයිතන්, ආර්, මැට්ලැබ් / ඔක්ටේව්, ජාවාස්ක්‍රිප්ට්) සී පරාජය කරන කිසිදු මිණුම් දණ්ඩක් නොමැති බව පෙනේ. මෙය සාමාන්‍යයෙන් මා දැකීමට බලාපොරොත්තු වන දෙයට අනුරූප වේ, පයිතන්ගේ අතිශයින්ම ප්‍රශස්තිකරණය කළ නැම්පි පුස්තකාලය (සී සහ ෆෝට්රාන් වලින් ලියා ඇත) සමඟ ලියා ඇති කේතය මට සිතාගත හැකි වුවද, ඒ හා සමාන කේතයක් ක්‍රියාත්මක කළ හැකි ය. C ට සමාන හෝ වඩා හොඳ භාෂා සම්පාදනය කරනු ලැබේ (ෆෝට්රාන්, ජූලියා ) හෝ අර්ධ සම්පාදනය සහිත දෙමුහුන් ආකෘතියක් භාවිතා කරයි (ජාවා සහ බොහෝ විට LuaJIT). පයිපී ද දෙමුහුන් ආකෘතියක් භාවිතා කරයි, එබැවින් සීපීටෝන් වෙනුවට අපි එකම පයිතන් කේතය පයිපයි මත ධාවනය කළහොත්, ඇත්ත වශයෙන්ම එය සමහර මිණුම් සලකුණු මත සී පරාජය කරන බව අපට පෙනේ.


10
මෙය පුදුමාකාර පිළිතුරකි. ඉතා පැහැදිලි, තේරුම්ගත හැකි සහ තොරතුරු සහිත ය. එය ලිවීමට කාලය ගැනීම ගැන ඔබට බොහෝම ස්තූතියි!
ඇලෙක්ස් ඒ.

7
ජාවාස්ක්‍රිප්ට් සහ ජාවා යන දෙකම JIT සම්පාදකයෙකු සමඟ ධාවනය වන නමුත් ජාවාට එක් පරීක්ෂණයක් ඇති අතර එය වේගවත් වේ. සී. ධාවන කාල / සම්පාදකය වේගයෙන් ධාවනය වීමට ප්‍රධානතම හේතුව වන්නේ වැඩි තොරතුරු ලබා ගත හැකි වීමයි. සී / සී ++ සම්පාදකයින්ට කේතය ප්‍රශස්තිකරණය කළ හැකිය (සාමාන්‍යයෙන්) යමෙකුට එකලස් කිරීම අතින් ලියන විට, සම්පාදකයාට වැඩි තොරතුරු ඇති බැවින්. ෂුවර්, න්යාය පුද්ගලයා වඩා හොඳ එකලස් කේතය ලිවීමට හැකි, නමුත් එම වැඩි දැනුම සහ කුසලතා අවශ්ය නම් බොහෝ මිනිසුන් භාෂා මත එහි ධාවනය වන නිශ්චිත යන්ත්රය සඳහා උපරිම ඵල ලබා ගැනීම සඳහා හැකි වීම, ඊටත් වඩා මේ පුළුල් කළ හැකි have.JIT
Programmdude

සම්පාදකයා කරන ප්‍රශස්තිකරණය සලකා බැලිය යුතු එක් වැදගත් දෙයකි. සැබවින්ම ස්මාර්ට් සම්පාදකයෙකු විසින් වැඩසටහන කෘතිම මිණුම් දණ්ඩක් බව හඳුනාගෙන, සියලු කේතයන් හුදෙක් ප්‍රශස්තිකරණය කර, අපේක්ෂිත ප්‍රතිදානය නිර්මාණය කරයි.
ghellquist

heghellquist ෂුවර්, මිණුම් ලකුණ කෘතිම නම් සහ සම්පාදකයා ප්‍රමාණවත් නම්. එය සම්පාදකයාගේ ක්‍රියාත්මක කිරීමේ භාෂාවට directly ජුව හෝ ward ජුව සම්බන්ධ නොවේ, නමුත් මම එය මෙහි සඳහන් නොකළෙමි.
tsleyson

98

මිනිසෙකු විසින් සාදන ලද යන්ත්‍රයක් මිනිසෙකුට වඩා ශක්තිමත් වන්නේ කෙසේද? මෙය හරියටම එකම ප්‍රශ්නයයි.

පිළිතුර නම්, සම්පාදකයාගේ ප්‍රතිදානය රඳා පවතින්නේ එම සම්පාදකයා විසින් ක්‍රියාත්මක කරන ලද ඇල්ගොරිතම මත මිස එය ක්‍රියාත්මක කිරීමට භාවිතා කරන භාෂාව මත නොවේ. ඉතා කාර්යක්ෂම කේතයක් නිපදවන ඉතා මන්දගාමී, අකාර්යක්ෂම සම්පාදකයෙකු ඔබට ලිවිය හැකිය. සම්පාදකයකුට විශේෂ දෙයක් නැත: එය කිසියම් ආදානයක් ගෙන යම් ප්‍රතිදානයක් නිපදවන වැඩසටහනකි.


33
චෙස් වැඩසටහනක් එය ලියූ මිනිසා පරාජය කරන්නේ කෙසේද?
Thorbj Rrn Ravn Andersen

25
වඩා හොඳ පියවරයන් ගැනීමෙන්! <rimshot>
ටෝනි එනිස්

1
පරිගණකයකට මිනිසෙකුට චෙස් ක්‍රීඩාවේදී පරාජය කළ නොහැක්කේ මන්දැයි පෙන් ගිලෙට්ගේ පිළිතුර: "බොක්සිං තරඟයකදී ජීඊ විසින් නිර්මාණය කරන ලද රොබෝවක් මිනිසෙකුට අහිමි වේ යැයි ඔබ අපේක්ෂා කරනවාද?"
ඩේව් කාන්ටර්

88

පොදු උපකල්පනයකට එරෙහිව එක් කරුණක් ඉදිරිපත් කිරීමට මට අවශ්‍යය, එනම් මගේ අදහස අනුව, රැකියාවක් සඳහා මෙවලම් තෝරාගැනීමේදී හානිකර වීමේ වරදට එය වැරදිය.

මන්දගාමී හෝ වේගවත් භාෂාවක් වැනි දෙයක් නොමැත. ¹

CPU වෙත යන ගමනේදී ඇත්ත වශයෙන්ම යමක් කරමින්, පියවර රාශියක් ඇත.

  1. නිශ්චිත කුසලතා ඇති අවම වශයෙන් එක් ක්‍රමලේඛකයෙකු වත්.
  2. ඔවුන් වැඩසටහන් කරන (විධිමත්) භාෂාව ("ප්‍රභව කේතය").
  3. ඔවුන් භාවිතා කරන පුස්තකාල.
  4. ප්‍රභව කේතය යන්ත්‍ර කේතයට පරිවර්ථනය කරන දෙයක් (සම්පාදකයින්, පරිවර්තකයන්).
  5. සමස්ත දෘඩාංග සැකැස්ම, උදා: සැකසුම් ඒකක ගණන සහ මතක ධූරාවලියේ පිරිසැලසුම.
  6. දෘඩාංග කළමනාකරණය කරන මෙහෙයුම් පද්ධතිය.
  7. CPU මත ප්‍රශස්තිකරණය.

සෑම අයිතමයක්ම ඔබට මැනිය හැකි සැබෑ ධාවන කාලයට දායක වේ, සමහර විට දැඩි ලෙස. විවිධ "භාෂා" විවිධ දේ කෙරෙහි අවධානය යොමු කරයි³.

උදාහරණ කිහිපයක් දීමට.

  • 1 එදිරිව 2-4 : සාමාන්‍ය සී ක්‍රමලේඛකයෙකු සාමාන්‍ය ජාවා ක්‍රමලේඛකයෙකුට වඩා නරක කේතයක් නිපදවීමට ඉඩ ඇත. එයට හේතුව සී හි ක්‍රමලේඛකයාට වැඩි වගකීම් ඇති බැවිනි .

  • 1/4 එදිරිව 7 : සී වැනි පහත් මට්ටමේ භාෂාවෙන්, ක්‍රමලේඛකයෙකු ලෙස ඔබට ඇතැම් CPU විශේෂාංග උපයෝගී කර ගත හැකිය . ඉහළ මට්ටමේ භාෂාවලින්, එය කළ හැක්කේ සම්පාදකයාට / පරිවර්තකයාට පමණි, ඔවුන් ඉලක්කගත CPU දන්නේ නම් පමණි .

  • 1/4 එදිරිව 5 : මතක ගෘහ නිර්මාණ ශිල්පය වඩාත් හොඳින් භාවිතා කිරීම සඳහා ඔබට මතක සැකැස්ම පාලනය කිරීමට අවශ්‍යද? සමහර භාෂාවන් ඔබට එය පාලනය කරයි, සමහර ඒවා නැත.

  • 2/4 එදිරිව 3 : අර්ථකථනය කරන ලද පයිතන් ඉතා මන්දගාමී ය, නමුත් විද්‍යාත්මක පරිගණකකරණය සඳහා ඉහළ ප්‍රශස්ත, දේශීයව සම්පාදනය කරන ලද පුස්තකාල සඳහා ජනප්‍රිය බන්ධන තිබේ . එබැවින් බොහෝ කාර්යයන් මෙම පුස්තකාල විසින් සිදු කරන්නේ නම්, පයිතන් හි සමහර දේවල් කිරීම අවසානයේ වේගවත් වේ.

  • 2 එදිරිව 4 : සම්මත රූබි පරිවර්තකය තරමක් මන්දගාමී ය. JRuby, අනෙක් අතට, ඉතා වේගවත් විය හැකිය. එකම භාෂාව වෙනත් සම්පාදකයෙකු / පරිවර්තකයෙකු භාවිතා කිරීම වේගවත් වේ.

  • 1/2 එදිරිව 4 : සම්පාදක ප්‍රශස්තිකරණය භාවිතා කරමින් සරල කේතය ඉතා කාර්යක්ෂම යන්ත්‍ර කේතයකට පරිවර්තනය කළ හැකිය.

අවසාන කරුණ නම්, ඔබ සොයාගත් මිණුම් ලකුණ එතරම් අර්ථවත් නොවේ, අවම වශයෙන් ඔබ ඇතුළත් කරන මේසයට තම්බා ගත් විටවත් නොවේ. ඔබ උනන්දුවක් දක්වන සියල්ලම ක්‍රියාත්මක වන කාලය වුවද, ක්‍රමලේඛකයාගේ සිට CPU දක්වා සම්පූර්ණ දාමය නියම කළ යුතුය ; ඕනෑම මූලද්‍රව්‍යයක් මාරු කිරීමෙන් ප්‍රති results ල නාටකාකාර ලෙස වෙනස් කළ හැකිය.

පැහැදිලිව කිවහොත්, මෙය ප්‍රශ්නයට පිළිතුරු සපයන්නේ සම්පාදකයා (පියවර 4) ලියා ඇති භාෂාව ප්‍රහේලිකාවෙහි එක් කොටසක් පමණක් වන අතර එය කිසිසේත්ම අදාළ නොවන බැවිනි (වෙනත් පිළිතුරු බලන්න).


  1. නිසැකව එහි සිටින අනිත් අයට වඩා ක්රියාත්මක කිරීමට වියදම් අධික බව භාෂා ලක්ෂණ. නමුත් විශේෂාංග වල පැවැත්මෙන් ඔබ ඒවා භාවිතා කළ යුතු යැයි අදහස් නොකෙරෙන අතර මිල අධික අංගයක් බොහෝ ලාභදායී ඒවා භාවිතා කිරීම ඉතිරි කර අවසානයේදී ගෙවිය යුතුය. (ධාවන වේලාවේදී මැනිය නොහැකි වෙනත් වාසි ඇත.)
  2. මම ඇල්ගොරිතම මට්ටම මඟහරින්නේ එය සැමවිටම අදාළ නොවන නිසා සහ බොහෝ විට භාවිතා කරන ක්‍රමලේඛන භාෂාවෙන් ස්වාධීන වන බැවිනි. නිදසුනක් ලෙස, විවිධ ඇල්ගොරිතමයන් විවිධ දෘඩාංග සඳහා වඩා හොඳ ණය ලබා දෙන බව මතක තබා ගන්න.
  3. මම හිතාමතාම මෙහි විවිධ සාර්ථක ප්‍රමිතික වෙත නොයමි: ධාවන කාල කාර්යක්ෂමතාව, මතක කාර්යක්ෂමතාව, සංවර්ධක කාලය, ආරක්ෂාව, ආරක්ෂාව, (ඔප්පු කළ හැකිද?) නිවැරදි බව, මෙවලම් සහාය, වේදිකා ස්වාධීනත්වය, ...

    සම්පූර්ණයෙන්ම වෙනස් අරමුණු සඳහා නිර්මාණය කර තිබුණද, එක් මෙට්‍රික් භාෂාවක් සංසන්දනය කිරීම විශාල වැරැද්දකි.


1
ab බාබු එකඟ විය, ඉතා හොඳ පැහැදිලි කිරීමක්. භාෂා අදාළ සම්පාදක / පරිවර්තකයන් සමඟ සංසන්දනය කිරීම සඳහා භාවිතා කළ හැකි වඩා හොඳ මෙට්‍රික් හෝ සමහර විට ප්‍රමිතික කට්ටලයක් යනු කුමක්ද? එසේම, සුළු නට්පික් එකක්: ඔබ පවසන්නේ "මන්දගාමී හෝ වේගවත් භාෂාවක් වැනි දෙයක් නැත" සහ "පයිතන් ඉතා මන්දගාමී වේ", නමුත් මම හිතන්නේ ඔබ අදහස් කළේ පයිතන් පරිවර්තකය.
StrugglingProgrammer

2
enbenalbrecht මගේ අදහස නම් එවැනි ප්‍රමිතිකවල එක හොඳ කට්ටලයක්වත් නොමැති බවයි. එය සෑම විටම වෙළඳාමකි. ඔබ උපාංග ධාවක ගොඩනඟන්නේ නම්, සියල්ලටම වඩා නිවැරදි වීමට ඔබට අවශ්‍යය. ඔබ ට්විටර් හි කොඳු නාරටිය ගොඩනඟන්නේ නම්, සියල්ලටම වඩා කාර්යක්ෂම වීමට ඔබට අවශ්‍යය. අවස්ථා දෙකේදීම, ඔබ මෙවලම් භාවිතා කරන අතර ඒ සඳහා ඉඩ දෙන පුද්ගලයින් කුලියට ගන්න. ඔබ ඇන්ඩ්‍රොයිඩ්-ඇප්-ටින්කර් ආරම්භයක් නම්, ඔබ ඔබේ ජනතාව දන්නා දේ සහ / හෝ ඔබේ වෙලඳපොලෙන් කාලය අවම කරන දේ භාවිතා කරයි. ඔබ ඇල්ගොරිතම උගන්වන්නේ නම්, ඔබට සංක්ෂිප්ත, පැහැදිලි සින්ටැක්ස් සහ කුඩා බොයිලේරු සහිත භාෂාවක් අවශ්‍ය වේ. සහ යනාදි. ප්‍රමුඛතා වෙනස් වන අතර අපට විවිධ භාෂා ඇත.
රෆායෙල්


23

ප්‍රශස්තිකරණය පිළිබඳ අමතක වූ දෙයක් මෙහි තිබේ.

සී. ෆෝට්රාන් අභිබවා යාම පිළිබඳ දීර් debate විවාදයක් පැවතුනි. විකෘති විවාදය පසෙකට දැමීම: එකම කේතය සී සහ ෆෝට්රාන් හි ලියා ඇත (පරීක්ෂකයින් සිතූ පරිදි) සහ එකම දත්ත මත පදනම්ව කාර්ය සාධනය පරීක්ෂා කරන ලදී. ගැටළුව වන්නේ, මෙම භාෂාවන් එකිනෙකට වෙනස් වන අතර, සී විසින් දර්ශකයන්ට අන්වර්ථකරණය කිරීමට ඉඩ දෙන අතර, ෆෝට්රාන් එසේ නොකරයි.

එබැවින් කේත එක හා සමාන නොවීය, සී පරීක්‍ෂා කරන ලද ලිපිගොනු වල __ අවහිරතා නොතිබුණි, එය වෙනස්කම් ලබා දුන්නේය, ගොනු නැවත ලිවීමෙන් පසු එය සම්පාදකයාට දර්ශක ප්‍රශස්තිකරණය කළ හැකි බව පැවසීමට, ධාවන වේලාවන් සමාන වේ.

මෙහි ඇති කාරණය නම්, අලුතින් සාදන ලද භාෂාවෙන් සමහර ප්‍රශස්තිකරණ ක්‍රම පහසුය (හෝ නීතිමය වීමට පටන් ගනී).


x

දෙවනුව VM හට ධාවනය වන විට පීඩන පරීක්‍ෂණයක් සිදු කළ හැකි අතර එමඟින් පීඩන කේතයක් ගෙන එය ප්‍රශස්තිකරණය කිරීමට හෝ ධාවන වේලාවේදී එය පූර්ව ගණනය කිරීමට පවා හැකිය. කල්තියා සම්පාදනය කරන ලද සී වැඩසටහන මඟින් පීඩනය කොතැනද යන්න හෝ (බොහෝ විට) සාමාන්‍ය පවුලේ යන්ත්‍ර සඳහා ක්‍රියාත්මක කළ හැකි අනුවාදයන් තිබේ.

මෙම පරීක්ෂණයෙහි JS ද ඇත, V8 ට වඩා වේගවත් VM ඇත, සමහර පරීක්ෂණ වලදී එය C ට වඩා වේගයෙන් ක්‍රියා කරයි.

මම එය පරික්ෂා කර ඇති අතර, සී සම්පාදකයින් තුළ අද්විතීය ප්‍රශස්තිකරණ ක්‍රම තවමත් නොමැත.

සී සම්පාදකයාට එකවරම සම්පූර්ණ කේතය ස්ථිතික විශ්ලේෂණයක් කිරීමට සිදු වන අතර, ලබා දී ඇති වේදිකාව මතට ගොස් මතක පෙළගැස්වීමේ ගැටළු මඟහරවා ගත යුතුය.

වීඑම් විසින් කේතයේ කොටසක් ප්‍රශස්තිකරණය කළ එකලස් කිරීමකට පරිවර්තනය කර එය ක්‍රියාත්මක කරන්න.

ජූලියා ගැන - මා පරීක්ෂා කර බැලූ විට එය ක්‍රියාත්මක වන්නේ AST කේතයක් මත ය, උදාහරණයක් ලෙස GCC මෙම පියවර මඟ හැරියේ මෑතකදී එතැන් සිට යම් තොරතුරු ලබා ගැනීමට පටන් ගත් බැවිනි. මෙම ප්ලස් වෙනත් අවහිරතා සහ වීඑම් ශිල්පීය ක්‍රම ටිකක් පැහැදිලි කළ හැකිය.

උදාහරණය: අපි සරල ලූපයක් ගනිමු, එය විචල්‍යයන්ගෙන් ආරම්භක අවසානය දක්වා ගෙන විචල්‍යයන්හි කොටසක් ගණනය කිරීම් වලට පටවනු ලැබේ.

සී සම්පාදකයා රෙජිස්ටරයෙන් පැටවීමේ විචල්‍යයන් ජනනය කරයි.
නමුත් ක්‍රියාත්මක වන විට මෙම විචල්‍යයන් ක්‍රියාත්මක කිරීම හරහා නියතයන් ලෙස හැඳින්වේ.
එබැවින් රෙජිස්ටර වලින් විචල්‍යයන් පැටවීම වෙනුවට (සහ එය වෙනස් විය හැකි නිසා හැඹිලි සිදු නොකිරීම සහ ස්ථිතික විශ්ලේෂණයෙන් එය පැහැදිලි නැත) ඒවා නියතයන් ලෙස සලකනු ලබන අතර ඒවා නැමුණු, ප්‍රචාරණය වේ.


12

රෆායෙල්ගේ පිළිතුරෙන් මනාව පැහැදිලි කර ඇති පරිදි, පෙර පිළිතුරු බොහෝ දුරට ප්‍රායෝගික කෝණයකින් වුවද පැහැදිලි කිරීමක් ලබා දෙයි .

මෙම පිළිතුරට අමතරව, වර්තමානයේ සී සම්පාදකයින් සී හි ලියා ඇති බව අප විසින් සටහන් කළ යුතුය. ඇත්ත වශයෙන්ම, රෆායෙල් විසින් සඳහන් කළ පරිදි ඒවායේ ප්‍රතිදානය සහ එහි ක්‍රියාකාරිත්වය වෙනත් දේ අතර එය ක්‍රියාත්මක වන CPU මත රඳා පවතී. නමුත් එය සම්පාදකයා විසින් සිදුකරන ප්‍රශස්තිකරණ ප්‍රමාණය මත ද රඳා පවතී. ඔබ C සඳහා වඩා හොඳ ප්‍රශස්තිකරණ සම්පාදකයෙකු C හි ලිවුවහොත් (එය ක්‍රියාත්මක කිරීමට හැකිවන පරිදි පැරණි එක සමඟ සම්පාදනය කරයි), ඔබට නව සම්පාදකයෙකු ලැබෙනු ඇත, එය C ට පෙර භාෂාවට වඩා වේගවත් භාෂාවක් බවට පත් කරයි. ඉතින්, සී හි වේගය කුමක්ද? එකම වස්තු කේතයක් ලබා දුන්නද, ඔබට නව සම්පාදකය දෙවන වරටත් සම්පාදනය කළ හැකි බව සලකන්න. හා පූර්ණ රැකියා ප්රමේයය ඔවුන්ගේ එවැනි දියුණු කිරීම් (පෙන්නුම් කරන්නක් සඳහා රෆායෙල් ස්තුතිවන්ත වන්නට) කෙළවරක් නැති බව යි.

නමුත් සමහර මූලික සංකල්ප සහ විශේෂයෙන් අර්ථ දැක්වීම් හා එදිරිව දේවල් පිළිබඳ දෘෂ්ටිය මනාව විදහා දක්වන බැවින් මෙම ගැටළුව විධිමත් කිරීමට උත්සාහ කිරීම වටී යැයි මම සිතමි.

සම්පාදකය යනු කුමක්ද?

සීඑස්ටීසීසීඑස්ටීපී:එස්පී එස්පී:ටී ටීපී

සීඑස්ටීසීඑස්ටී{(පී:එස්,පී:ටී)|පීඑස්එස්පීටීටී}

සීඑස්ටීපීඑස්පීටීපී

පී:ටීපී:එස්සීඑස්ටී

තර්කය පිරිපහදු කරමින් අපට බොහෝ විට අවශ්‍ය වන්නේ සම්පාදකයාට හොඳ කාර්යක්ෂමතාවයක් තිබීමයි, එවිට පරිවර්තනය සාධාරණ වේලාවක සිදු කළ හැකිය. එබැවින් සම්පාදක වැඩසටහනේ ක්‍රියාකාරිත්වය පරිශීලකයින්ට වැදගත් වේ, නමුත් එය අර්ථ නිරූපණයට කිසිදු බලපෑමක් නොකරයි. මම කියන්නේ කාර්ය සාධනය, මන්ද සමහර සම්පාදකයින්ගේ න්‍යායාත්මක සංකීර්ණතාව යමෙකු බලාපොරොත්තු වනවාට වඩා වැඩි විය හැකි බැවිනි.

ඇරඹුම් ගැන

මෙය වෙනස විදහා දක්වනු ඇති අතර ප්‍රායෝගික යෙදුමක් පෙන්වයි.

එස්මමඑස්සීඑස්ටී:එස්එස්සීඑස්ටී:එස්මමඑස්පී:එස්පී:ටීඑස්ටී

නමුත් ඔබට මෙම සම්පාදන පහසුකම භාවිතා කර සම්පාදකය සම්පාදනය කළ හැකිය සීඑස්ටී:එස්එස්සීඑස්ටී:ටීටීටීටී


"අර්ථාන්විතව වැදගත් වන්නේ සිදු කරනු ලබන දෙය මිස එය සිදු කරන්නේ කෙසේද (සහ කොතරම් වේගවත්ද යන්න නොවේ)" - එය ක්‍රියාකාරී නොවන නිර්ණායක ප්‍රායෝගිකව පවතින බව සඳහන් කරයි . ක්‍රියාකාරී ලෙස සමාන ඉලක්ක වැඩසටහන් බොහොමයක් ඇත, නමුත් යම් හේතුවක් නිසා අපි අනෙක් ඒවාට වඩා වැඩි කැමැත්තක් දක්වන්නෙමු (කාර්යක්ෂමතාව, ප්‍රමාණය, වඩා හොඳ මතක පෙළගැස්ම, ...). එනම්, ඔබ අර්ථ දක්වන පරිදි ශ්‍රිතයක් ලෙස සම්පාදකයෙකුගේ දැක්ම අපට අවශ්‍ය ප්‍රමාණයට වඩා සීමිතය (එය බොහෝ විට අතුරු ආබාධ මඟ හැරේ, උදා: I / O). එය ඔබට අවශ්‍ය පැහැදිලි කිරීමේ අරමුණ ඉටු කරයි.
රෆායෙල්

@ රෆායෙල් පූර්ණ රැකියා ප්‍රමේයය සම්බන්ධයෙන්, මගේ මතකයේ (සී පිළිබඳ මගේ අදහස් දැක්වීමේදී), නමුත් මම නම නොදැන සිටි අතර, යොමු කිරීමක් සොයා ගැනීම කල් දැමුවෙමි. එය කිරීම ගැන ස්තූතියි. --- මා කතා කරන අර්ථ නිරූපණය වන්නේ සම්පාදකයා මිස ඉලක්කගත වැඩසටහන නොවේ. ඉලක්කගත වැඩසටහන අර්ථාන්විතව පමණක් නොව, කෘතිමව හා ක්‍රියාකාරීව ආරක්ෂා වේ. නැත්නම් මම ඔබේ ප්‍රකාශය වරදවා වටහා ගත්තාද? මගේ පෙළෙහි දේවල් වඩාත් නිවැරදි කිරීමට මම සංස්කරණය කළෙමි.
බබු

@ රෆායෙල් ඔබ ඔබේ අදහස මකා නොදැමූ බැවින්, එයින් අදහස් කරන්නේ මම එය වරදවා වටහාගෙන ඇති බව හෝ නිසි ලෙස පිළිතුරු නොදුන් බව ද? අර්ථකථන දෘෂ්ටි කෝණයකින්, සම්පාදකයාගේ (සම්පාදිත වැඩසටහනේ නොවේ) ශ්‍රිතයක් ලෙස දැක්ම ඉතා සීමිත වන්නේ කෙසේද? ඇත්ත වශයෙන්ම, ශ්‍රිතයක් ලෙස, එය ප්‍රශස්තිකරණ නියෝග වැනි සම්පාදනය කරන ලද වැඩසටහනට වඩා වෙනත් තර්ක ගත හැකිය) නමුත් මෙය සාකච්ඡාව වෙනස් නොකරන විස්තරයකි.
බබු

මම හිතන්නේ මගේ අදහස "මෙම ආකෘතියට වඩා වැඩි යමක් ඇත" යන දෙසට යොමු වේ. ඔබ ලියන දේ වැරදියි, නමුත් එය සියල්ල නොවේ. න්‍යායාත්මකව, මෙය පැහැදිලිව පෙනේ: “සම්පාදක ශ්‍රිතය මනාව නිර්වචනය කර නොමැති බැවින් අසීමිත ඉලක්කගත වැඩසටහන් රාශියක් ඇති බැවින් ඒවා සියල්ලම අර්ථාන්විතව සමාන වේ. තෝරා ගත යුත්තේ සම්පාදකයින් සැලසුම් කිරීමේ ඉතා වැදගත් කොටසකි.
රෆායෙල්

සීපී

6

විසින් බ්ලූම් ගේ වැඩ වේගවත් කිරීම් ප්රමේයය ඉතා වේගවත්ම පරිගණක / සම්පාදක එකතුවක් අර්ථ මූලික ධාවනය ඔබේ පළමු පළාත් සභා මත ඒ සඳහා වැඩසටහනක් වඩා අඩු ධාවනය වනු ඇත මත ලකුණු ලියා ඇති වැඩසටහන් හා ඇත. “වේගවත්ම භාෂාවක්” නැත. ඔබට පැවසිය හැකි දෙය නම්, ඔබ එකම ඇල්ගොරිතම භාෂා කිහිපයකින් ලිවුවහොත් (ක්‍රියාත්මක කිරීම්; සටහන් කර ඇති පරිදි, විවිධ සී සම්පාදකයින් ඕනෑ තරම් තිබේ, සහ මට තරමක් දක්ෂ සී පරිවර්තකයෙකු හමු විය), එය එක් එක් වේගයෙන් හෝ මන්දගාමීව ධාවනය වනු ඇත. .

"සෑම විටම මන්දගාමී" ධූරාවලියක් තිබිය නොහැක. මෙය භාෂා කිහිපයකින් චතුර ලෙස දැන සිටින ප්‍රපංචයකි: සෑම ක්‍රමලේඛන භාෂාවක්ම නිශ්චිත ආකාරයේ යෙදුම් සඳහා නිර්මාණය කර ඇති අතර, වැඩිපුර භාවිතා කරන ලද ක්‍රියාත්මක කිරීම් එම ආකාරයේ වැඩසටහන් සඳහා ආදරයෙන් ප්‍රශස්ත කර ඇත. මට හොඳටම විශ්වාසයි, උදා: පර්ල් හි ලියා ඇති නූල් සමඟ රැවටීම සඳහා වූ වැඩසටහනක් බොහෝ විට සී හි ලියා ඇති ඇල්ගොරිතමයටම පහර දෙනු ඇති අතර, සී හි පූර්ණ සංඛ්‍යා විශාල සංඛ්‍යාවක් මැන්ච් කරන වැඩසටහනක් පර්ල්ට වඩා වේගවත් වනු ඇත.


1
“සෑම ක්‍රමලේඛන භාෂාවක්ම නිශ්චිත ආකාරයේ යෙදුම් සඳහා නිර්මාණය කර ඇත” ඇත්ත වශයෙන්ම, මිනිසුන් සැබවින්ම භාවිතා කරන බොහෝ ක්‍රමලේඛන භාෂාවන් පොදු අරමුණු සහිත භාෂාවන් වන අතර විශේෂිත යෙදුම් සඳහා නිර්මාණය කර ඇති ප්‍රතිවිරුද්ධයයි. සමාජීය බලපෑම් හේතුවෙන් ඇතැම් භාෂාවන් සමහර වසම්වල වැඩිපුර භාවිතා කිරීම අවසන් වේ.
කියුබික්

මම හිතන්නේ එය "විශේෂිත යෙදුම් වර්ගයක්" යන යෙදුම ඔබ කොතරම් පුළුල් ලෙස අර්ථ නිරූපණය කරන්නේද යන්න මත රඳා පවතී. එය බොහෝ ප්රධාන ධාරාවේ භාෂා DSLs නොවන බව සත්යයක් නමුත්, ඔවුන් වඩාත් නිශ්චිතවම ඇත මනස යම් යම් අවශ්යතා සදහා යොදා ගන්නා නිර්මාණය කර ඇත. සී නිර්මාණය කර ඇත්තේ යුනික්ස් ක්‍රියාත්මක කිරීම සඳහා ය. ජාවා නිර්මාණය කර ඇත්තේ අන්තර් ක්‍රියාකාරී රූපවාහිනී තිර රචනය සඳහා ය. ස්මාල්ටෝක් නිර්මාණය කර ඇත්තේ දරුවන්ට ඉගැන්වීම සඳහා ය. ECMAScript නිර්මාණය කර ඇත්තේ සේවාදායක පාර්ශව සහ සේවාදායක පාර්ශවීය වෙබ් ස්ක්‍රිප්ටින් සඳහා ය. පර්ල් නිර්මාණය කර ඇත්තේ පෙළ සැකසීම සහ යුනික්ස් ස්ක්‍රිප්ටින් සඳහා ය. PHP නිර්මාණය කර ඇත්තේ සේවාදායක පාර්ශවීය වෙබ් ස්ක්‍රිප්ටින් සඳහා ය. අර්ලාන්ග් නිර්මාණය කර ඇත්තේ විශ්වසනීයත්වය සඳහා ය. මෙම යෝජනා ක්‍රමය ගවේෂණය කිරීම සඳහා නිර්මාණය කර ඇත…
J Wrg W Mittag

OO සහ නළුවාගේ ආකෘතියේ පදනම්. ඒපීඑල් නිර්මාණය කර ඇත්තේ ගණිතය ඉගැන්වීමේ අංකනයක් ලෙස ය. ජූලියා නිර්මාණය කර ඇත්තේ විද්‍යාත්මක වැඩසටහන්කරණය සඳහා ය. එම භාෂා සියල්ලම දැන් ඔවුන්ගේ මුල් ගැටළු වසමෙන් පිටත භාවිතා කර ඇත, නමුත් සමහර භාෂාවන්හි සමහර ගුණාංග තවමත් ඇතැම් වර්ගවල යෙදුම් සඳහා වඩා හොඳ හෝ නරක ලෙස ගැලපෙන අතර ඒවා සියල්ලම සියලු වර්ගවල ගොඩනැගීමට භාවිතා කළ හැකි වුවද දේවල්.
ජෝර්ග් ඩබ් මිට්ටාග්

4

අපි මුල් පේළියට යමු: "C හි ලියා ඇති භාෂාවක් කවදා හෝ C ට වඩා වේගවත් වන්නේ කෙසේද?" මම හිතන්නේ මෙය සැබවින්ම කීමට අදහස් කළේ: සී හි ලියා ඇති වැඩසටහනකට වඩා සී හි ලියා ඇති ජූලියා හි වැඩසටහනක් කවදා හෝ වේගවත් වන්නේ කෙසේද? නිශ්චිතවම, ජූලියා හි ලියා ඇති පරිදි "මැන්ඩෙල්" වැඩසටහන සී හි ලියා ඇති සමාන "මැන්ඩෙල්" වැඩසටහන ක්‍රියාත්මක කිරීමේ වේලාවෙන් 87% ක් ක්‍රියාත්මක වන්නේ කෙසේද?

මෙම ප්‍රශ්නයට මෙතෙක් ඇති එකම නිවැරදි පිළිතුර බබූගේ නිබන්ධනයයි. මේ දක්වා ඇති අනෙක් සියලුම ප්‍රතිචාර වෙනත් ප්‍රශ්නවලට වැඩි වශයෙන් හෝ අඩු වශයෙන් පිළිතුරු සපයයි. බබූගේ පෙළෙහි ඇති ගැටළුව නම්, “සම්පාදකය යනු කුමක්ද” යන්න පිළිබඳ බොහෝ ඡේදවල දීර් the න්‍යායාත්මක විස්තරය ලියා ඇත්තේ මුල් පෝස්ටරයට තේරුම් ගැනීමට අපහසු වනු ඇති බැවිනි. "අර්ථකථන", "අර්ථ දැක්වීමේ", "සාක්ෂාත් කර ගැනීම", "ගණනය කළ හැකි" යන වචන වලින් සඳහන් වන සංකල්ප ග්‍රහණය කර ගන්නා ඕනෑම අයෙක් එම ප්‍රශ්නයට පිළිතුර දැනටමත් දැන ගනු ඇත.

සරලම පිළිතුර නම් යන්ත්‍රය මඟින් සී කේතය හෝ ජූලියා කේතය කෙලින්ම ක්‍රියාත්මක කළ නොහැකි බවයි. දෙකම පරිවර්තනය කළ යුතු අතර, එම පරිවර්තන ක්‍රියාවලිය මඟින් ක්‍රියාත්මක කළ හැකි යන්ත්‍ර කේතය මන්දගාමී හෝ වේගවත් විය හැකි ක්‍රම රාශියක් හඳුන්වා දෙයි, නමුත් තවමත් එකම අවසාන ප්‍රති .ලය ලබා දෙයි. සී සහ ජූලියා යන දෙදෙනාම සම්පාදනය කරයි, එයින් අදහස් කරන්නේ වෙනත් ආකාරයකට පරිවර්තන මාලාවක්. පොදුවේ ගත් කල, මිනිසුන්ට කියවිය හැකි පෙළ ගොනුවක් කිසියම් අභ්‍යන්තර නිරූපණයකට පරිවර්තනය කර පරිගණකයට කෙලින්ම තේරුම් ගත හැකි උපදෙස් මාලාවක් ලෙස ලියා ඇත. සමහර භාෂාවන් සමඟ, ඊට වඩා වැඩි යමක් ඇති අතර, ජූලියා මේවායින් එකකි - එයට “JIT” සම්පාදකයක් ඇත, එයින් අදහස් කරන්නේ සමස්ත පරිවර්තන ක්‍රියාවලියම එකවරම සම්පූර්ණ වැඩසටහන සඳහාම සිදුවිය යුතු නැති බවයි. නමුත් ඕනෑම භාෂාවක අවසාන ප්‍රති result ලය වන්නේ තවදුරටත් පරිවර්තනය අවශ්‍ය නොවන යන්ත්‍ර කේතයයි, එය යමක් කිරීමට CPU වෙත කෙලින්ම යැවිය හැකි කේතය. අවසානයේදී, මෙය "ගණනය කිරීම" වන අතර, ඔබට අවශ්‍ය පිළිතුර ලබා ගන්නේ කෙසේදැයි CPU ට පැවසීමට එක් ක්‍රමයකට වඩා තිබේ.

කෙනෙකුට "ප්ලස්" සහ "ගුණ කිරීමේ" ක්‍රියාකරු යන ක්‍රමලේඛන භාෂාවක් සහ "ප්ලස්" පමණක් ඇති තවත් භාෂාවක් සිතාගත හැකිය. ඔබේ ගණනය කිරීම සඳහා ගුණ කිරීම අවශ්‍ය නම්, එක් භාෂාවක් "මන්දගාමී" වනු ඇත, ඇත්ත වශයෙන්ම CPU දෙකම සෘජුවම කළ හැකි නමුත් 5 * 5 ගුණ කිරීමේ අවශ්‍යතාවය ප්‍රකාශ කිරීමට ඔබට ක්‍රමයක් නොමැති නම්, ඔබට "5" ලිවීමට සිදුවේ. + 5 + 5 + 5 + 5 ". දෙවැන්න එකම පිළිතුරට පැමිණීමට වැඩි කාලයක් ගතවනු ඇත. අනුමාන වශයෙන්, ජූලියා සමඟ මෙයින් සමහරක් සිදුවෙමින් පවතී; සමහර විට භාෂාව ක්‍රමලේඛකයාට මැන්ඩෙල්බ්‍රොට් කට්ටලයක් ගණනය කිරීමේ අපේක්ෂිත ඉලක්කය සී වෙත කෙලින්ම ප්‍රකාශ කළ නොහැකි ආකාරයෙන් ප්‍රකාශ කිරීමට ඉඩ දෙයි.

මිණුම් ලකුණ සඳහා භාවිතා කරන ප්‍රොසෙසරය Xeon E7-8850 2.00GHz CPU ලෙස ලැයිස්තු ගත කර ඇත. සී මිණුම් ලකුණ එම සීපීයූ සඳහා උපදෙස් නිෂ්පාදනය කිරීම සඳහා ජීසීසී 4.8.2 සම්පාදකය භාවිතා කළ අතර ජූලියා එල්එල්වීඑම් සම්පාදක රාමුව භාවිතා කරයි. Gcc හි පසුබිම (විශේෂිත CPU ගෘහ නිර්මාණ ශිල්පයක් සඳහා යන්ත්‍ර කේත නිපදවන කොටස) LLVM පසුබිම තරම් යම් ආකාරයකින් දියුණු නොවිය හැකිය. එය කාර්ය සාධනයේ වෙනසක් ඇති කළ හැකිය. තවත් බොහෝ දේ සිදුවෙමින් පවතී - ක්‍රමලේඛකයා විසින් නියම කර ඇති ප්‍රමාණයට වඩා වෙනස් අනුපිළිවෙලකින් උපදෙස් නිකුත් කිරීමෙන් සම්පාදකයාට “ප්‍රශස්තිකරණය” කළ හැකිය, නැතහොත් කේතය විශ්ලේෂණය කර ඒවා එසේ නොවන බව තීරණය කළ හැකි නම් සමහර දේවල් නොකරන්න. නිවැරදි පිළිතුර ලබා ගැනීමට අවශ්‍ය වේ. ක්‍රමලේඛකයා සී වැඩසටහනේ කොටසක් මන්දගාමී වන අයුරින් ලියා ඇති නමුත් එසේ නොවීය.

මේ සියල්ලම කීමේ ක්‍රම වේ: මැන්ඩෙල්බ්‍රොට් කට්ටලයක් ගණනය කිරීම සඳහා යන්ත්‍ර කේත ලිවීමට ක්‍රම රාශියක් ඇති අතර, ඔබ භාවිතා කරන භාෂාව එම යන්ත්‍ර කේතය ලිවීමට බලපාන ආකාරය කෙරෙහි විශාල බලපෑමක් ඇති කරයි. සම්පාදනය, උපදෙස් කට්ටල, හැඹිලි යනාදිය ගැන ඔබ වැඩි වැඩියෙන් තේරුම් ගන්නා තරමට, ඔබට අවශ්‍ය ප්‍රති results ල ලබා ගැනීමට වඩා හොඳ සන්නද්ධ වනු ඇත. ජූලියා සඳහා උපුටා දක්වා ඇති මිණුම් දණ්ඩේ ප්‍රති results ලවලින් ලබා ගත හැකි ප්‍රධානතම දෙය නම් සෑම භාෂාවක්ම හෝ මෙවලමක්ම හොඳම නොවන බවයි. ඇත්ත වශයෙන්ම සමස්ත ප්‍රස්ථාරයේ හොඳම වේග සාධකය වූයේ ජාවා සඳහා ය!


2

සම්පාදනය කරන ලද වැඩසටහනක වේගය කරුණු දෙකක් මත රඳා පවතී:

  1. එය ක්‍රියාත්මක කරන යන්ත්‍රයේ ක්‍රියාකාරීත්ව ලක්ෂණ
  2. ක්‍රියාත්මක කළ හැකි ගොනුවේ අන්තර්ගතය

සම්පාදකයෙකු ලියා ඇති භාෂාව (1) ට අදාල නොවේ. උදාහරණයක් ලෙස, ජාවා සම්පාදකයෙකු සී හෝ ජාවා හෝ පයිතන් වලින් ලිවිය හැකිය, නමුත් සෑම අවස්ථාවකදීම වැඩසටහන ක්‍රියාත්මක කරන “යන්ත්‍රය” යනු ජේවීඑම් ය.

සම්පාදකයෙකු ලියා ඇති භාෂාව (2) ට අදාල නොවේ. උදාහරණයක් ලෙස, පයිතන් හි ලියා ඇති සී සම්පාදකයෙකුට සී හෝ ජාවා හි ලියා ඇති සී සම්පාදකය මෙන් එකම ක්‍රියාත්මක කළ හැකි ගොනුවක් ප්‍රතිදානය කිරීමට නොහැකි වීමට හේතුවක් නැත.


1

මම කෙටි පිළිතුරක් දීමට උත්සාහ කරමි.

ප්‍රශ්නයේ හරය පවතින්නේ භාෂාවක “වේගය” යන්නෙහි අර්ථ දැක්වීම තුළ ය .

බොහෝමයක් නොවේ නම් සියලු වේග සංසන්දනාත්මක පරීක්ෂණ මඟින් හැකි උපරිම වේගය කුමක්දැයි පරීක්ෂා නොකරයි. ඒ වෙනුවට ඔවුන් ගැටළුවක් විසඳීම සඳහා පරීක්ෂා කිරීමට අවශ්‍ය භාෂාවෙන් කුඩා වැඩසටහනක් ලියයි. වැඩසටහන ලියන විට, ක්‍රමලේඛකයා ඔවුන් උපකල්පනය කරන දේ භාවිතා කරන්නේ * පරීක්ෂණයේ දී භාෂාවේ හොඳම පුහුණුව හා සම්මුතීන් ලෙස ය. ඉන්පසු ඔවුන් වැඩසටහන ක්‍රියාත්මක කළ වේගය මනිනු ලබයි.

උපකල්පන විටින් විට වැරදිය.


0

X භාෂාවෙන් ලියා ඇති කේතය, C හි ලියා ඇති කේතයක්, C හි ලියා ඇති කේතයක් අභිබවා යා හැකිය, සපයා ඇති විට, C සම්පාදකයා X භාෂාවට සාපේක්ෂව දුර්වල ප්‍රශස්තිකරණයක් කරයි. අප ප්‍රශස්තිකරණය සාකච්ඡාවෙන් බැහැරව තබන්නේ නම්, X සම්පාදකයාට වඩා හොඳ උත්පාදනය කළ හැකි නම් සී සම්පාදකයා විසින් ජනනය කරන ලද කේතයට වඩා වස්තු කේතය, එවිට X හි ලියා ඇති කේතය තරඟය ජය ගත හැකිය.

නමුත් භාෂාව X යනු අර්ථකථනය කරන ලද භාෂාවක් නම්, සහ පරිවර්තකයා C හි ලියා ඇති අතර, X භාෂාවේ පරිවර්තකය සහ C හි ලියා ඇති කේතය එකම C සම්පාදකයෙකු විසින් සම්පාදනය කර ඇතැයි අපි උපකල්පනය කරන්නේ නම්, X හි ලියා ඇති කේතයක් කේතය අභිබවා යාමට යන්නේ නැත. C හි ලියා ඇති අතර, ක්‍රියාත්මක කිරීම දෙකම එකම ඇල්ගොරිතමයක් අනුගමනය කර සමාන දත්ත ව්‍යුහයන් භාවිතා කරයි.


2
පෙර පිළිතුරු වලට වඩා මෙය එකතු කරන්නේ කුමක්ද? එසේම, වෙනත් පිළිතුරු වල දක්වා ඇති හේතු නිසා ඔබේ දෙවන ඡේදය සත්‍ය යැයි මම නොසිතමි.
රෆායෙල්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.