যার ভাষার সংকলক সি-তে লেখা আছে সে ভাষা কীভাবে সি এর চেয়ে দ্রুততর হতে পারে?


175

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

এখানে চিত্র বর্ণনা লিখুন চিত্র: সি এর তুলনায় মাপদণ্ডের বার (আরও ভাল, সি কর্মক্ষমতা = 1.0))



382
একটি গাড়ি, যা একটি মনুষ্যনির্মিত অবজেক্ট, একটি মানুষের চেয়ে দ্রুত কীভাবে চলতে পারে?
বাবু

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

6
বাবুর মন্তব্য স্পট-অন ছিল, তবে আমি মনে করি না আমাদের একই ধরণের একাধিক সংস্করণ প্রয়োজন।
রাফেল

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

উত্তর:


263

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

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

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

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

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


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

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

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

@ghellquist অবশ্যই, যদি মানদণ্ডটি যথেষ্ট কৃত্রিম এবং সংকলক যথেষ্ট স্মার্ট হয়। এটি সংকলকটির বাস্তবায়নের ভাষার সাথে সরাসরি বা সোজাভাবে সম্পর্কিত নয়, যদিও আমি এখানে এটি উল্লেখ করিনি।
tsleyson

97

একজন মানুষের তৈরি একটি মেশিন কীভাবে একজন মানুষের চেয়ে শক্তিশালী হতে পারে? এটি ঠিক একই প্রশ্ন।

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


33
দাবা প্রোগ্রাম যে মানুষটিকে লিখেছিল তা কীভাবে পরাজিত করতে পারে?
থোরবজর্ন রাভন অ্যান্ডারসন

25
আরও ভাল পদক্ষেপ করে! <rimshot>
টনি এনিস

কোনও কম্পিউটার দাবাড়িতে কোনও মানুষকে পরাজিত করতে পারে কেন তাতে পেন গিলিটের উত্তরের প্রতিক্রিয়া জানাতে: "জিই-র নকশাকৃত একটি রোবট বক্সিংয়ের ম্যাচে কোনও ব্যক্তির কাছে হেরে যাবে আপনি কি আশা করবেন?"
ডেভ কান্টার

90

আমি একটি সাধারণ অনুমানের বিরুদ্ধে একটি বক্তব্য রাখতে চাই যা আমার মতে কোনও কাজের জন্য সরঞ্জাম বেছে নেওয়ার সময় ক্ষতিকারক হওয়ার দিকটি অস্বীকার করা উচিত।

ধীর বা দ্রুত ভাষা বলে কোনও জিনিস নেই। ¹

সিপিইউতে আসলে আমাদের কিছু করার পথে অনেকগুলি পদক্ষেপ রয়েছে ²

  1. নির্দিষ্ট দক্ষতার সাথে কমপক্ষে একজন প্রোগ্রামার।
  2. ("উত্স কোড") এ তারা প্রোগ্রাম করে (আনুষ্ঠানিক) ভাষা।
  3. তারা ব্যবহার করে গ্রন্থাগারগুলি।
  4. এমন কিছু যা উত্স কোডটিকে মেশিন কোডে অনুবাদ করে (সংকলক, দোভাষী)।
  5. সামগ্রিক হার্ডওয়্যার আর্কিটেকচার, যেমন প্রসেসিং ইউনিটের সংখ্যা এবং মেমরি শ্রেণিবদ্ধের বিন্যাস।
  6. অপারেটিং সিস্টেম যা হার্ডওয়্যার পরিচালনা করে।
  7. অন ​​সিপিইউ অপ্টিমাইজেশন।

প্রতিটি একক আইটেম আপনি কখনও কখনও ভারীভাবে পরিমাপ করতে পারবেন এমন আসল রানটাইমটিতে অবদান রাখে। বিভিন্ন "ভাষা" বিভিন্ন জিনিসগুলিতে ফোকাস করে ³

কিছু উদাহরণ দিতে।

  • 1 বনাম 2-4 : একটি গড় সি প্রোগ্রামার যথার্থতা এবং দক্ষতার ক্ষেত্রে উভয়ই গড় জাভা প্রোগ্রামারের তুলনায় আরও খারাপ কোড তৈরি করতে পারে। এটি কারণ সি তে প্রোগ্রামারটির আরও বেশি দায়িত্ব রয়েছে is

  • 1/4 বনাম 7 : সি এর মতো নিম্ন-স্তরের ভাষায় আপনি প্রোগ্রামার হিসাবে কিছু নির্দিষ্ট সিপিইউ বৈশিষ্ট্যগুলি ব্যবহার করতে সক্ষম হতে পারেন । উচ্চ-স্তরের ভাষাগুলিতে, কেবল সংকলক / দোভাষী এগুলি করতে পারেন, এবং কেবলমাত্র তারা লক্ষ্য সিপিইউ জানলে know

  • 1/4 বনাম 5 : আপনি কি মেমরির বিন্যাসটি হাতে রাখতে চান যাতে মেমরির আর্কিটেকচারটি সর্বোত্তমভাবে ব্যবহার করতে পারেন? কিছু ভাষা আপনাকে তার উপর নিয়ন্ত্রণ দেয়, কিছু কিছু করে না।

  • 2/4 বনাম 3 : ব্যাখ্যা করা পাইথন নিজেই মারাত্মক ধীর, তবে বৈজ্ঞানিক কম্পিউটিংয়ের জন্য উচ্চতর অনুকূলিত, স্থানীয়ভাবে সংকলিত গ্রন্থাগারগুলিতে জনপ্রিয় বাইন্ডিং রয়েছে । পাইথনে কিছু কাজ শেষ পর্যন্ত দ্রুত হয়, যদি বেশিরভাগ কাজ এই লাইব্রেরি দ্বারা করা হয়।

  • 2 বনাম 4 : স্ট্যান্ডার্ড রুবি ইন্টারপ্রেটার বেশ ধীর। অন্যদিকে, জেআরবি খুব দ্রুত হতে পারে। যে একই ভাষা দ্রুত অন্য সংকলক / দোভাষী ব্যবহার করে।

  • 1/2 বনাম 4 : সংকলক অপ্টিমাইজেশন ব্যবহার করে, সহজ কোডটি খুব দক্ষ মেশিন কোডে অনুবাদ করা যায়।

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

স্পষ্টরূপে, এটি প্রশ্নের উত্তর দেয় কারণ এটি দেখায় যে সংকলক (পদক্ষেপ 4) যে ভাষায় রচিত হয়েছে তা ধাঁধাটির একটি অংশ মাত্র এবং সম্ভবত প্রাসঙ্গিক নয় (অন্যান্য উত্তর দেখুন) see


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

    সম্পূর্ণরূপে ভিন্ন লক্ষ্যের জন্য ডিজাইন করা হলেও ভাষাগুলিকে এক মেট্রিকের সাথে তুলনা করা একটি বিশাল ভুল।


1
@ বাবু সম্মত, খুব সুন্দর ব্যাখ্যা। তাহলে এর চেয়ে ভাল মেট্রিক বা মেট্রিকের সেট কী হতে পারে , যা তাদের নিজ নিজ সংকলক / দোভাষীদের সাথে ভাষার তুলনা করতে ব্যবহার করা যেতে পারে? এছাড়াও, একটি ছোটখাট nitpick: আপনি বলতে এবং তারপর "পাইথন নিজেই ভয়ঙ্করভাবে ধীর" "একটা ধীর বা দ্রুত ভাষা যেমন জিনিস নেই", কিন্তু আমি অনুমান আপনি পাইথন ইন্টারপ্রেটার বোঝানো।
সংগ্রামী প্রোগ্রামার 14 ই

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


23

অপ্টিমাইজেশন সম্পর্কে এখানে একটি ভুলে যাওয়া জিনিস রয়েছে।

ফোর্টরান আউটফর্মফর্মিং সি সম্পর্কে দীর্ঘকালীন বিতর্ক ছিল সি। দূষিত বিতর্ককে পৃথক করা: একই কোড সি এবং ফোর্টারনে লেখা হয়েছিল (যেমন পরীক্ষকরা ভেবেছিলেন) এবং একই তথ্যের ভিত্তিতে পারফরম্যান্স পরীক্ষা করা হয়েছিল। সমস্যাটি হ'ল, এই ভাষাগুলি আলাদা হয়, সি পয়েন্টারগুলিকে আলিয়াস করার অনুমতি দেয়, তবে ফোরটারান দেয় না।

কোডগুলি সমান ছিল না, সি পরীক্ষিত ফাইলগুলিতে কোনও __restict ছিল না, যা পার্থক্য দিয়েছে, সংকলককে ফাইলগুলি পুনরায় লেখার পরে এটি পয়েন্টারগুলিকে অনুকূল করতে পারে, রানটাইমগুলি অনুরূপ হয়ে ওঠে।

এখানে মুল বক্তব্যটি হ'ল, কিছু সচ্ছল কৌশল নতুন তৈরি করা ভাষায় সহজ (বা আইনী হতে শুরু করে)।


X

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

এই পরীক্ষায় জেএসও রয়েছে, ভাল ভি 8 এর চেয়ে দ্রুত ভিএম রয়েছে এবং কিছু পরীক্ষায় এটি সি এর চেয়েও দ্রুত সম্পাদন করে।

আমি এটি পরীক্ষা করেছি এবং সি সংকলকগুলিতে এখনও অনন্য অপ্টিমাইজ করার কৌশলগুলি পাওয়া যায় নি।

সি সংকলকটি একবারে পুরো কোডটির স্থির বিশ্লেষণ করতে হবে, প্রদত্ত প্ল্যাটফর্মের উপর পদযাত্রা করতে হবে এবং মেমরির প্রান্তিককরণের সমস্যাগুলি ঘুরে দেখবে।

ভিএম কোডের কেবলমাত্র অংশটি অপ্টিমাইজড অ্যাসেমব্লাইটি এটিকে চালিত করতে এবং এটিকে চালিত করে।

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

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

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


12

পূর্ববর্তী উত্তরগুলি বেশিরভাগ ব্যাখ্যাবাদী কোণ থেকে যদিও বেশিরভাগ ক্ষেত্রে বাস্তবভাবে বোঝায় , যতটা প্রশ্নটি বোঝায় ততই রাফেলের উত্তরের দ্বারা যথাযথভাবে ব্যাখ্যা করা হয়েছে ।

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

তবে আমি মনে করি এটি ইস্যুটিকে আনুষ্ঠানিক করার চেষ্টা করা সার্থক হতে পারে, কারণ এটি বেশ কয়েকটি মৌলিক ধারণা এবং বিশেষত বর্ণনামূলক বনাম জিনিসের অপারেশনাল দৃষ্টিভঙ্গির চিত্র তুলে ধরেছে।

সংকলক কী?

CSTCCSTP:SP SP:T TP

CSTCST{(P:S,P:T)PSSPTT}

CSTPSPTP

P:TP:SCST

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

বুটস্ট্র্যাপিং সম্পর্কে

এটি পার্থক্য চিত্রিত করবে এবং একটি ব্যবহারিক প্রয়োগ প্রদর্শন করবে।

প্রথমে কোন ভাষা প্রথমে প্রয়োগ করা এখন সাধারণ জায়গাSISCST:SSCST:SISP:SP:TST

তবে আপনি সংকলক সংকলন করতে এই সংকলন সুবিধাটি ব্যবহার করতে পারেন CST:SSCST:TTTT


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

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

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

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

CP

6

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

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


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

আমার ধারণা এটি নির্ভর করে আপনি "নির্দিষ্ট ধরণের অ্যাপ্লিকেশন" শব্দটি কতটা বিস্তৃত করেছেন তার উপর নির্ভর করে। যদিও এটা সত্যি যে মূলধারার অধিকাংশ ভাষায় DSLs নয়, তারা অবশ্যই হয় মনের মধ্যে কিছু ব্যবহার সঙ্গে পরিকল্পিত। সি ইউনিক্স বাস্তবায়নের জন্য ডিজাইন করা হয়েছিল। ইন্টারেক্টিভ টিভিগুলি স্ক্রিপ্ট করার জন্য জাভা তৈরি করা হয়েছিল। ছোটদেরকে বাচ্চাদের পড়ানোর জন্য ডিজাইন করা হয়েছিল। ECMAScript সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড ওয়েব স্ক্রিপ্টিংয়ের জন্য ডিজাইন করা হয়েছিল। পার্ল টেক্সট প্রসেসিং এবং ইউনিক্স স্ক্রিপ্টিংয়ের জন্য ডিজাইন করা হয়েছিল। পিএইচপি সার্ভার-সাইড ওয়েব স্ক্রিপ্টিংয়ের জন্য ডিজাইন করা হয়েছিল। এরলং নির্ভরযোগ্যতার জন্য তৈরি করা হয়েছিল। স্কিমটি অন্বেষণের জন্য ডিজাইন করা হয়েছিল ...
Jörg ডব্লু মিতাগ

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

4

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

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

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

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

বেঞ্চমার্কের জন্য ব্যবহৃত প্রসেসরটি Xeon E7-8850 2.00GHz সিপিইউ হিসাবে তালিকাভুক্ত হয়েছিল। সি বেঞ্চমার্ক সেই সিপিইউয়ের জন্য নির্দেশনা তৈরি করতে জিসিসি ৪.৮.২ সংকলক ব্যবহার করেছে, অন্যদিকে জুলিয়া এলএলভিএম সংকলক কাঠামো ব্যবহার করে। এটি সম্ভব যে জিসিসির ব্যাকএন্ড (যে অংশটি একটি নির্দিষ্ট সিপিইউ আর্কিটেকচারের জন্য মেশিন কোড তৈরি করে) কোনওভাবে এলএলভিএম ব্যাকএন্ডের মতো উন্নত নয়। যে পারফরম্যান্স একটি পার্থক্য করতে পারে। আরও অনেকগুলি কাজ চলছে - সংকলক প্রোগ্রামার দ্বারা বর্ণিত চেয়ে আলাদাভাবে নির্দেশাবলী জারি করে "অনুকূলিত করতে" পারে, বা এমনকি কোডটি বিশ্লেষণ করতে পারে এবং তারা তা নয় তা নির্ধারণ করতে পারে এমন কিছু কিছু না করেও পারে সঠিক উত্তর পেতে প্রয়োজন। এবং প্রোগ্রামার সি প্রোগ্রামের কিছু অংশ এমনভাবে লিখেছিল যাতে এটি ধীর হয়ে যায়, তবে হয় নি '

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


2

সংকলিত প্রোগ্রামের গতি দুটি বিষয়ের উপর নির্ভর করে:

  1. এটি সম্পাদনকারী মেশিনের পারফরম্যান্স বৈশিষ্ট্য
  2. এক্সিকিউটেবল ফাইলের বিষয়বস্তু

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

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


1

আমি একটি সংক্ষিপ্ত উত্তর দেওয়ার চেষ্টা করব।

প্রশ্নের মূলটি একটি ভাষার "গতি" সংজ্ঞায় অন্তর্ভুক্ত

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

* অনুমানগুলি মাঝে মাঝে ভুল হয়।


0

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

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


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