සමහර විට විවිධ භාෂාවලින් (C / C ++, C #) වැඩසටහන් කරන අතරතුර, මෙම සිතුවිල්ල මගේ මතකයට එයි:
- සෑම භාෂාවක්ම සී ක්රමලේඛන භාෂාවෙන් ලියා තිබේද?
- සී භාෂාව සියලු භාෂාවල මව / පියාද?
- සෑම සංකල්පයක්ම ( OOP , ආදිය) සියල්ල C හි ක්රියාත්මක වේද?
මම නිවැරදි දිශාවටද?
සමහර විට විවිධ භාෂාවලින් (C / C ++, C #) වැඩසටහන් කරන අතරතුර, මෙම සිතුවිල්ල මගේ මතකයට එයි:
මම නිවැරදි දිශාවටද?
Answers:
නොමැත.
OCaml, Haskell, Scheme වැනි Lisp උපභාෂා සහ තවත් භාෂා කිහිපයක් විනෝදාංශ භාෂා සංවර්ධනය සඳහා බොහෝ විට භාවිතා වේ.
බොහෝ භාෂාවන් සී හි ක්රියාත්මක වන්නේ එය සර්වසම්පූර්ණ භාෂාවක් වන අතර, ලෙක්සර්-පාර්සර් උත්පාදක යන්ත්ර (යක් හා බයිසන් වැනි) වැනි සම්පාදක-ලිවීමේ මෙවලම් හොඳින් වටහාගෙන ඇති අතර එය සර්වසම්පූර්ණ ය.
C මුලින්ම නිර්මාණය කරන විට C හි එය මුලින්ම සංවර්ධනය කළ නොහැක. ඇත්ත වශයෙන්ම එය මුලින් සංවර්ධනය කරන ලද්දේ බී භාෂාව භාවිතා කරමිනි . පෙර පැවති භාෂාවන් (ෆෝට්රාන් වැනි) සාමාන්යයෙන් දේශීය එකලස් කිරීමේ භාෂාවක් හෝ යන්ත්ර කේතයක් භාවිතයෙන් ආරම්භ කරන ලදී.
Unrelatedly, OOP වැනි භාෂා රටාවක් ද සාමාන්යයෙන් භාෂාව අඥේයවාදියෙක්. නිදසුනක් ලෙස, ක්රියාකාරී උපමාව ගණිතයේ පදනමක් ලෙස (ඇලොන්සෝ පල්ලිය විසින්) වර්ධනය කරන ලද්දේ ඕනෑම ක්රමලේඛන භාෂාවක් පැවතීමට බොහෝ කලකට පෙරය. කාර්ය පටිපාටික හා ව්යුහාත්මක ක්රමලේඛන ආදර්ශයන් ජෝන් වොන් නියුමාන් වැනි න්යායවාදීන්ගේ ගණිතමය කාර්යයන්ගෙන් එළියට පැමිණියේය. වස්තු-දිශානතිය විවිධාකාර හා සම්බන්ධ නොවූ උත්සාහයන් කිහිපයකින් වර්ධනය කරන ලදී , සමහරක් ලැම්බඩා කැල්කියුලස් (ක්රියාකාරී ආදර්ශය) සහ ඇලන් කේ විසින් ස්මාල්ටෝක් ඇට් සෙරොක්ස් පාර්ක් වැනි ගතික ක්රමලේඛන පද්ධති වලින් සමහරක්.
සී යනු හුදෙක් කතාවේ ඉතා කුඩා කොටසකි, මෙම අදහස් ඇති වී දශක ගණනාවකට පසුව.
සෑම භාෂාවක්ම සී භාෂාවෙන් ලියා තිබේද?
ඒ භාෂාව වියුක්ත ගණිතමය නීති රීති හා සීමා කිරීම් ( "මම ලියන්න නම් සමූහයක් වේ මෙම , බව සිදු"). එය කිසිම දෙයකින් ලියා නැත.
සාමාන්යයෙන් ඉංග්රීසි, ගණිත අංකනය සහ සමහර විශේෂිත පිරිවිතර භාෂාවන්හි විධිමත් අනු කාණ්ඩයක මිශ්රණයකින් එය නියම කර ඇත. සින්ටැක්ස් බොහෝ විට ඊබීඑන්එෆ් හෝ ඒබීඑන්එෆ් හි ප්රභේදයක දක්වා ඇත .
උදාහරණයක් ලෙස, forඅයිඑස්ඕ රූබි භාෂා පිරිවිතරයෙන් ප්රකාශනයේ පිරිවිතර මෙන්න :
§11.5.2.3.4
forප්රකාශනයසින්ටැක්ස්
- for-expression → for for-variable [මෙහි රේඛීය-පර්යන්තයක් නොමැත] in ප්රකාශන do-clause end
- for-variable → වම් පස
|බහු-වම්-පැත්තඅර්ථ නිරූපණය
ඒ සඳහා ප්රකාශනය පහත පරිදි ඇගයීමට ලක් වේ:
- ප්රකාශනය තක්සේරු කරන්න . ප්රකාශනය ඇගයීම බිඳීම් ප්රකාශනයක් , ඊළඟ ප්රකාශනය හෝ නැවත ප්රකාශනය මගින් අවසන් කරන්නේ නම් , හැසිරීම නිශ්චිතව දක්වා නැත. එසේ නොමැති නම්,
Oඑහි ප්රති value ලයක් වශයෙන් ලැබෙන අගය විය යුතුය.ඉඩ
Eඇති විය ප්රාථමික-ක්රමය-පිහිට පැතීමක් ආකෘති ප්රාථමික-ප්රකාශනය [කිසිදු මෙතන රේඛීය ටර්මිනේටර්] .each do | වාරණ-පරාමිතිය-ලැයිස්තුව | වාරණ-ශරීරය end , එම වටිනාකම එහිදී ප්රාථමික-ප්රකාශනය වේO, එම වාරණ-පරාමිතිය-ලැයිස්තුව යනු වානාවකට විචල්ය වන වාරණ-ශරීරය යනු සංයෝගයක්-ප්රකාශය පිළිබඳ කරන්නද-වගන්තිය .තක්සේරු කරන්න
E; කෙසේ වෙතත්, සිය වාරණ නම් වාරණ-ශරීරය වේ ද සංයෝගයක්-ප්රකාශය පිළිබඳ කළ-වගන්තිය පිළිබඳ සඳහා ප්රකාශනය මෙම ඇගයීම, එම පියවර ඇ හැර §11.3.3 දී පියවර) සහ පියවර ඊ තුළ ලෙස හැඳින්වේ) 4) ය මෙම ඇමතුම ඇගයීම සඳහා ගනු ලැබේ.මෙම වටිනාකම සඳහා ප්රකාශනය යාදින්න එහි ප්රතිඵලයක් අගය වේ.
Scala හි අනුකූලතා රීති වලට වඩා වෙනස් උදාහරණයක් මෙන්න:
බහුමාමක වර්ගය [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T බහුමාමක වර්ගයට අනුකූල වේ [a1>: L ′ 1 <: U ′ 1 ,…, a n >: L ′ n <: U ′ n ] T ′ නම්, L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U′n කෙනෙකුට T <: T ′ සහ L i <: L ′ i සහ U ′ i<: U i සඳහා i {{1,…, n} .
සී භාෂාවේ මව / සියලු භාෂාවල පියාද?
නැත, එසේ නොවේ. සී තරමක් තරුණයි. පැරණි භාෂා ගොඩක් තිබේ. කාල චාරිකාව භෞතිකව කළ නොහැකි බැවින්, එම පැරණි භාෂාවන්ට කිසියම් බලපෑමක් කිරීමට සී හට නොහැකි ය.
සී සොයා ගැනීමට පෙර ඒවා සියල්ලම පැවතුනි. තවත් බොහෝ දෙනෙකුට C හි බලපෑමක් නැත. පැස්කල්-භාෂා පවුල (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) යනු සම්පූර්ණයෙන්ම වෙනම පෙළපතකි. මුළු ලිස්ප් පවුලම (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, ආදිය) සම්බන්ධයක් නැත. ක්රියාකාරී භාෂා (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) සහ යැපෙන මුළු පවුලම (Agda, Coq, GURU, Idris) හැකිතාක් දුරට C ට වඩා දුරින් පවතී. ස්මාල්ටෝක් පවුලට (ස්මාල්ටෝක්, සෙල්ෆ්, නිව්ස්පීක්, අප, කෝර්ස්), තාර්කික ක්රමලේඛන පවුල (ප්ලැනර්, ප්රොලොග්, මර්කරි), එස්.කේ.එල් සහ තවත් බොහෝ අය සඳහා ද මෙය අදාළ වේ.
සෑම සංකල්පයක්ම (ඕඕපී යනාදිය) සී භාෂාවෙන් ක්රියාත්මක වේද?
OO සංකල්ප සහිත පළමු භාෂා සිමියුලා (1960) සහ ස්මාල්ටෝක් (1972), නමුත් වස්තු-නැඹුරුවන පද්ධති 1953 තරම් back ත අතීතයේ සිටම ගොඩනගා තිබුණි (ඒවා එසේ නොකියයි). නැවතත්, එය C පැවතීමට බොහෝ කලකට පෙරය, එබැවින් OO හට C සමඟ කිසිදු සම්බන්ධයක් තිබිය නොහැක.
බොහෝ වැදගත් භාෂාවල හරය බොහෝමයක් C වලින් ලියා ඇත, නමුත් තත්වය වෙනස් වේ:
සන් මයික්රො සිස්ටම්ස් විසින් නිර්මාණය කරන ලද පළමු ජාවා සම්පාදකයා සී හි ලියා ඇත, නමුත් දැන් පන්ති පුස්තකාල නිතරම ජාවා භාෂාවෙන් ලියා ඇත (ඒවා ජාවා වීඑම් භාවිතයෙන් ක්රියාත්මක කිරීමට අදහස් කරන බැවින්). JNI (Java Native Interface) භාවිතා කරන සමහර පුස්තකාල අර්ධ වශයෙන් වෙනත් භාෂාවලින් ලිවිය හැකිය, මන්ද ඒවා JVM ට පිටතින් භාවිතා කිරීමට අදහස් කරයි.
සන් / ඔරකල් වීඑම් සී ++ හි ලියා ඇත. බීඊඒ / වෙබ්ලොජික් / ඔරකල් වීඑම් සී හි ලියා ඇත. නමුත් ජාවා, ලිස්ප්, ස්මාල්ටෝක් (අයිබීඑම්) හි ලියා ඇති ජේවීඑම් ඇත ...
C බොහෝ විට තෝරා ගැනීමට හේතු බොහොමයක් ඇත: කාර්ය සාධනය, අතේ ගෙන යා හැකි හැකියාව, අත්දැකීම්.
අවසාන වරට වඩාත්ම වැදගත් දෙය නම්: පයිතන් 1991 දී ආරම්භ කරන ලදි, 1994/1995 දී පීඑච්පී, 1988 දී පර්ල්, 1995 දී රූබි ය. එම වර්ෂවල ජාවා නිකුත්වූ අතර සී ++ තවමත් ප්රමිතිගත වී නොමැත.
තරමක් සම්බන්ධ:
නැත, සමහර භාෂා පෙර දින සී. සහ බොහෝ ඒවා සී වලින් ස්වාධීනව ක්රියාත්මක වේ, උදා: http://en.wikipedia.org/wiki/Lisp_%28programming_language%29 බලන්න
javacකරනු ලබන්නේ 100% ජාවා හි මාටින් ඔඩර්ස්කි (ස්කාලා කීර්තියට පත්) විසින් ලියන ලද ඔරකල් ජේඩීකේ / ඕපන් ජේඩීකේ ය . අයිබීඑම් හි ජේ 9, ජයික්ස් සහ 100% ජාවා වලින් ද ව්යුත්පන්න කර ඇත. ජාවා හි ලියා නොමැති තරමක් පුළුල් භාවිතයේ ඇති එකම ජාවා සම්පාදකයා වන AFAIK යනු GCJ
මට හැකි නම් මම මෙය අදහස් දැක්වීමක් කරමි, නමුත් මට එසේ කළ නොහැකිය.
සී මෙතරම් සර්වසම්පූර්ණ යැයි පෙනෙන්නට එක් හේතුවක් වන්නේ එය දියුණු කළ මුල්ම භාෂාවන්ගෙන් එකක් වන අතර නවීන භාෂාවන් විශාල ප්රමාණයක් එහි ව්යුහයෙන් (ජාවා, ගෝ, පීඑච්පී, පර්ල්, ආදිය) පදනම් වී තිබීමයි. ඊට වඩා ස්ථාන.
බොහෝ විට අමතක වූ හේතුවක් නම්, 1973 දී යුනික්ස් සී හි නැවත ලිවීම සහ යුනික්ස් හි බොහෝ පද්ධති ඇමතුම් සී වැඩසටහන් / ශ්රිත ලෙස ලබා ගත හැකි වීම නිසා ඒවා එකිනෙකට සම්බන්ධ වී තිබීමයි. සමස්තයක් ලෙස නූතන ක්රමලේඛන සංවර්ධනයේ යුනික්ස් ප්රබල කොටසක් වූ බැවින්, සී ඒ සමඟම අපකීර්තියට ඇද දැමීය.
ඒ සියල්ල පැවසීමෙන් පසු ඔබේ ප්රශ්නයට පිළිතුර “නැත” යන්නයි. C පදනම් වී ඇත්තේ ALGOL නම් භාෂාවෙන් වන අතර ALGOL (FORTRAN, Lisp, COBOL) සහ C සමඟ තරඟකරුවන් බොහෝ දෙනෙක් සිටියහ (කිසිවක් මතකයට එන්නේ නැත). වස්තු-නැඹුරු වැඩසටහන්කරණය, ක්රමලේඛන නිර්මාණයේ විශාලතම පරමාදර්ශී මාරුව වන සී සමඟ ආරම්භ නොවීය - සී ++ ඉතා ජනප්රිය ඕඕපී භාෂාවක් වුවද (එය මුලින්ම පෙන්වූයේ ලිස්ප් හෝ සිමියුලා 67, ඔබ ඉල්ලන අය අනුව). OOP ආරම්භ වන විට, C යනු එතරම් ජනප්රිය භාෂාවක් වූ අතර එය මුලින්ම අවශ්ය නොවීය - එය කොතරම් ජනප්රියද යත්, C ++ “ප්රසාරණය”, කථා කිරීමට නම්, ප්රාථමික OOP භාෂාවන්ගෙන් එකක් බවට පත්විය. එය නවීන භාවිතයේ පවතින්නේ එහි ප්රබල මතක පාලන අංගයන් නිසාය (ඔබේ ව්යුහයන් විසින් නිර්මාණය කරන ලද මතකය ඔබට කෙලින්ම වෙන් කර වෙන් කළ හැකිය), තද මතක අයවැය (වීඩියෝ ක්රීඩා සිතන්න) සහ එහි ඉහළ ප්රශස්තිකරණය කළ සම්පාදකය (පැහැදිලිවම සම්පාදකයා මත පදනම්ව) මත වැඩසටහන් නිර්මාණය කිරීමට එයට ඉඩ දෙයි. ජාවා JIT සම්පාදනය සහ භාෂා මතක කළමණාකරුවන් වඩාත් දියුණු වීමත් සමඟ මෙම අංග පවා නැති වී යන බව පිළිගත යුතුය.
පැහැදිලිවම නැහැ. C මීට පෙර නොතිබුනේ නම් පළමු C සම්පාදකය C හි ලිවිය හැක්කේ කෙසේද? මෙය කුකුළු මස් හා බිත්තර ගැටලුව නොවේ.
බූට්ස්ට්රැපින් ලෙස හැඳින්වෙන භාෂාවක පළමු සම්පාදකයා ලිවීමට බොහෝ ක්රම තිබේ
එපමණක් නොව බොහෝ සම්පාදකයින් ස්වයං සත්කාරකත්වය ලබා ගැනීමට උත්සාහ කරයි , නැතහොත් එය තම භාෂාව සම්පාදනය කරයි, ප්රධාන වශයෙන් භාෂාව සහ සම්පාදකයා ප්රවර්ධනය කිරීම සඳහා
C හි ලියා නොමැති සමහර ක්රමලේඛන භාෂාවන් ලැයිස්තුවක් මෙන්න, ඒවා ක්රියාත්මක කරන භාෂා සමඟ :
සම්පාදකයෙකු ක්රියාවට නැංවීම සඳහා හොඳම භාෂා බොහෝ විට සී ට වඩා බොහෝ දුරින් පවතිනු ඇත. ක්රියාකාරී භාෂාවන් මඟින් ඔබට පුනරාවර්තන යෝජනා ක්රම සහ මොනාඩික් පාර්සර් සංයෝජක (ඔබට ටයිප් ක්ලාස් තිබේ නම්) වැනි දේ ලබා දෙයි, එමඟින් ඒවා සම්පාදක වැඩ සඳහා විශේෂයෙන් ගැලපේ.
දෙවනුව, සී යනු “සියලු ක්රමලේඛන භාෂාවල මව / පියා” ද යන්න පිළිබඳ ඔබේ ප්රශ්නයට පිළිතුරු සැපයීම - ඇත්ත වශයෙන්ම නොවේ. සී එය දර්ශනය වන විට හොඳින් සැලසුම් කරන ලද භාෂාවක් වූ අතර, එය පසුව වෙනස් දේ කිරීමට ගිය භාෂා නිර්මාණකරුවන්ට බලපෑම් කර ඇති බවට සැකයක් නැත. නමුත් දවස අවසානයේදී, හැස්කෙල් සී වෙතින් ඉවත්ව යන්නේ හැකි සෑම ආකාරයකින්ම ය. සීගේ වයස අවුරුදු 45 ක් වන අතර මේ අතරතුර වඩා හොඳ දේ කිරීමට අප ඉගෙන ගැනීම පුදුමයක් නොවේ.
අවසාන වශයෙන්, ඔබේ තුන්වන ප්රශ්නයට පිළිතුරු සැපයීම සඳහා, සී විසින් “සියලු සංකල්ප” ක්රියාත්මක කිරීම සරලවම නොවේ. විශේෂයෙන්, සී හි ක්රියාකාරී ක්රමලේඛන (පරිවෘත්තීය, හෝ, දෙවියන්ගේ තහනම්, සමමුහුර්තකරණය වැනි) වෙතින් දියුණු වූ සමහර සංකල්ප ක්රියාත්මක කිරීමට උත්සාහ කිරීම අතිශයින් දුෂ්කර වනු ඇත. මම විශේෂයෙන් වස්තු-නැඹුරු වැඩසටහන්කරණය ගැන හුරුපුරුදු නැත, නමුත් සමහර වස්තු-නැඹුරු භාෂාවල එකතුවක් ඇති බව මම දනිමි.
ක්රමලේඛන භාෂාවන් යනු සාමාන්යයෙන් සමහර ඉංග්රීසි ලේඛනයක ලියා ඇති පිරිවිතරයන් (මෘදුකාංග නොවේ!) (සමහර විධිමත් කිරීම සමඟ, උදා: බොහෝ වාක්ය ඛණ්ඩ සඳහා ඊබීඑන්එෆ් ; සමහර විට ඒවායේ අර්ථ නිරූපණය ද අර්ධ වශයෙන් විධිමත් කරනු ලැබේ).
උදාහරණයක් ලෙස, C11 අර්ථ දැක්වෙන්නේ n1570 (ඔබ කියවිය යුතු) ය. යෝජනා ක්රමයේ සමහර උපභාෂාව R5RS මගින් අර්ථ දක්වා ඇත (ඔබද කියවිය යුතුය, එය ඉතා හොඳින් ලියා ඇත).
ක්රමලේඛන භාෂා සමහර මෘදුකාංග මඟින් ක්රියාත්මක කළ හැකිය . සමහර විට එම මෘදුකාංගය ක්රමලේඛන භාෂාවෙන් ලියා ඇති සම්පාදකයෙකි. ඇරඹුම් සම්පාදක ගැන කියවන්න .
කෙනෙකුට සම්පාදක ක්රමලේඛන භාෂාවෙන් සම්පාදකයෙකු ලිවිය හැකිය. එම භාෂාව XX අළුත් නම්, ඔබට තාවකාලික පියවරක් ගත යුතු අතර, එම භාෂාවේ උප කුලකයක අවම පරිවර්තකයෙකු හෝ සම්පාදකයෙකු වෙනත් ක්රියාත්මක කිරීමේ භාෂාවක (සමහර විට සී) ලිවීම අවශ්ය වේ, පසුව ඔබට එම තාවකාලික සම්පාදකයා විසි කළ හැකිය. පරිවර්තකය (එය "හොඳ" වීමට අවශ්ය නැත, අනෙක් සම්පාදකයා සම්පාදනය කිරීමට ප්රමාණවත් වීමට). ඔබ XX හි ලියා ඇති ඔබේ XX සම්පාදකය සම්පාදනය කළ පසු ඔබට තාවකාලික සම්පාදකය ඉවත දැමිය හැකිය.
බොහෝ විට (නමුත් සෑම විටම නොවේ) ධාවන කාල පද්ධතිය අර්ධ වශයෙන් C හි ලියා ඇත (විශේෂයෙන් කසළ එකතු කරන්නා ).
සිටින බව දැනුම් ඇටකටු සම්පූර්ණයෙන්ම ම ලියන ලද යෝජනා ක්රමය සම්පාදක හා ධාවන වේ (සහ ඔබ සම්පූර්ණ ලෙස ගලවා ක්රියාවට තවත් බොහෝ උදාහරණ සොයා ගත හැකි).
BTW සම්පාදකයින්ගේ ඉලක්ක භාෂාව ලෙස C භාවිතා කිරීම පහසුය .
අද, බොහෝ ක්රමලේඛන භාෂා ක්රියාත්මක කිරීම නිදහස් මෘදුකාංග හෝ විවෘත ප්රභවයකි . ඔවුන්ගේ ප්රභව කේතය අධ්යයනය කිරීමට (සහ සමහර විට දායක වීමට) නිදහස් වන්න!