সি, পার্ল, পাইথন ইত্যাদির পরিবর্তে সি ++ ব্যবহার করার কোনও কারণ আছে কি? [বন্ধ]


164

লিনাক্স (সার্ভার সাইড) বিকাশকারী হিসাবে, আমি জানি না আমি কোথায় এবং কেন সি ++ ব্যবহার করব।

আমি যখন পারফরম্যান্সের জন্য যাচ্ছি, প্রথম এবং শেষ পছন্দটি সি is

যখন "পারফরম্যান্স" মুখ্য সমস্যা নয়, পার্ল এবং পাইথনের মতো প্রোগ্রামিং ভাষাগুলি ভাল পছন্দ হবে।

আমি এই অঞ্চলে জানি প্রায় সমস্ত ওপেন সোর্স অ্যাপ্লিকেশনগুলি সি, পার্ল, পাইথন, ব্যাশ স্ক্রিপ্ট, এডাব্লু কে বা এমনকি পিএইচপিতে লেখা হয়েছে, তবে কেউ সি ++ ব্যবহার করে না।

আমি জিইউআই বা ওয়েব অ্যাপ্লিকেশনগুলির মতো অন্যান্য ক্ষেত্রগুলি নিয়ে আলোচনা করছি না, আমি কেবল লিনাক্স, সিএলআই এবং ডেমন সম্পর্কে কথা বলছি।

সি ++ ব্যবহার করার কোনও সন্তোষজনক কারণ আছে কি?


5
আমি কেবল এসটিএল এর কারণে সি ++ বিবেচনা করি।
ড্যান_ ওয়াটারওয়ার্থ

46
সুতরাং সি, পার্ল এবং পাইথন একসাথে ব্যবহার করে কিছু করা যায় কেবলমাত্র সি ++ ব্যবহার করে করা যেতে পারে। এবং আপনি জিজ্ঞাসা করছেন কেন সি ++ ব্যবহার করবেন?
মনোজ আর

36
Performance যখন আমি পারফরম্যান্সে যাব, প্রথম এবং শেষ পছন্দটি সি »হ্যাঁ নিশ্চিত: ডি এটি একটি অশোধিত এবং তুচ্ছভাবে ভুল দাবী।
ডেডালনিক্স

16
@ ডেডালনিক্স: আমি এটি বলব না। সি ++ এর জটিল বিধিগুলি রয়েছে যা অপ্টিমাইজারের উপরে পিছিয়ে যেতে পারে, কারণ এটি কিছু কিছু করার অনুমতি নেই। এবং অদৃশ্য পারফরম্যান্স কিলারগুলিতে পদক্ষেপ নেওয়া অত্যন্ত সহজ। এটি বেশ খানিকটা অ্যাকোভিমেটিক এবং তাই সত্য: ডি এখনও বাস্তবে সি ++ কোডটি কখনও কখনও দ্রুত হয় কারণ আপনি আরও কার্যকর অ্যালগরিদম এবং ডেটা স্ট্রাকচার ব্যবহার করবেন এবং নুন আসলে যাইহোক সি কোডটি অপ্টিমাইজ করে। সুতরাং সঠিকভাবে সম্পন্ন করার সময়, সি ++ নিরাপদ এবং আরও কার্যকর সি এবং আপনার যখন সামঞ্জস্যতা সমস্যা না হয় বা 100% প্রাপ্যতা সফ্টওয়্যার প্রয়োজন হয় তখন আপনার সি থেকে বেশি সি বেছে নেওয়া উচিত।
কোডার

4
পোস্ট করা উত্তরে বিবেচনা না করা সর্বোত্তম কারণটি সরাসরি ওপির প্রশ্নের সাথে সম্পর্কিত। ডিপেন্ডেন্সিস !!!!, আপনার গড় সিস্টেমে সি ++ লিবসের অভাব রয়েছে তা নয়, তবে এম্বেড থাকা সিস্টেমে সেগুলি উপলভ্য নাও হতে পারে। প্রতিটি সিস্টেমে আপনার প্রোগ্রামটি পাওয়ার একমাত্র উপায় হ'ল নিয়মিত সিতে আপনার প্রোগ্রামটি লেখার বাকী সমস্ত বিষয় হল আপনার বা আরও কম প্রতিনিধিত্বমূলক কেন সি ++ ব্যবহার করা উচিত নয় সে বিষয়ে বিতর্ক। সি ++ কেন প্রায়শই বেশি ব্যবহৃত হয় না, এবং যোগ্যতার কথা বিবেচনা না করে এর কারণগুলির মধ্যে কোনওটিই নির্ভরতা নয় O ও লিনাসের বিখ্যাত সি ++ রেন্ট।
জেএম বেকার 22

উত্তর:


308

আমি যখন পারফরম্যান্সে যাচ্ছি, প্রথম এবং শেষ পছন্দটি সি is

এবং এই যেখানে আপনার ব্যাক আপ করা উচিত। এখন আমি না, করতে পারেন এ সব , সার্ভার উন্নয়ন জন্য কথা বলতে। সম্ভবত বিকল্পগুলির চেয়ে সি ++ পছন্দ করার কোনও বাধ্যতামূলক কারণ নেই।

তবে সাধারণত বলতে গেলে, অন্যান্য ভাষার চেয়ে সি ++ ব্যবহার করার কারণটি হ'ল কার্য সম্পাদন। তার কারণ হ'ল সি ++ বিমূর্তির একটি উপায় সরবরাহ করে যা আমার জানা অন্যান্য সমস্ত ভাষার মতো নয় , রানটাইমে কোনও ওভারহেড নেই

এটি এখনও খুব কার্যকর কোড লিখতে দেয় যা এখনও একটি খুব উচ্চ বিমূর্ত স্তর রয়েছে।

সাধারণ বিমূর্ততাগুলি বিবেচনা করুন: ভার্চুয়াল ফাংশন, ফাংশন পয়েন্টার এবং পিআইএমপিএল আইডিয়াম। এগুলি সমস্ত ইন্ডিয়ারেশনে নির্ভর করে যা রানটাইম সময়ে পয়েন্টার পাটিগণিত দ্বারা সমাধান করা হয়। অন্য কথায়, এটিতে একটি পারফরম্যান্স ব্যয় হয় (যদিও এটি ছোট হতে পারে)।

অন্যদিকে সি ++, একটি ইন্ডিরিশন মেকানিজম সরবরাহ করে যা কোনও মূল্য (পারফরম্যান্স) ব্যয় করে না: টেমপ্লেটগুলি। (এই সুবিধাটির জন্য একটি (কখনও কখনও প্রচুর পরিমাণে) বর্ধিত সংকলনের সময় দিয়ে দেওয়া হয়))

জেনেরিক সাজানোর ক্রিয়াটির উদাহরণ বিবেচনা করুন।

সি-তে, ফাংশনটি qsortএকটি ফাংশন পয়েন্টার নেয় যা যুক্তিকে প্রয়োগ করে যার দ্বারা উপাদানগুলি একে অপরের সাথে সম্পর্কিত ordered জাভা এর Arrays.sortফাংশন বিভিন্ন রূপে আসে; তাদের মধ্যে একটি স্বেচ্ছাসেবী বস্তু বাছাই করে এবং কোনও বস্তু Comparatorএটিতে প্রেরণ করা প্রয়োজন যা সি এর ফাংশন পয়েন্টারের মতো কাজ করে qsort। তবে "নেটিভ" জাভা ধরণের জন্য আরও বেশ কয়েকটি ওভারলোড রয়েছে। এবং তাদের প্রত্যেকের sortপদ্ধতির নিজস্ব অনুলিপি রয়েছে - একটি ভয়ঙ্কর কোডের নকল।

জাভা এখানে একটি সাধারণ দ্বৈতত্ত্বের চিত্র তুলে ধরে: হয় আপনার কোডের সদৃশতা রয়েছে বা আপনার রানটাইম ওভারহেড ব্যয় করতে হবে।

সি ++ তে, sortফাংশনটি অনেকটা qsortসি এর মতোই কাজ করে , একটি ছোট তবে মৌলিক পার্থক্য: ফাংশনে যে তুলনা করা হয় তা একটি টেম্পলেট প্যারামিটার। এটার মানে হল যে তার কল করা যাবে inlined । দুটি বস্তুর তুলনা করার জন্য কোনও দিকনির্দেশনা প্রয়োজন ction একটি কড়া লুপে (যেমন এখানে রয়েছে) এটি আসলে যথেষ্ট পার্থক্য করতে পারে।

আশ্চর্যের বিষয় নয় যে অন্তর্নিহিত অ্যালগরিদম একই থাকলেও সি ++ sortফাংশন সি এর বাইরে চলে sortযায়। প্রকৃত তুলনা যুক্তি সস্তা যখন এটি বিশেষত লক্ষণীয়।

এখন, আমি বলছি না যে সি ++ সি (বা অন্যান্য ভাষাগুলি) এর চেয়ে বেশি দক্ষ একটি অগ্রাধিকার, বা এটি কোনও প্রাইমারি উচ্চতর বিমূর্ততা সরবরাহ করে। এটি অফার করে এমন একটি বিমূর্ততা যা একই সাথে খুব উচ্চ এবং অবিশ্বাস্যভাবে সস্তা সস্তা যাতে আপনার প্রায়শই দক্ষ এবং পুনরায় ব্যবহারযোগ্য কোডের মধ্যে পছন্দ করার প্রয়োজন হয় না।


16
আপনি দাগী বা ভুল কিনা তা জানার জন্য আমি এখন সি ++ সম্পর্কে যথেষ্ট জানি। তবে আপনাকে যুক্ত করতে চান কেবলমাত্র 1 টি ডাউনওয়েট পেয়েছেন তাই আরাম করুন। এটি ইন্টারনেট এবং ডাউনভোটগুলি ঘটে। দুর্দান্ত উত্তর যদিও এটি প্রযুক্তিগতভাবে ভাল!
ক্রিস

46
রানটাইমের সময় কোনও কার্য সম্পাদন নেই - এটি সর্বদা সত্য নয়। আপনি যদি এসটিএল ভেক্টর বাস্তবায়নের দিকে লক্ষ্য করেন তবে আপনি দেখতে পাবেন যে তারা রিলোক () (তারা পয়েন্টার, দীর্ঘ গল্পের কারণে করতে পারে না) ব্যবহার করার সুবিধা গ্রহণ করে না, তবে আমি জানি যে সমস্ত উচ্চ স্তরের ভাষা রিলোক ব্যবহার করতে পারে এবং করতে পারে ( ) ভেক্টর ইমপ্লের মধ্যে। এটি কেবল একটি উদাহরণ যা এটি স্পষ্ট নয় এবং সমস্ত কালো-সাদা।
মোজুবা

19
@ জারোসলা, @ স্টিভ: তবে হ্যান্ড-অপ্টিমাইজড কোডের জন্য একই (= কোড ব্লাট, নির্দেশের ক্যাশে মিস করা) সত্য যা প্রতিটি ডেটা টাইপের জন্য অভিযোজিত (জাভার বিভিন্ন Arrays.sortবাস্তবায়ন দেখুন)। কেবলমাত্র আপনি উচ্চ বিমূর্তির সুবিধা হারাবেন। এটি টেম্পলেটগুলির একটি নির্দিষ্ট অসুবিধা নয়, এটি সাধারণভাবে কোড নকলের একটি অসুবিধা। তদ্ব্যতীত, টাইট লুপগুলির মধ্যে এটি বিবেচ্য নয়, এটি সর্বদা একই কোড যা লোড হয়।
কনরাড রুডল্ফ

18
@ জারোসলা: নির্দেশের ক্যাশে সম্পর্কে মজার বিষয় হ'ল এটি একটি ক্যাশে । অর্থাৎ এটি সংরক্ষণ করার চেষ্টা করে না সবকিছু , শুধুমাত্র সম্প্রতি ব্যবহৃত কোড । টেমপ্লেটগুলি বিভিন্ন ধরণের vector.push_backজন্য একটি অনুরূপ কোড প্রচুর পরিমাণে তৈরি করতে পারে ( vector<int>একটির জন্য এবং অন্যটির জন্য vector<float>, তবে একটি এর সাথে কাজ করার সময় vector<int>, vector<float>কোডটি নির্দেশের ক্যাশে থাকবে সে কারণেই খুব কম কারণ রয়েছে So সুতরাং আমি দেখতে পাচ্ছি না যে এটি কীভাবে গুরুত্বপূর্ণ Every পৃথক টেমপ্লেট ইনস্ট্যান্স অত্যন্ত অপ্টিমাইজ এবং সাধারণত হয় আরো জেনেরিক সকল-ক্যাচ বাস্তবায়নের চেয়ে কম্প্যাক্ট
jalf

29
@ স্টিভ 314: আপনি "ব্লোট" বলছেন তা সি এবং জাভার জন্য ম্যানুয়ালি করা হয়। সি ++ এ, এটি স্বয়ংক্রিয় করা যেতে পারে এবং বিক্রেতারা ফুলে যাওয়া এড়াতে তাদের বানানোর সাহস করার মতো সংকলকরাও তত স্মার্ট হতে পারে। আমাকে যদি হয় ধীর হয়ে যাওয়ার (সি হিসাবে) বা ডুপ্লিকেট কোড (জাভা হিসাবে) ব্যবহার করতে হয়, সংকলকটি সদৃশ কাজ করে (এবং সম্ভবত এটি সম্পর্কে স্মার্ট হচ্ছে) বেশ ভাল বলে মনে হচ্ছে, না?
sbi

166

আমি অনেকগুলি সি প্রোগ্রামারকে দেখি যা সি ++ কে ঘৃণা করে। কোনটি ভাল এবং এটি সম্পর্কে মন্দ কী তা ধীরে ধীরে বুঝতে আমার বেশ কিছু সময় (বছর) সময় লেগেছে। আমি মনে করি এটি উচ্চারণের সর্বোত্তম উপায় এটি:

কম কোড, রান-টাইম ওভারহেড নেই, আরও সুরক্ষা।

আমরা যত কম কোড লিখি তত ভাল। শ্রেষ্ঠত্বের জন্য প্রচেষ্টা করা সমস্ত প্রকৌশলে এটি দ্রুত পরিষ্কার হয়ে যায়। আপনি এক জায়গায় একটি বাগ ঠিক করেছেন, অনেকগুলি নয় - আপনি একবার একটি অ্যালগরিদম প্রকাশ করেন এবং এটি আবার অনেক জায়গায় ব্যবহার করেন Gree গ্রীকদের এমনকি একটি বক্তব্য রয়েছে, প্রাচীন স্পার্টানদের কাছে পাওয়া যায়: "কম শব্দে কিছু বলতে, মানে যে আপনি এটি সম্পর্কে জ্ঞানী "। এবং বিষয়টির সত্যতাটি হ'ল, যখন সঠিকভাবে ব্যবহার করা হয় , তখন সি ++ আপনাকে সি এর চেয়ে অনেক কম কোডে নিজেকে রানটাইম গতির জন্য ব্যয় না করে নিরাপদ (অর্থাৎ সংকলন-সময়ে আরও ত্রুটি ধরা) সি এর চেয়ে বেশি প্রকাশ করতে দেয়।

এখানে আমার রেন্ডারারের একটি সরলীকৃত উদাহরণ রয়েছে : যখন ত্রিভুজের স্ক্যানলাইন জুড়ে পিক্সেল মানগুলি ইন্টারপোল্ট করা হয়। আমাকে একটি X স্থানাঙ্ক x1 থেকে শুরু করতে হবে এবং একটি X স্থানাঙ্ক x2 (বাম থেকে একটি ত্রিভুজের ডান দিকে) পৌঁছাতে হবে। এবং প্রতিটি ধাপ জুড়ে, প্রতিটি পিক্সেল জুড়ে আমি পাস করি, আমাকে মানগুলি ফাঁক করতে হবে।

যখন আমি পরিবেষ্টনের আলোকে পিক্সেলে পৌঁছে দেই:

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

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

যখন আমি রঙটি বিভক্ত করি ("গৌরুদ" শেডিং বলা হয়, যেখানে "লাল", "সবুজ" এবং "নীল" ক্ষেত্রগুলি প্রতিটি পিক্সেলের একটি ধাপের মান দ্বারা বিভক্ত হয়):

  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;

আমি যখন "ফোং" শেডিংয়ের রেন্ডার করি তখন আমি আর তীব্রতা (অ্যাম্বিয়েন্টলাইট) বা কোনও রঙ (লাল / সবুজ / নীল) ইন্টারপোলেট করি না - আমি একটি সাধারণ ভেক্টরকে (এনএক্স, এনওয়াই, এনজেড) ইন্টারপোল্ট করি এবং প্রতিটি পদক্ষেপে আমাকে পুনরায় ফিরে আসতে হয় আন্তঃবিবাহিত সাধারণ ভেক্টরের উপর ভিত্তি করে আলো সমীকরণের গণনা করুন:

  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;
          }
...

আপনি বিশৃঙ্খলা পিছলে পিছনে অনুভব করেন?

প্রথমত, আমার কোডটি ক্র্যাশ করার জন্য একটি টাইপো হ'ল প্রয়োজনীয়, যেহেতু সংকলক আমাকে কখনই ফাংশনের "গৌরুদ" বিভাগে থামাতে পারবে না, আসলে ".এ" অ্যাক্সেস করতে। (পরিবেষ্টিত) মান। সি টাইপ সিস্টেমে (যেটি সংকলনের সময়) ধরা পড়ে না এমন বাগের অর্থ, এমন একটি বাগ যা রান-টাইমে প্রকাশ পায় এবং এটির জন্য ডিবাগিংয়ের প্রয়োজন হবে। আপনি কি লক্ষ্য করেছেন যে আমি left.a.green"ডিজিগ্রিন" গণনায় প্রবেশ করছি ? সংকলক নিশ্চয়ই আপনাকে তা বলেন নি।

তারপরে, সর্বত্র পুনরাবৃত্তি রয়েছে - forলেন্ডারটি যতবার রেন্ডারিং মোড রয়েছে ততবার রয়েছে, আমরা "ডান বিয়োগ বামে ধাপে বিভক্ত" করে চলেছি। কুরুচিপূর্ণ, এবং ত্রুটি-প্রবণ। আপনি কি লক্ষ্য করেছেন যে গৌড় লুপে "আমি" ব্যবহার করার সাথে আমি তুলনা করেছি, যখন আমার "জ" ব্যবহার করা উচিত ছিল? সংকলক আবার, নীরব।

মোডগুলির জন্য / অন্য / মই সম্পর্কে কী? আমি যদি তিন সপ্তাহের মধ্যে একটি নতুন রেন্ডারিং মোড যুক্ত করি তবে কী হবে? আমার সমস্ত কোডে "if মোড ==" সমস্ত নতুন মোডটি হ্যান্ডেল করা কি মনে আছে?

সি ++ স্ট্রাক্টের এই সেট এবং একটি টেম্পলেট ফাংশনটির সাথে উপরের কদর্যতা তুলনা করুন:

  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" ক্ষেত্র) পুনরায় ব্যবহার করে । এবং টেম্পলেটটি সংকলকটি তৈরি করে (যা কোড তৈরি করা) তিনটি আলাদা ফাংশন যা আমরা সিতে লিখতাম, কিন্তু একই সাথে, প্রকারগুলি সম্পর্কে খুব কঠোর হয়ে ওঠে!

টেমপ্লেটের আমাদের লুপটি অজানা ক্ষেত্রগুলিকে অজানা ও অ্যাক্সেস করতে পারে না - আমরা যদি করি তবে সংকলকটি বার্ক করবে।

টেমপ্লেটটি সাধারণ কাজ সম্পাদন করে (লুপ, প্রতিটি সময়ে "ধাপে" বাড়িয়ে) এবং এটি এমনভাবে করতে পারে যাতে রানটাইম ত্রুটিগুলি কেবল তৈরি করতে পারে না। টাইপ প্রতি ক্ষেপক ( AmbientPixelData, GouraudPixelData, PhongPixelData) সঙ্গে সম্পন্ন করা হয় operator+=()যে আমরা structs মধ্যে যোগ করা হবে - যা মূলত নির্দেশ কিভাবে প্রতিটি টাইপ ইন্টারপোলেট করা হয়।

এবং আপনি কী দেখতে পান যে আমরা ওয়ার্কঅনপিক্সেল <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টেম্পলেট বিশেষায়িতকরণকে ইনলাইন করবে because কল!

কম কোড, রান-টাইম ওভারহেড নেই, আরও সুরক্ষা।

এর অর্থ কি এই যে সি ++ হ'ল সমস্ত ভাষা এবং শেষের ভাষা? অবশ্যই না. আপনার এখনও ট্রেড-অফগুলি পরিমাপ করতে হবে। অজ্ঞ লোকেরা যখন বাশ / পার্ল / পাইথন স্ক্রিপ্ট লিখত তখন তাদের সি ++ ব্যবহার করা হবে। ট্রিগার-হ্যাপি সি ++ newbies ভার্চুয়াল একাধিক উত্তরাধিকারের সাথে গভীর নেস্টেড ক্লাস তৈরি করবে আপনি তাদের থামানোর আগে এবং তাদের প্যাকিং প্রেরণের আগে। এটি প্রয়োজনীয় নয় তা বোঝার আগে তারা জটিল বুস্ট মেটা-প্রোগ্রামিং ব্যবহার করবে । তারা এখনও ব্যবহার করবে char*, strcmpএবং ম্যাক্রো, পরিবর্তে std::stringও টেমপ্লেট।

তবে এটি আর কিছুই বলে না ... আপনি কার সাথে কাজ করছেন তা দেখুন। অযোগ্য ব্যবহারকারীদের থেকে আপনাকে রক্ষা করার কোনও ভাষা নেই (না, এমনকি জাভাও নয়)।

অধ্যয়ন এবং সি ++ ব্যবহার চালিয়ে যান - কেবলমাত্র ওভারডাইসাইন করবেন না।


18
"না, এমনকি জাভাও নয়" এর জন্য +1 :)
নাথান ওসমান

53
উদাহরণস্বরূপ +1। এটি একটি দীর্ঘ পোস্ট ছিল, তবে সি এবং সি ++ কোডের মধ্যে তুলনা চিত্তাকর্ষক।
প্যার্সেবল

এবং এই মহিলারা এবং ভদ্রলোক, এজন্যই লেক্স / ইয়্যাক বিদ্যমান। একই যুক্তি, আমি বুঝতে পারি না যে সি ++ এর অংশগুলি একই কোড প্রজন্মের দর্শনে পড়ে। আমি আবার এটি একবার দেখতে হবে।
স্পেন্সার রথবুন

2
আমি প্রচুর 2 ডি রেন্ডারিং কোড লিখেছি (এক দশকেরও বেশি আগে), এবং সি থেকে সি ++ তে পোর্ট করার সময় এই সমস্যার মধ্যে পড়েছিলাম: আপনার স্ক্যানলাইনটি 1-বিট পিক্সেল (8 পিক্সেলের মধ্যে তৈরি হলে) আপনি পিক্সেল স্ট্রাকটি কীভাবে সংজ্ঞায়িত করবেন? একটি বাইট)? এবং যখন আপনার স্ক্যানলাইনটি আর, জি এবং বি বাইট (পিক্সেল 3 বাইট) দিয়ে তৈরি? আর যখন আপনার কাছে আর, জি এবং বি এর জন্য পৃথক তিনটি বাফার থাকবে? আপনি উত্তরটি জানেন: সি ++ তেমন কোনও
উপকারে আসে না

আপনি কেন এর জন্য সি ++ তে টেম্পলেট ব্যবহার করেন? আপনার পদ্ধতিটি বেস শ্রেণীর একটি প্যারামিটার ঘোষণা করে তাই আমার [সি # প্রোগ্রামার] দৃষ্টিকোণ থেকে দেখে মনে হচ্ছে আপনি কেবল উদ্ভূত-টাইপ উদাহরণটি বেস-টাইপ প্যারামিটারে পাস করতে পারেন। আমি সি ++ জানি না, আপনি দয়া করে ব্যাখ্যা করতে পারেন?
ভ্লাদ

79

জয় শিশুর জন্য RAII

সিরিয়াসলি, সি ++ এ নিয়ন্ত্রক ধ্বংসটি কোডকে আরও পরিষ্কার করে তোলে এবং কোনও ওভারহেড ছাড়াই নিরাপদ।


20
"সি ++: একমাত্র গুরুতরভাবে নির্বিচারক বিকল্প today এটি সম্পর্কে আপনার ডাক্তারকে আজ জিজ্ঞাসা করুন।"
কাইল স্ট্র্যান্ড


1
সি হ'ল ডিটারমিনিস্টিক, তবে ম্যালোক-এড মেমরি ব্যবহার করার সময় এটি আসলে ঘটবে তা নিশ্চিত করার জন্য আরও কাজ করা দরকার
বাল্ড্রিক ১৮

1
সি-তে বালড্রিক্ক আপনি যেখানেই কোনও সংস্থান ব্যবহার করেন সেখানে ক্লিনআপ কোড লিখতে হবে। সি ++ এ, আপনি এটি একবার লিখেছেন , সংস্থানটির সংজ্ঞা অনুসারে। সি এবং জাভা উভয়ই "নিষ্পত্তি হওয়ার পরে ব্যবহৃত রিসোর্স" এবং "লিক রিসোর্স" বাগগুলি থেকে ভোগেন, কারণ ক্লিনআপ স্বয়ংক্রিয় নয় । স্মৃতিই একমাত্র সম্পদ নয়।
কালেথ

70

সি ++ ব্যবহার করার মতো কোনও সন্তোষজনক কারণ আছে কি?

  1. টেমপ্লেট এবং এসটিএল। আপনি প্রচুর দরকারী বিমূর্ততা এবং শ্রম-সাশ্রয়কারী সরঞ্জামের জন্য সামান্য বিল্ড টাইম (এবং কিছু সম্ভাব্য অপ্রয়োজনীয় ত্রুটি বার্তা) বাণিজ্য করেন , রান-টাইম পারফরম্যান্সের কোনও হিট ছাড়াই (যদিও বাইনারি পদচিহ্নটি কিছুটা বড় হতে পারে)।

    আপনার মাথাটি চারপাশে মুড়িয়ে রাখতে কিছুটা সময় লাগে (এটি ক্লিক করার আগে কয়েক বছর সময় লেগেছিল) তবে আপনি একবার এটি করলে জীবনকে অনেক সহজ করা যায়।

  2. সি ++ তে পাঠ্য প্রক্রিয়াকরণ হ'ল আকারের সি এর চেয়ে কম ব্যথার অর্ডার is


35
পাঠ্য প্রক্রিয়াকরণের জন্য +1, যা আমি আমার উত্তরে পুরোপুরি ভুলে গিয়েছিলাম।
কনরাড রুডল্ফ

8
হি আমি পাইথন বলার তুলনায় পাঠ্য প্রক্রিয়াকরণটি বেদনাদায়ক পেয়েছি ..
নিলস

7
বুস্ট হ'ল একমাত্র কারণ আমি এখনও সি ++ ব্যবহার করি।
ফেরুচিয়ো

33
@ নিলস: গাধাটিকে ব্যথার জন্য 1-এর স্কেলে, সি ++ তে পাঠ্য প্রক্রিয়াকরণ অবশ্যই পাইথনের মতো আরও আধুনিক ভাষার চেয়ে খারাপ। এটি কেবলমাত্র সি -তে পাঠ্য প্রক্রিয়াজাতকরণ - এ- pain যদি সেই নির্দিষ্ট অ্যাপ্লিকেশনের জন্য পছন্দটি সি এবং সি ++ এর মধ্যে হয় তবে সি ++ সহজেই জয়ী হয়।
জন বোদে

8
আমি জানি না যে কেন লোকেরা সি / সি ++ তে পাঠ্য প্রক্রিয়াজাতকরণের মতো জিনিস নিয়ে এমন সমস্যা করে have কেবল একটি লাইব্রেরি ব্যবহার করুন বা আপনার নিজের লিখুন। একবার আপনি নিম্ন স্তরের ফাংশনগুলি (এক-সময় ব্যথা) লিখে ফেললে আপনি বিশাল পারফরম্যান্স, টাইট কোড এবং বৃহত্তর নমনীয়তা অর্জন করেন। হ্যাঁ, আমি দ্রুত / নোংরা কমান্ড লাইন ইউটিলিটিগুলির জন্য পাইথন ব্যবহার করব তবে গুরুতর উত্পাদনের কোড এর সি / সি ++ ব্যবহার করব।

41

হ্যাঁ.

যদি আপনি নির্বাহযোগ্য দক্ষতার সন্ধান করেন তবে আপনি সি বা সি ++ এর নীচে রয়েছেন, তাই আমি এটিতে ফোকাস করব।

টেমপ্লেটগুলি সাধারণ হওয়ার আগেও, আপনি দুটি খুব সাধারণ কারণেই 1990 এর দশকের মাঝামাঝি প্রথম দিকে যে ধরনের এক্সিকিউটেবল আলোচনা করেন সে জন্য আমি সি ++++ এর চেয়ে বেশি পছন্দ করতাম: অবজেক্ট পলিমারফিজম এবং আরআইআই

আমি সব ধরণের আকর্ষণীয় জিনিসের জন্য বহুবর্ষীয় সি ++ অবজেক্ট ব্যবহার করেছি। উদাহরণস্বরূপ, আমি ওএমএপি এবং এক্সস্কেল এআরএম সিপিইউতে ফ্রেম বাফার ওভারলেগুলি সহ এম্বেডড লিনাক্স সিস্টেমে কাজ করছিলাম। দুটি হার্ডওয়্যার আর্কিটেকচারের খুব আলাদা এপিআই সহ বিভিন্ন ওভারলে বৈশিষ্ট্য রয়েছে। ওভারলেগুলির একটি আদর্শ দৃষ্টিভঙ্গি প্রকাশ করার জন্য আমি একটি সাধারণ ভার্চুয়াল "ওভারলে" বেস ক্লাস ব্যবহার করেছি এবং তারপরে "ওম্যাপওভারলে" এবং "এক্সস্কেল ওভারলে" ক্লাসগুলি লিখেছিল যা রানটাইমের সময়ে যথাযথভাবে ইনস্ট্যান্ট করা হয়েছিল, কোডটি সনাক্ত করেছিল যে কোন আর্কিটেকচারটি এটি চালু রয়েছে তার উপর নির্ভর করে।

ওভারসিম্প্লিফাই করার জন্য, আরআইআই হ'ল ধারণাটি আপনি অবজেক্টের কনস্ট্রাক্টরের সময় কোনও বস্তুর সাথে সংযুক্ত সংস্থানগুলি বরাদ্দ করেন, বা পরে হয়তো অবজেক্টের জীবদ্দশায়, এবং সংস্থানগুলি অবনমিত বা অবজেক্টের ডেস্ট্রাক্টরে প্রকাশিত হয়। এটি সি ++ এ আসলেই দুর্দান্ত, কারণ যেসব বিষয়গুলি স্বয়ংক্রিয় ভেরিয়েবলগুলি তারা সুযোগের বাইরে চলে গেলে ধ্বংস হয়। যে কারও জন্য সি এবং সি ++ তে সমান পারদর্শী, তার জন্য সি ++ এ রিসোর্স এবং মেমরির ফাঁস এড়ানো আরও সহজ। আপনি একটি ফাংশন শেষে অনেকগুলি কল করার আগে লেবেলের খুব সাধারণ সি মেমের সাথে খুব বেশি সি ++ কোড দেখতে পাবেন না এবং ফাংশন ব্লকের free()বিভিন্ন gotoজায়গায় সেখানে লাফিয়ে।

আমি পুরোপুরি সচেতন যে আপনি সি দিয়ে এই সমস্ত জিনিসগুলি করতে পারেন - এটি কেবল আরও অনেক কাজ, কোডের আরও লাইন এবং আপনি যা বজায় রাখছেন তা অনেক খারাপ এবং প্রায়শই বোঝা শক্ত। এক্স সার্ভার ইন্টার্নাল এবং ম্যান এর মাধ্যমে পলিমারফিজম কোডটি রয়েছে , এটি কি পলক এবং অদ্ভুত এবং এর ঘন ঘন সনাক্ত করা শক্ত।

আমি জিটিকে + এবং ক্লাটারের মতো জিনোম প্রযুক্তিগুলির সাথেও প্রচুর কাজ করি, এগুলির সবগুলি GObject সিস্টেম ব্যবহার করে সিতে লেখা হয়। গবজেক্টটি হ'ল সি ++ অবজেক্ট সিস্টেমের মতো দুর্দান্ত কভারটি ছড়িয়ে দেওয়া এবং সমস্ত কুরুচিপূর্ণ ইন্টার্নাল উন্মোচিত হয় এবং এটি সাধারণত এক-লাইন সি ++ পদ্ধতি কলটি করতে যা করতে কোডের অর্ধ-ডজন লাইনের প্রয়োজন হয়। আমি বর্তমানে কিছু লিখছি ClutterActors, এবং গণিতটি সত্যিই আকর্ষণীয় হওয়ার পরেও আমি ক্রমাগত ভাবছি, "এটি সি ++ তে আরও অনেকটা সংক্ষিপ্ত এবং বোধগম্য হবে"।

আমি প্রায়শই মনে করি, "আপনি জানেন, আমি যদি সি এর পরিবর্তে সি ++ এ লিখতে থাকি তবে আমি বসার ঘরে বাইরে থাকতাম, সকাল 9 টায় আমার অফিসে বসে না থেকে আমার স্ত্রীর সাথে মাইথবাস্টারকে দেখছিলাম ।"


9
আপনি এখানে যা বলছেন তার সাথে আমি সত্যিই সম্পর্কিত হতে পারি, বিশেষত 1) আরআইআই এবং 2) বিষয়টির চিন্তাভাবনা "আপনি জানেন, আমি যদি এটি সি এর পরিবর্তে সি ++ তে লিখতাম ..." আমি এম্বেডেড সিস্টেমের বিকাশ অনেক করি , এবং এমনকি টিমটি "সি" বা "শ্রেণীর সাথে সি" ধরণের দোকান হলেও, আমি সত্যই বাধা হেরফের, মুটেক্স অপারেশন এবং ট্রেসিং / লগিংয়ের মতো বিষয়গুলির জন্য রাইআইআইকে উত্সাহিত করার চেষ্টা করি (উদাহরণস্বরূপ টগলিং আই / ও এর মতো জিনিসগুলি) লাইন)। এবং পলিমারফিক ফ্রেম বাফারগুলির আপনার বিবরণটি বিতরণ করা সিস্টেমে আমার পলিমারফিক ম্যাসেজ বাফারগুলির ব্যবহারের কথা মনে করিয়ে দিয়েছে।
Radian

29

সি ++ সি হিসাবে প্রায় দ্রুত (কিছু জিনিস দ্রুত, কিছু ধীরে ধীরে), এবং এটি আরও ভাল বিমূর্ততা এবং সংগঠন সরবরাহ করে। ক্লাসগুলি আদিম ধরণের সাথে একইভাবে কাজ করে, বিপুল পরিমাণ কোড মনের মধ্যে না রেখে ব্যবহার করা যায়। অপারেটর ওভারলোডিং এবং টেমপ্লেটগুলি এমন ডেটা উপস্থাপনা পরিবর্তন করে যদি আরও কার্যকর হয় যে কোড লিখতে এটি সম্ভব করে তোলে। ব্যতিক্রমগুলি সহজে ত্রুটি-পরিচালনা পরিচালনা করতে পারে। সংকলনটি সংকলন সময়ে আরও স্টাফ পরীক্ষা করতে ব্যবহার করা যেতে পারে।

আপনি এর জন্য যে মূল্য দিচ্ছেন তা মোটামুটি বাজে শেখার বক্ররেখা এবং আমি পরিচিত অন্যান্য বেশিরভাগ ভাষাগুলির চেয়ে এতে সূক্ষ্ম ভুল করা সহজ।

সুতরাং, আপনি এখন যা করছেন তার জন্য এটি শেখানো আপনার পক্ষে সার্থক হবে কিনা তা আমি বলতে পারি না। আপনি অবশ্যই পাইথন বা পার্ল এবং সি এর সংমিশ্রণগুলি সহ পেতে পারেন তবে সি ++ একটি হার্ড-টু-গেম-টু-ইউজ-টু-প্যাকেজটিতে অ্যাবস্ট্রাকশন এবং পারফরম্যান্স উভয়ই সরবরাহ করে।


13
সি ++ সি এর চেয়ে ধীরে ধীরে এমন কোনও ঘটনা নেই কারণ আপনি যদি দ্রুততর হন (এবং আপনি যত্নবান হন) তবে আপনি সর্বদা সি উপায়টি ব্যবহার করতে পারেন।
জ্যাক এইডলি

1
@ জ্যাকএইডলি - সি ++ সীমাবদ্ধ এবং স্ট্যাটিক অ্যারে প্যারামিটারগুলিকে সমর্থন করে না cept এবং এক জায়গায় সি ++ - শৈলী ব্যবহার করা আপনাকে এটিকে অন্য জায়গায় ব্যবহার করতে বাধ্য করে।
মার্টিনকুনেভ

@martinkunev restrictoptimisations aliasing থেকে বহিষ্কার করতে ব্যবহার করা হয়, তাই কিভাবে যে জিনিস বানাতে সাহায্য করেন দ্রুততর ? এবং "স্ট্যাটিক অ্যারে প্যারামিটার" কী? এবং "স্টাইল" কীভাবে পারফরম্যান্সকে প্রভাবিত করে?
আন্ডারস্কোর_

1
@ আসনস্কোর_ডি অ-এলিয়জিংয়ের গ্যারান্টির উপর ভিত্তি করে অনুমতিগুলি অনুকূলকরণকে সীমাবদ্ধ করে; স্ট্যাটিক অ্যারে প্যারামিটারগুলি কম্পাইলারকে ধরে নিতে দেয় যে একটি পয়েন্টার আর্গুমেন্ট নুল নয় এবং এই পয়েন্টারটি কমপক্ষে প্রদত্ত কয়েকটি সংখ্যক উপাদানকে নির্দেশ করে; "শৈলী" শব্দের বেশ কয়েকটি অর্থ রয়েছে এবং প্রসঙ্গের বাইরে রেখে এর অর্থ বদলে যায় - আমি ব্যতিক্রমগুলি কীভাবে স্মার্ট পয়েন্টারগুলির প্রয়োগকে কার্যকর করে।
মার্টিনকুনেভ

1
@martinkunev হুম, তাই আমি ভাবছি একটি স্ট্যাটিক অ্যারে প্যারামিটার কিছু বৈশিষ্ট্যগুলি একটি সি ++ টেমপ্লেট থেকে ভিন্ন একটি ব্যবহার করা সক্ষম করে কিনা T (&arr)[n]বা std::array<T, n>- সেখানে তথ্য অনেক না যেমন আছে আউট, এই এক আরো খোঁজ খবর নেন করতে হবে। এটি স্মার্ট পয়েন্টারগুলি সম্পর্কে স্পষ্ট করে তোলে, অবশ্যই একটি ভাল উদাহরণ। যদি সমান প্লেয়িং ফিল্ডে কোডিং করা হয়, তবে আমরা ব্যতিক্রমগুলি ব্যবহার করব না, সুতরাং সম্ভাব্য ব্যয়গুলির কোনওটিই ব্যয় করা হবে না ... তবে আমি সন্দেহ করি যে আপনি একবার তৃতীয় পক্ষের লাইব্রেরি ছবিতে প্রবেশ করার পরে কীভাবে বোঝাচ্ছেন, প্রচুর অনুমান করা যায়? ঝুঁকিতে আছে
আন্ডারস্কোর_ডি

27

আমি সি ++ কে 1990 এর দশকের ভাষা হিসাবে, একটি পূর্ব যুগের ভাষা হিসাবে বিবেচনা করি।

পিছনে তখন এটি বড় ছিল কারণ এটি পারফরম্যান্সের ক্ষেত্রে স্বল্প ব্যয়ে উচ্চ-স্তরের ভাষা নির্মাণ এবং প্রক্রিয়া সরবরাহ করে। অ্যাড্রেস বুক অ্যাপ্লিকেশন থেকে অ্যাভিওনিক্স সফ্টওয়্যার পর্যন্ত সমস্ত কিছু বিকাশের এটি সর্বজনীন হাতিয়ার এবং এটি ওও ক্রেজকে অনুপ্রাণিত করেছিল। ওওপি ক্ষুধা এবং এইডস সমাধান করেছে এবং হ্যাঁ, 1990 এর দশকের শেষের দিকে যখন আমি প্রথম প্রোগ্রামিং শুরু করি যে কোনও অ-ওও ভাষা শেখার যোগ্য নয় তখন আমি সি ++ কে দোষ দিয়েছি।

এখন যে হার্ডওয়্যারটি এত বেশি এবং আরও উন্নত হয়েছে, আধুনিক ভাষাগুলি উপস্থিত হয়েছে, আমি কম্পিউটারে নিবিড় সফ্টওয়্যার বাদে বেশিরভাগ অ্যাপ্লিকেশন প্রোগ্রামিংয়ের জন্য প্রাসঙ্গিক পছন্দ বাকি থাকতে দেখতে ব্যর্থ হই যেখানে আপনার এখনও কিছু বিমূর্ততা প্রয়োজন (গেমস, ফিজিক্স সিমুলেশন, সিএডি সিস্টেম ইত্যাদি) need )। এমনকি আপনি যদি সিটিতে একটি কমপ্যাক্ট, মডিউলার ইঞ্জিন লেখেন এবং উচ্চ-স্তরের অ্যাপ্লিকেশন যুক্তিটি একটি ঝরঝরে স্ক্রিপ্টিং ভাষায় প্রেরণ করেন তবে পরবর্তীকালেও এড়ানো যায়।

আপনার যদি ধাতব সিটিতে নেমে যেতে হয় এবং আপনি যখন উচ্চ-স্তরের দিকে যেতে চান, তখন একটি আধুনিক ভাষায় এটি করুন যা এনক্যাপসুলেশনটির বিজ্ঞাপন দেয় না এবং আপনি বিন্দুতে প্রতিটি বাইটকে অবাধে পরিবর্তন করতে পারেন।


11
সুতরাং পয়েন্টার ব্যবহার করে এলোমেলো বাইটগুলি পরিবর্তন করবেন না। এড়ানো এতটা কঠিন নয়, তাই না?
ডেভিড থর্নলি

11
@ ব্লাগোভেষ্ট: আমি আপনার সাথে সি ++ 'জটিলতা সম্পর্কে একমত এবং আমি কখনই এটি কোনও বস্তু-ভিত্তিক ভাষা প্রতিস্থাপন করতে ব্যবহার করব না। তবে এর জটিলতা সত্ত্বেও এটি সি এর জন্য এখনও জিতেছে কারণ এর বিভিন্ন সুবিধাগুলি বিভিন্ন উত্তরগুলিতে বানানো হয়েছে (বিমূর্ততা, সংস্থান হস্তান্তর, স্ট্রিং হ্যান্ডলিং ...)। প্রকৃতপক্ষে, আপনি কয়েকটি বৈধ ক্ষেত্রের নাম দিয়েছেন যেখানে সি ++ এখনও প্রাসঙ্গিক, এবং যেখানে এটি সি এর চেয়ে অনেক বেশি উন্নত
কনরাড রুডল্ফ

6
@ ব্লাগোভেষ্ট: এ কারণেই আমি অন্ধকার কোণ থেকে দূরে থাকি। আমার জানা অন্য যে কোন ভাষার চেয়ে সি ++ তে সেখানে জড়িয়ে থাকা সহজ। এটি ব্যবহার করে, আমি আরআইআই থেকে উপকৃত হব, সি থেকে এসটিএল-টাইপ টেম্পলেট ক্লাস, ওও বৈশিষ্ট্য এবং অন্যান্য সুবিধাগুলি হ্যান্ডলিংয়ের চেয়ে আরও ভাল স্ট্রিং হ'ল
ডেভিড থর্নলি

24
@ ব্লাগোভেষ্ট: না, আপনি করবেন না। উদাহরণস্বরূপ, আপনি যা উল্লেখ করেছেন তা আরআইআই অর্জনের জন্য অপর্যাপ্ত এবং কন্টেইনার ক্লাসগুলির কার্যকারিতা রয়েছে যা হস্ত-নকশিত ডেটা কাঠামোর বাইরে। যদি আপনি মনে করেন এটি সম্ভব, আপনি কখনও সি ++ ভালভাবে শিখেন নি।
ডেভিড থর্নলি

5
@ জারোস্লাও আমি দেখতে পাই না যে মাল্টি-কোর মেশিনগুলি কেন ওওপি কবরে রাখবে। আপনি যদি সি ++ বলতে চান তবে আপনি কোথায় থেকে এসেছেন তা আমি দেখতে পেতাম। অনেক আধুনিক প্রোগ্রামিং ভাষা, বিশেষত উচ্চ-স্তরের ভাষাগুলিতে ওওপি একটি মৌলিক ধারণা। এমনকি সি ওও হতে পারে, যদি আপনি এটি সেভাবে প্রোগ্রাম করেন। এটি কেবল সি ++ আইএমওর মতো সুবিধাজনক নয়।
वेग

21

লিনাসের মতে , না:

আমি যখন প্রথম গিট সোর্স কোডের দিকে নজর দিয়েছিলাম তখন দুটি জিনিস আমার কাছে বিজোড় হিসাবে আঘাত করেছিল: 1. সি ++ এর বিপরীতে খাঁটি সি। কেন জানি না। দয়া করে বহনযোগ্যতার বিষয়ে কথা বলবেন না, এটি বিএস।

আপনি বুলিশ্ পূর্ণ।

সি ++ একটি ভয়ঙ্কর ভাষা। এটিকে আরও ভয়াবহ করে তুলেছে যে প্রচুর নিম্নমানের প্রোগ্রামাররা এটি ব্যবহার করে, যেখানে এটির সাথে মোট এবং উত্কৃষ্ট বাজেয়াপ্ত তৈরি করা অনেক সহজ। মোটামুটি সত্যিই, সি এর পছন্দগুলি সি ++ প্রোগ্রামারদের বাইরে রাখার ব্যতীত কিছুই না করা সত্ত্বেও এটি নিজেই সি ব্যবহারের বিশাল কারণ হতে পারে if

অন্য কথায়: সি এর পছন্দটি একমাত্র বুদ্ধিমান পছন্দ। আমি জানি মাইলস বদর কৌতুক করে বলেছিলেন "আপনাকে ছেড়ে দিতে", তবে এটি সত্য true আমি উপসংহার যে কোনো প্রোগ্রামার যে সি ++ উপর প্রকল্পের পছন্দ করেন সি হওয়ার সম্ভাবনা প্রোগ্রামার যে আমি সত্যিই এসেছ হবে , বন্ধ প্রস্রাব করতে পছন্দ যাতে তিনি আসে না এবং যে কোনো প্রকল্পের স্ক্রু আপ আমি যুক্ত করছি সঙ্গে.

সি ++ সত্যই খারাপ ডিজাইনের পছন্দ বাড়ে। আপনি অবিচ্ছিন্নভাবে ভাষাটির "দুর্দান্ত" লাইব্রেরি বৈশিষ্ট্যগুলি যেমন এসটিএল এবং বুস্ট এবং অন্যান্য মোট এবং উচ্চারণের ক্রেপ ব্যবহার করতে শুরু করেন যা আপনার প্রোগ্রামকে "সহায়তা" করতে পারে, কিন্তু কারণগুলি:

  • অসম্পূর্ণ ব্যথা যখন তারা কাজ করে না (এবং যে কেউ আমাকে বলেন যে এসটিএল এবং বিশেষত বুস্ট স্থিতিশীল এবং বহনযোগ্য, কেবল বিএস-তে এতটাই পরিপূর্ণ যে এটি এমনকি মজারও নয়)

  • অক্ষম বিমূর্ত প্রোগ্রামিং মডেল যেখানে দু'বছর ধরে রাস্তায় আপনি লক্ষ্য করেছেন যে কিছু বিমূর্ততা খুব কার্যকর ছিল না, তবে এখন আপনার সমস্ত কোড তার চারপাশের সমস্ত চমৎকার অবজেক্টের মডেলের উপর নির্ভর করে এবং আপনি নিজের অ্যাপ্লিকেশনটি পুনরায় লিখে না দিয়ে এটি ঠিক করতে পারবেন না।

অন্য কথায়, ভাল, দক্ষ, এবং সিস্টেম-স্তরের এবং পোর্টেবল সি ++ করার একমাত্র উপায় নিজেকে সিলে মূলত উপলভ্য সমস্ত বিষয়গুলিতে সীমাবদ্ধ করে শেষ করে এবং আপনার প্রকল্পকে সি-তে সীমাবদ্ধ রাখার অর্থ এই যে লোকেরা এটিকে স্ক্রু করে না আপ, এবং এর অর্থ হ'ল আপনি প্রচুর প্রোগ্রামার পান যা প্রকৃতপক্ষে নিম্ন-স্তরের সমস্যাগুলি বোঝে এবং কোনও বুদ্ধিমান "অবজেক্ট মডেল" ক্রেপ দিয়ে জিনিসগুলি স্ক্রু না করে।

সুতরাং আমি দুঃখিত, কিন্তু গিটের মতো কোনও কিছুর জন্য, যেখানে দক্ষতা প্রাথমিক উদ্দেশ্য ছিল, সি ++ এর "সুবিধাগুলি" কেবল একটি বিশাল ভুল। আমরা যে লোকদের দেখতে পাচ্ছি না তা হ'ল এটি কেবল একটি বড় অতিরিক্ত সুবিধা।

আপনি যদি সি ++ তে লিখিত কোনও ভিসিএস চান, তবে মনোোটোন দিয়ে খেলুন। সত্যিই। তারা একটি "বাস্তব ডাটাবেস" ব্যবহার করে। তারা "চমৎকার অবজেক্ট-ভিত্তিক গ্রন্থাগার" ব্যবহার করে। তারা "দুর্দান্ত সি ++ বিমূর্ততা" ব্যবহার করে। এবং বেশ স্পষ্টভাবে, এই সমস্ত ডিজাইনের সিদ্ধান্তগুলির ফলস্বরূপ যা কিছু সিএস লোকের কাছে এত আবেদন করে যে, শেষ ফলাফলটি একটি ভয়াবহ এবং অজানা।

তবে আমি নিশ্চিত আপনি গিটের চেয়ে বেশি পছন্দ করবেন like

      Linus

62
আমি মনে করি না যে এখানে যুক্তি দেখানোর জন্য লিনাসের লোক হওয়া উচিত। তার অনুদানগুলি মারাত্মকভাবে বিষয়মূলক এবং অপরিপক্ক। তার আসলে কয়েকটি ভাল পয়েন্ট রয়েছে তবে সেগুলি এত গভীরভাবে সমাহিত করা হয়েছে ("বুলশিট" পাশাপাশি বুলশিটের নীচে) যা তারা খুঁজে পাওয়া খুব কঠিন।
কনরাড রুডল্ফ

19
হাহাহা, খুব ভালো হাসিছিল। আমি কখনই এই লোকটির সাথে দেখা করতে চাই না।
22:40

30
লিনাস আমাকে খুব প্রতিভাবান ছাদের কথা মনে করিয়ে দেয় যিনি কখনও শীটরক ঝুলেননি, তবে শিটরোককে বলছেন পানসি কারণ তারা নখের পরিবর্তে স্ক্রু ব্যবহার করে।
বব মারফি

8
লিনাসের একটি বক্তব্য রয়েছে তবে গুরুত্বের সাথে নেওয়া খুব কঠোরভাবে প্রকাশ করেছে।
ব্লাগোভস্ট বায়ুকলিয়েভ

39
আমি @ ড্যানিয়েলের সাথে একমত, যদি কেউ এমন কেউ থাকেন যে হার্ডওয়্যারের সীমানা ঠেকানোর বিষয়ে কথা বলতে পারেন তবে তিনি হলেন ডুম, ক্রমিক এবং অন্যান্য গেমস এর নির্মাতা জন কারম্যাক এবং আইডি সফটওয়্যারটির প্রতিষ্ঠাতা। তিনি এই সম্পর্কে সি এবং সি ++ সম্পর্কে লিখেছেন কয়েক মাস আগে একটি টুইটে: "আইএমও, ভাল সি ++ কোড ভাল সি কোডের চেয়ে ভাল তবে খারাপ সি ++ খারাপ সি কোডের চেয়ে অনেক খারাপ হতে পারে।" twitter.com/#!/ID_AA_Carmack/status/26560399301
ওনমা

18

আমি মনে করি না যে সি ++ ব্যবহার করার কোনও বাধ্যতামূলক কারণ আছে। যদি আপনি ওও প্রোগ্রামিং করতে চান তবে আপনি পাইথন ব্যবহার করতে পারেন এবং সিতে দ্রুত পারফরম্যান্সের জন্য প্রয়োজনীয় অংশগুলি লিখতে পারেন

সম্পাদনা: অন্যান্য ভাষা রয়েছে যা সি এর সাথে ইন্টারফেস করে, তাই আপনি পাইথন পছন্দ না করলে বিকল্প রয়েছে।


3
এম্বেডড উন্নয়ন সম্পর্কে কী? পাইথন সর্বদা উপলব্ধ থাকে না, এবং সি এবং ভাল লিখিত সি ++ এর মধ্যে গতির পার্থক্যটি একটি নির্দিষ্ট স্তরের প্রক্রিয়াজাতকরণের পাওয়ারের ডিভাইসগুলিতে নগন্য। অবশ্যই, আমি মনে করি একটি সি ++ সংকলক সর্বদা পাওয়া যায় না ...
জেমস

6
@ জেমস "ভাল লেখা সি ++" আছে - ধরা আছে :(
dss539

5
আমি এই উত্তরের সাথে একমত, অজগর দিয়ে উচ্চ স্তরটি করুন, যেহেতু আপনি এটিকে 3 গুণ দ্রুত, প্রোফাইলের মতো কিছু লিখবেন এবং তারপরে সি / সি ++ দিয়ে প্রতিস্থাপন করে বাধা ছাড়বেন। "সি ++ কোডের সাথে প্রতিবন্ধকতা প্রতিস্থাপন করুন" বলা বাড়াবাড়ি কারণ আপনি যে কোডটি দ্রুত হওয়া দরকার সেগুলি দিয়ে আপনি কোনও উচ্চ স্তরের কাজ করবেন না, কারণ এটি নিম্ন স্তরের কোড হবে। একটি জিনিস আছে: অজগর দিয়ে সি ++ কীভাবে ইন্টারফেস করতে হয় তা আমি জানি না: /। তবে স্ক্রিন এবং দক্ষতার সামনে সময় ব্যয় করার পরে, আমি মনে করি এটিই সেরা সমাধান, যেহেতু বেশিরভাগ সি ++ কোড কোনও কিছুর জন্য দ্রুত হবে!
জোকুন

8
একটি বড় আর্থিক সংস্থার জন্য কাজ করুন এবং পাইথনের একটি বিশাল বিতরণকারী দলে একটি জটিল আর্থিক ব্যবস্থা তৈরি করুন এবং দেখুন কীভাবে তা আপনার পছন্দ হয়। অভিজ্ঞতা আপনাকে শিখিয়ে দেবে: ক) সুরক্ষা প্রকারের সুবিধাগুলি, খ) আপনার বাট সংরক্ষণের সংকলকগুলির সুবিধাগুলি, গ) লডিক্রোস কোড যা পাইথন নুবগুলিকে লেখার অনুমতি দেয়। লোকে বলে যে সি ++ দিয়ে আপনার পায়ে গুলি করা সহজ -> কিছু অজগর জিনিস কাজ করতে পারে তবে সীমান্তের উন্মাদনা হতে পারে। এই মুহূর্তে আমি বরং C ++ এ কাজ করব ...
মিঃফক্স

1
@ সুসলিক: বাহ, আমি আশ্চর্য হয়েছি যে যে কেউ আসলে এই ধরণের সিস্টেমের জন্য অজগর ব্যবহার করবে। আমি খারাপ নুগ পাইথন কোড সম্পর্কে আপনার সাথে একমত; আমি নিজে কিছু দেখেছি।
ল্যারি কোলেম্যান

13

সি ++ ব্যবহার করার কোনও কারণ আছে কি? নিশ্চয়ই.

কিছু লোক অন্য বিকল্পগুলির তুলনায় কেবল সি ++ ব্যবহার করা পছন্দ করতে পারে । সি ++ ব্যবহার করার কোনও কারণ আছে কিনা তা জিজ্ঞাসা করা আমাদের কেন কয়েকশ আইসক্রিমের স্বাদ থাকতে হবে তা জিজ্ঞাসা করার মতো। সকলেই ভ্যানিলার সাথে খালি খালি পছন্দ করে না।

যদি বিকাশকারীরা ইতিমধ্যে সি ++ এর সাথে খুব পারদর্শী হন তবে তাদের জন্য প্রশ্ন 'এটি কেন ব্যবহার করবেন?' না, বরং 'কেন নয়?' হতে পারে না। মনে হচ্ছে এই মুহূর্তে এই ট্রেন্ডি অ্যান্টি-সি ++ জিনিস চলছে, তবে বিশ্বাস করুন বা না করুন, সকলেই তার সাবস্ক্রাইব করে না। কিছু লোক অন্য ভাষার চেয়ে সি ++ পছন্দ করতে পারে।

অ্যাপ্লিকেশনগুলির জন্য কি সি ++ ব্যবহার করা দরকার ? অবশ্যই না. তবে এই একই সঠিক প্রশ্নটি অন্য কোনও ভাষার জন্যও জিজ্ঞাসা করা যেতে পারে। খুব খুব কম ক্ষেত্রেই রয়েছে যেখানে কোনও অ্যাপ্লিকেশনের জন্য নির্দিষ্ট ভাষা ব্যবহার করা দরকার।


12

আমি কেবল সি থেকে সি ++ এ স্যুইচ করছি, এবং আমার মনে হয় যে লাভটি যথেষ্ট বিবেচ্য, এমনকি যদি আপনার টেম্পলেট এবং ওওপির প্রয়োজন না হয়।

  • আরও ভাল মেমরি পরিচালনা
  • শক্তিশালী টাইপ সিস্টেম
  • একটি ভাল স্ট্যান্ডার্ড গ্রন্থাগার
  • নামস্থান
  • প্রভৃতি

8

আমি অবাক হয়েছি এখনও কেউ এটি উল্লেখ করেনি, তবে সি ++ আমাদের উল্লেখের সাথে পরিচয় করিয়ে দিয়েছে , যা প্রায় সমস্ত সমস্যা এবং পয়েন্টারের সমস্যাগুলি সমাধান করে:

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

int test = 4;
ModifyVar(test);

পরিবর্তে:

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

int test = 4;
ModifyVar(&test);

অনেক বেশি নিরাপদ এবং সহজ ... ও পাসওয়ার্ড-ভ্যালুতে ওভারহেড ছাড়াই।


3
এছাড়াও অনেক কম নমনীয়। রেফারেন্স (সি ++ - স্টাইল) এমন একটি সাধারণ ভাষায় কিছু সাধারণ কন্সট্রাক্টসকে সহজতর করতে পারে যার মধ্যে পয়েন্টারও থাকে, তবে তারা পয়েন্টারগুলির প্রতিস্থাপনের ক্ষেত্রে এতটা কম হয়ে যায়, এটি এমনকি মজারও নয়। এবং আপনার উদাহরণটি রেফারেন্সগুলির জন্য খুব ভাল নয়।
বেন ভয়েগট

3
@ বেন: তাহলে আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন এটি একটি খারাপ উদাহরণ?
নাথান ওসমান

6
@ জর্জ: কারণ দুটি পরিবর্তনের পরিবর্তে, এটি দুটি (কাউন্ট এম) অক্ষরগুলি সংক্ষিপ্ততর করবে? এটি কোনও সমস্যা সমাধান করছে না, এটি কোনও সমস্যাগুলি হাইলাইট করছে না, এটি অস্থায়ী পরিবর্তনশীল (যা উল্লেখগুলি ভাল) এর আজীবন প্রসারিত করার মতো শীতল কিছুও করে না।
বেন ভয়েগ্ট

@ বেন: আপনি কিছু ভুলে যাচ্ছেন - রেফারেন্সটি সর্বদা বৈধ। পয়েন্টারগুলি এমন কোনও কিছুর দিকে নির্দেশ করতে পারে (এনএইউএল সহ) যা যদি জিনিসগুলি সঠিকভাবে না করা হয় তবে সমস্ত ধরণের স্মৃতি ত্রুটির দিকে পরিচালিত করতে পারে। উল্লেখগুলি কখনই নুল হতে পারে না এবং যে ঠিকানাটি তারা দেখিয়েছে তা কখনই পরিবর্তন করা যায় না।
নাথান ওসমান

5
@ জর্জি: "রেফারেন্স সর্বদা বৈধ" মিথ্যা কথা মিথ্যা। আপনার যদি প্রয়োজন হয় তবে আমি একটি উদাহরণ দেব, তবে আমি আশা করছি যে আপনি ইতিমধ্যে সচেতন হওয়ার জন্য যথেষ্ট বিশেষজ্ঞ। এবং আমি কোনও অবৈধ পয়েন্টার ব্যবহার করে একটি অবৈধ রেফারেন্স গঠনের কথা বলছি না। পয়েন্টার ব্যবহার করে এমন কার্যাদি আর্গুমেন্টের পূর্বশর্তগুলি উল্লেখ করে ডকুমেন্টেশন প্রয়োজন। তবে ব্যবহারিকভাবে বলতে গেলে, সমস্ত ফাংশনের ডকুমেন্টেশন এর সেই স্তরের প্রয়োজন, সুতরাং এটি পয়েন্টারগুলির বিরুদ্ধে হরতাল বলা অযৌক্তিক।
বেন ভয়েগট

5

সাধারণত কোথায় এবং কেন হতে চলেছে:

  • ঘনিষ্ঠতা
  • পছন্দসই ভাষা বৈশিষ্ট্য
  • নির্দিষ্ট গ্রন্থাগারগুলি আপনি ব্যবহার করতে চান
  • কর্মক্ষমতা প্রয়োজনীয়তা

সার্ভার সাইড প্রোগ্রামিংয়ের জন্য আপনি প্রায়শই বিভিন্ন ভাষার হাজার হাজার সংকলন বা ব্যাখ্যা করা বেছে নিতে পারেন। সাধারণত ভাষার পছন্দটি আপনি বা আপনার দলটি সবচেয়ে কার্যকর যে প্ল্যাটফর্ম দ্বারা চালিত হয়। অথবা আপনার এখনও একটি দল না থাকলে, বাজারে দক্ষতার প্রাপ্যতা।

পার্শ্ব নোটে আমি কার্যত পারফরম্যান্সের ভিত্তিতে সি / সি ++ ব্যবহার করার সিদ্ধান্তটি বুঝতে পারি না (কেবলমাত্র) যেহেতু অনেক স্ক্রিপ্টিং ভাষা সি / সি ++ এর সাথে এক্সটেনসিবল হয়। ধীর অংশগুলি সি / সি ++ এক্সটেনশনে স্থানান্তরিত করার দক্ষতার সাথে আপনি দ্রুত বিকাশের ভাষার সুবিধা পাবেন। অবশ্যই যদি আপনার সিস্টেমিং প্রোগ্রামিং হয় যেখানে প্রতিটি অপশন এটি বোধগম্য হয় তবে বেশিরভাগ অ্যাপ্লিকেশন বিকাশে আমি এটি পাই না।


2
পরিচিতিটি 1 নম্বর কারণ এবং আমি আশ্চর্য হয়েছি যে আপনি এটির প্রথম উল্লেখ করেছেন।
পল কসাই

4

সি ++ বনাম পাইথন বনাম পার্ল সহজে বিচার করা যায় না। এটি প্রকল্প এবং প্রয়োজনীয়তার উপর নির্ভর করে।

অনেক প্ল্যাটফর্মে চলমান সি ++ এর অনেক আগে থেকেই ইউটিলিটির একটি অস্ত্রাগার রয়েছে। তবে স্ট্রিংটি কেবল পূর্ণসংখ্যার ও বিপরীতে পাস করার জন্য স্ট্রিমগুলি দিয়ে হাঁটা শুরু করা বেদনাদায়ক।

অন্যদিকে সি ++ এর লাইব্রেরির উপর নির্ভরশীলতার সাথে এক ভয়াবহ চুক্তি রয়েছে। একবার আপনি জিসিসি এক্স বা ভিসি ++ ওয়াইতে কিছু সংকলন করে ফেললে আপনি নির্ভর করতে পারবেন না যে কোডগুলি সেই সরঞ্জামগুলির পরবর্তী সংস্করণ দ্বারা চালিত হবে। উইন্ডোজেও একই নরক, ইউনিক্সেও একই নরক।

পার্ল, ইউনিক্স বিশ্ব থেকে বিশেষত নিয়মিত প্রকাশের সরঞ্জাম হিসাবে এর শক্তি গ্রহণ করে। এটি বেশিরভাগ সময় ব্যবহৃত হয়। বেশ কয়েকটি গুরুতর সরঞ্জামের সাথে যা জাভাও এটি একটি সাধারণ উপায়ে করতে পারে না (ওয়েব সার্ভারে কোনও ফাইল কীভাবে আপলোড করতে হয় তা পরীক্ষা করে দেখুন), পার্ল হ'ল কেবল এটি "।

পাইথন সহজ, নমনীয় এবং একটি গতিশীল ভাষা। এত সহজ যে আপনি কোনও ফাংশনে একটি পূর্ণসংখ্যার প্রেরণ করতে পারবেন, স্ক্রিপ্টটি স্ট্রিংয়ের প্রত্যাশা করে, তবুও আপনি ফলাফল পেতে পারেন! অপ্রত্যাশিত যদিও, কিন্তু একটি ফলাফল। সুতরাং এটি প্রোগ্রামার খুব সতর্ক হওয়া প্রয়োজন। অলস কিছু ডিবাগিং উপলব্ধ করা হয়, কিন্তু আপনি যখন কোনো সিস্টেমে TELNET'ed করেছেন, অথবা তিনটি স্তর নিচে SSH'ed এবং আপনি আপনার সমস্যা অনুসন্ধান করতে চান তবে ডিবাগার তোমাদের পাশে দাঁড়াতে হবে না। তবে, এটি দ্রুত কিছু দুর্দান্ত গণিত কাজ করতে পারে।

জাভা হ'ল বুজওয়ার্ডস, এলিয়েন প্রযুক্তি এবং বড় শব্দের একটি বাস্তুতন্ত্র এবং যখন আপনি কেবল ওয়েবসার্ভারে কোনও ফাইল আপলোড করতে চান তবে আপনি দেখতে পাবেন যে সার্ভারের জেএসপি থাকলেই আপনি এটি করতে পারবেন । আপনি যদি সিস্টেম লাইব্রেরি বা মনিটরিংয়ের মতো সিস্টেম ফাংশনগুলিতে কল করতে চান তবে দেখতে পাবেন যে আপনাকে অনেক খনন করতে হবে। এবং সম্ভবত জেএনআই এবং ঠিক আছে পৌঁছানোর ... আপনি কি মনে করেন ... "কেন, প্রভু?"

তা ছাড়া, জাভা বিজনেস স্যুট এবং মাল্টিথ্রেডিংয়ের দুর্দান্ত সরঞ্জাম, এটি আমার খুব ভাল লেগেছে।

একটি প্রোগ্রাম তৈরি করতে দ্রুত এবং আপনার সিভিতে দেখানোর জন্য "ওহ, আমি সে প্রযুক্তিটিও জানি" এবং আপনার করণীয় বস, অবাক হোন! তবুও, প্রযুক্তিটি প্রয়োজনের মতো নাও হতে পারে ... (ঠিক আছে, ভাবেন, আমি স্প্রিং ফ্রেমওয়ার্কটিকে ঘৃণা করি ....)


1
হায়রে, আপনাকে বিবেচনা করতে হবে যে পাইথনের সংস্করণ নির্ভরতা রয়েছে - বিশেষত একবার আপনি যখন পাইথন 3 এ স্থানান্তরিত করেন, পার্লের সাথে একই .. বা কেউ পার্ল 6 এ যাওয়ার জন্য বিরক্ত করেছেন? সবকিছুর মধ্যে বাজে নির্ভরতা রয়েছে :(
gbjbaanb

3

কোনও ভাষা বাছাই করার সময় যে বিষয়টি মনে রাখা উচিত তা হ'ল এটি ব্যবহার করে আপনি কী উপকার পাবেন এবং এটি পেতে এটি কতটা সময় নিতে পারে।

পাইথন এবং পার্লের মতো ভাষার মধ্যে প্রধান ধারণাটি হ'ল কম সময়ের সাথে আরও বেশি কিছু করা, তবে আরও সিপিইউ সময় সহ। বাস্তবে আপনি অজগর বা পার্ল স্ক্রিপ্ট কোডিংয়ের চেয়ে বেশি সময় ব্যয় করবেন তবে এটি কার্যকর হবে point

সি / সি ++ এর সুবিধাটি হ'ল এগুলি দ্রুত, তবে সিনট্যাক্স এবং শক্তিশালী টাইপিংয়ের ব্যয়: আপনাকে নিজের হাতে অনেক কিছু করতে হবে যাতে কম্পিউটারটি সংকলনের সময় এটি চয়ন না করতে পারে।

আপনি যখন কোনও কোড তৈরি করেন, কিছু লাইন অন্যের তুলনায় অনেক বেশি চালানো হবে এবং সেই লাইনগুলিই একটি সমস্যা তৈরি করে। অন্যদিকে, বাকী সমস্ত কোড, আপনি যেটিতে প্রচুর সময় ব্যয় করেছেন, তা প্রায়শই অনেক কম কার্যকর হয়। আপনি এটি শুনে থাকতে পারেন, তবে এটি কুখ্যাত 80/20 নিয়ম এবং আপনি এই জাতীয় নিয়মকে বাইপাস করতে পারবেন না।

এই সমস্যার সমাধানটি হ'ল আপনার সমস্ত কোডটি করার জন্য একটি সহজ ভাষা (সহজেই আমি আরও বিকাশকারী বান্ধব: কম টাইপিং, অলস ব্যাখ্যা, প্রচুর প্রাইসিংস্টিক রুটিন এবং স্টাফ ইত্যাদি) ব্যবহার করি।

আপনি যদি এটি সি বা সি ++ দিয়ে করতেন তা তুলনায় আপনি এত তাড়াতাড়ি এটি করবেন, এটি আরও অনেক বেশি মস্তিষ্কের ব্যথা নিয়েছে।

আপনার প্রোগ্রামটি ধীর হবে তবে একজন প্রোফাইলারের সাহায্যে আপনি সেই অংশটি বিচ্ছিন্ন করেন যা সময়ের ৮০% থাকে এবং আপনি সেগুলি সি বা সি ++ দিয়ে করেন।

এইভাবে দীর্ঘায়িত করে আপনি অনেক সময় সাশ্রয় করেছেন এবং আপনার প্রোগ্রামটি তত দক্ষ, তত দ্রুত, স্মৃতি ফাঁস হওয়ার সম্ভাবনা কম রয়েছে এবং আপনি সময় সাশ্রয় করেছেন।

স্ক্রিপ্টিং ভাষাগুলি বিকাশকারীদের পাশে থাকার জন্য ডিজাইন করা হয়েছিল, তবে অপ্টিমাইজেশন এখনও সম্ভব। অবশ্যই আপনি ডিজাইনের প্যাটার্নের যাদুকর বা একটি এসটিএল ভুডু এমনকি লিস্প যোদ্ধাও হতে পারেন, এবং সম্ভবত একটি হাস্কেল সন্ন্যাসীও হতে পারেন। কিন্তু ভাষা আমাদের কম্পিউটারের সাথে কথা বলে, ভাষা আমাদের কম্পিউটারের জন্য তৈরি করে না!


3

লিনাক্স? "অবজেক্ট অরিয়েন্টেড পাসকাল" বা "ডি" সম্পর্কে কী?

পরামর্শ:


2
বা ... [কাঁপুন] ... ডেলফি!
নাথান ওসমান

2

আমি যে সি ++ ব্যবহার করি তাকে ক্লাস সহ সি বলা হয়!


8
হুরে, আপনি 'শ্রেণি' কীওয়ার্ডটি ব্যবহার করেছেন। এখন আপনি ও ও ডিজাইন বুঝতে পারেন!
dss539

আমার সি ++ কে নামস্থান সহ সি বলা হয়।
jsz

6
আমার সি ++ বলা হয়, উম্ম .. মনোজ এর সি ++।
মনোজ আর

আমি সি ++ ব্যবহারের একমাত্র কারণ এটি +1 ক্লাস করে।
এমবিকিউ

... ঠিক আছে, ব্যতিক্রম।
এমবিকিউ

0

আসলে এইভাবে গঠিত সমস্ত প্রশ্নের একক উত্তর রয়েছে। টেক এক্স এর পরিবর্তে টেক এক্স ব্যবহার করার সর্বোত্তম কারণ (যেখানে এক্স এবং ওয়াই মোটামুটি একই স্তরের (যেমন প্রায় সমসাময়িক সমস্ত প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে)) কারণ আপনি ইতিমধ্যে এক্স জানেন এবং ওয়াই জানেন না because

(তবে হাস্কেল আসার পরে আর কিছু ব্যবহার করার কারণ নেই)


0

না কোনভাবেই না. আপনার যদি পারফরম্যান্সের প্রয়োজন না হয় এবং একটি লাইব্রেরি থাকে তবে আপনি অন্য ভাষা ব্যবহার করতে পারেন তবে সি / সি ++ নিয়ে বিরক্ত করবেন না। আমি কেবল আজকাল এটি করি যখন আমি এম্বেড থাকা সিস্টেমগুলিকে লক্ষ্য করি যা (সহজে?) ভাষা চালাতে পারে না। কখনও কখনও আমি সি ব্যবহার করি কারণ আমি একটি প্লাগইন লিখছি তবে সত্যিই না।

তবে, সি ব্যবহার এড়াতে আমি পাইথন, পার্ল ইত্যাদি ব্যবহার করব না আমার পছন্দটি আসলে সি #, কারণ আমি একটি ভাল লাইব্রেরি পছন্দ করি (যা। নেট এর শক্তি), এবং আমি স্ট্যাটিকালি টাইপ করা ভাষা পছন্দ করি। বু একটি ভাল বিকল্প। তবে সত্যই হাস্কেল , ওক্যামেল , ডি , এমএল এবং এগুলি সব ঠিক আছে।


7
আপনি বিন্দু মিস করেছেন।
ম্যাট যোগদানকারী

@ ম্যাট জয়েনার: আমি নিশ্চিত যে আমার হয়নি। আমি কি থেকে বাতিল হলাম?

প্রশ্নটি সি ++ ব্যবহার না করার বিষয়ে।
ম্যাট যোগদানকারী

@ ম্যাট জয়েনার: হুম, অন্য চেহারাতে আমি দেখতে পাচ্ছি যে জিজ্ঞাসা করা হচ্ছে। তবে দেখে মনে হচ্ছে আমিও এটির উত্তর

আমি প্রায় সি # এর কারণে
এটিকে হ্রাস করতে চাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.