සී ක්‍රමලේඛන භාෂාව එළියට එන විට පහත් මට්ටමේ භාෂාවක් ලෙස සලකනු ලැබුවාද?


152

වර්තමානයේ සී පහත් මට්ටමේ භාෂාවක් ලෙස සැලකේ , නමුත් 70 දශකයේ දී එය පහත් මට්ටමක් ලෙස සලකනු ලැබුවාද? මෙම යෙදුම එවකට පවා භාවිතයේ තිබේද?

80 දශකයේ මැද භාගය හා ඉන් ඔබ්බට බොහෝ ජනප්‍රිය ඉහළ මට්ටමේ භාෂාවන් නොතිබුණි. එබැවින් පහත් මට්ටමේ ස්වභාවය වසර ගණනාවක් තිස්සේ වෙනස් වී ඇත්ද සහ කෙසේද යන්න මට කුතුහලයක් ඇත.


13
එක් දත්ත ලක්ෂ්‍යයක් ලෙස, 1978 දී පමණ සමහර ක්‍රමලේඛන උපදේශකයෝ සී මට මහිමාන්විත එකලස් කිරීමේ භාෂාවක් ලෙස විස්තර කළහ.
බෙන් ක්‍රොවෙල්

7
En බෙන්ක්‍රොවෙල් ඔබේ ප්‍රකාශයේ සන්දර්භය තුළ “මහිමයට පත්වූ” යන්නෙහි තේරුම කුමක්දැයි මට විශ්වාස නැත, නමුත් මම C විශ්වීය (= වේදිකා-ස්වාධීන) එකලස් කිරීමේ භාෂාවක් ලෙස හැඳින්වීමි .
මෙලෙබියස්

13
සිත් ගන්නා සුළු බව පැහැදිලි කළ යුතු නඩුවක් තියෙනවා C පහළ මට්ටමේ භාෂා නොවේ , සහ මෙය අඩු එය PDP-11 සිට වඩා සී ගේ වියුක්ත යන්ත්රය නවීන දෘඩාංග සිට දුරක් ඉවත් කර ඇත නිසා එය, විසින් 70 වඩා දැන් එකක්.
ටොම්

5
මේ ගැන සිතන විට ඔබට මූලාරම්භය ගැනද සිතා බැලිය හැකිය - යුනික්ස් සී හි ලියා ඇත, සී යුනික්ස් මත ධාවනය වන අතර යුනික්ස් වෙනත් වේදිකාවලට හරස් සම්පාදනය කරයි. යුනික්ස් සම්පාදනය කිරීමට අවශ්‍ය නොවන ඕනෑම දෙයක් අනවශ්‍ය පොදු කාර්යයක් වූ අතර සී හි ප්‍රධාන ඉලක්කය වූයේ හැකි තරම් සම්පාදකයෙකු ලිවීමට / වරායට ගෙන ඒමයි. මෙම අරමුණු සඳහා එය නිවැරදි නිවැරදි මට්ටම විය, එබැවින් මම සී ඉහළ හෝ පහත් මට්ටමක් ලෙස නොසිතමි, යුනික්ස් වරාය කිරීමේ මෙවලමක් ලෙස මම සිතමි, සියලු යුනික්ස් මෙවලම් මෙන් බොහෝ ගැටළු වලට අතිශයින්ම අනුවර්තනය වේ.
බිල් කේ

4
ලිප්ස් 1958
ප්‍රයිම්

Answers:


142

ප්‍රශ්නයේ historical තිහාසික අංශවලට පිළිතුරු සැපයීම සඳහා:

නිර්මාණ දර්ශනය බ්‍රයන් කර්නිගන් සහ සී නිර්මාණකරු ඩෙනිස් රිචී විසින් රචිත සී වැඩසටහන්කරණ භාෂාවෙන් විස්තර කර ඇති අතර ඔබ අසා ඇති “කේ ඇන්ඩ් ආර්”. පළමු සංස්කරණයේ පෙරවදනෙහි සඳහන් වේ

සී යනු "ඉතා ඉහළ මට්ටමේ" භාෂාවක් හෝ "විශාල" භාෂාවක් නොවේ ...

හැඳින්වීම පවසයි

C යනු සාපේක්ෂව “පහත් මට්ටමේ” භාෂාවකි ... අක්ෂර නූල්, කට්ටල, ලැයිස්තු හෝ අරා වැනි සංයුක්ත වස්තූන් සමඟ deal ජුව කටයුතු කිරීමට C කිසිදු මෙහෙයුමක් සපයන්නේ නැත. සම්පූර්ණ අරාවක් හෝ නූලක් හසුරුවන මෙහෙයුම් නොමැත ...

පෙළ ඉදිරියට යාමට පෙර ලැයිස්තුව ටික වේලාවක් පවතී:

මෙම සමහර අංග නොමැතිවීම බරපතල iency නතාවයක් සේ පෙනුනද ... භාෂාව මධ්‍යස්ථ ප්‍රමාණයට තබා ගැනීමෙන් සැබෑ වාසි ඇත.

(මා සතුව ඇත්තේ 1988 සිට දෙවන සංස්කරණය පමණි, නමුත් පහත දැක්වෙන අදහස් දැක්වෙන්නේ 1978 පළමු සංස්කරණයේ උපුටා ගත් පෙළ සමාන බව ය.)

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


42
මෙය විශිෂ්ට පිළිතුරකි! සත්‍යාපනය කළ හැකි evidence තිහාසික සාක්ෂි + OP සඳහන් කරන කාල පරිච්ඡේදය තුළ පහත් හා ඉහළ මට්ටමේ අර්ථය වඩාත් හොඳින් දැන සිටි නළුවෙකුගේ සාක්ෂිය. මාර්ගය වන විට, උපුටා දැක්වීම් දැනටමත් 1978 සංස්කරණයේ තිබූ බව මම සනාථ කරමි.
ක්‍රිස්ටෝෆ්

157

මෙය ඉහළ මට්ටමේ සහ පහත් මට්ටමේ භාෂාව පිළිබඳ ඔබේ අර්ථ දැක්වීම මත රඳා පවතී. සී සංවර්ධනය කරන විට, එකලස් කිරීමට වඩා ඉහළ මට්ටමේ ඕනෑම දෙයක් ඉහළ මට්ටමේ භාෂාවක් ලෙස සලකනු ලැබීය. එය ඉවත් කිරීමට අඩු තීරුවකි. පසුකාලීනව, මෙම පාරිභාෂිතය සමහරු වර්තමානයේ ජාවා පවා පහත් මට්ටමේ භාෂාවක් ලෙස සලකනු ඇත.

70 දශකයේ ඉහළ මට්ටමේ භාෂා භූ දර්ශනය තුළ වුවද, සී තරමක් පහත් මට්ටමක පවතින බව පෙන්වා දීම වටී. සී භාෂාව මූලික වශයෙන් බී ප්ලස් සරල වර්ගයේ පද්ධතියක් වන අතර බී එකලස් කිරීම සඳහා පහසු ක්‍රියා පටිපාටි / ව්‍යුහගත සින්ටැක්ස් ස්ථරයකට වඩා වැඩි නොවේ. ටයිප් ක්‍රමය ටයිප් නොකළ බී භාෂාවට ඉහළින් ඇති රෙට්රෝ-ෆිට් එකක් බැවින්, ඔබට තවමත් සමහර ස්ථානවල වර්ගීකරණ විවරණයන් අතහැර දැමිය intහැකි අතර එය උපකල්පනය කෙරේ.

සී දැනුවත්ව ඒ වන විටත් හොඳින් ස්ථාපිත කර තිබූ අංග ක්‍රියාත්මක කිරීමට මිල අධික හෝ දුෂ්කර දේ අතහැර දමයි

  • ස්වයංක්‍රීය මතක කළමනාකරණය
  • කැදැලි කාර්යයන් හෝ වසා දැමීම්
  • මූලික OOP හෝ coroutines
  • වඩාත් ප්‍රකාශන වර්ග පද්ධති (උදා: පරාසය-සීමා කරන ලද වර්ග, වාර්තා වර්ග, පරිශීලක අර්ථ දක්වන වර්ග, ශක්තිමත් ටයිප් කිරීම,…)

C හි සිත්ගන්නාසුලු ලක්ෂණ කිහිපයක් ඇත:

  • පුනරාවර්තනය සඳහා සහාය (සියළුම විචල්‍යයන්ට ගෝලීය ආයු කාලයක් ඇති භාෂාවන් හා සසඳන විට එහි සිරස් මත පදනම් වූ ස්වයංක්‍රීය විචල්‍යයන්ගේ ප්‍රති ence ලයක් ලෙස)
  • ශ්‍රිත දර්ශක
  • C හි ආරම්භක නිකුතුවෙන් ටික කලකට පසු පරිශීලක-නිර්වචනය කළ දත්ත වර්ග (ව්‍යුහයන් සහ වෘත්තීය සමිති) ක්‍රියාත්මක කරන ලදී.
  • C හි නූල් නිරූපණය (පොයින්ටරයේ සිට අක්ෂර දක්වා) ඇත්ත වශයෙන්ම B ට වඩා විශාල දියුණුවක් වන අතර එමඟින් අකුරු කිහිපයක් එක් යන්ත්‍ර වචනයකට කේතනය කර ඇත.
  • සී හි ශීර්ෂ ලිපිගොනු සම්පාදක ඒකක කුඩා ලෙස තබා ගැනීම සඳහා කාර්යක්ෂමතා කඩුල්ලක් පමණක් නොව සරල මොඩියුල පද්ධතියක් ද සපයයි.
  • ආරක්ෂිත යොමු කිරීම් හා සසඳන විට එකලස් කිරීමේ ශෛලියේ අසීමිත දර්ශක සහ දර්ශක අංක ගණිතය. පොයින්ටර්ස් යනු සහජයෙන්ම අනාරක්ෂිත අංගයක් වන අතර පහත් මට්ටමේ වැඩසටහන් සඳහාද ඉතා ප්‍රයෝජනවත් වේ.

සී සංවර්ධනය කරන අවස්ථාවේ දී, COBOL, Lisp, ALGOL (විවිධ උපභාෂා වලින්), PL / I, SNOBOL, Simula, සහ පැස්කල් වැනි නව්‍ය භාෂා දැනටමත් ප්‍රකාශයට පත් කර ඇති අතර / හෝ විශේෂිත ගැටළු වසම් සඳහා පුළුල් ලෙස භාවිතා කර ඇත. නමුත් දැනට පවතින භාෂාවන්ගෙන් බොහොමයක් මේන්ෆ්‍රේම් ක්‍රමලේඛනය සඳහා අදහස් කරන ලදී, නැතහොත් අධ්‍යයන පර්යේෂණ ව්‍යාපෘති විය. උදා: ALGOL-60 විශ්වීය ක්‍රමලේඛන භාෂාවක් ලෙස ප්‍රථම වරට නිර්මාණය කරන විට, එය ක්‍රියාත්මක කිරීමට අවශ්‍ය තාක්‍ෂණය හා පරිගණක විද්‍යාව තවමත් නොපවතී. මේවායින් සමහරක් (සමහර ඇල්ගෝල් උපභාෂා, පීඑල් / අයි, පැස්කල්) ද පහත් මට්ටමේ ක්‍රමලේඛනය සඳහා අදහස් කරන ලද නමුත් ඒවා වඩාත් සංකීර්ණ සම්පාදක හෝ වැඩි ආරක්ෂිත විය (උදා: සීමා රහිත දර්ශක නැත). පැස්කල්ට විචල්‍ය-දිග අරා සඳහා හොඳ සහායක් නොමැත.

එම භාෂාවන්ට සාපේක්ෂව සී පහත් මට්ටමේ සංවර්ධනය සඳහා වඩාත් ප්‍රායෝගික වීමට “අලංකාර” සහ මිල අධික අංග ප්‍රතික්ෂේප කරයි. සී කිසි විටෙකත් මූලික වශයෙන් භාෂා නිර්මාණ පර්යේෂණ ව්‍යාපෘතියක් නොවීය. ඒ වෙනුවට, එය පීඩීපී -11 කුඩා පරිගණකයේ යුනික්ස් කර්නල් සංවර්ධනයේ ශාඛාවක් වූ අතර එය සාපේක්ෂව සම්පත් වලින් සීමා විය. එහි ස්ථානය සඳහා (වරාය කිරීමට පහසු තනි පාස් සම්පාදකයෙකු සමඟ යුනික්ස් ලිවීම සඳහා අවම මට්ටමේ භාෂාවක්) සී නියත වශයෙන්ම විශිෂ්ටයි - වසර 45 කට පසුවත් එය තවමත් පද්ධති ක්‍රමලේඛනයේ භාෂාමය වේ.


17
පවත්නා ALGOL පවුලට සහ පැස්කල් භාෂාවන්ට අවශ්‍ය දේ නොදන්නා අය සඳහා කුඩා එකතු කිරීමක් පමණි: එම භාෂාවන්ට බාහිර ක්‍රියාකාරකම් වලින් ප්‍රකාශිත (දේශීය) විචල්‍යයට ප්‍රවේශ විය හැකි ශබ්දකෝෂ කැදැලි කාර්යයන් තිබුණි. එයින් අදහස් වන්නේ එක් එක් ශ්‍රිත ඇමතුම සහ ආපසු යාමේදී (ශබ්දකෝෂ මට්ටම වෙනස් කළ) “ශබ්ද සංදර්ශක” - පිටත ශබ්දකෝෂ විෂය පථයන් වෙත යොමු කිරීමට ඔබට සිදු වූ බවයි - නැතහොත් ඔබට ශබ්දකෝෂ විෂය පථයන් දාමය හා එවැනි එක් එක් විචල්‍ය ප්‍රවේශය තොගය සොයා ගැනීම සඳහා බහු වක්‍ර හොප්ස් අවශ්‍ය වේ. මිල අධිකයි! සී ඒ සියල්ල අතහැර දැමීය. මට තවමත් එය මග හැරී ඇත.
davidbak

12
avdavidbak: x86-64 System V ABI (ලිනක්ස් / ඕඑස් එක්ස් හි ඇමතුම් සම්මුතිය) %r10"ස්ථිතික දාම දර්ශකය" ලෙස අර්ථ දක්වයි , එය ඔබ කතා කරන්නේ හරියටම ය. සී සඳහා එය තවත් ඇමතුම්-සීරීම් සීරීම් ලේඛනයක් පමණි, නමුත් පැස්කල් එය භාවිතා කරනු ඇතැයි මම සිතමි. (GNU C පිලිතුරු කැදැලි කාර්යයන් සම්පාදකවරයා අඩුක්කුව මත යාන්ත්රික කේත ක trampoline නිර්මාණය එසේ ඔබ එය උත්සවයකට පහිටුම් දක්වනය කරන්න නම් එවැනි උත්සවයකට පේළිගත (උදා: නැත විට) පිටත විෂය පථය වෙත අවධානය යොමුකළ පසුකර සඳහා එය භාවිතා කරන්න: සාමාන්ය වල පිළිගත හැකි r10 සහ r11 භාවිතය )
පීටර්

2
Et පීටර්කෝඩ්ස් සිත් ඇදගන්නා සුළුයි! පද්ධති V එළියට එන විට පැස්කල් තවමත් බහුලව භාවිතා විය (විධිමත් SysV ABI නිර්වචනය කළේ කවදාදැයි මම නොදනිමි). ඔබගේ සම්බන්ධිත පිළිතුර ඉතා තොරතුරු සහිතය.
davidbak

3
C හි පරිශීලක අර්ථ දක්වන වර්ග තිබේ (struct / Union). එම "විශේෂාංග" ඉතිරිව ඇත්තේ ශුන්‍ය හෝ negative ණාත්මක භාවිතයක් නිසා යැයි ඔබ සැක කරයි (ඔබ අපැහැදිලි කේත තරඟයකට පිවිසෙන්නේ නැත්නම් :-)), භාෂාව සරල හා ප්‍රකාශන යන දෙකින්ම තබා ගැනීමේ ඉලක්කයෙන් ඔවුන් ract ත් වන හෙයින්. .
jamesqf

6
@ ජේම්ස්ක්ෆ්: නමුත් ඉතා ඉක්මනින් සී හට ව්‍යුහාත්මක පැවරුමක් නොතිබුණි; a = b;ISO C89 හි ඔබට හැකි ආකාරයට සම්පූර්ණ ව්‍යුහයක් පිටපත් කිරීම සඳහා ලිවීම වෙනුවට සාමාජිකයන් තනි තනිව මතක තබා ගැනීම හෝ පිටපත් කිරීම කළ යුතු යැයි මම සිතමි . එබැවින් C හි මුල් අවධියේදී, පරිශීලක-නිර්වචනය කරන ලද වර්ග අනිවාර්යයෙන්ම දෙවන පන්තිය වන අතර ඒවා සම්මත කළ හැක්කේ ශ්‍රිත ආග්ස් ලෙස යොමු කිරීමෙන් පමණි. C හි අරා කෙරෙහි ඇති අකමැත්ත සහ ව්‍යුහයන් තුළ අරා පැවරීම සඳහා C ++ සහාය දෙන්නේ ඇයි?
පීටර් කෝර්ඩ්ස්

38

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

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

වැඩි විස්තර සඳහා මුල් BSTJ ලිපිය බලන්න:

ස්තූතියි ඩෙනිස්. ඔබට සාමයෙන් ඉන්න ඉඩ දෙන්න.


3
ඔබ මගෙන් ඇසුවොත් එය මූලික වශයෙන් යතුරු ලියනය කරන ලද අතර පීඩීපී එකලස් කිරීම සඳහා වඩාත් හොඳ සින්ටැක්ස් ඔතා ඇත.
einpoklum


2
ineinpoklum මම ඒකට එකඟයි. මම 1980 දී පමණ විශ්ව විද්‍යාලයේදී පී.ඩී.පී.-11/34 ඒ මත නැවත ඉගෙන ගත්තා. පීඩීපී -11 ට අමතරව, අප සතුව විද්‍යාගාරයේ සුපර්බ්‍රේන් සීපී / එම් යන්ත්‍ර කිහිපයක් තිබී ඇති අතර ඒවායේ සී කම්පයිලර් තිබේ. en.wikipedia.org/wiki/Intertec_Superbrain
dgnuff

2
සත්‍යාපිත historical තිහාසික සාක්ෂි මත පදනම් වූ විශිෂ්ට පිළිතුරක් (වාව්! කේ ඇන්ඩ් ආර් හි පූර්ව සංස්කරණයක් එහි තිබී ඇත!).
ක්‍රිස්ටෝෆ්

7
ineinpoklum මෙය තරමක් දුරස් වූ දෙයක් නොවේද? අසූව දශකයේ මැද භාගයේ දී එකලස් කිරීමේ (Z80 සහ M68K), එම් (පීඩීපී 11 සින්ටැක්ස්, වියුක්ත 16 බිට් ලේඛනයක් සහ උපදෙස් කට්ටලයක් සහිත) ලෙස හඳුන්වන “අතේ ගෙන යා හැකි එකලස් කරන්නෙකු” සහ සී. , C නියත වශයෙන්ම ඉහළ මට්ටමේ භාෂාවක් වේ: සී ක්‍රමලේඛනයේ tivity ලදායිතාව එකලස් කිරීමේ යන්ත්‍රයට වඩා විශාලත්වයේ අනුපිළිවෙලකි! ඇත්ත වශයෙන්ම නූල් නැත (SNOBOL), ස්වදේශීය දත්ත ගොනු සහය (COBOL), ස්වයං උත්පාදන කේතයක් (LISP), උසස් ගණිත (APL), වස්තු (සිමියුලා) නැත, එබැවින් එය ඉතා ඉහළ මට්ටමක නොතිබූ බව අපට එකඟ විය හැකිය
ක්‍රිස්ටෝෆ්

21

යමෙක් malloc / free මතක කළමනාකරණ රටාව "පහත් මට්ටමේ ක්‍රමලේඛනය" ලෙස සඳහන් කළ විට මම මෙම වෙබ් අඩවියේ වෙනත් තැනක ලියා ඇති පරිදි

කාලයත් සමඟ "පහත් මට්ටමේ" අර්ථ දැක්වීම වෙනස් වන ආකාරය විහිළුවක්. මා ප්‍රථම වරට වැඩසටහන් ඉගෙනීමට ඉගෙන ගන්නා විට, සරල වෙන් කිරීමක් / නිදහස් රටාවක් කළ හැකි ප්‍රමිතිගත ගොඩවල් ආකෘතියක් සපයන ඕනෑම භාෂාවක් සැබවින්ම ඉහළ මට්ටමේ යැයි සැලකේ. දී පහළ මට්ටමේ වැඩසටහන්, ඔබ මතක ඔබ, වාර්තාවක් තබා ගැනීමට ඇති කියලා (නො වෙන්, නමුත් මතක ස්ථාන තමන්!), හෝ ඔබ ඇත්තටම විසිතුරු දැනෙන්නේ නම් ඔබේ ම ගොඩක් විබෙදුම් ලියන්න.

සන්දර්භය සඳහා, මෙය 90 දශකයේ මුල් භාගයේ දී, සී එළියට ආ පසු ය.


80 දශකයේ අග භාගයේ සිට සම්මත පුස්තකාලය යනු දෙයක් පමණක් නොවේද (දැනට පවතින යුනික්ස් ඒපීඅයි මත පදනම්ව). එසේම, කර්නල් ක්‍රමලේඛනය (සී හි මුල් ගැටළු වසම විය) ස්වාභාවිකවම අතින් මතක කළමනාකරණය වැනි පහත් මට්ටමේ දේවල් අවශ්‍ය වේ. ඒ වන විට සී යනු බරපතල කර්නලයක් ලියා ඇති ඉහළම මට්ටමේ ක්‍රමලේඛන භාෂාව විය යුතුය (මම හිතන්නේ වර්තමානයේ එන්ටී කර්නලය සෑහෙන තරම් සී ++ භාවිතා කරයි).
amon

6
හයිඩ්, මම 1970 ගණන්වලදී ඇල්ගෝල් 60, විවිධ ෆෝට්‍රාන් උපභාෂා දෙකක් සහ විවිධ මූලික උපභාෂා කිහිපයක් භාවිතා කළෙමි.
සොලමන් මන්දගාමී

7
නිශ්චිතවම කිවහොත්, ඔබට තවමත් call malloc()ජුවම ඇමතීමෙන් brk(2)හෝ mmap(2)එහි ප්‍රති memory ලයක් වන මතකය කළමනාකරණය කිරීමෙන් ඔබට කිසිදු වැඩසටහනක් නොමැතිව වැඩසටහන්ගත කළ හැකිය . එය සිතාගත නොහැකි ප්‍රතිලාභයක් සඳහා දැවැන්ත PITA එකකි (ඔබ අනිෂ්ට දෙයක් වැනි දෙයක් ක්‍රියාත්මක නොකරන්නේ නම්), නමුත් ඔබට එය කළ හැකිය.
කෙවින්

1
@amon - ඇල්ගෝල් හි පහළ සිට ඉහළට ක්‍රමලේඛනය කරන ලද විශිෂ්ට බරෝස් තොග මත පදනම් වූ යන්ත්‍ර හැර ... සහ යුනික්ස් වලට වඩා බොහෝ කලින්. ඔහ්, සහ මාර්ගය වන විට, යුනික්ස් සඳහා ආශ්වාදයක් වූ මල්ටික්ස්: පීඑල් / අයි හි ලියා ඇත. ඇල්ගෝල් වලට සමාන, සී ට වඩා ඉහළ මට්ටමක
ඩේවිඩ්බක්

6
ඇත්ත වශයෙන්ම, අද අපගෙන් වැඩි දෙනෙක් මල්ටික්ස් භාවිතා නොකිරීමට හේතුව බොහෝ දුරට සිදුවී ඇත්තේ එය ඉතා අසරණ මිල අධික මේන්ෆ්‍රේම් මත පමණක් ධාවනය වීම නිසාය - එනම්, දවසේ සාමාන්‍ය කෝපාවිෂ් main ප්‍රධාන රාමු වියදම සහ කැබිනට් භාගයක අමතර වියදම අථත්ය මතකය ආරක්ෂිතව ක්රියාත්මක කිරීම සඳහා විශේෂිත දෘඩාංග. VAX-11 වැනි බිට් 32 කුඩා පරිගණක සියල්ලෝම එළියට ආ විට බැංකු සහ රජය IBM සහ සෙවන් වාමන වලින් දිරාපත් වී ඔවුන්ගේ මහා පරිමාණ සැකසුම් "කුඩා" පරිගණක වෙත ගෙන ගියහ.
davidbak

15

“සී ඉහළ මට්ටමේ භාෂාවක් නොවේ” වැනි දේවල් බොහෝ පිළිතුරු දැනටමත් මුල් ලිපි වෙත යොමු කර ඇත.

කෙසේ වෙතත්, ගොඩගැසීමට මට විරුද්ධ විය නොහැක: බොහෝ විට, බොහෝ විට හෝ සියලුම එච්එල්එල් නොවේ නම් - ඇල්ගෝල්, ඇල්ගොල් -60, පීඑල් / 1, පැස්කල් - සපයා ඇති සීමාවන් පරීක්ෂා කිරීම සහ සංඛ්‍යාත්මක පිටාර ගැලීම් හඳුනාගැනීම.

අවසන් වරට මම පරික්ෂා කළේ බෆරය සහ පූර්ණ ආරක්ෂිත පිටාර ගැලීම් බොහෝ ආරක්ෂක දුර්වලතාවලට මූලික හේතුවයි. ... ඔව්, තවමත් නඩුව ...

ගතික මතක කළමනාකරණය සඳහා තත්වය වඩාත් සංකීර්ණ වූ නමුත් තවමත්, C ස්ටයිල් malloc / free යනු ආරක්ෂාව සම්බන්ධයෙන් පසුගාමී පියවරකි.

එබැවින් එච්එල්එල් පිළිබඳ ඔබේ නිර්වචනයට “බොහෝ පහත් මට්ටමේ දෝෂ ස්වයංක්‍රීයව වළක්වයි” ඇතුළත් නම්, සී සහ යුනික්ස් සිදු නොවූයේ නම්, කණගාටුදායක සයිබර් ආරක්ෂණ තත්ත්වය බෙහෙවින් වෙනස් වනු ඇත.


7
ඉන්ටෙල් එම්පීඑක්ස් ක්‍රියාවට නැංවීමට මා සම්බන්ධ වී ඇති හෙයින් සහ එය ක්‍රියාත්මක වන්නේ නම් දර්ශක / මායිම් පිරික්සුම් සම්පාදකයා නම්, ඒවායේ ක්‍රියාකාරිත්වය පිළිබඳ පත්‍රිකා වෙත ඔබව යොමු කළ හැකිය: අත්‍යවශ්‍යයෙන්ම 5-15%. 50% ක් මන්දගාමී විය හැකි බොළඳ චෙක්පත් හා සසඳන විට 1970 සහ 1980 ගණන්වල යන්තම් කළ හැකි සම්පාදක විශ්ලේෂණයන්ගෙන් බොහෝමයක් ඊට ඇතුළත් ය. කෙසේ වෙතත්, සී සහ යුනික්ස් වසර 20 ක් වන විට එවැනි විශ්ලේෂණයන්හි වැඩ කටයුතු ආපසු හැරවූ බව පැවසීම සාධාරණ යැයි මම සිතමි - සී වඩාත් ජනප්‍රිය ක්‍රමලේඛන භාෂාව බවට පත්වන විට ආරක්ෂාව සඳහා අඩු ඉල්ලුමක් පැවතුනි.
ක්‍රේසි

9
@jamesqf එපමණක් නොව, C ට පෙර බොහෝ යන්ත්‍රවල මායිම් පරීක්ෂා කිරීම සහ පූර්ණ සංඛ්‍යා පිටාර ගැලීම සඳහා විශේෂ දෘඩාංග ආධාරකයක් තිබුණි. සී එම එච්.ඩබ්ලිව් භාවිතා නොකළ බැවින් අවසානයේදී එය ඉවත් කර ඉවත් කරන ලදී.
ක්‍රේසි

5
@jamesqf නිදසුනක් ලෙස: MIPS RISC ISA මුලින් පදනම් වී ඇත්තේ ස්ටැන්ෆර්ඩ් මිණුම් දණ්ඩ මත වන අතර ඒවා මුලින් පැස්කල් හි ලියා ඇති අතර පසුව එය සී වෙත මාරු විය. සර්කා 2010 මම MIPS හි සේවය කරමින් සිටියෙමි, මගේ ලොක්කාට MIPSr6 ​​හි භාවිතයට නොගත් උපදෙස් ඉවත් කිරීමට අවශ්‍ය වූ අතර අධ්‍යයනවලින් පෙනී ගියේ පිටාර ගැලීම් චෙක්පත් කිසි විටෙකත් භාවිතා නොකරන බවයි. නමුත් ජාවාස්ක්‍රිප්ට් එවැනි චෙක්පත් කළ බව පෙනී ගියේය - නමුත් මෙහෙයුම් පද්ධතියේ සහය නොමැතිකම නිසා ලාභ උපදෙස් භාවිතා කිරීමට නොහැකි විය.
ක්‍රේසි ග්ලූ

3
RaKrazyGlew - අත්සන් කරන ලද පූර්ණ සංඛ්‍යා පිටාර ගැලීම හේතුවෙන් “නිර්වචනය නොකළ හැසිරීම” පිළිබඳව පරිශීලකයින් සහ සම්පාදක ලේඛකයින් අතර සටන උණුසුම් වෙමින් පවතින බැවින්, මෙය සම්පාදනය කිරීම ඉතා සිත්ගන්නා කරුණකි. වැඩසටහන වඩාත් නරක අතට පාපයක් නැත "සහ stackoverflow මත තනතුරු 11. ප්ලෙන්ටි එය ඉහළ ගිය සහ වෙනත් තැන්වල මෙම පිළිබිඹු ...
davidbak

2
රස්ට් හට සී වැනි සිම්ඩ් සහජ බුද්ධියක් තිබුනේ නම්, එය නවීනතම අතේ ගෙන යා හැකි එකලස් කිරීමේ භාෂාවක් විය හැකිය. ආක්‍රමණශීලී යූබී මත පදනම් වූ ප්‍රශස්තිකරණය සහ නවීන CPUs සහාය දක්වන නව ප්‍රාථමික මෙහෙයුම් අතේ ගෙනයාමට අපොහොසත් වීම නිසා සී අතේ ගෙන යා හැකි එකලස් කිරීමේ භාෂාවක් ලෙස නරක අතට හැරෙමින් තිබේ (පොප්කන්ට්, ප්‍රමුඛ / පසුපස ශුන්‍ය ගණන් කිරීම, බිට්-රිවර්ස්, බයිට්-රිවර්ස්, සංතෘප්ත ගණිතය). එච්ඩබ්ලිව් ආධාරයෙන් CPU වල කාර්යක්ෂම ඇම් සෑදීම සඳහා සී සම්පාදකයින් ලබා ගැනීම සඳහා බොහෝ විට අතේ ගෙන යා නොහැකි සහජ බුද්ධියක් අවශ්‍ය වේ. ඉලක්ක නොමැතිව පොප්කන්ට් සම්පාදකයා විසින් අනුකරණය කර තිබීම, හඳුනා ගැනීම හඳුනා ගැනීම වඩා හොඳය popcnt.
පීටර් කෝර්ඩ්ස්

8

සී (1972) ට පෙර පැවති පැරණි හා වඩා උසස් භාෂා සලකා බලන්න:

ෆෝට්රාන් - 1957 (සී ට වඩා ඉහළ මට්ටමක නැත)

ලිස්ප් - 1958

කොබෝල් - 1959

ෆෝට්රාන් IV - 1961 (සී ට වඩා ඉහළ මට්ටමක නැත)

පීඑල් / 1 - 1964

ඒපීඑල් - 1966

ප්ලස්බෝඩ් මත පදනම් වූ ඒකක වාර්තා පද්ධති වෙනුවට බොහෝ විට ක්‍රමලේඛන භාෂාවක් වන ආර්පීජී (1959) වැනි මධ්‍යම මට්ටමේ භාෂාවක්.

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


2
ඔබට පැරණි, උසස් භාෂා ලැයිස්තුගත කිරීමට අවශ්‍ය නම්, LISP අමතක නොකරන්න .
අඩුකිරීමේ

Ed ඩෙඩප්ලිකේටර් - මම එය ලැයිස්තුවට එකතු කළෙමි. මම අවධානය යොමු කළේ අයිබීඑම් මේන්ෆ්‍රේම් සඳහා භාවිතා කළ දේ මත වන අතර, එල්එස්පී එතරම් ජනප්‍රිය වූ බව මට මතක නැත, නමුත් ඒපීඑල් ද අයිබීඑම් මේන්ෆ්‍රේම් (කාල බෙදාගැනීමේ කොන්සෝල හරහා) සහ අයිබීඑම් 1130 සඳහා හොඳ භාෂාවක් විය. වඩාත් සුවිශේෂී ඉහළ මට්ටමේ භාෂා, උදාහරණයක් ලෙස වර්තමාන APL අනුවාදය සමඟ කොන්වේගේ ජීවන ක්‍රීඩාව නිර්මාණය කිරීමට කොපමණ කුඩා කේතයක් අවශ්‍ය දැයි බලන්න: youtube.com/watch?v=a9xAKttWgP4 .
rcgldr

2
මම RPG හෝ COBOL විශේෂයෙන් ඉහළ මට්ටමේ යැයි ගණන් ගන්නේ නැත, අවම වශයෙන් COBOL-85 ට පෙර නොවේ. ඔබ COBOL හි මතුපිට සීරීමට ලක් කරන විට, එය අත්‍යවශ්‍යයෙන්ම ඉතා දියුණු එකලස් කිරීමේ මැක්‍රෝස් එකතුවක් බව ඔබට පෙනේ. ආරම්භයේදී, එහි කාර්යයන්, ක්‍රියා පටිපාටි සහ පුනරාවර්තනය මෙන්ම ඕනෑම ආකාරයක විෂය පථයක් නොමැත. වැඩසටහනේ ඉහළින්ම ඇති සියලුම ගබඩාවන් අතිශය දිගු ප්‍රකාශයන් හෝ වේදනාකාරී විචල්‍ය නැවත භාවිතා කිරීමකට තුඩු දිය යුතුය.
idrougge

ෆෝට්රාන් IV භාවිතා කිරීම පිළිබඳ මට නරක මතකයන් කිහිපයක් ඇත, එය සී ට වඩා සැලකිය යුතු තරම් ඉහළ මට්ටමක තිබීම මට මතක නැත
ඩේව්

roidrougge - COBOL සහ RPG, සහ ප්‍රධාන රාමු උපදෙස් කට්ටලවලට ඇමරිකා එක්සත් ජනපදය වැනි රටවල මූල්‍ය මෘදුකාංග සඳහා අවශ්‍ය වන ඇසුරුම් කරන ලද හෝ ඇසුරුම් නොකළ BCD සඳහා පූර්ණ සහාය ඇතුළත් වේ. "අනුරූපව චලනය කිරීම" වැනි අදාළ දේශීය ක්‍රියාකරුවන් ඉහළ මට්ටමක පවතින බව මම සලකමි. ආර්පීජී අසාමාන්‍ය දෙයක් වූයේ ඔබ අමු ආදාන ක්ෂේත්‍ර සහ ආකෘතිගත නිමැවුම් ක්ෂේත්‍ර සහ / හෝ සමුච්චය අතර සම්බන්ධතාවය නියම කළ නමුත් මෙහෙයුම් අනුපිළිවෙල නොවේ, එය ප්‍රතිස්ථාපනය කළ ප්ලග්බෝඩ් ක්‍රමලේඛයට සමානය.
rcgldr

6

ඔබේ ප්‍රශ්නයට පිළිතුර රඳා පවතින්නේ එය අසන්නේ කුමන භාෂාවද යන්න මතය.

ඩෙනිස් රිචීගේ 1974 සී යොමු අත්පොතෙහි විස්තර කර ඇති භාෂාව පහත් මට්ටමේ භාෂාවක් වන අතර එමඟින් ඉහළ මට්ටමේ භාෂාවල වැඩසටහන්කරණ පහසුව ලබා දෙනු ඇත. එම භාෂාවෙන් උපුටා ගන්නා ලද උපභාෂා ද පහත් මට්ටමේ ක්‍රමලේඛන භාෂාවන් විය.

කෙසේ වෙතත්, 1989/1990 සී ප්‍රමිතිය ප්‍රකාශයට පත් කරන විට, එය සත්‍ය යන්ත්‍ර ක්‍රමලේඛනය සඳහා ජනප්‍රිය වී ඇති පහත් මට්ටමේ භාෂාව විස්තර නොකළ අතර ඒ වෙනුවට ඉහළ මට්ටමේ භාෂාවක් විස්තර කළ හැකි නමුත් එය අවශ්‍ය නොවීය. පහළ මට්ටමේ වචන වලින් ක්‍රියාත්මක කිරීම.

සී ස්ටෑන්ඩර්ඩ් හි කතුවරුන් පවසන පරිදි, භාෂාව ප්‍රයෝජනවත් වූ එක් කරුණක් වූයේ බොහෝ ක්‍රියාත්මක කිරීම් ඉහළ මට්ටමේ එකලස් කරන්නන් ලෙස සැලකිය හැකි වීමයි. වෙනත් ඉහළ මට්ටමේ භාෂාවන්ට විකල්පයක් ලෙස C ද භාවිතා කර ඇති නිසාත්, බොහෝ යෙදුම්වලට ඉහළ මට්ටමේ භාෂාවන්ට කළ නොහැකි දේ කිරීමට හැකියාවක් අවශ්‍ය නොවූ නිසාත්, සම්මතයේ කතුවරුන් අත්තනෝමතික ලෙස හැසිරීමට ඉඩ දී ඇත වැඩසටහන් පහත් මට්ටමේ ඉදිකිරීම් භාවිතා කිරීමට උත්සාහ කළේ නම්. සී ස්ටෑන්ඩර්ඩ් විසින් විස්තර කරන ලද භාෂාව කිසි විටෙකත් පහත් මට්ටමේ ක්‍රමලේඛන භාෂාවක් නොවීය.

මෙම වෙනස අවබෝධ කර ගැනීම සඳහා, රිචීගේ භාෂාව සහ සී 89 කේත ස්නිපටය දෙස බලන ආකාරය සලකා බලන්න:

struct foo { int x,y; float z; } *p;
...
p[3].y+=1;

වේදිකාවක “char” බිටු 8 ක්, “int” බිටු 16 විශාල-එන්ඩියන්, “float” බිටු 32 ක් වන අතර ව්‍යුහයන්ට විශේෂ පෑඩින් හෝ පෙළගැස්වීමේ අවශ්‍යතා නොමැති බැවින් “struct foo” හි ප්‍රමාණය බයිට් 8 කි.

රිචීගේ භාෂාවෙන්, අවසාන ප්‍රකාශයේ හැසිරීම "p" හි ගබඩා කර ඇති ලිපිනය ගෙන, එයට 3 * 8 + 2 [එනම් 26] බයිට් එකතු කර, එම ලිපිනයේ සහ ඊළඟ ලිපිනයේ බයිට් වලින් බිටු 16 ක අගයක් ලබා ගනී. , එම අගයට එකක් එකතු කරන්න, ඉන්පසු එම බිට් 16 අගය එකම බයිට් දෙකකට නැවත ලියන්න. හැසිරීම අර්ථ දැක්වෙන්නේ එහි කුමන ආකාරයේ වස්තුවක් ගබඩා කර ඇත්ද යන්න නොසලකා 26 වන සහ 27 වන බයිට් වල ලිපිනය p හි ඇති ලිපිනයට පසුව ක්‍රියා කිරීමයි.

සී ස්ටෑන්ඩර්ඩ් විසින් නිර්වචනය කරන ලද භාෂාවෙන්, * p විසින් “struct foo [] හි මූලද්‍රව්‍යයක් හඳුනාගත හොත්, එම වර්ගයේ අවම වශයෙන් තවත් සම්පූර්ණ අංග තුනක් වත් අනුගමනය කළ හොත්, අවසාන ප්‍රකාශය සාමාජික y ට සාමාජිකයෙකු එක් කරයි * p ට පසු තෙවන මූලද්‍රව්‍යය. වෙනත් කිසිදු තත්වයක් යටතේ හැසිරීම ප්‍රමිතියෙන් නිර්වචනය නොකෙරේ.

රිචීගේ භාෂාව පහත් මට්ටමේ ක්‍රමලේඛන භාෂාවක් වූ අතර, ක්‍රමලේඛකයෙකුට පහසු වූ විට අරා සහ ව්‍යුහයන් වැනි වියුක්තයන් භාවිතා කිරීමට ඉඩ දී ඇති අතර, එය මතකයේ ඇති වස්තූන්ගේ සැකැස්ම අනුව හැසිරීම අර්ථ දැක්වීය. ඊට හාත්පසින්ම වෙනස්ව, C89 සහ පසු ප්‍රමිතීන් විසින් විස්තර කරන ලද භාෂාව ඉහළ මට්ටමේ වියුක්තයක් අනුව දේවල් නිර්වචනය කරන අතර එයට අනුකූල වන කේතයේ හැසිරීම පමණක් අර්ථ දක්වයි. පහත් මට්ටමේ ක්‍රමලේඛනය සඳහා සුදුසු තත්ත්ව ක්‍රියාත්මක කිරීම සම්මතයෙන් නියම කර ඇති ප්‍රමාණයට වඩා බොහෝ අවස්ථාවන්හිදී ප්‍රයෝජනවත් ලෙස හැසිරෙනු ඇත, නමුත් එවැනි අරමුණු සඳහා සුදුසු වීමට ක්‍රියාත්මක කිරීමක් කළ යුතු දේ සඳහන් කරන “නිල” ලේඛනයක් නොමැත.

ඩෙනිස් රිචී විසින් නිර්මාණය කරන ලද සී භාෂාව මේ අනුව පහත් මට්ටමේ භාෂාවක් වන අතර එය පිළිගැනීමට ලක්විය. කෙසේවෙතත්, සී ප්‍රමිති කමිටුව විසින් නිර්මාණය කරන ලද භාෂාව කිසි විටෙකත් පහත් මට්ටමේ භාෂාවක් නොවූ අතර එය ක්‍රියාත්මක කිරීමේ සහතිකයන් නොමැති විට සම්මත ප්‍රමිතීන් ඉක්මවා යයි.

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.