কোন প্রোগ্রামিং ভাষার "গতি" পরিচালনা করে?
প্রোগ্রামিং ভাষার "গতি" বলে কিছু নেই। নির্দিষ্ট পরিবেশের মধ্যে চলমান একটি নির্দিষ্ট এক্সিকিউশন ইঞ্জিনের একটি নির্দিষ্ট প্রয়োগের একটি নির্দিষ্ট সংস্করণ দ্বারা সম্পাদিত একটি নির্দিষ্ট প্রোগ্রামার দ্বারা রচিত একটি নির্দিষ্ট প্রোগ্রামের গতি কেবল আছে।
একই মেশিনে একই ভাষাতে একই কোড লেখা বিভিন্ন বাস্তবায়ন ব্যবহার করে প্রচুর পারফরম্যান্সের পার্থক্য থাকতে পারে। এমনকি একই প্রয়োগের বিভিন্ন সংস্করণ ব্যবহার করে। উদাহরণস্বরূপ, 10 বছর আগে এই বছরের সংস্করণ বনাম 10 বছর আগে স্পাইডারমনকির একটি সংস্করণ ব্যবহার করে ঠিক একই মেশিনে ঠিক একই ইসমাস্ক্রিপ্ট বেঞ্চমার্ক চালানো সম্ভবত 2 – –5 between এর মধ্যে যে কোনও জায়গায় পারফরম্যান্স বৃদ্ধি পেতে পারে, এমনকি 10 %ও হতে পারে × তারপরে কি এর অর্থ হ'ল ECMAScript 2C 2 ECMAScript এর চেয়ে দ্রুত, কারণ একই মেশিনে একই প্রোগ্রামটি চালানো নতুন বাস্তবায়নের সাথে 2% দ্রুত হয়? এটা বোঝা যায় না।
মেমরি পরিচালনার সাথে এটির কোনও সম্পর্ক আছে?
আসলে তা না.
কেন এমন হয়?
রিসোর্সেস। মানি। মাইক্রোসফ্ট সম্ভবত পুরো পিএইচপি, রুবি এবং পাইথন সম্প্রদায়ের তুলনায় সংস্থাপক প্রোগ্রামারদের জন্য কফি তৈরির জন্য আরও বেশি লোককে নিয়োগ করেছে যাঁরা ভিএমগুলিতে কাজ করছেন।
প্রোগ্রামিং ভাষার যে কোনও বৈশিষ্ট্যই কোনওভাবে পারফরম্যান্সকে প্রভাবিত করে, এর একটি সমাধানও রয়েছে। উদাহরণস্বরূপ, সি (আমি এখানে সি ভাষা ব্যবহার করে অনুরূপ ভাষার একটি শ্রেণীর স্ট্যান্ড-ইন হিসাবে ব্যবহার করি, যার মধ্যে কয়েকটি সি এর আগেও বিদ্যমান ছিল) মেমরি-নিরাপদ নয়, যাতে একই সময়ে চলমান একাধিক সি প্রোগ্রামগুলি পদদলিত হতে পারে একে অপরের স্মৃতি। সুতরাং, আমরা ভার্চুয়াল মেমরি আবিষ্কার করি এবং সমস্ত সি প্রোগ্রামগুলিকে ইন্ডিয়ারেশনের একটি স্তর দিয়ে যেতে বাধ্য করি যাতে তারা ভান করতে পারে যে তারা কেবলমাত্র মেশিনে চলছে। তবে, এটি ধীর এবং তাই, আমরা এমএমইউ আবিষ্কার করি এবং এটির গতি বাড়ানোর জন্য হার্ডওয়্যারে ভার্চুয়াল মেমরি প্রয়োগ করি।
কিন্ত! মেমরি-নিরাপদ ভাষাগুলির সমস্ত কিছুর দরকার নেই! ভার্চুয়াল মেমরি থাকা তাদের কিছুটা সাহায্য করে না। প্রকৃতপক্ষে, এটি আরও খারাপ: ভার্চুয়াল মেমরি কেবল মেমরি-নিরাপদ ভাষাগুলিতে, ভার্চুয়াল মেমরিকে সহায়তা করে না, এমনকি হার্ডওয়্যারে প্রয়োগ করার পরেও কর্মক্ষমতা প্রভাবিত করে। এটি আবর্জনা সংগ্রহকারীদের কার্য সম্পাদনের জন্য বিশেষত ক্ষতিকারক হতে পারে (যা স্মৃতি-সুরক্ষিত ভাষা ব্যবহারের একটি উল্লেখযোগ্য সংখ্যক বাস্তবায়ন)।
আর একটি উদাহরণ: আধুনিক মূলধারার সাধারণ উদ্দেশ্য সিপিইউগুলি ক্যাশে মিসের ফ্রিকোয়েন্সি হ্রাস করার জন্য পরিশীলিত কৌশল ব্যবহার করে। এই কোডগুলির অনেকগুলি ভবিষ্যদ্বাণী করে কোন কোডটি কার্যকর হতে চলেছে এবং কোন মেমোরি ভবিষ্যতে প্রয়োজন হবে তা অনুমান করার চেষ্টা করার পরিমাণ। তবে, উচ্চতর ডিগ্রি রানটাইম পলিমারফিজম সহ ভাষার জন্য (যেমন ওও ভাষা) এটি অ্যাক্সেসের ধরণগুলির পূর্বাভাস দেওয়া সত্যিই কঠিন।
তবে, আরও একটি উপায় আছে: ক্যাশে মিসের মোট ব্যয় হ'ল স্বতন্ত্র ক্যাশে মিসের ব্যয় দ্বারা গুণিত ক্যাশে মিস করার সংখ্যা। মূলধারার সিপিইউগুলি মিসের সংখ্যা হ্রাস করার চেষ্টা করে, তবে আপনি যদি কোনও পৃথক মিসের ব্যয় হ্রাস করতে পারেন?
আজুল ভেগা -3 সিপিইউ বিশেষভাবে ভার্চুয়ালাইজড জেভিএম চালানোর জন্য ডিজাইন করা হয়েছিল এবং এতে আবর্জনা সংগ্রহ এবং অব্যাহতি সনাক্তকরণ (স্থিতিশীল পালনের বিশ্লেষণের গতিশীল সমতুল্য) এবং শক্তিশালী মেমরি কন্ট্রোলার এবং পুরো সিস্টেমের জন্য বিশেষায়িত নির্দেশাবলীর সাথে খুব শক্তিশালী এমএমইউ ছিল and ফ্লাইটে 20000 এরও বেশি বকেয়া ক্যাশে মিস করে এখনও অগ্রগতি করতে পারে। দুর্ভাগ্যক্রমে, বেশিরভাগ ভাষা-নির্দিষ্ট সিপিইউগুলির মতো, এর নকশাটি কেবল "দৈত্য" ইনটেল, এএমডি, আইবিএম এবং পছন্দগুলি দ্বারা ব্যয় করা হয়েছিল এবং জোর করে চাপিয়ে দেওয়া হয়েছিল।
সিপিইউ আর্কিটেকচারটি কেবলমাত্র একটি উদাহরণ যা কোনও ভাষার উচ্চ-কার্যকারিতা বাস্তবায়ন করতে কতটা সহজ বা কতটা শক্ত তার উপর প্রভাব ফেলে। সি, সি ++, ডি, জাস্টের মতো একটি ভাষা যা আধুনিক মূলধারার সিপিইউ প্রোগ্রামিং মডেলের পক্ষে উপযুক্ত এটি "জাভা", জাভা, ইসমাস্ক্রিপ্ট, পাইথন, রুবির মতো সিপিইউকে অবরুদ্ধ করার মতো ভাষার চেয়ে দ্রুততর করা সহজ হবে that , পিএইচপি।
সত্যিই, এটি সব অর্থের প্রশ্ন। আপনি যদি ECMAScript এ উচ্চ-পারফরম্যান্স অ্যালগরিদম বিকাশের জন্য সমান পরিমাণ অর্থ ব্যয় করেন, ECMAScript এর একটি উচ্চ-কার্যকারিতা বাস্তবায়ন, ECMAScript এর জন্য ডিজাইন করা একটি উচ্চ-পারফরম্যান্স অপারেটিং সিস্টেম, ECMAScript এর জন্য ডিজাইন করা একটি উচ্চ-পারফরম্যান্স সিপিইউ হিসাবে শেষ ব্যয় হয়েছে দশকের দশক ধরে সি-জাতীয় ভাষাগুলি দ্রুতগতিতে চালিত হতে পারে তবে আপনি সম্ভবত সমান পারফরম্যান্স দেখতে পাবেন। এটি ঠিক যে, এই সময়ে, ইসিএমএসক্রিপ্ট-জাতীয় ভাষাগুলি দ্রুত তৈরির চেয়ে সি-এর মতো ভাষা তৈরিতে আরও বেশি অর্থ ব্যয় করা হয়েছে এবং সি-এর মতো ভাষার অনুমানগুলি এমএমইউ এবং সিপিইউ থেকে অপারেটিং সিস্টেমগুলিতে পুরো স্ট্যাকটিতে বেকড রয়েছে এবং লাইব্রেরি এবং ফ্রেমওয়ার্ক পর্যন্ত ভার্চুয়াল মেমরি সিস্টেম।
ব্যক্তিগতভাবে, আমি রুবির সাথে সবচেয়ে বেশি পরিচিত (যা সাধারণত একটি "ধীর ভাষা" হিসাবে বিবেচিত হয়), তাই আমি দুটি উদাহরণ দেব: Hash
রুবিনিয়াসে ক্লাস (রুবির কেন্দ্রীয় তথ্য কাঠামোর একটি), একটি মূল-মান অভিধান রুবি বাস্তবায়ন 100% খাঁটি রুবিতে লিখিত এবং এটি প্রায় একই কর্মক্ষমতা রয়েছেHash
YARV (সবচেয়ে বহুল ব্যবহৃত implementation সি টি সমর্থন করে না যা প্রচুর গতিশীল এবং প্রতিবিম্বিত রুবি ট্রিকস ব্যবহার করে; জেআরবির একটি পরীক্ষামূলক শাখা, ট্র্যাকল এএসটি ইন্টারপ্রেটার ফ্রেমওয়ার্ক এবং ওরাকল ল্যাবস দ্বারা গ্রিল জেআইটি সংকলন কাঠামো ব্যবহার করে, খাঁটি রুবি যত তাড়াতাড়ি YARV বাস্তব উচ্চ-অনুকূলিত সি সংস্করণটি কার্যকর করতে পারে কার্যকর করতে পারে ute এটি কেবল (ভাল, কিছুই তবে) গতিশীল রানটাইম অপ্টিমাইজেশন, জেআইটি সংকলন এবং আংশিক মূল্যায়ন সহ সত্যই চালাক স্টাফ করে এমন কিছু সত্যই চালাক ব্যক্তি অর্জন করেছেন।