কিছু প্রোগ্রামিং ভাষা অন্যের চেয়ে "দ্রুত" বা "ধীর" কেন হয়?


80

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

  1. কেন এমন হয়?
  2. কোন প্রোগ্রামিং ভাষার "গতি" পরিচালনা করে?
  3. মেমরি পরিচালনার সাথে এটির কোনও সম্পর্ক আছে?

যদি কেউ আমার জন্য এটি ভেঙে দেয় তবে আমি সত্যিই প্রশংসা করব।


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


26
এটি বলেছিল, জাভা এবং জাভাস্ক্রিপ্ট সম্পর্কিত যে কোনও কিছু একসাথে বান্ডিল করা অপমানজনক।
রাফেল

5
আমি এই যেমন খুবই বিস্তৃত বন্ধের মধ্যে টুটা করছি (পাঠ্যবই প্রাসঙ্গিক বিষয় সম্পর্কে লেখা যাবে না!) অথবা প্রতিলিপি । সম্প্রদায় ভোট, দয়া করে!
রাফেল

উত্তর:


95

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

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

বিভিন্ন সংকলক / দোভাষী পৃথক অপ্টিমাইজেশন সম্পাদন করে।

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

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

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

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

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

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

1   700327  Unagi                       Java,C++,C#,PHP,Haskell
2   268752  天羽々斬                     C++, Ruby, Python, Haskell, Java, JavaScript
3   243456  Cult of the Bound Variable  C++, Standard ML, Python

তাদের কেউই একটি ভাষা ব্যবহার করেনি।


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

6
এছাড়াও কিছু ভাষাগুলি আপাতদৃষ্টিতে নির্দোষ জিনিসগুলির গ্যারান্টি দেয় যা
সংযোজকগুলির

9
যোগদান করেছেন সুতরাং আমি @ ডেরেকএলকিন্সের মন্তব্যে আপত্তি জানাতে পারি। প্রায়শই সেই উক্তিটির প্রসঙ্গটি অনুপস্থিত থাকে, কখনও কখনও এমনকি এই সিদ্ধান্তেও পৌঁছে যায় যে এটি সমর্থন করে যে সমস্ত অপটিমাইজেশনটি মন্দ।
পাইপ

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

9
@ ডেরেকএলকিনস স্পষ্টভাবে বলতে গেলে, আমি আপনার মুখে এই শব্দটি লিখতে চাই না যে আপনি এটি দাবি করছেন, তবে খুব প্রায়ই আমি লোককে ঘাঁটাঘাঁটির সাথে কিছুটা যোগ করি, এবং এই ভেবে যে নুথ অকালীন অপ্টিমাইজেশনের পক্ষে ছিলেন 3 বেশিরভাগ সময়, যখন সম্পূর্ণ নিবন্ধটি পরিষ্কার করে দেয় যে তিনি সর্বদা অকালীন অপটিমাইজেশনের বিরোধিতা করেন, প্রায় সর্বদা ছোট অপ্টিমাইজেশনের বিরোধিতা করেন, তবে সমালোচনামূলক হিসাবে পরিমাপকৃত অংশগুলিতে ছোট অপ্টিমাইজেশনের পক্ষে হন oc
বিট্রি

18

কোন প্রোগ্রামিং ভাষার "গতি" পরিচালনা করে?

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

একই মেশিনে একই ভাষাতে একই কোড লেখা বিভিন্ন বাস্তবায়ন ব্যবহার করে প্রচুর পারফরম্যান্সের পার্থক্য থাকতে পারে। এমনকি একই প্রয়োগের বিভিন্ন সংস্করণ ব্যবহার করে। উদাহরণস্বরূপ, 10 বছর আগে এই বছরের সংস্করণ বনাম 10 বছর আগে স্পাইডারমনকির একটি সংস্করণ ব্যবহার করে ঠিক একই মেশিনে ঠিক একই ইসমাস্ক্রিপ্ট বেঞ্চমার্ক চালানো সম্ভবত 2 – –5 between এর মধ্যে যে কোনও জায়গায় পারফরম্যান্স বৃদ্ধি পেতে পারে, এমনকি 10 %ও হতে পারে × তারপরে কি এর অর্থ হ'ল ECMAScript 2C 2 ECMAScript এর চেয়ে দ্রুত, কারণ একই মেশিনে একই প্রোগ্রামটি চালানো নতুন বাস্তবায়নের সাথে 2% দ্রুত হয়? এটা বোঝা যায় না।

মেমরি পরিচালনার সাথে এটির কোনও সম্পর্ক আছে?

আসলে তা না.

কেন এমন হয়?

রিসোর্সেস। মানি। মাইক্রোসফ্ট সম্ভবত পুরো পিএইচপি, রুবি এবং পাইথন সম্প্রদায়ের তুলনায় সংস্থাপক প্রোগ্রামারদের জন্য কফি তৈরির জন্য আরও বেশি লোককে নিয়োগ করেছে যাঁরা ভিএমগুলিতে কাজ করছেন।

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

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

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

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

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

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

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

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


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

1
সি এর একটি ইতিহাস রয়েছে - এটি এসেম্বলি ভাষায় লিখিত একটি সিস্টেম অন্যান্য সিস্টেমে পোর্টেবল করার জন্য তৈরি করা হয়েছিল। সুতরাং আসল উদ্দেশ্যটি ছিল ইউনিক্সের জন্য "পোর্টেবল অ্যাসেমব্লার" সরবরাহ করা এবং এটি খুব ভালভাবে ডিজাইন করা হয়েছিল। এটি 1980-1995-এশ থেকে এতটাই ভাল করেছে যে উইন্ডোজ 95 যখন এসেছিল তখন এটির সমালোচনামূলক ভর ছিল।
থোরবজর্ন রাভন অ্যান্ডারসন 21

1
আমি সম্পদ সম্পর্কে মন্তব্য সাথে একমত হবে। এটি দলের গুরুত্বপূর্ণ লোকের সংখ্যা নয়, এটি দলের সেরা লোকদের দক্ষতার স্তর।
মাইকেল কে ২

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

7

তাত্ত্বিকভাবে, আপনি যদি দুটি ভাষায় ঠিক একইরকম কোড লিখেন এবং একটি "নিখুঁত" সংকলক ব্যবহার করে উভয়ই সংকলন করেন, উভয়ের পারফরম্যান্স একই হওয়া উচিত।

অনুশীলনে, পারফরম্যান্স আলাদা হতে চলোর বিভিন্ন কারণ রয়েছে:

  1. কিছু ভাষাগুলি অনুকূল করা শক্ত।

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

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

  2. কিছু ভাষা বাস্তবায়ন রানটাইমের সময় কিছু সংকলন করতে হয়।

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

    এই জাতীয় ভাষা বাস্তবায়নে রানটাইমের সময় আরও কাজ করতে হয় যা কার্য সম্পাদনকে বিশেষত স্টার্টআপের সময় / পারফরম্যান্সকে প্রভাবিত করে start

  3. ভাষা প্রয়োগগুলি ইচ্ছাকৃতভাবে অপ্টিমাইজেশনে কম সময় ব্যয় করে।

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

  4. বিভিন্ন ভাষায় আইডিয়মের পার্থক্য।

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

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

  5. কিছু সংকলক কিছু অপ্টিমাইজেশন অনুপস্থিত হতে পারে।

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


কিছু ভাষা না আছে একটি কম্পাইলার। কিছু ভাষার ক্ষেত্রে, সংকলক ( রেফারেন্স ) থাকতে পারে না
রাফেল

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

ভাষা যদি আলাদা আলাদা হয় তবে তাদের "কোডটি নেই যা ঠিক একই রকম করে"। তাদের কোড থাকতে পারে যা একই আউটপুট বা ব্যবহারকারী-পর্যবেক্ষণযোগ্য আচরণ তৈরি করে, যা একই জিনিস নয়। সুতরাং আমি আপনার ভিত্তি সঙ্গে একমত।
einpoklum

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

তাত্ত্বিকভাবে, কোনও দোভাষী ভাষা প্রোগ্রামের উত্স কোড সমন্বিত একটি EXE ফাইল তৈরি করে "সংকলন" করা যায়।
dan04

1

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


2
এটি খুব সরল একটি উত্তর। জাভা দ্রুততর সেটিংসে রয়েছে।
রাফেল

4
জাভা এর বাস্তবায়নগুলিও রয়েছে যা মেশিন কোডের সংকলন করে এবং সি ++ এর ব্যাখ্যা কার্যকর করে। এবং যাইহোক "মেশিন কোড" কী, যদি আমার কাছে একটি পিকোজাভা সিপিইউ থাকে যা জেভিএম বাইটকোডকে স্থানীয়ভাবে চালায়, এবং আমার কাছে জেপিসি x86 ইন্টারপ্রেটারটি জেভিএম-তে চলছে, তবে কী x86 অবজেক্ট কোডটি "মেশিন কোড" এবং জেভিএম বাইটকোড নয়?
Jörg ডব্লু মিত্তাগ

2
নিতপিক: জাভা কেবল আবর্জনা সংগ্রহের ব্যবস্থা করে না ... এবং আপনি কেবল সি ++ এবং জাভা বিবেচনা করলেও কিছু সি ++ ফ্রেমওয়ার্ক / গ্রন্থাগার প্রোগ্রামের জায়গায় আবর্জনা সংগ্রহের সুবিধা রয়েছে।
einpoklum

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

@ জার্গডব্লিউমিত্যাগ এই কৌশলটি হ'ল দেশীয় মেশিন কোড - হোস্ট প্রসেসর বুঝতে পারে এমন মেশিন কোড - এবং তারপরে সরাসরি কল কোডটিতে ঝাঁপ দাও যাতে এটি ব্যাখ্যা ছাড়াই কার্যকর করা যায় to এটি একটি x86 চিপে x86 হবে এবং পিকোজাভা সিপিইউতে জেভিএম বাইটোকড করবে।
ডিপ্রেশনডানিয়েল

-5

আপনার প্রশ্নটি খুব সাধারণ, সুতরাং আমি ভয় করি যে আপনার প্রয়োজনীয় উত্তরটি আমি দিতে পারব না।

আমার সেরা ব্যাখ্যার জন্য, আসুন সি ++ এবং। নেট প্ল্যাটফর্মটি দেখুন।

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

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

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

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

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

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

আশা করি আমার উত্তরটি আপনার প্রশ্নের সাথে সহায়তা করতে পারে। আপনি আরও জানতে চান ক্ষেত্রে আমাকে জানতে দিন।

সম্পাদনা করুন:

আমার মূল বিষয়টির জন্য কেবল একটি ব্যাখ্যা, আমি মূলত "প্রোগ্রামিংয়ের গতিটি কী পরিচালনা করে" এই প্রশ্নের উত্তর দিয়েছি।

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

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

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

যদি আমি ধারণাটি পেয়েছি এবং থ্রেড স্টার্টার প্রশ্নের কোনও উত্তর না দিয়েছি তবে দীর্ঘ পোস্টের জন্য ক্ষমা চাই। তবে আমি থ্রেড স্টার্টারকে প্রশ্নটি পরিষ্কার করার জন্য পরামর্শ দেব এবং "দ্রুত" এবং "ধীর" সম্পর্কে তাকে কী জানতে হবে তা জিজ্ঞাসা করব


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

16
আপনি অবশ্যই আইডিই ছাড়াই। নেট এ বিকাশ করতে পারেন। তবে আমি দেখতে পাই না যে কোনও ভাষায় লিখিত কোডের গতির সাথে আইডিই কীভাবে প্রাসঙ্গিক।
সুইভ

8
@ মেটালমিকেস্টার: এবং অবশ্যই, ভিজ্যুয়াল স্টুডিও হ'ল উইন্ডোজে সি ++ বিকাশের IDE the
Jörg ডব্লু মিত্তাগ

3
এবং সি ++ টু। নেট কোডটি কেবল একটি একক সংকলক সুইচ; অনুমিত কাঠামো ভিজ্যুয়াল স্টুডিওতে এক মাউস ক্লিক করে সেতু হয়।
এমসাল্টাররা

1
আমি মোটেও নিশ্চিত নই যে আমি আধুনিক সি ++ "মেশিন কোডের খুব কাছে" বলব would আসল সি, হ্যাঁ; এটি একটি পোর্টেবল অ্যাসেমব্লার হিসাবে ধারণা করা হয়েছিল এবং এটির খুব কাছাকাছি থেকে গেছে (যদিও মানক গ্রন্থাগারটি বেড়েছে, এবং বিভিন্ন সংকলক ভাষাগুলিকে উপযুক্ত ভাষাতে অ্যাড-অন সরবরাহ করে যা এটি এর উত্স থেকে আরও দূরে নিয়ে যায়)। আসল সি ++ (ক্লাস সহ সি), হতে পারে; খ এর সি ক্লাস অন্তর্ভুক্ত সি এর একটি বৈকল্পিক পুনর্লিখন করা খুব কঠিন নয়, যেখানে পূর্ববর্তী আলোচনার প্রযোজ্য। তবে আধুনিক সি ++, টেমপ্লেট, পলিমারফিজম এবং সূর্যের নীচে থাকা সমস্ত কিছুর সাথে? এটি "মেশিন কোডের খুব কাছেই"।
একটি সিভিএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.