සී, පර්ල්, පයිතන් යනාදිය වෙනුවට සී ++ භාවිතා කිරීමට හේතුවක් තිබේද? [වසා ඇත]


166

ලිනක්ස් (සේවාදායක පැත්ත) සංවර්ධකයෙකු ලෙස, මම C ++ භාවිතා කළ යුත්තේ කොතැනද සහ ඇයිදැයි මම නොදනිමි.

මම කාර්ය සාධනය සඳහා යන විට, පළමු හා අවසාන තේරීම සී.

"කාර්ය සාධනය" ප්‍රධාන ගැටළුව නොවන විට, පර්ල් සහ පයිතන් වැනි ක්‍රමලේඛන භාෂා හොඳ තේරීමක් වනු ඇත.

මෙම ප්‍රදේශයේ මා දන්නා විවෘත මෘදුකාංග සියල්ලම පාහේ සී, පර්ල්, පයිතන්, බෑෂ් ස්ක්‍රිප්ට්, ඒඩබ්ලිව්කේ හෝ පීඑච්පී වලින් ලියා ඇත , නමුත් කිසිවෙකු සී ++ භාවිතා නොකරයි.

මම GUI හෝ වෙබ් යෙදුම් වැනි වෙනත් අංශ ගැන සාකච්ඡා නොකරමි, මම කතා කරන්නේ ලිනක්ස්, සීඑල්අයි සහ ඩීමන් ගැන ය.

C ++ භාවිතා කිරීමට සතුටුදායක හේතුවක් තිබේද?


5
මම සලකන්නේ STL නිසා C ++ පමණි.
dan_waterworth

46
එබැවින් සී, පර්ල් සහ පයිතන් භාවිතා කර කළ හැකි දෙයක් සී ++ භාවිතයෙන් පමණක් කළ හැකිය. ඔබ අහනවා C ++ භාවිතා කරන්නේ ඇයි?
මනෝජ් ආර්

37
Performance මම කාර්ය සාධනයට යන විට, පළමු හා අවසාන තේරීම සී. »ඔව් විශ්වාසයි: D මෙය ඔප්පු නොකළ සහ සුළු වශයෙන් වැරදි ප්‍රකාශයකි.
deadalnix

16
ad ඩෙඩල්නික්ස්: මම එහෙම කියන්නේ නැහැ. C ++ සතුව සංකීර්ණ නීති ඇත, එය ප්‍රශස්තිකරණයට පසුබැසීමට ඉඩ ඇත, මන්ද එයට සමහර දේවල් කිරීමට අවසර නැත. අදෘශ්‍යමාන කාර්ය සාධන lers ාතකයින් වෙත පිවිසීම ඉතා පහසුය. එය බොහෝ දුරට අක්ෂීය හා ඒ නිසා සත්‍ය ය: D තවමත් යථාර්ථයේ දී C ++ කේතය සමහර විට වේගවත් වනු ඇත, මන්ද ඔබ වඩාත් effective ලදායී ඇල්ගොරිතම සහ දත්ත ව්‍යුහයන් භාවිතා කරනු ඇති අතර කිසිවෙකු ඇත්ත වශයෙන්ම C කේතය ප්‍රශස්තිකරණය නොකරයි. එබැවින් නිවැරදිව සිදු කළ විට, C ++ ආරක්ෂිත සහ වඩා effective ලදායී C වන අතර, අනුකූලතා ගැටලු නොමැති විට හෝ 100% ලබා ගත හැකි මෘදුකාංග සඳහා අවශ්‍යතාවයක් නොමැති විට ඔබ C ට වඩා C ++ තෝරා ගත යුතුය.
කෝඩර්

4
පළ කරන ලද පිළිතුරු වල නොසැලකීමට හොඳම හේතුව OP ගේ ප්‍රශ්නයට කෙලින්ම සම්බන්ධ වේ. අවපීඩන !!!!, ඔබේ සාමාන්‍ය පද්ධතියට c ++ ලිබ් නොමැති බව නොවේ, නමුත් කාවැද්දූ පද්ධතියකට ඒවා නොතිබිය හැකිය. සෑම පද්ධතියකම ඔබේ වැඩසටහන ලබා ගත හැකි එකම ක්‍රමය නම්, ඔබේ වැඩසටහන නිතිපතා සී වලින් ලිවීමයි. අනෙක් සියල්ලම ඔබ විවාදයට භාජනය වන්නේ ඔබ සී ++ භාවිතා නොකළ යුත්තේ ඇයිද යන්නයි. C ++ වැඩිපුර භාවිතා නොකිරීමට හේතුව ඒ කිසිවක් ආමන්ත්‍රණය නොකරන අතර කුසලතා නොසලකා හේතුව පරායත්තතාවයන් වේ .... O සහ ලිනස්ගේ සුප්‍රසිද්ධ c ++ රැන්ට්.
ජේ.එම්. බෙකර්

Answers:


310

මම කාර්ය සාධනයට යන විට, පළමු හා අවසාන තේරීම සී.

ඔබ උපස්ථ කළ යුත්තේ එතැනිනි. දැන්, මම, නොහැකි සියලු දී , සේවාදායකය සංවර්ධනය සඳහා කතා කරන්න. සමහර විට විකල්පයන්ට වඩා C ++ ට වැඩි කැමැත්තක් දැක්වීමට බලවත් හේතුවක් නැත.

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

මෙය තවමත් ඉතා ඉහළ වියුක්ත මට්ටමක් ඇති ඉතා කාර්යක්ෂම කේතයක් ලිවීමට ඉඩ දෙයි .

සුපුරුදු වියුක්තයන් සලකා බලන්න: අතථ්‍ය ශ්‍රිත, ක්‍රියාකාරී දර්ශක සහ PIMPL idiom. මේ සියල්ලම රඳා පවතින්නේ දර්ශක අංක ගණිතය මගින් නිරාකරණය වන ධාවන කාලයේ දී ය. වෙනත් වචන වලින් කිවහොත්, එය කාර්ය සාධන පිරිවැයක් දරයි (එය කොතරම් කුඩා වුවත්).

C ++, අනෙක් අතට, (කාර්ය සාධන) පිරිවැයක් දැරීමට ඉඩ නොතබන යාන්ත්‍රණයක් ඉදිරිපත් කරයි : සැකිලි. (මෙම වාසිය ගෙවනු ලබන්නේ (සමහර විට විශාල වශයෙන්) වැඩි කරන ලද සම්පාදක කාලයක් සමඟිනි.)

සාමාන්‍ය වර්ග කිරීමේ ශ්‍රිතයක උදාහරණය සලකා බලන්න.

C හි, ශ්‍රිතය ශ්‍රිත ලක්ෂ්‍යයක් qsortගන්නා අතර මූලද්‍රව්‍ය එකිනෙකට සාපේක්ෂව ඇණවුම් කරන තර්කනය ක්‍රියාත්මක කරයි. ජාවා හි Arrays.sortක්‍රියාකාරිත්වය ප්‍රභේද කිහිපයකින් පැමිණේ; ඒවායින් එකක් අත්තනෝමතික වස්තූන් වර්ග කරන Comparatorඅතර C හි ශ්‍රිත දර්ශකයට සමාන වස්තුවක් එයට යැවිය යුතුය qsort. නමුත් “ස්වදේශීය” ජාවා වර්ග සඳහා තවත් අධි බර පැටවීම් කිහිපයක් තිබේ. ඒ සෑම එකක්ම sortක්‍රමයේම පිටපතක් ඇත - භයානක කේත අනුපිටපතක්.

ජාවා මෙහි සාමාන්‍ය ද්විභාෂාවක් නිරූපණය කරයි: එක්කෝ ඔබට කේත අනුපිටපතක් තිබේ නම් හෝ ඔබට ධාවන කාලයට ඉහළින් සිදු වේ.

C ++ හි, sortශ්‍රිතය qsortC හා සමානව ක්‍රියා කරයි , එක් කුඩා නමුත් මූලික වෙනසක් ඇත: ශ්‍රිතයට ලබා දෙන සංසන්දකය අච්චු පරාමිතියකි. ඒ කියන්නේ එහි ඇමතුම ආදාන කළ හැකිය . වස්තූන් දෙකක් සංසන්දනය කිරීම සඳහා අවිනිශ්චිතතාවයක් අවශ්‍ය නොවේ. තද පුඩුවක් තුළ (මෙහි දී මෙන්) මෙය සැබවින්ම සැලකිය යුතු වෙනසක් ඇති කළ හැකිය.

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

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


16
මම දැන් C ++ ගැන ප්‍රමාණවත් දැනුමක් ලබාගෙන සිටිමි. නමුත් ඔබට ලැබුනේ පහළ බැසීම් 1 ක් පමණක් එකතු කිරීමට අවශ්‍ය නිසා සැහැල්ලුවෙන් සිටින්න. මෙය අන්තර්ජාලය වන අතර පහත වැටීම් සිදු වේ. එය තාක්‍ෂණිකව හොඳ නම් හොඳ පිළිතුරක්!
ක්‍රිස්

47
ධාවන වේලාවට ඉහළින් කාර්ය සාධනයක් නොමැත - එය සැමවිටම සත්‍ය නොවේ. ඔබ එස්.ටී.එල්. ) දෛශික impl හි. මෙය එතරම් පැහැදිලි නොවන අතර කළු-සුදු සියල්ලම එක් උදාහරණයක් පමණි.
mojuba

20
@ ජැරොස්ලෝ, te ස්ටීව්: නමුත් සෑම දත්ත වර්ගයක් සඳහාම අනුවර්තනය කරන ලද අතින් ප්‍රශස්තිකරණය කරන ලද කේත සඳහා එකම (= කේත පිපිරුම්, උපදෙස් හැඹිලි මග හැරේ) සත්‍ය වේ (ජාවාහි විවිධ Arrays.sortක්‍රියාත්මක කිරීම් බලන්න). ඉහළ සාරාංශයේ වාසිය ඔබට අහිමි වන්නේ ඔබට පමණි. මෙය සැකිලි වල නිශ්චිත අවාසියක් නොවේ, එය පොදුවේ කේත අනුපිටපත් කිරීමේ අවාසියකි. තව දුරටත්, තද ලූපවල සිට මෙය වැදගත් නොවේ, සාමාන්‍යයෙන් එය පටවනු ලබන්නේ එකම කේතයයි.
කොන්රාඩ් රුඩොල්ෆ්

19
@Jaroslaw: උපදෙස් හැඹිලි ගැන අපූරු දෙයක් බව ය එය කෑෂ් . එනම්, එය සෑම දෙයක්ම ගබඩා කිරීමට උත්සාහ නොකරයි , මෑතකදී භාවිතා කළ කේතය පමණි . සැකිලි විවිධ වර්ග සඳහා සමාන කේත විශාල ප්‍රමාණයක් ජනනය කළ හැකිය (a vector.push_backසඳහා vector<int>, සහ තවත් එකක් සඳහා vector<float>, නමුත් a සමඟ වැඩ කරන විට vector<int>, vector<float>උපදෙස් හැඹිලියේ කේතය පවතින්නේ මන්දැයි යන්නට එතරම් හේතුවක් නැත. එබැවින් එය සැබවින්ම වැදගත් වන්නේ කෙසේදැයි මම නොදනිමි. සෑම තනි අච්චු ස්ථාපනය කිරීම අතිශයින්ම ප්‍රශස්ත කර ඇති අතර සාමාන්‍යයෙන් අල්ලා ගැනීම-සියල්ල ක්‍රියාත්මක කිරීමට වඩා සංයුක්ත වේ
jalf

30
@ ස්ටීව් 314: ඔබ "පිපිරීම" ලෙස හඳුන්වන්නේ සී සහ ජාවා සඳහා අතින් සිදුකරන දෙයයි. C ++ හි එය ස්වයංක්‍රීය කළ හැකි අතර, වෙළෙන්දන් ඉදිමීම වළක්වා ගැනීමට වෙළෙන්දන් තරම් නිර්භීත විය හැකිය. මන්දගාමී වීම (සී හි මෙන්) හෝ අනුපිටපත් කේතය (ජාවාහි මෙන්) භාවිතා කිරීම අතර මට තීරණය කිරීමට සිදුවුවහොත්, සම්පාදකයා අනුපිටපත් කිරීම (සහ සමහර විට ඒ ගැන බුද්ධිමත් වීම) හොඳ යැයි පෙනේ, නැත?
sbi

168

C ++ ට වෛර කරන බොහෝ C ක්‍රමලේඛකයින් මට පෙනේ. හොඳ දේ සහ නරක කුමක්ද යන්න සෙමින් තේරුම් ගැනීමට මට සෑහෙන කාලයක් (අවුරුදු) ගත විය. වාක්‍ය ඛණ්ඩයට හොඳම ක්‍රමය මෙය යැයි මම සිතමි.

අඩු කේතයක්, ධාවන කාලයට ඉහළින්, වැඩි ආරක්ෂාවක් නොමැත.

අපි ලියන අඩු කේතය, වඩා හොඳය. විශිෂ්ටත්වය සඳහා වෙහෙසෙන සියලුම ඉංජිනේරුවන් තුළ මෙය ඉක්මනින් පැහැදිලි වේ. ඔබ එක් ස්ථානයක දෝෂයක් නිවැරදි කරයි, බොහෝ නොවේ - ඔබ එක් වරක් ඇල්ගොරිතමයක් ප්‍රකාශ කර එය බොහෝ ස්ථානවල නැවත භාවිතා කරයි. ග්‍රීකයන්ට පුරාණ ස්පාටන්වරුන් දක්වා දිවෙන කියමනක් ඇත: “අඩු වචන වලින් යමක් කීමට, අදහස් කරන්නේ ඔබ ඒ ගැන wise ානවන්ත බව ". කාරණයේ සත්‍යය නම්, නිවැරදිව භාවිතා කරන විට , C ++ ඔබට C ට වඩා අඩු කේතයකින්, ධාවන වේලාවකින් තොරව ප්‍රකාශ කිරීමට ඉඩ ලබා දෙන අතර, C ට වඩා ආරක්ෂිත (එනම් සම්පාදක වේලාවේදී වැඩි දෝෂ අල්ලා ගැනීම).

මෙන්න මගේ විදැහුම්කරුගේ සරල උදාහරණයකි : ත්‍රිකෝණයක ස්කෑන්ලයින් හරහා පික්සල් අගයන් අන්තර්ග්‍රහණය කිරීමේදී. මට X ඛණ්ඩාංක x1 සිට ආරම්භ කළ යුතු අතර X ඛණ්ඩාංක x2 වෙත ළඟා විය යුතුය (ත්‍රිකෝණයක වමේ සිට දකුණට). සෑම පියවරක් හරහාම, එක් එක් පික්සෙල් හරහා මා පසුකර යන විට, මට අගයන් අන්තර්ග්‍රහණය කළ යුතුය.

මම පික්සෙල් වෙත ළඟා වන සංසරණ ආලෝකය අන්තර්ග්‍රහණය කරන විට:

  typedef struct tagPixelDataAmbient {
      int x;
      float ambientLight;
  } PixelDataAmbient;

  ...
  // inner loop
  currentPixel.ambientLight += dv;

මම වර්ණය අන්තර්ග්‍රහණය කරන විට (“ගෞර ud ්” සෙවන ලෙස හැඳින්වේ, එහිදී “රතු”, “කොළ” සහ “නිල්” ක්ෂේත්‍ර එක් එක් පික්සෙල් එකක පියවර අගයකින් අන්තර්සම්බන්ධ වේ):

  typedef struct tagPixelDataGouraud {
      int x;
      float red;
      float green;
      float blue;  // The RGB color interpolated per pixel
  } PixelDataGouraud;

  ...
  // inner loop
  currentPixel.red += dred;
  currentPixel.green += dgreen;
  currentPixel.blue += dblue;

මම "ෆොන්ග්" සෙවනෙහි විදැහුම් කරන විට, මම තවදුරටත් තීව්‍රතාවයක් (සංසරණ ආලෝකය) හෝ වර්ණයක් (රතු / කොළ / නිල්) අතරමැදි නොකරමි - මම සාමාන්‍ය දෛශිකයක් (nx, ny, nz) අන්තර්ග්‍රහණය කරමි. සෑම පියවරකදීම මට නැවත කළ යුතුය අන්තර් සම්බන්ධිත සාමාන්‍ය දෛශිකය මත පදනම්ව ආලෝකකරණ සමීකරණය ගණනය කරන්න:

  typedef struct tagPixelDataPhong {
      int x;
      float nX;
      float nY;
      float nZ; // The normal vector interpolated per pixel
  } PixelDataPhong;

  ...
  // inner loop
  currentPixel.nX += dx;
  currentPixel.nY += dy;
  currentPixel.nZ += dz;

දැන්, සී ක්‍රමලේඛකයින්ගේ පළමු සහජ බුද්ධිය වනුයේ “හෙක්, අගයන් අන්තර්ග්‍රහණය කරන ශ්‍රිත තුනක් ලියන්න, සහ කට්ටල මාදිලිය අනුව ඒවා අමතන්න” යන්නයි. පළමුවෙන්ම, මෙයින් අදහස් කරන්නේ මට වර්ගයේ ගැටලුවක් ඇති බවයි - මා කුමක් සමඟ වැඩ කරන්නේද? මගේ පික්සල් පික්සල් ඩේටා ඇම්බියන්ට් ද? PixelDataGouraud? PixelDataPhong? ඔහ්, ඉන්න, කාර්යක්ෂම සී ක්‍රමලේඛකයා පවසන්නේ සමිතියක් භාවිතා කරන්න!

  typedef union tagSuperPixel {
      PixelDataAmbient a;
      PixelDataGouraud g;
      PixelDataPhong   p;
  } SuperPixel;

..එවිට ඔබට කාර්යයක් තිබේ ...

  RasterizeTriangleScanline(
      enum mode, // { ambient, gouraud, phong }
      SuperPixel left,
      SuperPixel right)
  {
      int i,j;
      if (mode == ambient) {
          // handle pixels as ambient...
          int steps = right.a.x - left.a.x;
          float dv = (right.a.ambientLight - left.a.ambientLight)/steps;
          float currentIntensity = left.a.ambientLight;
          for (i=left.a.x; i<right.a.x; i++) {
              WorkOnPixelAmbient(i, dv);
              currentIntensity+=dv;
          }
      } else if (mode == gouraud) {
          // handle pixels as gouraud...
          int steps = right.g.x - left.g.x;
          float dred = (right.g.red - left.g.red)/steps;
          float dgreen = (right.g.green - left.a.green)/steps;
          float dblue = (right.g.blue - left.g.blue)/steps;
          float currentRed = left.g.red;
          float currentGreen = left.g.green;
          float currentBlue = left.g.blue;
          for (j=left.g.x; i<right.g.x; j++) {
              WorkOnPixelGouraud(j, currentRed, currentBlue, currentGreen);
              currentRed+=dred;
              currentGreen+=dgreen;
              currentBlue+=dblue;
          }
...

අවුල් ජාලාව ලිස්සා යන බවක් ඔබට දැනෙනවාද?

පළමුවෙන්ම, මගේ කේතය බිඳවැටීමට අවශ්‍ය වන්නේ එක් යතුරු ලියනයකි, මන්දයත් සම්පාදකයා කිසි විටෙකත් “.a” වෙත ප්‍රවේශ වීම සඳහා ශ්‍රිතයේ “ගෞර ud ්” කොටසේ මාව නවත්වන්නේ නැත. (සංසරණ) අගයන්. සී වර්ගයේ පද්ධතියට හසු නොවූ දෝෂයක් (එනම්, සම්පාදනය අතරතුර), එයින් අදහස් වන්නේ ධාවන වේලාවේදී පෙන්නුම් කරන දෝෂයක් වන අතර එය නිදොස් කිරීම අවශ්‍ය වේ. left.a.green"Dgreen" ගණනය කිරීමේදී මා ප්‍රවේශ වන බව ඔබ දුටුවාද ? සම්පාදකයා නිසැකවම ඔබට එසේ කීවේ නැත.

එවිට, සෑම තැනකම පුනරාවර්තනයක් ඇත - forවිදැහුම්කරණ ක්‍රම ඇති තරම් වාර ගණනක් ලූපය ඇත, අපි දිගටම කරන්නේ “දකුණු us ණ වමේ පියවරෙන් බෙදනු ලැබේ”. කැත සහ දෝෂ සහිත. මම "ජේ" භාවිතා කළ යුතුව තිබූ විට ගෝරාඩ් ලූපයේ "අයි" භාවිතා කිරීම සංසන්දනය කර ඇති බව ඔබ දුටුවාද? සම්පාදකයා නැවතත් නිහ is ය.

මාතයන් සඳහා if / else / ඉණිමඟ ගැන කුමක් කිව හැකිද? සති තුනකින් මම නව විදැහුම්කරණ මාදිලියක් එකතු කළහොත් කුමක් කළ යුතුද? මගේ සියලු කේතයන්හි "if mode ==" හි නව මාදිලිය හැසිරවීමට මට මතකද?

දැන් ඉහත කැතකම, මෙම C ++ ව්‍යුහයන් සහ අච්චු ශ්‍රිතය සමඟ සසඳන්න:

  struct CommonPixelData {
      int x;
  };
  struct AmbientPixelData : CommonPixelData {
      float ambientLight;
  };
  struct GouraudPixelData : CommonPixelData {
      float red;
      float green;
      float blue;  // The RGB color interpolated per pixel
  };
  struct PhongPixelData : CommonPixelData {
      float nX;
      float nY;
      float nZ; // The normal vector interpolated per pixel
  };

  template <class PixelData>
  RasterizeTriangleScanline(
      PixelData left,
      PixelData right)
  {
      PixelData interpolated = left;
      PixelData step = right;
      step -= left;
      step /= int(right.x - left.x); // divide by pixel span
      for(int i=left.x; i<right.x; i++) {
          WorkOnPixel<PixelData>(interpolated);
          interpolated += step;
      }
  }

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

අච්චුවේ ඇති අපගේ ලූපයට අවලංගු කළ නොහැකි අතර අවලංගු ක්ෂේත්‍ර වෙත ප්‍රවේශ විය නොහැක - අප එසේ කළහොත් සම්පාදකයා බුරනු ඇත.

අච්චුව පොදු කාර්යය ඉටු කරයි (ලූපය, එක් එක් කාලයේදී "පියවරෙන්" වැඩි වේ), සහ එය කළ හැක්කේ හුදෙක් ධාවන කාල දෝෂ ඇති නොවන ආකාරයට ය. වර්ගය අනුව මෙම අන්තර්නිවේෂණය ( AmbientPixelData, GouraudPixelData, PhongPixelData) සමග සිදු operator+=()මූලික වශයෙන් පැනවීමට කරන - අපි structs එකතු කරන බව ආකාරය එක් එක් වර්ගය interpolated ඇත.

WorkOnPixel <T> සමඟ අප කළ දේ ඔබට පෙනේද? අපට එක් වර්ගයකට වෙනස් වැඩක් කිරීමට අවශ්‍යද? අපි හුදෙක් අච්චු විශේෂීකරණය ලෙස හඳුන්වමු:

void WorkOnPixel<AmbientPixelData>(AmbientPixelData& p)
{
    // use the p.ambientLight field
}


void WorkOnPixel<GouraudPixelData>(GouraudPixelData& p)
{
    // use the p.red/green/blue fields
}

එනම් - ඇමතීමේ කාර්යය, වර්ගය මත පදනම්ව තීරණය වේ. සම්පාදනය කරන වේලාවේදී!

එය නැවත මුද්‍රණය කිරීම සඳහා:

  1. අපි කේතය අවම කරමු (අච්චුව හරහා), පොදු කොටස් නැවත භාවිතා කිරීම,
  2. අපි කැත හැක්ස් භාවිතා නොකරමු, අපි දැඩි ආකාරයේ පද්ධතියක් තබා ගන්නෙමු, එවිට සම්පාදකයාට සෑම විටම අපව පරීක්ෂා කළ හැකිය.
  3. හොඳම දේ: අප කළ කිසිම දෙයකට කිසිදු ධාවන කාල බලපෑමක් නැත. මෙම කේතය සමාන සී කේතය තරම් වේගයෙන් ධාවනය වනු ඇත - ඇත්ත වශයෙන්ම, සී කේතය විවිධ WorkOnPixelඅනුවාදයන් ඇමතීමට ශ්‍රිත දර්ශක භාවිතා කරන්නේ නම් , සී ++ කේතය සී ට වඩා වේගවත් වනු ඇත, මන්ද සම්පාදකයා විසින් වර්ගය-විශේෂිත WorkOnPixelඅච්චු විශේෂීකරණයට අනුබල දෙයි. අමතන්න!

අඩු කේතයක්, ධාවන කාලයට ඉහළින්, වැඩි ආරක්ෂාවක් නොමැත.

මෙයින් අදහස් කරන්නේ C ++ යනු සියල්ලම සහ අවසානය යන භාෂාවන් බවයි. ඇත්ත වශයෙන්ම නැත. ඔබ තවමත් වෙළඳ ලකුණු මැනිය යුතුය. නොදන්නා අය B ++ / Perl / Python ස්ක්‍රිප්ට් එකක් ලිවිය යුතු විට C ++ භාවිතා කරනු ඇත. ප්‍රේරක-ප්‍රීතිමත් C ++ නවක වදය මඟින් ඔබට ඒවා නැවැත්වීමට සහ ඇසුරුම් යැවීමට පෙර අතථ්‍ය බහු උරුමයක් සහිත ගැඹුරු කැදැලි පන්ති නිර්මාණය කරනු ඇත. මෙය අවශ්‍ය නොවන බව වටහා ගැනීමට පෙර ඔවුන් සංකීර්ණ බූස්ට් මෙටා ක්‍රමලේඛනය භාවිතා කරනු ඇත . ඔවුන් තවමත් භාවිතා කරනු ඇත char*, strcmpසහ මැක්රෝස් වෙනුවට std::stringසහ සැකිලි.

නමුත් මෙයින් කියැවෙන්නේ ඊට වඩා දෙයක් නොවේ ... ඔබ වැඩ කරන්නේ කා සමඟද යන්න බලන්න. අකාර්යක්ෂම පරිශීලකයින්ගෙන් ඔබව ආරක්ෂා කිරීමට භාෂාවක් නොමැත (නැත, ජාවා පවා නැත).

C ++ දිගටම අධ්‍යයනය කර භාවිතා කරන්න - ඕනෑවට වඩා සැලසුම් නොකරන්න.


19
+1 සඳහා "නැත, ජාවා පවා නොවේ" :)
නේතන් ඔස්මාන්

53
උදාහරණයක් ලෙස +1. එය දිගු පෝස්ට් එකක් විය, නමුත් සී සහ සී ++ කේතය අතර සංසන්දනය සිත් ඇදගන්නා සුළු ය.
paercebal

නෝනාවරුනි, මහත්වරුනි, මේ නිසා lex / yacc පවතින්නේ. එකම තර්කනය, c ++ හි කොටස් එකම කේත උත්පාදක දර්ශනයට වැටී ඇති බව මම කිසි විටෙකත් නොදැන සිටියෙමි. මට නැවත වරක් එය බැලීමට සිදුවේ.
ස්පෙන්සර් රාත්බන්

2
මම 2D විදැහුම්කරණ කේත ගොඩක් ලියා ඇත (දශකයකට වැඩි කාලයකට පෙර), C සිට C ++ දක්වා වරාය කරන අතරතුර මෙම ගැටලුවට මුහුණ දී ඇත: ඔබේ ස්කෑන්ලයින් බිට් 1-පික්සල් වලින් සාදා ඇත්නම් (පික්සල් 8 කින්) බයිට් එකක්)? ඔබේ ස්කෑන්ලයින් R, G සහ B බයිට් වලින් සාදා ඇති විට (පික්සෙල් එකකට බයිට් 3)? ඔබට R, G සහ B සඳහා වෙනම බෆර තුනක් ඇති විට? ඔබ පිළිතුර දන්නවා: C ++ එහි කිසිදු උදව්වක් නැති අතර, සැකිලි භාවිතා කිරීමට බල කිරීමෙන් ඔබට විශාල ඉඩ ප්‍රමාණයක් සහ කාල ප්‍රශස්තිකරණයක් අහිමි වනු ඇත
Walter Tross

මේ සඳහා ඔබ C ++ හි සැකිලි භාවිතා කරන්නේ ඇයි? ඔබේ ක්‍රමය මූලික පන්තියේ පරාමිතියක් ප්‍රකාශයට පත් කරයි, එබැවින් මගේ [C # ක්‍රමලේඛකයාගේ] දෘෂ්ටි කෝණයෙන් බැලූ විට ඔබට ව්‍යුත්පන්න ආකාරයේ නිදසුනක් පාදක ආකාරයේ පරාමිතියකට යැවිය හැකි බව පෙනේ. මම C ++ දන්නේ නැහැ, කරුණාකර ඔබට පැහැදිලි කළ හැකිද?
ව්ලැඩ්

79

ජයග්‍රාහී බබා සඳහා RAII .

බරපතල ලෙස, C ++ හි නිර්ණායක විනාශය කේතය වඩා පැහැදිලි සහ ආරක්ෂිත වේ.


21
"සී ++: එකම බැරෑරුම් නිර්ණායක විකල්පය. අද ඔබේ වෛද්‍යවරයාගෙන් ඒ ගැන විමසන්න."
කයිල් ස්ට්‍රෑන්ඩ්

2
පසු විපරම: රස්ට් දැන් මෙම ක්ෂේත්‍රයේ තරඟකරුවෙකි. බලන්න මූලික RAII උදාහරණයක් හා රස්ට් ගේ destructor ක්රම ගැන ලියකියවිලි .
කයිල් ස්ට්‍රෑන්ඩ්

1
C නිර්ණායක වනු ඇත, නමුත් malloc-ed මතකය භාවිතා කරන විට එය සත්‍ය වශයෙන්ම සිදුවන බව සහතික කිරීම සඳහා වැඩි වැඩ කොටසක් අවශ්‍ය වේ
Baldrickk

1
C හි බෝල්ඩ්‍රික් ඔබ සම්පතක් භාවිතා කරන සෑම තැනකම පිරිසිදු කිරීමේ කේතය ලිවිය යුතුය. C ++ හි, ඔබ එය එක් වරක් ලියන්නේ සම්පතේ අර්ථ දැක්වීම අනුව ය. සී සහ ජාවා යන දෙකම "බැහැර කිරීමෙන් පසු භාවිතා කරන සම්පත" සහ "සම්පත් කාන්දු වීම" දෝෂ වලින් පීඩා විඳිති, මන්ද පිරිසිදු කිරීම ස්වයංක්‍රීය නොවන බැවිනි . මතකය එකම සම්පත නොවේ.
කාලෙත්

70

C ++ භාවිතා කිරීමට සතුටුදායක හේතුවක් තිබේද?

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

    ඔබේ හිස එතීමට ටික කාලයක් ගත වේ (එය ක්ලික් කිරීමට වසර කිහිපයක් ගත විය), නමුත් ඔබ එය කළ පසු ජීවිතය බොහෝ සරල කළ හැකිය.

  2. C ++ පෙළ සැකසීම විශාලත්වය නියෝග එය සී ය ට වඩා අඩු වේදනාකාරී


35
පෙළ සැකසීම සඳහා +1, මගේ පිළිතුරෙන් මට සම්පූර්ණයෙන්ම අමතක විය.
කොන්රාඩ් රුඩොල්ෆ්

9
හෙයි මට පයිතන් යැයි කියන්නට සාපේක්ෂව විශේෂයෙන් පෙළ සැකසීම වේදනාකාරී විය ..
නිල්ස්

7
මම තවමත් C ++ භාවිතා කරන එකම හේතුව බූස්ට් ය.
ෆෙරුසියෝ

34
Ils නිල්ස්: බූරුවාට 1 සිට 1 දක්වා පරිමාණයෙන්, C ++ හි පෙළ සැකසීම නියත වශයෙන්ම පයිතන් වැනි නවීන භාෂාවලට වඩා නරක ය. සී හි පෙළ සැකසීම බූරුවාගේ වේදනාව අර්ථ දක්වයි . එම යෙදුම සඳහා තේරීම C සහ C ++ අතර නම්, C ++ පහසුවෙන් ජය ගනී.
ජෝන් බෝඩ්

8
සී / සී ++ හි පෙළ සැකසීම වැනි දේ සමඟ මිනිසුන්ට මෙතරම් අපහසුතාවයක් ඇති වන්නේ මන්දැයි මම නොදනිමි. පුස්තකාලයක් භාවිතා කරන්න හෝ ඔබේම දෑ ලියන්න. ඔබ පහත් මට්ටමේ කාර්යයන් (එක් වරක් වේදනාව) ලිවීමෙන් පසු ඔබට විශාල කාර්ය සාධනයක්, තද කේතයක් සහ වැඩි නම්යතාවයක් ලැබේ. ඔව්, මම ඉක්මන් / අපිරිසිදු විධාන රේඛා උපයෝගිතා සඳහා පයිතන් භාවිතා කරමි නමුත් බරපතල නිෂ්පාදන කේතය සඳහා එහි සී / සී ++.

41

ඔව්.

ඔබ ක්‍රියාත්මක කළ හැකි කාර්යක්ෂමතාව සොයන්නේ නම්, ඔබ සී හෝ සී ++ දක්වා පහත බැස ඇත, එබැවින් මම ඒ පිළිබඳව අවධානය යොමු කරමි.

සැකිලි පොදු වීමට පෙර පවා, 1990 දශකයේ මැද භාගයේ දී ඔබ සාකච්ඡා කළ ආකාරයේ ක්‍රියාත්මක කළ හැකි වර්ග සඳහා C ++ ට වඩා C ++ භාවිතා කිරීම වඩාත් සරල හේතු දෙකක් සඳහා භාවිතා කිරීමට කැමැත්තෙමි: වස්තු බහුමාපකය සහ RAII .

මම සියලු වර්ගවල රසවත් දේවල් සඳහා බහුමාමක C ++ වස්තු භාවිතා කර ඇත්තෙමි. උදාහරණයක් ලෙස, මම OMAP සහ XScale ARM CPU වල රාමු බෆර් ආවරණ සහිත කාවැද්දූ ලිනක්ස් පද්ධතියක වැඩ කරමින් සිටියෙමි. දෘඩාංග ගෘහ නිර්මාණ දෙකෙහි එකිනෙකට වෙනස් ඒපීඅයි සමඟ විවිධ ආවරණ විශේෂාංග ඇත. ආවරණ පිළිබඳ පරමාදර්ශී දෘෂ්ටියක් හෙළිදරව් කිරීම සඳහා මම පොදු අථත්ය "ඕවර්ලේ" පාදක පන්තියක් භාවිතා කළ අතර, පසුව "ඕමාප් ඕවර්ලේ" සහ "එක්ස්කේල් ඕවර්ලේ" පන්ති ලිවීය. ඒවා ක්රියාත්මක වන විට නිසි පරිදි ක්ෂණිකව ස්ථාපනය කරන ලදී.

සරල කිරීම සඳහා, RAII යනු ඔබ වස්තුවක් සම්බන්ධ කර ඇති සම්පත් වස්තුවේ ඉදිකිරීම්කරු තුළ හෝ පසුව වස්තුවේ ජීවිත කාලය තුළදී වෙන් කිරීම සහ සම්පත් වස්තුව විනාශ කරන්නා තුළ මුදා හැරීම හෝ මුදා හැරීම යන අදහසයි. C ++ හි එය ඇත්තෙන්ම හොඳයි, මන්ද ස්වයංක්‍රීය විචල්‍යයන් වන වස්තූන් විෂය පථයෙන් බැහැර වන විට විනාශ වේ. C සහ C ++ වල සමානවම දක්ෂතා ඇති අයෙකුට, C ++ හි සම්පත් හා මතක කාන්දු වීම වළක්වා ගැනීම වඩා පහසුය. ඔබ වෙත ඇමතුම් රෑනක් පෙර උත්සවයකට අවසානයේ ලේබලය ඉතා පොදු සී තවත් පැතිකඩක් සමග බොහෝ C ++ කේතය බලන්න එපා free(), සහ විවිධ gotoඋත්සවයට වාරණ එහි පැන තුළ ගේ.

ඔබට C සමඟ මේ සියල්ල කළ හැකි බව මම හොඳින් දනිමි - එය තව බොහෝ වැඩ, කේත රේඛා වැඩි ගණනක්, සහ ඔබ හමන දෙය බොහෝ අවලස්සන සහ බොහෝ විට තේරුම් ගැනීමට අපහසුය. එක්ස් සර්වර් අභ්‍යන්තරය හරහා බහුමාපක කේතයක් ඇත, සහ මිනිසා, එය විකාර සහගත හා අමුතුද?

GTK + සහ Clutter වැනි GNOME තාක්ෂණයන් සමඟ මම බොහෝ වැඩ කරමි, මේ සියල්ලම C හි ලියා ඇත්තේ GObject පද්ධතිය භාවිතා කරමිනි. GObject යනු C ++ වස්තු පද්ධතියට සමාන වන අතර එය කවරයක් ආවරණය කර ඇති අතර සියලු අවලස්සන අභ්‍යන්තරයන් නිරාවරණය වී ඇති අතර සාමාන්‍යයෙන් එක් පේළියක C ++ ක්‍රමවේදය ඇමතුමකින් කළ යුතු දේ කිරීමට කේත පේළි දුසිම් භාගයක් අවශ්‍ය වේ. මම දැනට සමහරක් ලියමින් ClutterActorsසිටින අතර ගණිතය සැබවින්ම සිත්ගන්නා සුළු වුවත්, මම නිරන්තරයෙන් සිතන්නේ, "මේ සියල්ල C ++ හි වඩාත් සංක්ෂිප්ත හා තේරුම්ගත හැකි වනු ඇත" යන්නයි.

මම බොහෝ විට සිතන්නේ, "ඔබ දන්නවා, මම මෙය C වෙනුවට C ++ වලින් ලියන්නේ නම්, මම රාත්‍රී 9 ට මගේ කාර්යාලයේ වාඩි වී සිටිනවා වෙනුවට මගේ බිරිඳ සමඟ මයිත්බස්ටර්ස් නරඹමින් සාලය තුළ සිටිමි."


9
ඔබ මෙහි පවසන දෙයට මට සැබවින්ම සම්බන්ධ විය හැකිය, විශේෂයෙන් 1) RAII පිළිබඳ කාරණය සහ 2) "ඔබ දන්නවනේ, මම මෙය C වෙනුවට C ++ වලින් ලියන්නේ නම් ..." මම බොහෝ කාවැද්දූ පද්ධති සංවර්ධනය කරන්නෙමි , සහ කණ්ඩායම “සී” හෝ “සී පන්ති සහිත” සාප්පුවක් වුවද, බාධා කිරීම් හැසිරවීම, මුටෙක්ස් මෙහෙයුම් සහ ලුහුබැඳීම / ල ging ු-සටහන් වැනි දේ සඳහා මම RAII ධෛර්යමත් කිරීමට උත්සාහ කරමි. රේඛා). බහුඅවයවික රාමු බෆර පිළිබඳ ඔබේ විස්තරය, බෙදා හරින ලද පද්ධතියක බහුමාමක පණිවිඩ බෆර භාවිතා කිරීම මට මතක් කර දුන්නේය.
රේඩියන්

29

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

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

ඉතින්, ඔබ දැන් කරන දේ සඳහා එය ඉගෙන ගැනීම ඔබට ප්‍රයෝජනවත් වේදැයි මට කිව නොහැක. ඔබට නිසැකවම පයිතන් හෝ පර්ල් සහ සී සංයෝජනයන්ගෙන් ලබා ගත හැකිය, නමුත් සී ++ එක් අමාරුවෙන් භාවිතා කිරීමට භාවිතා කරන පැකේජයක් තුළ වියුක්ත කිරීම සහ ක්‍රියාකාරීත්වය යන දෙකම ඉදිරිපත් කරයි.


13
නැත කිසිදු එය වේගවත් වේ නම්, ඔබ හැම විටම සී මාර්ගය භාවිතා කර ගත හැකි නිසා C ++ සී වඩා අඩු දෙයක් වන (සහ ඔබ සැලකිලිමත් වන) නඩුව.
ජැක් ඒඩ්ලි

1
Ack ජැක්ඒඩ්ලි - සීමා සහ ස්ථිතික අරා පරාමිතීන් සඳහා C ++ සහාය නොදක්වයි. එක් ස්ථානයක C ++ - ශෛලිය භාවිතා කිරීම හැර වෙනත් ස්ථානවල එය භාවිතා කිරීමට ඔබට බල කරයි.
martinkunev

almartinkunev restrictභාවිතා කරනුයේ අන්වර්ථකරණ ප්‍රශස්තිකරණයන්ගෙන් බැහැර කිරීම සඳහා වන අතර එමඟින් එය වේගවත් කිරීමට උපකාරී වන්නේ කෙසේද? සහ “ස්ථිතික අරාව පරාමිතිය” යනු කුමක්ද? සහ "ශෛලිය" කාර්ය සාධනය කෙරෙහි බලපාන්නේ කෙසේද?
underscore_d

1
අන්වර්ථකරණය නොකිරීම සඳහා වන සහතිකයක් මත පදනම්ව, underscore_d මඟින් ප්‍රශස්තිකරණයට අවසර දෙයි; ස්ථිතික අරාව පරාමිතීන් විසින් දර්ශක තර්කය NULL නොවන බවත්, මෙම දර්ශකය අවම වශයෙන් දී ඇති මූලද්‍රව්‍ය ගණනකට යොමු කරන බවත් උපකල්පනය කිරීමට ඉඩ දෙයි; "ස්ටයිල්" යන වචනයට අර්ථ කිහිපයක් ඇති අතර එය සන්දර්භයෙන් බැහැර කිරීමෙන් එහි අර්ථය වෙනස් වේ - මම කතා කරන්නේ, උදාහරණයක් ලෙස, ව්‍යතිරේකයන් විසින් ස්මාර්ට් පොයින්ටර් භාවිතය බලාත්මක කරන්නේ කෙසේද යන්න ගැන ය.
martinkunev

1
artmartinkunev Hmm, එබැවින් ස්ථිතික අරා පරාමිතියක් මඟින් C ++ අච්චුවකට වඩා ක්‍රියාකාරී ලෙස වෙනස් දෙයක් සක්‍රීය කරන්නේද යන්න T (&arr)[n]හෝ std::array<T, n>- හෝ වැඩි තොරතුරු ප්‍රමාණයක් නොමැති බැවින් මෙය තවත් පර්යේෂණ කිරීමට සිදුවනු ඇත්දැයි මම කල්පනා කරමි . ස්මාර්ට් පොයින්ටර්ස් ගැන එය අර්ථවත් කරයි, අනිවාර්යයෙන්ම හොඳ උදාහරණයක්. සමාන ක්‍රීඩා පිටියක කේතීකරණය කරන්නේ නම්, අපි ව්‍යතිරේක භාවිතා නොකරනු ඇත, එබැවින් විභව පිරිවැයක් දැරීමට සිදු නොවනු ඇත ... කෙසේ වෙතත්, තෙවන පාර්ශවීය පුස්තකාල පින්තූරයට ඇතුළු වූ පසු, උපකල්පන රාශියක් ගැන ඔබ සඳහන් කරයි කියා මම සැක කරමි. අවදානමට ලක්ව ඇත.
underscore_d

28

මම සී ++ සලකන්නේ 1990 දශකයේ, අතීත යුගයක භාෂාවක් ලෙස ය.

එකල එය විශාල වූයේ එය කාර්ය සාධනය අනුව අඩු වියදමකින් ඉහළ මට්ටමේ භාෂා ඉදිකිරීම් සහ යාන්ත්‍රණ ඉදිරිපත් කළ බැවිනි. ලිපින පොත් යෙදුම්වල සිට ගුවන් සේවා මෘදුකාංග දක්වා සෑම දෙයක්ම සංවර්ධනය කිරීම සඳහා වූ විශ්වීය මෙවලම එය වූ අතර එය OO උමතුවට හේතු විය. OOP විසින් කුසගින්න සහ ඒඩ්ස් විසඳා ඇති අතර, ඔව්, 1990 ගණන්වල අගභාගයේදී මා විසින් මොළ සේදීමට උත්සාහ කිරීම ගැන C ++ ට දොස් පවරමි.

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

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


11
එබැවින් දර්ශක භාවිතා කර අහඹු බයිට් වෙනස් නොකරන්න. එය වළක්වා ගැනීම එතරම් අපහසු නොවේ, එසේ නොවේ ද?
ඩේවිඩ් තෝර්න්ලි

11
La බ්ලැගෝවෙස්ට්: සී ++ හි සංකීර්ණතාව ගැන මම ඔබ සමඟ එකඟ වන අතර වස්තු-නැඹුරු භාෂාවක් ආදේශ කිරීමට මම එය කිසි විටෙකත් භාවිතා නොකරමි. නමුත් එහි සංකීර්ණත්වය නොතකා එය තවමත් මට වඩා සී දිනා ගන්නේ එහි ඇති විවිධ වාසි නිසා විවිධ පිළිතුරු වලින් (වියුක්ත කිරීම, සම්පත් භාරදීම, නූල් හැසිරවීම…). ඇත්ත වශයෙන්ම, ඔබ C ++ තවමත් අදාළ වන වලංගු ප්‍රදේශ කිහිපයක් නම් කර ඇති අතර එය C ට වඩා බෙහෙවින් උසස් තැනක
කොන්රාඩ් රුඩොල්ෆ්

6
La බ්ලැගෝවෙස්ට්: ඒ නිසයි මම අඳුරු කොන් වලින් stay ත්ව සිටින්නේ. මා දන්නා වෙනත් භාෂාවකට වඩා C ++ හි මග් කිරීම පහසුය. එය භාවිතා කිරීමෙන්, මම RAII වෙතින් වාසි ලබා ගනිමි, C, STL වර්ගයේ අච්චු පන්ති, OO විශේෂාංග සහ C ට වඩා එහි ඇති වාසි වඩා හොඳය.
ඩේවිඩ් තෝර්න්ලි

24
La බ්ලගෝවෙස්ට්: නැහැ, නැහැ. උදාහරණයක් ලෙස, ඔබ සඳහන් කර ඇති දේ RAII සාක්ෂාත් කර ගැනීමට ප්‍රමාණවත් නොවන අතර බහාලුම් පංතිවල ක්‍රියාකාරීත්වය ඇත්තේ සරල අතින් සාදන ලද දත්ත ව්‍යුහයන්ට වඩා වැඩි ය. එය කළ හැකි යැයි ඔබ සිතන්නේ නම්, ඔබ කිසි විටෙකත් C ++ හොඳින් ඉගෙන ගෙන නැත.
ඩේවිඩ් තෝර්න්ලි

5
@ ජැරොස්ලාව් බහු-මූලික යන්ත්‍ර OOP මිනීවළට දමන්නේ මන්දැයි බැලීමට මා අසමත් විය. ඔබ අදහස් කළේ C ++ නම්, ඔබ පැමිණෙන්නේ කොහෙන්දැයි මට පෙනුණි. OOP යනු බොහෝ නූතන ක්‍රමලේඛන භාෂාවල, විශේෂයෙන් ඉහළ මට්ටමේ භාෂාවල මූලික සංකල්පයකි. ඔබ එය එසේ ක්‍රමලේඛනය කරන්නේ නම් C පවා OO විය හැකිය. එය C ++ IMO තරම් පහසු නැත.
vedosity

21

ලිනස්ට අනුව , නැත:

මම මුලින්ම Git ප්‍රභව කේතය දෙස බැලූ විට කාරණා දෙකක් මට අමුතු දෙයක් විය: 1. C ++ ට වඩා පිරිසිදු C. ඇයි කියලා අදහසක් නැහැ. කරුණාකර අතේ ගෙන යා හැකි දේ ගැන කතා නොකරන්න, එය BS.

ඔබ ගොන් කතා වලින් පිරී ඇත.

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

වෙනත් වචන වලින් කිවහොත්: සී තේරීම එකම බුද්ධිමත් තේරීම වේ. මම දන්නවා මයිල්ස් බේඩර් විහිළුවට “ඔබව තල්ලු කරන්න” කියා පැවසූ නමුත් එය ඇත්ත වශයෙන්ම සත්‍යයකි. මම සී කට C ++ විය ව්යාපෘතිය කැමති වනු ඇත ඕනෑම ක්රමලේඛකයෙක් ඉඩ මම ඇත්තටම ඒ ක්රමලේඛකයෙක් යන නිගමනයට ආවේ කියලා ඔහු පැමිණ මම සම්බන්ධ නෑ කිසියම් ව්යාපෘතියක් අවුල් නැත එසේ බව, තරහ ගස්සන්න කැමති සමග.

C ++ ඇත්තෙන්ම නරක නිර්මාණ තේරීම් වලට මග පාදයි. ඔබ නිරන්තරයෙන් එස්.ටී.එල්. සහ බූස්ට් වැනි භාෂාවේ “ලස්සන” පුස්තකාල විශේෂාංග භාවිතා කිරීම ආරම්භ කරන අතර එමඟින් ඔබේ වැඩසටහනට “උදව්” කළ හැකි නමුත් හේතු:

  • ඔවුන් වැඩ නොකරන විට අසීමිත වේදනාවක් (සහ එස්.ටී.එල්. සහ විශේෂයෙන් බූස්ට් ස්ථාවර හා අතේ ගෙන යා හැකි බව මට පවසන ඕනෑම අයෙක් බීඑස් වලින් පිරී ඇති අතර එය විහිලුවක්වත් නොවේ)

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

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

එබැවින් මට කණගාටුයි, නමුත් කාර්යක්ෂමතාව මූලික පරමාර්ථයක් වූ git වැනි දෙයක් සඳහා, C ++ හි “වාසි” විශාල වැරැද්දක් පමණි. අපට එය නොපෙනෙන අයව තල්ලු කිරීමද විශාල අමතර වාසියකි.

ඔබට C ++ හි ලියා ඇති VCS අවශ්‍ය නම්, මොනෝටෝන් සමඟ සෙල්ලම් කරන්න. ඇත්තටම. ඔවුන් "සැබෑ දත්ත සමුදායක්" භාවිතා කරයි. ඔවුන් "ලස්සන වස්තු-නැඹුරු පුස්තකාල" භාවිතා කරයි. ඔවුන් "ලස්සන C ++ සාරාංශ" භාවිතා කරයි. අවංකවම, සමහර සීඑස් පුද්ගලයින්ට එතරම් සිත්ගන්නාසුලු යැයි හැඟෙන මෙම සියලු සැලසුම් තීරණවල ප්‍රති result ලයක් ලෙස, අවසාන ප්‍රති result ලය භයානක හා හඳුනාගත නොහැකි අවුලකි.

නමුත් මට විශ්වාසයි ඔබ එය git වලට වඩා කැමති බව.

      Linus

62
මම හිතන්නේ නැහැ මෙහි තර්ක සඳහා යා යුතු පුද්ගලයා ලිනස් විය යුතුයි. ඔහුගේ කෝපය දරුණු ආත්මීය සහ නොමේරූ ය. ඔහුට ඇත්ත වශයෙන්ම හොඳ කරුණු කිහිපයක් තිබේ, නමුත් ඒවා ඉතා ගැඹුරින් වළලනු ලැබේ (“ගොන් කතා” හා ගොන් කතා වලට පහළින්) ඒවා සොයා ගැනීම ඉතා අසීරු ය.
කොන්රාඩ් රුඩොල්ෆ්

19
හාහා, ඒක හොඳ හිනාවක්. මට කවදාවත් මේ මිනිහව මුණගැහෙන්න ඕන නෑ.
ෆීලික්ස් ඩොම්බෙක්

30
ලිනස් මට මතක් කර දෙන්නේ කිසි විටෙකත් ෂීට් රෝක් එල්ලා නැති ඉතා දක්ෂ සෙවිලි කරුවෙකු වන නමුත් ෂීට් රොක් යාලුවනේ පැන්සි ලෙස හඳුන්වන්නේ නියපොතු වෙනුවට ඉස්කුරුප්පු භාවිතා කරන බැවිනි.
බොබ් මර්ෆි

8
ලිනස්ට කාරණයක් ඇති නමුත් එය බැරෑරුම් ලෙස සැලකිය යුතු තරම් දරුණු ලෙස ප්‍රකාශ කරයි.
බ්ලැගෝවෙස්ට් බියුක්ලීව්

39
An ඩැනියෙල් සමඟ මම එකඟ වෙමි, දෘඩාංගවල මායිම් තල්ලු කිරීම ගැන කතා කළ හැකි අයෙක් සිටී නම් ඩූම්, කම්පන සහ වෙනත් ක්‍රීඩා වල නිර්මාතෘ සහ අයිඩී මෘදුකාංගයේ නිර්මාතෘ ජෝන් කාර්මාක් ය. ඔහු මීට මාස කිහිපයකට පෙර ට්විටර් එකක c සහ c ++ ගැන මෙසේ ලියයි: "IMO, හොඳ C ++ කේතය හොඳ C කේතයට වඩා හොඳයි, නමුත් නරක C ++ නරක C කේතයට වඩා බොහෝ නරක විය හැකිය." twitter.com/#!/ID_AA_Carmack/status/26560399301
Onema

18

C ++ භාවිතා කිරීමට බලවත් හේතුවක් ඇතැයි මම නොසිතමි. ඔබට OO ක්‍රමලේඛනය කිරීමට අවශ්‍ය නම්, ඔබට ඒ වෙනුවට පයිතන් භාවිතා කළ හැකි අතර සී හි වේගවත් ක්‍රියාකාරිත්වය අවශ්‍ය කොටස් ලිවිය හැකිය.

සංස්කරණය කරන්න: සී සමඟ හොඳින් සම්බන්ධ වන වෙනත් භාෂා ඇත, එබැවින් ඔබ පයිතන්ට අකමැති නම් විකල්ප තිබේ.


3
කාවැද්දූ සංවර්ධනය ගැන කුමක් කිව හැකිද? පයිතන් සැමවිටම නොපවතින අතර, සී සහ හොඳින් ලියා ඇති සී ++ අතර වේගයෙහි වෙනස යම් මට්ටමක සැකසුම් බලයක් පසුකර ඇති උපාංගවල නොසැලකිලිමත් වේ. ඇත්ත වශයෙන්ම, මම හිතන්නේ සී ++ සම්පාදකයක් සෑම විටම ලබාගත නොහැකි වනු ඇත ...
ජේම්ස්

6
Ames ජේම්ස් "හොඳින් ලියා ඇති සී ++" - අල්ලා ගැනීම තිබේ :(
dss539

5
මම මෙම පිළිතුර සමඟ එකඟ වෙමි, ඉහළ මට්ටමේ පයිතන් කරන්න, මන්ද ඔබ එය 3 ගුණයකින් වේගවත්, පැතිකඩක් වැනි දෙයක් ලියා පසුව සී / සී ++ වෙනුවට ආදේශ කිරීමෙන් බාධක මුදා හරිනු ඇත. "සී ++ කේතය සමඟ බාධක ආදේශ කරන්න" යැයි පැවසීම අතිරික්තය, මන්ද ඔබ වේගවත් වීමට අවශ්‍ය කේතය සමඟ ඉහළ මට්ටමක් නොකරන බැවින් එය පහත් මට්ටමේ කේතයක් වනු ඇත. එක් දෙයක් තිබේ: පයිතන් සමඟ c ++ අතුරුමුහුණත් කරන්නේ කෙසේදැයි මම නොදනිමි: /. නමුත් තිරය ඉදිරිපිට හා කාර්යක්ෂමතාවයෙන් ගත කරන කාලය අනුව, එය හොඳම විසඳුම යැයි මම සිතමි, මන්ද බොහෝ C ++ කේතය නිෂ් nothing ල වනු ඇත!
jokoon

8
විශාල මූල්‍ය සමාගමක වැඩට ගොස් පයිතන් හි විශාල බෙදා හරින ලද කණ්ඩායමක සංකීර්ණ මූල්‍ය පද්ධතියක් ගොඩනඟා ඔබ එයට කැමති ආකාරය බලන්න. අත්දැකීම ඔබට උගන්වනු ඇත: අ) වර්ගයේ ආරක්‍ෂාවේ වාසි, ආ) ඔබේ බට් ඉතිරි කරන සම්පාදකයින්ගේ වාසි, ඇ) පයිතන් විසින් නොබොල්වරුන්ට ලිවීමට ඉඩ දෙන හාස්‍යජනක කේතය. C ++ -> සමහර පයිතන් දේවල් සමඟ වැඩ කිරීමට හැකි නමුත් දේශසීමා උමතුවෙන් ඔබේ පාදයට වෙඩි තැබීම පහසු බව මිනිසුන් පවසති. මේ
මොහොතේ

1
us සුස්ලික්: වාව්, මම කම්පනයට පත් වෙනවා කවුරුහරි ඇත්ත වශයෙන්ම ඒ වගේ ක්‍රමයක් සඳහා පයිතන් භාවිතා කරයි කියලා. නරක නූබ් පයිතන් කේතය ගැන මම ඔබ සමඟ එකඟ වෙමි; මම මා දැක ඇත.
ලැරී කෝල්මන්

13

C ++ භාවිතා කිරීමට හේතුවක් තිබේද? නිසැකවම.

සමහර අය වෙනත් විකල්පයන්ට වඩා C ++ භාවිතා කිරීමට කැමති විය හැකිය . C ++ භාවිතා කිරීමට හේතුවක් තිබේදැයි විමසීම හරියට අපට අයිස්ක්‍රීම් රස සිය ගණනක් තිබිය යුත්තේ මන්දැයි විමසීමට සමාන ය. හැමෝම වැනිලා සමඟ රැඳී සිටීමට කැමති නැත.

සංවර්ධකයින් දැනටමත් C ++ සමඟ ඉතා දක්ෂ නම්, ඔවුන් සඳහා ඇති ප්‍රශ්නය 'එය භාවිතා කරන්නේ ඇයි?' නොව 'ඇයි නැත්තේ?' මේ වන විට SO හි මෙම නවීන පන්නයේ C ++ විරෝධී දෙයක් සිදුවන බව පෙනේ, නමුත් එය විශ්වාස කරන්න හෝ නොවන්න, සෑම කෙනෙක්ම එයට දායක නොවේ. සමහර අය අනෙක් භාෂාවන්ට වඩා C ++ වඩා හොඳට කැමති විය හැකිය.

වන්නේද, C ++ අවශ්යතාව යෙදුම් සඳහා භාවිතා කල යුතු? ඇත්ත වශයෙන්ම නැත. නමුත් මෙම නිශ්චිත ප්‍රශ්නයම වෙනත් භාෂාවක් සඳහාද විමසිය හැකිය. යෙදුමක් සඳහා විශේෂිත භාෂාවක් භාවිතා කළ යුතු අවස්ථා ඉතා ස්වල්පයක් ඇත.


12

මම දැන් C සිට C ++ වෙත මාරු වෙමි, ඔබට සැකිලි සහ OOP අවශ්‍යතාවයක් නොමැති වුවද, ලාභය සැලකිය යුතු යැයි මම සිතමි.

  • වඩා හොඳ මතක කළමනාකරණය
  • ශක්තිමත් වර්ගයේ පද්ධතිය
  • වඩා හොඳ සම්මත පුස්තකාලයක්
  • නාම අවකාශ
  • ආදිය.

8

කිසිවෙකු තවමත් මෙය සඳහන් නොකිරීම ගැන මට පුදුමයි, නමුත් C ++ විසින් යොමු කිරීම් සඳහා අපව හඳුන්වා දුන් අතර , එමඟින් දර්ශකයන්ගේ සියලු ගැටලු සහ අන්තරායන් පාහේ විසඳනු ඇත:

void ModifyVar(int& var)
{
    var = 5;
}

int test = 4;
ModifyVar(test);

වෙනුවට:

void ModifyVar(int * var)
{
    *var = 5;
}

int test = 4;
ModifyVar(&test);

බොහෝ ආරක්ෂිත හා පහසුය ... සහ අගය ඉක්මවා යාමෙන් තොරව.


3
එසේම නම්යශීලී බව අඩුය. යොමු කිරීම් (C ++ - style) භාෂාවන්හි ඇතැම් පොදු ඉදිකිරීම් සරල කිරීම සඳහා හොඳ ය, ඒවා ද දර්ශකයන් ඇත, නමුත් ඒවා දර්ශකයන් වෙනුවට ආදේශ කිරීම තරම් දුරට වැටී ඇත, එය විහිලුවක් ද නොවේ. ඔබේ උදාහරණය කිසිසේත්ම යොමු කිරීම් සඳහා හොඳ අවස්ථාවක් නොවේ.
බෙන් වොයිග්ට්

3
@Ben: එවිට ඔබට කරුණාකර පැහැදිලි කරන්න පුළුවන් ඇයි එය නරක උදාහරණයක්?
නේතන් ඔස්මාන්

6
E ජෝර්ජ්: අක්ෂර දෙකක් (ඒවා ගණන් කිරීම) කෙටි වීම හැර වෙන කිසිවක් වෙනස් වී නැති නිසා? එය කිසිදු ගැටළුවක් විසඳන්නේ නැත, එය කිසිදු අනතුරක් ඉස්මතු නොකරයි, තාවකාලික විචල්‍යයක ආයු කාලය දීර් like කිරීම වැනි සිසිල් දෙයක් පවා නොකරයි (කුමන යොමු කිරීම් හොඳද).
බෙන් වොයිග්ට්

En බෙන්: ඔබට යමක් අමතකයි - යොමු කිරීම සැමවිටම වලංගු වේ. කාරණා නිවැරදිව සිදු නොකළ හොත් සියලු ආකාරයේ මතක දෝෂ වලට තුඩු දිය හැකි ඕනෑම දෙයකට (NULL ද ඇතුළුව) දර්ශකයන්ට යොමු කළ හැකිය. යොමු කිරීම් කිසි විටෙකත් NULL විය නොහැකි අතර ඔවුන් පෙන්වා දෙන ලිපිනය කිසි විටෙකත් වෙනස් කළ නොහැක.
නේතන් ඔස්මාන්

5
E ජෝර්ජ්: “යොමු කිරීම සැමවිටම වලංගු වේ” යන්න අසත්‍යයකි. ඔබට එකක් අවශ්‍ය නම් මම උදාහරණයක් දෙන්නම්, නමුත් මම දැනටමත් ඔබ මේ පිළිබඳව දැනුවත් වීමට තරම් ප්‍රවීණයෙකු වනු ඇතැයි බලාපොරොත්තු වෙමි. තවද, අවලංගු දර්ශකයක් භාවිතා කර අවලංගු යොමු කිරීමක් ගැන මම කතා නොකරමි. දර්ශකයන් භාවිතා කරන කාර්යයන් සඳහා තර්කවල පූර්ව කොන්දේසි සඳහන් කරන ලියකියවිලි අවශ්‍ය වේ. නමුත් ප්‍රායෝගිකව කිවහොත්, සියලු කාර්යයන් සඳහා එම මට්ටමේ ලියකියවිලි අවශ්‍ය වේ, එබැවින් දර්ශකයන්ට එරෙහි වැඩ වර්ජනයක් ලෙස හැඳින්වීම විකාරයකි.
බෙන් වොයිග්ට්

5

සාමාන්‍යයෙන් සිදුවන්නේ කොතැනද සහ ඇයි:

  • හුරුපුරුදුකම
  • අපේක්ෂිත භාෂා අංග
  • ඔබට භාවිතා කිරීමට අවශ්‍ය විශේෂිත පුස්තකාල
  • කාර්ය සාධන අවශ්‍යතා

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

බොහෝ ස්ක්‍රිප්ටින් භාෂා සී / සී ++ සමඟ විස්තාරණය කළ හැකි බැවින් කාර්ය සාධනය මත පදනම්ව (පමණක්) සී / සී ++ භාවිතා කිරීමට තීරණය කිරීම පැත්තක සටහනක මට තේරෙන්නේ නැත. මන්දගාමී කොටස් සී / සී ++ දිගු වලට සංක්‍රමණය කිරීමේ හැකියාව සමඟ වේගවත් සංවර්ධන භාෂාවක ප්‍රතිලාභ ඔබට ලැබේ. නිසැකවම ඔබ කරන පද්ධති ක්‍රමලේඛනය සෑම දෘෂ්ටි කෝණයකින්ම තේරුම් ගත හැකි නම් එය තේරුම් ගත හැකි නමුත් බොහෝ යෙදුම් සංවර්ධනයේදී මට එය නොලැබේ.


2
හුරුපුරුදුකම අංක 1 හේතුව වන අතර, ඔබ මුලින්ම එය සඳහන් කිරීම ගැන මම පුදුම වෙමි.
පෝල් බුචර්

4

සී ++ එදිරිව පයිතන් එදිරිව පර්ල් පහසුවෙන් විනිශ්චය කළ නොහැක. එය ව්යාපෘතිය හා අවශ්යතා මත රඳා පවතී.

C ++ බොහෝ කලකට පෙර සිට බොහෝ වේදිකාවල ක්‍රියාත්මක වන උපයෝගිතා අවි ගබඩාවක් ඇත. නමුත් ස්ට්‍රිං ඉන්ටිජර් වෙත හරවා ආපසු හැරවීම සඳහා ඇළ මාර්ග හරහා ගමන් කිරීම වේදනාකාරී වේ.

C ++ අනෙක් අතට, පුස්තකාල මත යැපීම් සමඟ භයානක ගනුදෙනුවක් ඇත. ඔබ GCC X හෝ VC ++ Y වලින් යමක් සම්පාදනය කළ පසු, එම මෙවලම්වල ඊළඟ අනුවාදය මඟින් කේතය ක්‍රියාත්මක වන බව ඔබට විශ්වාස කළ නොහැක. වින්ඩෝස් වල එකම නිරය ඇත, යුනික්ස් වලද නිරය තිබේ.

පර්ල්, එහි බලය යුනික්ස් ලෝකයෙන් ලබා ගන්නා නමුත් විශේෂයෙන් නිත්‍ය ප්‍රකාශන මෙවලමක් ලෙස. මෙය බොහෝ විට භාවිතා කරනුයේ මෙයයි. ජාවාට පවා එය සාමාන්‍ය ආකාරයකින් කළ නොහැකි ඉතා බැරෑරුම් මෙවලම් සමඟ (වෙබ් සේවාදායකයකට ගොනුවක් උඩුගත කරන්නේ කෙසේදැයි බලන්න), පර්ල් යනු “එය කරන්න” යන්නයි.

පයිතන් පහසු, නම්‍යශීලී සහ ගතික භාෂාවකි. ඔබට ශ්‍රිතයකට පූර්ණ සංඛ්‍යාවක් යැවිය හැකි තරමට පහසුය, ස්ක්‍රිප්ට් මඟින් නූලක් අපේක්ෂා කරයි, නමුත් ඔබට ප්‍රති result ලයක් ලබා ගත හැකිය! බලාපොරොත්තු නොවූ නමුත් ප්‍රති .ලයක්. එබැවින් ක්‍රමලේඛකයා ඉතා ප්‍රවේශම් විය යුතුය. IDLE විසින් යම් නිදොස් කිරීමක් ඉදිරිපත් කරයි, නමුත් ඔබ පද්ධතියකට ටෙල්නෙට් කළ විට හෝ මට්ටම් තුනකින් SSH කළ විට සහ ඔබේ ගැටලුව සොයා ගැනීමට ඔබට අවශ්‍ය වූ විට, නිදොස්කරණය කරන්නා ඔබ අසල නොසිටිනු ඇත. එහෙත්, එයට වේගයෙන් විශාල ගණිත වැඩක් කළ හැකිය.

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

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

වේගයෙන් වැඩසටහනක් සාදා ඔබේ සීවී වෙත පෙන්වීමට "ඔහ්, මම තාක්‍ෂණය ද දනිමි" සහ ඔබේ ලොක්කා වීමට කැමති, පුදුම වන්න! තාක්‍ෂණය එතරම් අවශ්‍ය නොවනු ඇතත් ... (හරි, ජනයෙනි, මම වසන්ත රාමුවට වෛර කරමි ....)


1
අහෝ, පයිතන්ට අනුවාද පරායත්තතා ඇති බව ඔබ සලකා බැලිය යුතුය - විශේෂයෙන් ඔබ පයිතන් 3 වෙත සංක්‍රමණය වූ පසු, පර්ල් සමඟ සමාන වේ .. නැතහොත් කිසිවෙකු තවමත් පර්ල් 6 වෙත යාමට කරදර වී තිබේද? සෑම දෙයකටම නරක පරායත්තතා ඇත :(
gbjbaanb

3

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

පයිතන් සහ පර්ල් වැනි භාෂා අතර ඇති ප්‍රධාන අදහස නම් අඩු මිනිස් කාලය, නමුත් වැඩි cpu කාලය සමඟ වැඩි යමක් කිරීමයි. ඇත්ත වශයෙන්ම ඔබ එය ක්‍රියාත්මක කිරීමට වඩා පයිතන් හෝ පර්ල් ස්ක්‍රිප්ට් කේත කිරීමට වැඩි කාලයක් ගත කරනු ඇත, නමුත් ඔබට මගේ අදහස වැටහේ.

සී / සී ++ හි ඇති වාසිය නම් ඒවා වේගවත් ය, නමුත් වාක්‍ය ඛණ්ඩයක් සහ ශක්තිමත් ටයිප් කිරීමක් සඳහා ය: පරිගණකය සම්පාදනය කරන වේලාවට එය තෝරා නොගත යුතු වන පරිදි ඔබ විසින්ම බොහෝ දේ කළ යුතු ය.

ඔබ කේතයක් සාදන විට, සමහර රේඛා අනෙක් ඒවාට වඩා බොහෝ සෙයින් ධාවනය වන අතර එම රේඛා ගැටළුවක් ඇති කරයි. අනෙක් අතට, ඔබ කේතයේ ඉතිරි කාලය, ඔබ බොහෝ කාලයක් ගත කළ එක බොහෝ විට අඩු වාර ගණනක් ක්‍රියාත්මක වේ. ඔබ එය අසා ඇති නමුත් එය කුප්‍රකට 80/20 රීතිය වන අතර ඔබට එවැනි රීතියක් මග හැරිය නොහැක.

මෙම ගැටළුවට විසඳුම නම්, ඔබේ සියලු කේතයන් සිදු කිරීම සඳහා පහසු භාෂාවක් භාවිතා කිරීමයි (පහසු ලෙස මා අදහස් කරන්නේ වඩා සංවර්ධක හිතකාමී ය: අඩු ටයිප් කිරීම, කම්මැලි අර්ථ නිරූපණය, පෙර පැවති චර්යාවන් සහ දේවල් ආදිය).

ඔබ එය සී හෝ සී ++ සමඟ කළා නම්, එය මොළයේ කැක්කුමකට වඩා වැඩි වනු ඇත.

ඔබේ වැඩසටහන මන්දගාමී වනු ඇත, නමුත් පැතිකඩක් සමඟ, ඔබ 80% ක්ම ධාවනය වන කොටස හුදකලා කරන අතර ඔබ ඒවා C හෝ C ++ සමඟ කරන්න.

මේ ආකාරයට ක්‍රමලේඛනය කිරීමෙන්, ඔබ බොහෝ කාලයක් ඉතිරි කර ඇති අතර, ඔබේ වැඩසටහන කාර්යක්ෂම, වේගවත්, මතකය කාන්දු වීමට ඇති ඉඩකඩ අඩු වන අතර ඔබ කාලය ඉතිරි කර ගත්තේය.

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



2

මා භාවිතා කරන C ++ පන්ති සමඟ C ලෙස හැඳින්වේ!


8
හුරේ, ඔබ 'පන්ති' යතුර භාවිතා කළා. දැන් ඔබට OO නිර්මාණය තේරෙනවා!
dss539

මගේ C ++ නම් අවකාශයන් සහිත C ලෙස හැඳින්වේ.
jsz

6
මගේ C ++, umm .. මනෝජ්ගේ C ++ ලෙස හැඳින්වේ.
මනෝජ් ආර්

+1 මම C ++ භාවිතා කිරීමට එකම හේතුව පන්ති.
mbq

... හරි, ව්‍යතිරේක.
mbq

0

මේ වගේ සැකසූ සියලුම ප්‍රශ්න වලට එක පිළිතුරක් ඇත්ත වශයෙන්ම තිබේ. තාක්ෂණික Y වෙනුවට තාක්ෂණික X භාවිතා කිරීමට හොඳම හේතුව (X සහ Y දළ වශයෙන් එකම මට්ටමක පවතින විට [සියලු සමකාලීන ක්‍රමලේඛන භාෂාවන් මෙන්]) ඔබ දැනටමත් X දන්නා නිසා සහ Y නොදැන සිටීමයි.

(නමුත් හස්කල් පැමිණීමෙන් පසුව, වෙනත් කිසිවක් භාවිතා කිරීමට හේතුවක් නොමැත)


0

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

කෙසේ වෙතත්, මම සී භාවිතා නොකිරීමට පයිතන්, පර්ල් යනාදිය භාවිතා නොකරමි. මගේ මනාපය ඇත්ත වශයෙන්ම සී # වේ, මන්ද මම හොඳ පුස්තකාලයකට කැමතියි (එය .NET හි ශක්තියකි), සහ මම සංඛ්‍යාත්මකව ටයිප් කළ භාෂාවන්ට කැමතියි. බූ හොඳ විකල්පයකි. නමුත් ඇත්ත වශයෙන්ම හස්කල් , ඕකාම්ල් , ඩී , එම්එල් සහ එවැනි සියල්ලම හොඳයි.


7
ඔබට කාරණය මඟ හැරුණි.
මැට් ජොයිනර්

Att මැට් ජොයිනර්: මට විශ්වාසයි මට නැහැ. මට මග හැරුණේ කුමක්ද?

ප්‍රශ්නය වන්නේ C ++ භාවිතා නොකිරීමයි.
මතෙ සම්බන්ධකය

Att මැට් ජොයිනර්: හ්ම්, තවත් පෙනුමකින් මට එය ඇසෙන බව පෙනේ. නමුත් මම එයට පිළිතුරු දුන් බවක් පෙනේ (මම කරදර

C # නිසා මට මෙය අවතක්සේරු කිරීමට බොහෝ දුරට අවශ්‍යයි ...
Vreality
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.