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


38

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

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


21
যদি একটি প্রোগ্রাম অন্য একটির চেয়ে দ্রুত হয় তবে এর অর্থ তাদের কাছে একই বাইট কোড থাকতে পারে না।
সুইভ

5
ভাষাগুলি প্রোগ্রাম লেখার জন্য ব্যবহার করে এমন একটি ধারণা যা আপনি কোনও ভাষার গতি সম্পর্কে সত্যই কথা বলতে পারবেন না ।
জুহো

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

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

যেমন উপরে. ভাষাগুলি একই বাইট কোড তৈরি করে না। কিছু ভাষাগুলি বাইট কোডে পার্স করা সহজ। কারও কারও উচ্চ স্তরের বিমূর্ততা থাকে।
সুপারলুমিনারি

উত্তর:


23

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

দুটি ভাষা একই বাইটোকোডে সংকলন করতে পারে তবে এর অর্থ এই নয় যে একই কোড তৈরি করা হবে,

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

এটি বলেছে, ভাষার তুলনামূলক গতির বিষয়টি একটি পুরানো, প্রথম সংকলকগুলির সাথে ফিরে এসেছে।

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

এভাবে যন্ত্রের ভাষা বলার চেয়ে দ্রুত ছিল, ফরট্রান।

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

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

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

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

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

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

আরও কিছু সমস্যা লজিক প্রোগ্রামিং এবং সীমাবদ্ধতা সমাধানের ভাষা ব্যবহার করে দ্রুত সম্পাদনের মাধ্যমে আরও সহজে প্রোগ্রাম করা হবে ।

জটিল প্রতিক্রিয়াশীল সিস্টেমগুলি এস্টেরেলের মতো বিশেষ সিঙ্ক্রোনাস প্রোগ্রামিং ল্যাঙ্গুয়েজের সাথে খুব দক্ষতার সাথে প্রোগ্রাম করা যেতে পারে যা এই জাতীয় সিস্টেমগুলি সম্পর্কে খুব বিশেষ জ্ঞান মূর্ত করে এবং খুব দ্রুত কোড তৈরি করে।

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

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

আরেকটি বিষয় যা প্রায়শই গুরুত্বপূর্ণ তা হ'ল বিষয়গুলি প্রোগ্রাম করার জন্য দক্ষ লাইব্রেরির অস্তিত্ব।

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

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


ধন্যবাদ। এটি এমন কিছু। আমি খুঁজছিলাম. বিষয়টির জন্য উপাদানগুলি খুঁজে পাওয়া শক্ত ছিল। এটি যথেষ্ট স্পষ্ট করেছে।
রদ্রিগো ভ্যালেন্টে

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

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

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

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

16

সবশেষে সিপিইউ * তে চালিত হওয়ার পরেও বিভিন্ন ভাষার মধ্যে বিভিন্ন পার্থক্য রয়েছে। এখানে কিছু উদাহরণঃ.

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

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

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

* আসলে, আজকাল উচ্চ পারফরম্যান্স সিস্টেমগুলি জিপিইউ এবং এমনকি এফপিজিএগুলিতে কোড চালায়।


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

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

@ রডরিগোআরাজো ভ্যালেন্ট নির্ভর করে। ক্র্যাপি কোড প্রায়শই ক্রেপি কোডে সংকলন করে। হয়তো কোড আপনি পাইথন লিখতে পারে আসলে দ্রুত কোড চেয়ে আপনি সি লিখতে পারে
রাফায়েল

নীট: আপনি যে প্রশ্নটির সাথে সংযুক্ত প্রশ্নটি দিয়ে ব্যাখ্যা করেছেন, অজগরটি আসলে "অন-দ্য ফ্লাই" এর অর্থ ব্যাখ্যা করা হয় না
Eভী

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

5

Y এর পরিবর্তে X পছন্দ করার জন্য বিভিন্ন কারণ রয়েছে like

  • শেখার সহজতা
  • বোঝার সহজতা
  • উন্নয়নের গতি
  • সঠিক কোড প্রয়োগের ক্ষেত্রে সহায়তা করুন
  • সংকলিত কোডের পারফরম্যান্স
  • সমর্থিত প্ল্যাটফর্মের পরিবেশগুলি
  • পোর্টেবিলিটি
  • কাজের জন্য উপযুক্ত

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

আপনি কোন প্লাটফর্মটি কাজ করছেন এবং কোন অ্যাপ্লিকেশন তৈরি করতে চলেছেন তা আপনাকে অবশ্যই নির্ধারণ করতে হবে।


1
সুতরাং, আমি কীভাবে সংকলিত কোডটির কার্যকারিতা নির্ধারণ করব? মূলত এটিই আমাকে এই প্রশ্নটি করতে বাধ্য করেছিল।
রদ্রিগো ভ্যালেন্টে

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

@ RodrigoAraújoValente এমনকি তারা পারে না করা কোড কম্পাইল (যদি আপনার ভাষায় ব্যাখ্যা করা হয়)।
রাফেল

1
আপনি "ভাল লাইব্রেরি" এবং "ভাল সরঞ্জাম" যুক্ত করতে চাইতে পারেন।
রাফেল

আপনি এটি চালান এবং এটির প্রোফাইল দিন
কাইল

2

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

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

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

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

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

এর মধ্যে কয়েকটি ভার্চুয়াল মেশিন একটি জেআইটি সংকলকের ধারণা যুক্ত করে যা রানটাইম গতির পাশাপাশি ইন্টারমিডিয়েট বাইট কোড অনুবাদ না করে মেশিন স্তরের কোড তৈরি করে।

কিছু ভার্চুয়াল মেশিন নিম্ন স্তরের যা বাইট কোড থেকে মেশিন কোডে কম অনুবাদ করার অনুমতি দেয়। বহনযোগ্যতা বজায় রাখার সময় কোনটি গতি বাড়ায়।


.তিহাসিকভাবে, সি মেশিন কোডে সহজ অনুবাদ করার অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছিল। ক্রমবর্ধমান পরিমাণে, সি কে দক্ষ সি কোডে পরিণত করার জন্য কোনও প্রোগ্রামার কী করার চেষ্টা করছে তা নির্ধারণ করে তারপরে সেই উদ্দেশ্যটিকে মেশিন কোডে অনুবাদ করতে হবে। উদাহরণস্বরূপ, historতিহাসিকভাবে মেশিন কোডের সমতুল্য *p++=*q++;অনেকগুলি মেশিনের চেয়ে দ্রুত ছিল array1[i]=array2[i];তবে অনেকগুলি প্রসেসরের ক্ষেত্রে বিপরীতটি সত্য হয় এবং এইভাবে সংকলকগণ পূর্ববর্তী কোডের শৈলীর উত্তরবর্তীতে রূপান্তর করতে পারে - সম্ভবত "অগভীর" রূপান্তর হয়।
সুপারক্যাট

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

2

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

উদাহরণস্বরূপ, "কঠোর ব্যবহার" অনুপস্থিতিতে, কোডের একটি অংশ যেমন:

function f() { return x; }

তাত্ক্ষণিক কলিং প্রসঙ্গে একটি ভেরিয়েবল এক্সকে ফিরিয়ে দিতে পারে, যদি একটি বহিরাগত কলিং প্রসঙ্গ থেকে একটি ভেরিয়েবল এক্স থাকে বা এটি ফিরে আসতে পারে Undefined। সবচেয়ে খারাপ, যেমন লুপে:

for (i=0; i<40; i+=1) { g(i); }

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


2

বেশ কয়েকটি পেশাদার উত্তর এখানে রয়েছে, এটি তাদের নিকটবর্তী নয় তবে এটি আপনার পক্ষে স্বজ্ঞাত হতে পারে।

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

যদিও সংকলকগুলি আজ খুব পরিশীলিত তবে সেরা সমাবেশ প্রোগ্রামাররা যেমন এখনও কার্যকর করতে পারেন তেমনি।

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

সুতরাং আমার কাছে, ভাষা এক্স ভাষা ওয়ানের চেয়ে দ্রুত (রানটাইমে) যদি নির্দিষ্ট কিছু অংশের জন্য, এক্স এর মেশিন কোডটি ওয়াই এর চেয়ে কম হয়।


সমাবেশ পুরোপুরি শিলা। যদিও সেরা সংকলককে ছাড়িয়ে নিতে সত্যিকারের শিল্পী লাগে।
জোহান - মনিকা

1

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

  • RQ1। কোন প্রোগ্রামিং ভাষা আরও সংক্ষিপ্ত কোডের জন্য তৈরি করে?

  • RQ2। কোন প্রোগ্রামিং ভাষাগুলি ছোট এক্সিকিউটেবলের মধ্যে সংকলন করে?

  • RQ3। কোন প্রোগ্রামিং ভাষাগুলির চলমান সময়ের পারফরম্যান্স আরও ভাল?

  • RQ4। কোন প্রোগ্রামিং ভাষা মেমরি আরও দক্ষতার সাথে ব্যবহার করে?

  • RQ5। কোন প্রোগ্রামিং ভাষার ব্যর্থতা কম?

বিমূর্ততা — কখনও কখনও প্রোগ্রামিং ভাষার বিষয়ে বিতর্কগুলি বৈজ্ঞানিক চেয়ে বেশি ধর্মীয় হয়। কোন ভাষাটি আরও সংক্ষিপ্ত বা দক্ষ, বা বিকাশকারীদের আরও উত্পাদনশীল করে তোলে সে সম্পর্কিত প্রশ্নগুলি উত্সাহের সাথে আলোচিত হয় এবং তাদের উত্তরগুলি প্রায়শই উপাখ্যান এবং অসমর্থিত বিশ্বাসের ভিত্তিতে হয়। এই গবেষণায়, আমরা রোজটা কোড, বিভিন্ন ভাষায় প্রচলিত প্রোগ্রামিংয়ের কাজের সমাধানগুলির একটি কোড ভান্ডার, যা বিশ্লেষণের জন্য একটি বৃহত ডেটা সেট সরবরাহ করে, এর বহুলাংশে অপ্রয়োজনীয় গবেষণা সম্ভাব্য ব্যবহার করি। আমাদের অধ্যয়নটি মূলত প্রোগ্রামিং প্যারাডিমগুলি (পদ্ধতিগত: সি এবং গো; অবজেক্ট-ওরিয়েন্টেড: সি # এবং জাভা; ক্রিয়ামূলক: এফ # এবং হাস্কেল; স্ক্রিপ্টিং: পাইথন এবং রুবি) উপস্থাপন করে 8 টি ব্যাপকভাবে ব্যবহৃত ভাষাগুলিতে 745 টি কাজের সাথে সম্পর্কিত 7,087 সমাধান প্রোগ্রামের উপর ভিত্তি করে। আমাদের পরিসংখ্যানগত বিশ্লেষণটি উল্লেখ করে যে, কার্যনির্বাহী এবং স্ক্রিপ্টিং ভাষাগুলি পদ্ধতিগত এবং অবজেক্ট-ভিত্তিক ভাষার চেয়ে আরও সংক্ষিপ্ত; বৃহত ইনপুটগুলিতে কাঁচা গতিতে আসে তখন তা মারতে শক্ত হয়, তবে মাঝারি আকারের ইনপুটগুলির তুলনায় পারফরম্যান্সের পার্থক্য কম স্পষ্ট হয় এবং ব্যাখ্যা করা ভাষাগুলিকেও প্রতিযোগিতামূলক হতে দেয়; সংকলিত দৃ strongly়-টাইপিত ভাষাগুলি, যেখানে সংকলনের সময় আরও ত্রুটিগুলি ধরা যেতে পারে, ব্যাখ্যামূলক বা দুর্বল-টাইপযুক্ত ভাষার চেয়ে রানটাইম ব্যর্থতার ঝুঁকি কম। আমরা এই ফলাফলগুলির বিকাশকারীদের জন্য, ভাষা ডিজাইনারদের এবং শিক্ষকদের জন্য আলোচনা করি। সংকলনের সময় যেখানে আরও ত্রুটিগুলি ধরা যায়, ব্যাখ্যামূলক বা দুর্বল টাইপ করা ভাষার চেয়ে রানটাইম ব্যর্থতার ঝুঁকি কম। আমরা এই ফলাফলগুলির বিকাশকারীদের জন্য, ভাষা ডিজাইনারদের এবং শিক্ষকদের জন্য আলোচনা করি। সংকলনের সময় যেখানে আরও ত্রুটিগুলি ধরা যায়, ব্যাখ্যামূলক বা দুর্বল টাইপ করা ভাষার চেয়ে রানটাইম ব্যর্থতার ঝুঁকি কম। আমরা এই ফলাফলগুলির বিকাশকারীদের জন্য, ভাষা ডিজাইনারদের এবং শিক্ষকদের জন্য আলোচনা করি।


0

কম্পিউটার ভাষাগুলি হ'ল কম্যান্ডের বিমূর্ততা যা কম্পিউটারকে কী করা উচিত তা বোঝাতে।

আপনি এমনকি কম্পিউটারের ভাষায় লিখতে এবং Pythonএটি একটি সি সংকলক (সিথন) দিয়ে সংকলন করতে পারেন।

এটিকে মাথায় রেখে কম্পিউটারের ভাষার গতি তুলনা করা যায় না।

তবে আপনি একই ভাষার সংকলকগুলিকে কিছুটা বাড়িয়ে তুলনা করতে পারেন। উদাহরণস্বরূপ GNU Cসংকলক বনাম Intel Cসংকলক। (সংকলক মানদণ্ডের জন্য অনুসন্ধান করুন)


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