কোন ভাষা একটি নির্দিষ্ট কাজের জন্য "অনুকূলিত" করে তোলে?


15

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

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

আমি টিউরিং সম্পূর্ণ ভাষাগুলির কথা বলছি, সেগুলি ট্যুরিংয়ের সমতুল্য।


1
এটি একটি বিশ্বকোষীয় প্রশ্ন। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এটি কোনওভাবে ভেঙে ফেলুন, আরও সুনির্দিষ্ট করুন।
আন্দ্রে সৌজা লেমোস

5
"বিপণন" বলা কি ভুল হবে?
corsiKa

2
@ কর্সিকা হ্যাঁ, আমি মনে করি এটি বিপণনের ইস্যুর চেয়ে বেশি।
জেরেমি ওয়েস্ট

উত্তর:


18

কয়েকটি বিষয় বিবেচনা করতে হবে:

  • বিমূর্ততা: ভাষাটি "বিশেষ" হিসাবে কী বোঝায়? মতলবগুলি মত ম্যাট্রিকগুলি কি প্রথম শ্রেণীর মানগুলি হয়, বা আপনি যেমন সি হিসাবে সরল ধরণের অ্যারে ব্যবহার করে তাদের এনকোড করেন? সি আপনাকে ম্যাট্রিকগুলি কীভাবে প্রয়োগ করা হয় সে সম্পর্কে ভাবতে বাধ্য করে, মতলব তা করে না।

    তেমনি, যদি আপনি অ্যাসিক্রোনাস যোগাযোগের একটি জটিল সিস্টেম পেয়ে থাকেন তবে আপনি সম্ভবত প্রথম শ্রেণির ফাংশন চান যাতে আপনি কলব্যাক করতে পারেন।

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

  • পারফরম্যান্স: সমস্ত বিমূর্ততা একটি ব্যয় নিয়ে আসে, তা সংকলন-সময় হোক বা রান-টাইম হোক। কিছু ভাষাগুলি এগুলিকে এমনভাবে সীমাবদ্ধ করে তোলে যা তাদের কম বিমূর্ত কিন্তু আরও পারফরম্যান্ট করে তোলে।

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

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


8

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

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

উদাহরণস্বরূপ গুণটি বিভিন্ন কেস ব্যবহার করে (দেখুন জিএমপি গুণ)

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

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

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

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


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

1
@ জমিট আপনাকে ধন্যবাদ। আমি আশা করি এটি আর পার্থক্যের ছায়া নেই
এভিল

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

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

5

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

অনুশীলনে, এই পরিমাণগুলির প্রায় কোনওটিই প্রকৃতপক্ষে পরিমাপ করা যায় না। তবুও, আমি মনে করি এটি সমস্যা সম্পর্কে চিন্তা করার সঠিক উপায়।


4

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

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


3

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

উদাহরণস্বরূপ, সি এবং সি ++ উভয়ই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য ব্যবহার করা যেতে পারে - এবং প্রকৃতপক্ষে, গবজেক্ট লাইব্রেরি ওও সি-র একটি দুর্দান্ত উদাহরণ যা ফাংশন পয়েন্টারযুক্ত এসি স্ট্রাক্ট একটি সি ++ শ্রেণিতে ভার্চুয়াল পদ্ধতি হিসাবে একই উদ্দেশ্যে পরিবেশন করতে পারে এবং সম্পাদন করতে পারে উত্তম; বিকাশের জরিমানা হ'ল মেমরি বরাদ্দকরণ, ফাংশন পয়েন্টারগুলিকে আরম্ভ করতে এবং 'পিতামাতাকে' পদ্ধতিগুলি কল করার জন্য কৌশল চয়ন করার জন্য আঠালো কোড। / নিরাপদ টাইপ করতে সময় এটি পরিষ্কার এর অধিকাংশই Class klass * = new class()চেয়ে struct class *klass = malloc(sizeof(struct class));klass->fn1 = ...;klass->fnN = ...


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

2
@ এভিল: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ দুটি ভিন্ন ধারণা। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য কোনও অবজেক্ট ওরিয়েন্টেড ভাষার প্রয়োজন হয় না। সম্ভবত এটির জন্য কেবল কাগজ বা হোয়াইটবোর্ডের অস্তিত্ব প্রয়োজন যাতে আপনি আপনার ইউএমএল ডিজাইনটি করতে পারেন।
slebetman

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

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

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