কেন সি এত দ্রুত, এবং অন্যান্য ভাষা কেন তত দ্রুত বা দ্রুত হয় না? [বন্ধ]


208

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


6
আপনি কোন বিশেষ শো সম্পর্কে কথা বলেছেন তা তালিকাভুক্ত করতে পারেন? আমি এটা শুনতে চাই।
জিওভানি গাল্বো

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

সমাবেশ ভাষা ভুলবেন না। অ্যাসেম্বলি-এসেম্বলড এক্সেসের চেয়ে আর কোনও কিছুই দ্রুত বা বেশি কমপ্যাক্ট নয়। সমাবেশ প্রায় খাঁটি বাইনারি তাই এটি পক্ষপাতহীন দ্রুততম ভাষা।
কেজিওমেক

3
সি দ্রুততম কারণ এটি আলোর গতি, এবং আপেক্ষিকতা?
তারাভিয়ার

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

উত্তর:


200

সি সম্পর্কে তেমন বিশেষ কিছু নেই যা দ্রুত হওয়ার কারণগুলির মধ্যে এটি অন্যতম।

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

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

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


3
ম্যানুয়াল মেমরি পরিচালনার (স্বল্প-কালীন প্রোগ্রাম এবং / বা প্রচুর স্মৃতির জন্য) আবর্জনা সংগ্রহ দ্রুততর হতে পারে। জিসি সহজ এবং দ্রুত বরাদ্দের অনুমতি দেয় এবং প্রোগ্রামটি হ্রাস করার সময় ব্যয় করে না।
কর্নেল

2
সি প্রোগ্রামগুলি সাধারণত প্রয়োজনীয় ভিত্তিতে মেমরি বরাদ্দ করে এবং হ্রাস করে। এটি অদক্ষ। একটি ভাল ভিএম বড় অংশগুলিতে বরাদ্দ দেয় এবং হ্রাস করে, অনেক ক্ষেত্রে কর্মক্ষমতা থেকে বড় লাভ করে।
স্কাফম্যান

60
"শক্ত" হওয়া বাদে একই পরিমাণে বরাদ্দ এবং আবর্জনা সংগ্রহ থেকে কোনও সি প্রোগ্রামকে বাধা দেওয়ার কিছুই নেই।
21

খুব ভালই বলেছেন, তবে রব অ্যালেনকে পছন্দ করেছেন, সি তখন জাভা বা .NET এর চেয়ে কম বিমূর্ততা সরবরাহ করে, যার ফলে কম অনুবাদ হয় (যা আজকের দিনে আপনার সময়ের মতো (জেআইটি) সংকলনের কারণে কম সত্য)
গ্যাব রয়ের

5
কর্নেল, ম্যানুয়াল ম্যানেজমেন্ট এবং বুদ্ধিমান বরাদ্দগুলি সর্বদা সঠিকভাবে ব্যবহার করার সময় যে কোনও জিসি সিস্টেমকে ছাড়িয়ে যায় এবং প্রচুর মনোযোগ দেওয়া হয়, আপনার ব্যবহারের ধরণগুলি সম্পর্কে আপনার সম্পূর্ণ জ্ঞান আছে, জিসি নেই, প্লাস জিসি সিস্টেমগুলি ওভারহেড যুক্ত করে
আয়ন টোডেরেল

89

সি ডিজাইনাররা এখানে একটি বাণিজ্য বন্ধ করেছেন। বলার অপেক্ষা রাখে না যে, তারা গতির সুরক্ষার aboveর্ধ্বে রাখার সিদ্ধান্ত নিয়েছিল। সি করবে না

  • অ্যারে সূচি সীমা পরীক্ষা করুন
  • অবিচ্ছিন্ন পরিবর্তনশীল মানগুলির জন্য পরীক্ষা করুন
  • মেমরি ফাঁস জন্য পরীক্ষা করুন
  • নাল পয়েন্টার বিন্যাসের জন্য পরীক্ষা করুন

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

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

সি কোড নন-পোর্টেবল হতে পারে। যদিও এটি প্রোগ্রামারদের সত্যিকারের পোর্টেবল প্রোগ্রাম লেখার সুযোগ দেওয়ার চেষ্টা করেছিল, কমিটি প্রোগ্রামারগুলিকে পোর্টেবলভাবে লেখার জন্য বাধ্যতামূলক করতে চায়নি, সিটির ব্যবহারকে `` উচ্চ-স্তরের এসেমব্লার '' হিসাবে ব্যবহার করতে নিষিদ্ধ করতে চায়: মেশিন-নির্দিষ্ট লেখার ক্ষমতা কোড সি এর অন্যতম শক্তি।

সি এর আত্মা রাখুন কমিটি সি এর traditionalতিহ্যবাহী চেতনা সংরক্ষণের একটি প্রধান লক্ষ্য হিসাবে রাখা হয়েছে, সি এর চেতনার অনেকগুলি দিক রয়েছে, তবে সারমর্মটি মূল ভাষাটি সি ভাষা ভিত্তিক যে অন্তর্নিহিত নীতিগুলির একটি সম্প্রদায়গত অনুভূতি। সি এর স্পিরিটের কয়েকটি বিষয় যেমন বাক্যে সংক্ষিপ্ত করা যায়

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

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


51
সি সহিংসভাবে :-) ক্রাশ করে নাল পয়েন্টার ডেরেফের জন্য চেক করে। এটি মাঝেমধ্যে আপনার স্ট্যাক ফ্রেম এবং ডেটা স্ক্রু করে সীমানার বাইরে অ্যারে সূচক এবং অবিচ্ছিন্ন ভেরিয়েবলগুলির জন্যও অনুসন্ধান করে। দুর্ভাগ্যক্রমে এটি রানটাইমে এগুলি পরীক্ষা করে।
প্যাক্সিডিয়াবলো

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

19
@ বোবি: হুবহু সি বলা নিরাপদ নয় কারণ এটি আপনাকে বিপজ্জনক জিনিসগুলি করতে দেয় যেমন গাড়ি বলা নিরাপদ নয় কারণ এটি আপনাকে একটি জলছবি ছুঁড়ে মারতে দেবে। সি ড্রাইভিং করা ব্যক্তিটির মতোই নিরাপদ (তবে সেখানে প্রচুর অনিরাপদ চালক রয়েছে)।
রবার্ট গাম্বল

5
বব, বাফারকে ছাড়িয়ে যাওয়ার মতো বাগ তৈরির অর্থ এই নয় যে আপনি বোকা। এর অর্থ কেবল আপনি এখনও মানুষ human আমি বুঝতে পারি যে সি এবং সি ++ খারাপ নয় (আমি তাদের খুব পছন্দ করি)।
জোহানেস স্কাউব -

4
@ জোহানেস শ্যাব-লিটব সি বড় আকারের অ্যাপ্লিকেশন প্রোগ্রামিংয়ের জন্য উপযুক্ত। যদি কোনও হ্যালো ওয়ার্ল্ডের চেয়ে বড় প্রকল্পগুলি তৈরি করতে অসুবিধা হয় তবে সমস্যাটি প্রোগ্রামারের সাথে, ভাষার সাথে নয় ...

75

আপনি যদি সিতে এমন কিছু তৈরি করতে এক মাস ব্যয় করেন যা 0.05 সেকেন্ডে চলে এবং আমি একদিন জাভাতে একই জিনিস লেখার জন্য ব্যয় করি এবং এটি 0.10 সেকেন্ডে চলে, তবে সি সত্যই দ্রুত?

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

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

সম্পাদনা:

"আমি সি তে লিখি এবং অপ্টিমাইজেশান সম্পর্কে আমি ভাবি না" -এর ধারায় প্রচুর মন্তব্য রয়েছে।

তবে এই পোস্ট থেকে একটি নির্দিষ্ট উদাহরণ নিতে :

ডেলফিতে আমি এটি লিখতে পারি:

function RemoveAllAFromB(a, b: string): string;
var
  before, after :string;
begin
  Result := b;
  if 0 < Pos(a,b) then begin
    before := Copy(b,1,Pos(a,b)-Length(a));
    after := Copy(b,Pos(a,b)+Length(a),Length(b));
    Result := before + after;
    Result := RemoveAllAFromB(a,Result);  //recursive
  end;
end;

এবং সিআই এ এটি লিখুন:

char *s1, *s2, *result; /* original strings and the result string */
int len1, len2; /* lengths of the strings */
for (i = 0; i < len1; i++) {
   for (j = 0; j < len2; j++) {
     if (s1[i] == s2[j]) {
       break;
     }
   }
   if (j == len2) {  /* s1[i] is not found in s2 */
     *result = s1[i]; 
     result++; /* assuming your result array is long enough */
   }
}

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

এবং এটি একটি ছোট উদাহরণ। একটি বড় প্রোগ্রামে, একজন সি প্রোগ্রামারকে কোডের কয়েকটি লাইন দিয়ে এই ধরণের নিম্ন-স্তরের সিদ্ধান্ত নিতে হয়। এটি একটি হস্ত-কারুকৃত, হাত-অপটিমাইজড এক্সিকিউটেবল যোগ করে।


45
যদিও ন্যায়পরায়ণভাবে বলতে গেলে, সি তে এক মাস সময় লাগবে না যা জাভাতে কেবল একদিন সময় নেয় যা কেবল কার্যকর করতে 0.05 সেকেন্ড সময় নেয় (অর্থাত্ ছোট প্রোগ্রাম)।
স্বপ্নালঙ্কা

12
আমি কয়েক বছর ধরে সি তে প্রোগ্রামিং করেছি এবং আপনি যে ধরণের অপ্টিমাইজেশান ইঙ্গিত করেছেন সেগুলির প্রায় কোনও কাজই করতে হবে না। আমি সি তে বেশিরভাগ প্রোগ্রাম পোর্ট করেছি (প্রধানত পার্ল থেকে) এবং সাধারণভাবে কোনও হ্যান্ড-কোডেড অপ্টিমাইজেশন ছাড়াই 10x প্লাস গতি বৃদ্ধি এবং মেমরির ব্যবহারের উল্লেখযোগ্য হ্রাস দেখতে পাই।
রবার্ট গাম্বল

1
অবশ্যই কিছু জিনিস রয়েছে যা বিদ্যমান সুবিধার অভাবে সি তে প্রোগ্রাম করতে যথেষ্ট সময় নিতে পারে তাই এটি কম্পিউটার পারফরম্যান্স এবং প্রোগ্রামার পারফরম্যান্সের মধ্যে একটি ট্রেডঅফ (অন্য বিষয়গুলির মধ্যে) যার কারণ আমরা সমস্ত কিছু সিতে প্রোগ্রাম করি না
রবার্ট গাম্বল

4
আমি সি ++ প্রোগ্রাম তৈরি করেছি যা কম সময়ে কয়েক হাজার লাইনের ডেটা প্রক্রিয়া করে তবে জাভা বা। নেট প্রোগ্রাম শুরু হতে পারে। আরও আধুনিক ভাষা নিয়ে আমার যে হতাশাগুলি রয়েছে তা হ'ল। সি হীন প্রোগ্রামগুলির জন্য দুর্দান্ত যা নূন্যতম রানটাইম প্রয়োজনীয়তা প্রয়োজন। পাওয়ারব্যাসিকও এর জন্য দুর্দান্ত।
ব্রুসেটক

35
আপনি এমন একটি প্রোগ্রাম বলছেন যা সি মাসে এক মাস সময় নেয় এবং জাভাতে লেখা একটি প্রোগ্রামের দ্বিগুণ দ্রুত যা লিখতে কেবল একদিন সময় লাগে তা সার্থক নয়? যদি সেই প্রোগ্রামটি দিনে 500,000,000+ বার চালানোর দরকার হয়? দ্বিগুণ দ্রুত হওয়া অবিশ্বাস্যভাবে তাৎপর্যপূর্ণ। এটি হাজার হাজার বা মিলিয়ন সিপিইউতে চললে, দ্বিগুণ পারফরম্যান্স অর্জন করতে অতিরিক্ত মাসের উন্নয়নের ব্যয় সাশ্রয় বিশাল হবে be মূলত, উন্নয়ন প্ল্যাটফর্মটি বেছে নেওয়ার আগে আপনাকে আপনার মোতায়েনের স্কেলটি জানতে / বুঝতে হবে।
নিকেরোবট

49

আমি এটি ইতিমধ্যে দেখিনি, তাই আমি এটিকে বলব: সি দ্রুততর হয় to কেননা প্রায় সমস্ত কিছুই সিতে লেখা হয়

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

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

ব্যক্তিগতভাবে, আমি বেশিরভাগ উপলভ্য বর্ণালীকে বিস্তৃত করে আক্ষরিক অর্থে কয়েক ডজন ভাষায় লিখেছি এবং আপনি ব্যক্তিগতভাবে যে জাদুটি ইঙ্গিত করেছেন তা আমি ব্যক্তিগতভাবে পেয়েছি:

আমি কীভাবে আমার কেক রাখতে পারি এবং এটিও খেতে পারি? আমি কীভাবে আমার পছন্দসই ভাষায় উচ্চ-স্তরের বিমূর্ততা নিয়ে খেলতে পারি, তারপরে গতির জন্য সিটির নিতান্ত কৌতূহলে নেমে যেতে পারি?

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

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

উপভোগ করুন।


10
এটি সত্যিই জেআইটি-সংকলিত ভাষাগুলির জন্য প্রযোজ্য নয়। এটির মতো নয় যে আমার সি # আইএলে সংকলিত হচ্ছে যা মেশিন কোডে সংকলিত সি তে অনুবাদ করা হয়েছে is না, আইএলটি জেআইটি-সংকলিত - এবং জেআইটির প্রয়োগের ভাষাটি এই মুহূর্তে অপ্রাসঙ্গিক। এটি কেবল মেশিন কোড তৈরি করছে।
জন স্কিটি

3
Forbশ্বর নিষেধ করবেন না যে আমি কিংবদন্তি জোন স্কিটকে প্রশ্ন করা উচিত, তবে এটি পুরোপুরি প্রাসঙ্গিক বলে মনে হচ্ছে যে মেশিন কোডটি উত্পাদিত হচ্ছে এটি সি এর পরিবর্তে সি # এর জন্য, সুতরাং এটি "উচ্চতর স্তর", আরও কার্যকারিতা রয়েছে, সুরক্ষা চেক ইত্যাদি রয়েছে এবং থাকবে সুতরাং, "সমতুল্য" সি এর চেয়ে ধীর হতে হবে
রব উইলিয়ামস

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

1
এটি প্রায় ভুল উপায়ে মনে হয়, অন্যান্য ভাষার সংকলক / দোভাষী / ভিএমএস প্রায়শই থাকে তবে সবসময় সিতে লিখিত হয় না (বা কমপক্ষে সর্বনিম্ন স্তরের জন্য) কারণ সি বেশ দ্রুতগতিযুক্ত (এবং বেশিরভাগ ক্ষেত্রে দ্রুত)।
রোমান এ। টেকার

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

38

সেখানে প্রচুর প্রশ্ন রয়েছে - বেশিরভাগই আমি উত্তর দেওয়ার যোগ্য নই। তবে এই শেষটির জন্য:

অন্যান্য ভাষাগুলিকে বাইনারি সংকলন করতে সক্ষম হওয়া থেকে বিরত রাখতে হবে যা সি হিসাবে প্রতিটি বিট চলমান?

এক কথায়, বিমূর্ততা।

সি মেশিনের ভাষা থেকে বিমূর্ততার মাত্র এক বা 2 স্তর। জাভা এবং। নেট ভাষাগুলি এসেমব্লার থেকে কমপক্ষে 3 বিমূর্ততার স্তরে রয়েছে। আমি পাইথন এবং রুবি সম্পর্কে নিশ্চিত নই।

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

আমি এখানে এবং সেখান থেকে বাইরে আছি তবে এটিই মূল বক্তব্য।

আপডেট ------- আরও বিশদ সহ এই পোস্টে কিছু ভাল মন্তব্য রয়েছে।


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

1
.NET কোড কোনও ভিএম-তে চলবে না। এটি যে কোনও প্রসেসর প্ল্যাটফর্মের (32-বিট x86, 64-বিট x86, বা আইএ 64) চলছে তার নেটিভ নির্দেশনা হিসাবে চলে।
রবার্ট সি বার্থ

11
@ রবার্ট:। নেট একটি ভিএম ব্যবহার করে । .NET কোডটি বাইকোডে সংকলিত হয় যা ভিএম দ্বারা সম্পাদিত হয়। ভিএম রান সময় সময়ে বাইটকোডকে স্থানীয় নির্দেশিকায় রূপান্তর করে।
রবার্ট গাম্বল

3
এটি জেনে রাখা খুব গুরুত্বপূর্ণ যে জাভা এবং অন্যান্য ওও ভাষার বিমূর্ততা প্রসেসরের নির্দেশাবলীকে প্রভাবিত করেছে। নতুন প্রসেসরগুলির নির্দেশাবলী রয়েছে যা জাভা ভিএম এই অপটিমাইজেশনগুলি সম্পর্কে জানে এবং সেগুলি ব্যবহার করে যদি জাভা দ্রুত চালায়। এটি বিশাল নয়, তবে এটি সহায়ক।
অ্যাডাম ডেভিস


35

সি এর দামের মডেলটি স্বচ্ছ হওয়ায় এটি সি দ্রুত হয় না । যদি কোনও সি প্রোগ্রাম ধীর হয়, তবে এটি একটি সুস্পষ্ট উপায়ে ধীর: প্রচুর বিবৃতি কার্যকর করে। সি-তে অপারেশন ব্যয়ের তুলনায়, বস্তুগুলিতে উচ্চতর স্তরের অপারেশনগুলি (বিশেষত প্রতিফলন) বা স্ট্রিংগুলির এমন ব্যয় থাকতে পারে যা সুস্পষ্ট নয়।

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


কোনও ভাষায় অ-স্পষ্টত ব্যয়বহুল কোড লেখা সম্ভব। এটি ঠিক যে কিছু ভাষায়, আপনাকে প্রথমে লিস্প বা ফোরথের একটি অভ্যন্তর বৈকল্পিক লিখতে হবে ...
ডোনাল ফেলো

এছাড়াও মরিচা সিটির সাথে মানদণ্ডে মেলে।
পুরো

18

সি সর্বদা দ্রুত হয় না।

সি এর চেয়ে ধীরে ধীরে, উদাহরণস্বরূপ আধুনিক ফোরট্রান।

কিছু কিছু জিনিসের জন্য সি প্রায়শই জাভা থেকে ধীর হয়। (বিশেষত জেআইটি সংকলকটি আপনার কোডটিতে যাওয়ার পরে)

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

গাণিতিক গাণিতিক কাজ করে এমন অনুমানের ফলে কিছু সিপিইউ পরিবারের (পিআইসি বিশেষত!) ধীরে ধীরে ফুলে যাওয়া পারফরম্যান্সের কারণ হয়ে থাকে যা এটি খণ্ডিত x86-এ বড়টিকে স্তন্যপান করতে ব্যবহৃত হত।

মূলত, যখন আপনি কোনও ভেক্টর ইউনিট, বা একটি সমান্তরাল সংকলক পাবেন, সি দুর্গন্ধযুক্ত এবং আধুনিক ফোর্টরান দ্রুত চলে runs

থ্রঙ্কিংয়ের মতো সি প্রোগ্রামার ট্রিকস (ফ্লাইতে এক্সিকিউটেবলকে সংশোধন করা) সিপিইউ প্রিফেট স্টলের কারণ দেয়।

আপনি কি ড্রিফট পেয়েছেন?

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

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

এবং পরিশেষে, কিছু সিপিইউ (www.ajile.com) হার্ডওয়্যারে জাভা বাইটকোডগুলি চালায়। সি সেই পিপিউতে পিআইটিএ ব্যবহার করবে।


1
সর্বশেষ কবে লেখা হয়েছিল সি তে? আধুনিক x86 বেশিরভাগই আরআইএসসি ডিজাইনের একটি ইন্টারফেস, তবে
ভিএলআইডাব্লু এর

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

আমি ধরে নিয়েছি যে প্রত্যেকে সিডাব্লুইই / সানস শীর্ষ 25 অনুসরণ করছে এবং সি তে নতুন ডিজাইন তৈরি করা এড়িয়ে চলেছে তাই কোনও গ্রিন-ফিল্ড সি নেই, এত কম সি 99 নয়।
টিম উইলিসক্রফ্ট

2
সি যখন ফোরটেনবেরির চেয়ে ধীরে ধীরে ধীরে ধীরে দেখা যায় তখন আপনি উদাহরণটি প্রদর্শন করতে পারেন?
আদম

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

11

অন্যান্য ভাষাগুলিকে বাইনারি সংকলন করতে সক্ষম হওয়া থেকে বিরত রাখতে হবে যা সি হিসাবে প্রতিটি বিট চলমান?

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


আমি এখানে বহনযোগ্যতা তর্ক করতে হবে। আপনি যদি সত্যিই পোর্টেবল কোড চান তবে আপনি এটি সি তে লিখবেন অন্য কোনও ভাষায় নয়। আমাদের প্রায় 25 টি অপারেটিং সিস্টেমে একটি কোড চলছে। ডস এবং থ্রেডএক্স থেকে শুরু করে এবং লিনাক্স / এক্সপি সমাপ্তি আমাকে অন্য একটি ভাষা দেখায় যা এটি করতে পারে :)
ইলিয়া

1
@ ইলিয়া আমি একমত নই সি-তে নন-পোর্টেবল কোডটি লেখা ঠিক তত সহজ Look৪-বিটে পোর্ট করা কারও কারও পক্ষে কত বেদনাদায়ক ছিল তা দেখুন। আপনি যদি সঠিক বাইকোড দোভাষী পান তবে বাইটকোড ল্যাঙ্গগুলি প্ল্যাটফর্ম জুড়ে কাজ করতে পারে।
ক্লেথ

1
@ আইআইএ, পোর্টেবল সি কোড নিয়মের পরিবর্তে একটি এক্সপিশন, আমি বিভিন্ন হার্ডওয়্যার / সফ্টওয়্যার প্ল্যাটফর্মের মধ্যে সি কোড পোর্ট করেছি এবং জানি যে এটি একটি দুঃস্বপ্ন।
আকু

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

@aku -> খারাপ কোড পোর্ট করা বিপর্যয় হতে পারে আমি সম্মত। অ্যাডভান্স - সি তে পোর্টেবল কোড লেখাই সেরা পছন্দ। আমি বলব যে সি ++ হ'ল একটি বিকল্প তবে এম্বেড প্ল্যাটফর্মে যেতে আপনি সর্বদা শালীন সি সংকলকটি খুঁজে পাবেন, সি ++ এর জন্য আপনি সংকলক ছাড়াই নিজেকে খুঁজে পেতে পারেন।
ইলিয়া

8

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

এগুলি মাথায় আসে এমন আরও কিছু কারণ।

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

বেশিরভাগ স্ট্যাটিক-টাইপ করা ভাষা সি এর চেয়েও দ্রুত বা দ্রুত সংকলন করা যেতে পারে, বিশেষত যদি তারা অনুমান করতে পারে যে সি পয়েন্টার এলিয়াসিং ইত্যাদির কারণে সি করতে পারে না ইত্যাদি।


সি নিম্ন স্তরের? আমি অনুমান করি এটি এখন একটি আপেক্ষিক অর্থ জাভা তুলনায় হ্যাঁ তবে সমাবেশের সাথে তুলনা করে compared ভাল পোস্ট, আমার চিন্তাভাবনা আছে।
চিহ্নিত করুন

আপনি ঠিক বলেছেন, এটি অবশ্যই আপেক্ষিক। আমার অর্থ হ'ল এটি "মেশিনের কাছাকাছি" এবং মেমরি পরিচালনা বা অ্যারের আকারের ট্র্যাক রাখার মতো কাজগুলিতে আপনাকে সহায়তা করে না।
ম্যাথু ক্রামলে

2
সি একটি নিম্ন-স্তরের ভাষা। সি সর্বদা নিম্ন-স্তরের ভাষা হয়েছে been আপনি খুব অসুবিধা ছাড়াই এসেম্বলারের মধ্যে সি কোডটি হ্যান্ড ট্রান্সলেট করেন।
রবার্ট সি বার্থ

2
@ রবার্ট: সি একটি উচ্চ-স্তরের ভাষা হিসাবে বিবেচিত হত কারণ সমাবেশের তুলনায় (যা খুব সাধারণ ছিল), এটি ছিল। বর্তমানে ব্যবহৃত বেশিরভাগ ভাষার তুলনায় এটি নিম্ন-স্তরের ভাষা হিসাবে বিবেচিত হয়।
রবার্ট গাম্বল

সত্য, এটি একটি খুব পক্ষপাতমূলক উত্তর। সমস্ত সি প্রোগ্রামারদের নিকটে অভিশাপগুলি চেকিং ইত্যাদি করে do তবুও সি এখনও সি ++ এর চেয়ে অনেক বেশি দ্রুত।
মারকাসজে

8

আমার ধারণা আপনি ভুলে গেছেন যে সমাবেশের ভাষাও একটি ভাষা :)

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

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

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


3
যদিও আপনি যদি একবার সি তে এবং আবার বিধানসভায় একটি প্রোগ্রাম লিখে থাকেন তবে সি সংস্করণটি সম্ভবত দ্রুত হবে কারণ সংকলকটি আপনার চেয়ে স্মার্ট।
এম কে 12

7

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


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

সুতরাং এটি কোড থেকে উত্পন্ন সমাবেশ নির্দেশাবলী সংখ্যা নেমে আসে। উচ্চ স্তরের কোডের প্রতি লাইনে আরও সমাবেশ নির্দেশাবলী রয়েছে, তত বেশি পারফরম্যান্স ভুগবে?
ENDEESA

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

7

আমি জানি প্রচুর লোকেরা এটি দীর্ঘ বাতাসে বলেছে, কিন্তু:

সি দ্রুত হয় কারণ এটি কম করে (আপনার জন্য)।


এই. সি এর স্পিরিটের সাথে এতটাই সত্য
সেমস্টার -

7

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

https://benchmarksgame-team.pages.debian.net/benchmarksgame/

fannjuch-redux স্কালায় দ্রুততম ছিল

n-bodyএবং fastaঅ্যাডায় দ্রুত ছিল।

spectral-norm ফোরট্রানে দ্রুততম ছিল।

reverse-complement, mandelbrotএবং pidigitsএটিএসে দ্রুততম ছিল।

regex-dna জাভাস্ক্রিপ্ট দ্রুততম ছিল।

chameneou-redux জাভা 7 দ্রুততম ছিল।

thread-ring হাস্কেল দ্রুততম ছিল।

বাকি মানদণ্ডগুলি সি বা সি ++ তে দ্রুততম ছিল।


"যেহেতু এটি সি এর একটি দুর্দান্ত সেট" - না, সি ++ সি এর সুপারস্টেট নয়
পিপি

1
extern "C"কিছুই ++, একটি হচ্ছে সি কি আছে সুপারসেটও সি
পিপি

2
এটি যে system("bash script.sh");কোনও বাশ স্ক্রিপ্টের জন্য কাজ করে বলার মতো এবং তাই সি ব্যাশের সুপারস্টার। extern "C"নাম ম্যাংলিংয়ের কারণে সি ++ এ সি লিঙ্কেজ সরবরাহ করে। যেখানে এক্সকে Y এর সুপারস্টার হিসাবে ডেকে আনা অর্থ হ'ল Y তে যে কিছু করা যায় তা এক্স-এও করা যেতে পারে যা সি ++ এর ক্ষেত্রে সত্য নয়। বেশ কয়েকটি ভাষা নির্মাণ রয়েছে যা সিতে বৈধ তবে সি ++ তে নয়।
পিপি

1
@ পিপি সি ++ স্ট্যান্ডার্ডের মধ্যে এমন কিছু নেই যা হুকুম দেয় যা bashএকটি উপলব্ধ কমান্ড লাইন প্রোগ্রাম। যদি এটি করা থাকে এবং ব্যাশের কোন সংস্করণ / স্পেসিফিকেশন সমর্থন করার প্রয়োজন রয়েছে তবে আমি এটিকে সুপারসেট হিসাবে বিবেচনা করব।
পিটার লরি

1
সি কোড লিখতে তুচ্ছভাবে সহজ যা সি ++ কোড নয়, যেমনstruct foo { int: this; }; typedef float foo;
জেসেন

6

এই উত্তরগুলির মধ্যে অনেকগুলি সি কেন, বা দ্রুত নয় (সাধারণভাবে বা নির্দিষ্ট পরিস্থিতিতে) এর বৈধ কারণ দেয়। এটি অনস্বীকার্য যে:

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

এই সব সত্ত্বেও, আমি আরও কিছু লক্ষ্য করেছি যে, আমি মনে করি, সি বনামের তুলনামূলক কার্য সম্পাদনকে প্রভাবিত করে অন্য কোনও কারণের চেয়ে আরও অনেকগুলি ভাষায়। বুদ্ধিমান:

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

উদাহরণ হিসাবে, একটি সাধারণ উইন্ডোজ প্রোগ্রাম বিবেচনা করুন যেখানে একটি একক প্রধান উইন্ডো তৈরি করা হয়। এসি সংস্করণটি পপুলেশন করবেWNDCLASS[EX] কাঠামো তৈরি করবে যেটি এখানে পাঠানো হবে RegisterClass[Ex], তারপরে কল করে CreateWindow[Ex]একটি বার্তা লুপ প্রবেশ করবে। অত্যন্ত সরলীকৃত এবং সংক্ষিপ্ত কোডগুলি নিম্নলিখিত:

WNDCLASS wc;
MSG      msg;

wc.style         = 0;
wc.lpfnWndProc   = &WndProc;
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hInstance     = hInstance;
wc.hIcon         = NULL;
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wc.lpszMenuName  = NULL;
wc.lpszClassName = "MainWndCls";

RegisterClass(&wc);

CreateWindow("MainWndCls", "", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
             CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

while(GetMessage(&msg, NULL, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

সি # তে একটি সমমানের প্রোগ্রাম কোডের এক লাইন হতে পারে:

Application.Run(new Form());

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

তবে একটি সমৃদ্ধ গ্রন্থাগার সহজ এবং দ্রুত কোড ব্লোট সক্ষম করে তোলা আমার বক্তব্য নয়। আমার কথাটি আরও স্পষ্ট হয় যখন আপনি যখন আমাদের ছোট ওয়ান-লাইনার বাস্তবায়িত করেন তখন আসলে কী ঘটে তা পরীক্ষা করা শুরু করেন। মজা করার জন্য, ভিজ্যুয়াল স্টুডিও ২০০৮ বা তারও বেশি .NET উত্স অ্যাক্সেস সক্ষম করুন এবং উপরের সরল এক-লাইনফে প্রবেশ করুন। আপনি যে মজাদার ছোট্ট রত্নগুলি দেখতে পাবেন তার মধ্যে একটি হ'ল এটির জন্য এই মন্তব্যটি Control.CreateParams:

// In a typical control this is accessed ten times to create and show a control.
// It is a net memory savings, then, to maintain a copy on control.
// 
if (createParams == null) {
    createParams = new CreateParams(); 
} 

দশবার । তথ্য মোটামুটিভাবে কি একটি সংরক্ষিত রয়েছে এর সমষ্টি সমতুল্য WNDCLASSEXগঠন এবং কি প্রেরণ করেছে CreateWindowExথেকে প্রাপ্ত করা হয় Controlবর্গ দশ বার সামনে এটি একটি সংরক্ষিত রয়েছে WNDCLASSEXওপর গঠন এবং পাস RegisterClassExএবংCreateWindowEx

সর্বোপরি, এই অতি প্রাথমিক কাজটি সম্পাদনের জন্য নির্ধারিত নির্দেশাবলীর সংখ্যা সি এর চেয়ে সি # তে মাত্রার পরিমাণের ২-৩ ক্রম বেশি, এর অংশটি একটি বৈশিষ্ট্য সমৃদ্ধ লাইব্রেরি ব্যবহারের কারণে, যা অগত্যা জেনারালাইজড, বনাম আমাদের সাধারণ সি কোড যা আমাদের যা প্রয়োজন ঠিক তা করে এবং আরও কিছু না। তবে এর একটি অংশ এই কারণেই হয় যে .NET কাঠামোর মডুলারাইজড, অবজেক্ট-ওরিয়েন্টেড প্রকৃতি নিজেকে ফাঁসির প্রচুর পুনরাবৃত্তিতে ধার দেয় যা প্রায়শই একটি পদ্ধতিগত পদ্ধতির দ্বারা এড়ানো হয়।

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


2
এটি একটি এপিআই ইস্যু, কোনও ভাষার সমস্যা নয়।
আরাফ্যাজিওন

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

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

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

6

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

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

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

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

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


5

এটি আসলে চিরকালীন মিথ্যাচার of যদিও এটি সত্য যে সি প্রোগ্রামগুলি প্রায়শই দ্রুত হয়, এটি সর্বদা হয় না, বিশেষত যদি সি প্রোগ্রামার এতে খুব ভাল না হয়।

লোকেদের ভুলে যাওয়ার একটি বড় গর্তের গর্তটি হ'ল প্রোগ্রামটি কোনও ধরণের আইও, যেমন কোনও জিইআইআই প্রোগ্রামের ব্যবহারকারী ইনপুট হিসাবে ব্লক করতে হয়। এই ক্ষেত্রে, আপনি কী ভাষা ব্যবহার করেন তা আসলেই কিছু যায় আসে না যেহেতু আপনি কতটা দ্রুত প্রক্রিয়া করতে পারেন তার চেয়ে যে হারে ডেটা আসতে পারে তার দ্বারা সীমাবদ্ধ are এই ক্ষেত্রে, আপনি সি, জাভা, সি # বা এমনকি পার্ল ব্যবহার করছেন তবে এটি খুব বেশি গুরুত্বপূর্ণ নয়; আপনি কেবল ডেটা আসতে পারে তার চেয়ে দ্রুত আর যেতে পারবেন না।

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

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


1
"জাভাতে vtable বাস্তবায়ন সি ++ বাস্তবায়নের চেয়ে অনেক ভাল হতে পারে, সুতরাং ভার্চুয়াল ফাংশন কলগুলি অনেক দ্রুত are পৃথিবীতে আপনি কীভাবে এমওভি ইএক্সের চেয়ে দ্রুত যেতে পারবেন, [ইসিএক্স]; কল করুন [ইএএক্স + সামিণ্ডেক্স]; ? আপনি যদি কোনও ফাংশনটি সন্ধান না করে কল করতে না পারেন তবে এটি দেখতে সর্বোত্তম looks
ফ্রান্সস-উইলেম

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

6
@ জেমস - "আই / ও পারফরম্যান্সকে কম গুরুত্ব দেয়" যুক্তিটি "সি অন্যান্য ভাষার তুলনায় দ্রুত গতিতে" এই উক্তিটিকে অকার্যকর করে না। এটি একটি সুস্পষ্ট গর্ত নয়, এটি স্ট্রোম্যান যুক্তি।
টম

সি এর স্ট্রিং হ্যান্ডলিং (এবং স্ট্যান্ডার্ড সি লাইব্রেরিরও) উদাহরণ হিসাবে ব্যবহার করা আরও ভাল হত, কারণ এটি এমন একটি অঞ্চল যেখানে সি দুর্বল is সাদামাটা শুরু কোড সহ বেশিরভাগ অন্যান্য ভাষা আরও ভাল করে।
ডোনাল ফেলো

@ ডোনালফেলো মেমো * ফাংশনগুলি কিছু কাজগুলিতে স্ট্রিং * ফাংশনের চেয়ে দ্রুততর হতে পারে তবে যত্ন নেওয়া হলে স্ট্রিং হ্যান্ডলিং দক্ষ। আপনি কি মনে একটি নির্দিষ্ট মানদণ্ড পেয়েছেন?
জেসেন

4

ভাষা এবং সরঞ্জামগুলি এবং গ্রন্থাগারগুলির মতো এটি এতটা নয়। সি জন্য উপলব্ধ গ্রন্থাগার এবং সংকলক নতুন ভাষার চেয়ে অনেক পুরানো older আপনি ভাবতে পারেন এটি এগুলিকে ধীর করে দেবে তবে এগুলি বিপরীত।

এই লাইব্রেরিগুলি এমন এক সময়ে লেখা হয়েছিল যখন প্রসেসিং শক্তি এবং মেমরি একটি প্রিমিয়ামে ছিল। এগুলি কাজ করার জন্য খুব দক্ষতার সাথে লিখতে হয়েছিল। সি সংকলকগুলির বিকাশকারীরা বিভিন্ন প্রসেসরের জন্য বিভিন্ন ধরণের চতুর অপ্টিমাইজেশনে কাজ করার জন্য দীর্ঘ সময়ও কাটিয়েছিলেন। সি এর পরিপক্কতা এবং বিস্তৃত গ্রহণ একই বয়সের অন্যান্য ভাষাগুলির চেয়ে একটি স্বতন্ত্র সুবিধা অর্জন করে। এটি সিটিকে নতুন সরঞ্জামগুলির তুলনায় একটি গতি সুবিধা দেয় যা কাঁচা পারফরম্যান্সকে জোর দেয় না যতটা সি'র মতো ছিল।


4

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


4

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

বর্তমান ভার্চুয়াল মেশিন বাস্তবায়ন (এবং কেবল জেভিএম নয়, উপায়) প্রোগ্রামটি সঞ্চালনের সময় সংগৃহীত তথ্যের বিভিন্ন কোড ব্যবহার করে বিভিন্ন গতিবিধি ব্যবহার করে গতিময়ভাবে টিউন করতে পারে:

  • মেশিন কোডে ঘন ঘন পদ্ধতিগুলি রেন্ডারিং,
  • ছোট পদ্ধতিগুলি ইনলাইনিং,
  • লকিং সামঞ্জস্য

এবং অন্যান্য সমন্বয় বিভিন্ন বুদ্ধিমান কি আসলে কোড করছে উপর ভিত্তি করে, এবং পরিবেশ যেখানে এটি চালাচ্ছে প্রকৃত বৈশিষ্ট্যের উপর।


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

জাভা একটি "অন্য ভাষা" যা ওপি দ্বারা রেফারেন্স করা হয়, তাই না?
রবার্ট সি বার্থ

@ রবার্ট: "অন্যান্য ভাষাগুলি", বহুবচন, সি ছাড়া অন্য কোনও নির্দিষ্ট ভাষার উল্লেখ নেই, আপনি কীভাবে সম্ভবত "জাভা" পড়তে পারেন?
রবার্ট গাম্বল

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

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

4

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


আপনার উত্তরটি পড়ার সময় পুরো অনুচ্ছেদে মাত্র দুটি শব্দ আমার দিকে তাদের দিকে টানছিল, চৌম্বক টানা ধাতুর মতো। শব্দটি JAVA, অনুচ্ছেদে দু'বার। সমস্ত ক্যাপগুলিতে লিখিত হওয়ার আগে এটি কখনও দেখেনি, এবং এটি দেখতে দুর্দান্ত দেখাচ্ছে :-)
4

3

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

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

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


2

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

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


2

ভাল ওল দিনগুলিতে, কেবলমাত্র দুটি ধরণের ভাষা ছিল: সংকলিত এবং ব্যাখ্যা করা।

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

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

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

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

পল।


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

@ কোয়ান্ট_দেব: "আপনার কাছে ... এটিকে স্মৃতি থেকে আনতে হবে, এটিকে বাড়িয়ে দেবে, আবার লিখবে ..."। হয়তো, হয়তো না. উদাহরণস্বরূপ, x86 এর নির্দেশাবলী রয়েছে যা মেমরির ডেটাতে কাজ করে। ++i"যোগ [ebp - 8], 1" সংকলন হতে পারে। আনার কথা, ইনক্রিমেন্ট, স্টোরটি এখনও ঘটছে না তা বলার অপেক্ষা রাখে না, তবে এটি সিপিইউ দ্বারা যত্ন নেওয়া হয়, এবং পল যেমন বলেছিলেন ঠিক তেমন একটি নির্দেশ এটি।
পি বাবা

... যা পারফরম্যান্সের পিওওভি থেকে এখনও অপ্রাসঙ্গিক, কারণ এটি কেবলমাত্র একটি নির্দেশ হতে পারে, তবে এখনও সিপিইউতে ডেটা পৌঁছানোর জন্য অপেক্ষা করা জড়িত। ক্যাশে এবং সমস্ত কিছু মিস করে।
কোয়ান্ট_দেব

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

2

হট স্পট অপটিমাইজেশন , প্রাক-সংকলিত মেটা-অ্যালগরিদম এবং সমান্তরালতার বিভিন্ন রূপের মতো উন্নততর অপ্টিমাইজেশান কৌশলগুলি আলাদা করে রেখে কোনও ভাষার মৌলিক গতি সাধারণত অপারেশনগুলিকে সমর্থন করার জন্য আবশ্যকীয় অন্তর্নিহিত জটিলতার সাথে দৃ strongly ়ভাবে সম্পর্কিত হয় that অভ্যন্তরীণ loops মধ্যে নির্দিষ্ট করা উচিত

সম্ভবত সবচেয়ে সুস্পষ্ট হ'ল পরোক্ষ মেমরি রেফারেন্সগুলিতে বৈধতা যাচাই করা - যেমন nullঅ্যারের সীমানার বিরুদ্ধে সূচকগুলির জন্য পয়েন্টারগুলি পরীক্ষা করা এবং পরীক্ষা করা। বেশিরভাগ উচ্চ-স্তরের ভাষাগুলি এই চেকগুলি অন্তর্নিহিতভাবে সম্পাদন করে তবে সি তা করে না। তবে এটি অগত্যা এই অন্যান্য ভাষার মৌলিক সীমাবদ্ধতা নয় - যথেষ্ট চৌকস সংকলক লুপ-ইনগ্রেন্ট কোড গতির কোনও ফর্মের মাধ্যমে অ্যালগরিদমের অভ্যন্তরীণ লুপগুলি থেকে এই চেকগুলি সরাতে সক্ষম হতে পারে ।

সি এর আরও মৌলিক সুবিধা (এবং একই পরিমাণে ঘনিষ্ঠভাবে সম্পর্কিত সি ++) হ'ল স্ট্যাক-ভিত্তিক মেমরি বরাদ্দকরণের উপর একটি ভারী নির্ভরতা , যা বরাদ্দ, বিলোপ এবং অ্যাক্সেসের জন্য সহজাতভাবে দ্রুত । সি (এবং সি ++) তে প্রাথমিক কল স্ট্যাকটি আদিম, অ্যারে এবং সমষ্টিগুলির বরাদ্দের জন্য ব্যবহার করা যেতে পারে ( struct/class ) ।

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

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


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


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

2

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

ফোর্টরান যে গুরুত্বপূর্ণ থাকার অন্যতম কারণ হ'ল এটি দ্রুত: ফোর্টরানে লিখিত সংখ্যা ক্রাঞ্চিং রুটিনগুলি বেশিরভাগ অন্যান্য ভাষায় লিখিত সমমানের রুটিনের চেয়ে দ্রুততর হয়ে থাকে। যে জায়গাগুলি এই স্পেসিটি Fort সে এবং সি ++ এ ফোর্টরানের সাথে প্রতিযোগিতা করছে - তারা ব্যবহার করে কারণ তারা এই পারফরম্যান্সের সাথে প্রতিযোগিতামূলক।

এটি প্রশ্ন উত্থাপন করে: কেন? সি ++ এবং ফোর্টরান সম্পর্কে কী এটি তাদের দ্রুততর করে তোলে এবং কেন তারা জাভা বা পাইথনের মতো অন্যান্য জনপ্রিয় ভাষাগুলি ছাড়িয়ে যায়?

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

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

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

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

প্রকৃতপক্ষে কোডটি কার্যকর করা পরে ঘটে। পুরো সংকলন প্রক্রিয়াটি কেবল এমন কিছু তৈরিতে ব্যবহৃত হয় যা কার্যকর করা যায়।

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

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

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

তাহলে কেন এটি পারফরম্যান্সে একটি পার্থক্য করে? সাধারণভাবে, ইন্ডিরিয়েশনের প্রতিটি স্তর কার্যকারিতা হ্রাস করে। উদাহরণস্বরূপ, দুটি সংখ্যা যুক্ত করার দ্রুততম উপায় হ'ল প্রসেসরের নিবন্ধগুলিতে numbers উভয় সংখ্যা থাকা এবং প্রসেসরের অ্যাড নির্দেশাবলী ব্যবহার করা। সংকলিত প্রোগ্রামগুলি এটি করতে পারে; তারা নিবন্ধগুলিতে ভেরিয়েবলগুলি রাখতে এবং প্রসেসরের নির্দেশাবলীর সুবিধা নিতে পারে। তবে ব্যাখ্যা করা প্রোগ্রামগুলিতে, একই সংযোজনটির জন্য ভ্যারিয়েবলের একটি টেবিলের দুটি সন্ধানের দরকার হতে পারে মানগুলি যুক্ত করতে, তারপরে সংযোজনটি সম্পাদন করার জন্য একটি ফাংশন কল করা। সংকলিত প্রোগ্রামটি প্রকৃত সংযোজন সম্পাদন করতে ব্যবহার করে সেই ফাংশনটি একই প্রসেসরের নির্দেশকে খুব ভালভাবে ব্যবহার করতে পারে তবে নির্দেশটি ব্যবহার করার আগে সমস্ত অতিরিক্ত কাজ জিনিসকে ধীর করে দেয়।

আপনি যদি আরও জানতে চান তবে উত্সটি পরীক্ষা করুন


1

কিছু সি ++ অ্যালগরিদম সি এর চেয়ে দ্রুত এবং অন্য ভাষাগুলিতে অ্যালগরিদম বা ডিজাইনের ধরণগুলির কিছু বাস্তবায়ন সি এর চেয়ে দ্রুততর হতে পারে can

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


2
"কিছু সি ++ অ্যালগরিদম সি এর চেয়ে দ্রুততর" তা বোঝায় না। যে কোনও "সি ++ অ্যালগরিদম" সিতে এবং এর বিপরীতে লেখা যেতে পারে। অ্যালগরিদমগুলি ভাষা অজ্ঞেয়। সি ++ মূলত সিতে বৈশিষ্ট্যগুলি যুক্ত করে - এবং এই নতুন বৈশিষ্ট্যগুলির কোনওোটাই দ্রুত অ্যালগোরিদমগুলিতে নেতৃত্ব দেয় না (যদিও তারা সম্ভবত লিখতে সহজ)
জোসেফ গারভিন

1
ক্লাসিক তিরস্কারটি হল স্ট্যান্ড :: সাজানো অ্যালগরিদম .. স্টাড :: সাজানো সি এর মধ্যে যে কোনও ধরণের অ্যালগরিদমের চেয়ে দ্রুত - সি তে একই পারফরম্যান্স পাওয়ার একমাত্র উপায় হ'ল হার্ড-কোড আপনি যেখানেই চান বা ম্যাক্রোগুলি ব্যবহার করুন - এবং তারপরেও সংকলকটির অনুকূলিতকরণের জন্য কম তথ্য রয়েছে।
আরাফ্যাজিওন

1

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

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


"সমস্যায় আরও বেশি হার্ডওয়ার" কেবল এমন পরিবেশে কাজ করে যেখানে এটি সত্যই সম্ভব। এম্বেড করা বাজারটি একটি নিখুঁত পাল্টা উদাহরণ (এবং এটি একটি বিশাল বাজার)।
বব সোমারস

জেফ এবং জোয়েল ব্লগটি কেবলমাত্র ব্যবসায়ের ব্যবস্থা সম্পর্কে, এম্বেড থাকা সিস্টেমগুলি সম্পর্কে নয়, সুতরাং এটি ধরে নেওয়া যুক্তিযুক্ত যে এটিই সেই প্রসঙ্গে, যেখানে এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল।
রবার্ট সি বার্থ

1) .নেট কোডটি সি কোডের মতো দ্রুত চলছে? আপনি কি আসলে কোন সি প্রোগ্রাম লিখেছেন? 2) "সমস্যার উপরে আরও হার্ডওয়ার নিক্ষেপ করুন" মানসিকতা হ'ল আমার 1.3GHz ডুয়াল কোর 2 জিবি মেশিনটি সবেমাত্র উইন্ডোজ এক্সপির সাথে সামঞ্জস্য রাখতে পারে যখন আমার 800MHz 512MB মেশিনটি উবুন্টুর সর্বশেষতম সংস্করণে উড়ে যায়।
রবার্ট গাম্বল

হ্যাঁ, আমি সি লিখেছি people এটি এত গৌরবময় নয় যে লোকেরা এটি তৈরি করে। এবং প্রকল্পগুলির ব্যয়ও খুব বেশি। এটি অর্থনীতির একটি সহজ ঘটনা। আমি একটি পেন্টিয়াম প্রো 180MHz এ 768 এমবি র‌্যামের সাথে একটি মেল এবং ওয়েব সার্ভার হিসাবে বছরের পর বছর ধরে উইন 2 কে চালিয়েছি। এটা ঠিক ছিল। কাহিনী প্রমাণের অর্থ কিছুই নেই।
রবার্ট সি বার্থ

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

1

এটি স্বয়ংক্রিয় এবং ম্যানুয়ালটির মধ্যে পার্থক্য, উচ্চ স্তরের ভাষাগুলি বিমূর্ততাগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়। সি / সি ++ ম্যানুয়ালি নিয়ন্ত্রিত এবং পরিচালনা করা হয়, এমনকি ত্রুটি পরীক্ষা করার কোডটি কখনও কখনও ম্যানুয়াল শ্রম হয়।

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

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

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



1

এর সাথে অনেকগুলি কারণ রয়েছে:

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

কেন এটি দ্রুত হওয়া উচিত কারণ এটি বস্তুমুখী নয়?
sb27

ক) অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং আবর্জনা সংগ্রহের প্রয়োজনীয়তা তৈরি করে, খ) অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের মতো বড় বৈশিষ্ট্য সংকলকটিতে জটিলতা যুক্ত করে,
নীলা_ব্রীক

ক) না। সি ++ বা জং দেখুন। খ) হ্যাঁ, তবে এটি নতুন অপটিমাইজেশনের জন্য সংকলক সুযোগও দেয়।
sb27

ক) মরিচা সংকলন-সময় আবর্জনা সংগ্রহ করে, এবং সি ++ ক্লাসগুলির জন্য আবর্জনা সংগ্রহ করে, এজন্য এটির ডেস্ট্রাক্টর রয়েছে, বি) অনুকূলিত জটিলতা এখনও জটিলতা রয়েছে
নীলমণি_ব্রাহী

ক) এটি আবর্জনা-সংগ্রহ নয়, মেমরি ম্যানেজমেন্ট পরিচালনা করতে হবে এমনকি আপনি বিধানসভায় আপনার প্রোগ্রাম তৈরি করলেও খ) না। আরও বিমূর্ততা অপ্টিমাইজারটিকে আরও ভাল অনুমান করার অনুমতি দেয়।
sb27
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.