অপরিহার্য ভাষা কীভাবে কার্যকরী ভাষার চেয়ে একে অপরের থেকে আলাদা?


17

আমি সাইমন পাইটন জোন্স এর কার্যকরী প্রোগ্রামিং ভাষার প্রয়োগ বাস্তবায়িত করছি এবং এর একটি বিবৃতি আমাকে সামান্য বিস্মিত করেছে (পৃষ্ঠা 39):

অপরিহার্য ভাষাগুলির তুলনায় অনেক বড় পরিসরে, কার্যকরী ভাষাগুলি অপেক্ষাকৃত কয়েকটি শব্দার্থক পার্থক্য সহ বেশিরভাগ ক্ষেত্রে একে অপরের সিন্থেটিক ভিন্নতা।

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

তবে আবার, আমি এটি আমার স্বজ্ঞাত বোঝার উপর ভিত্তি করে যাচ্ছি। সাইমন পিটন জোন্স কি এটি বলার ক্ষেত্রে অনেকাংশে সঠিক, নাকি এটি একটি বিতর্কিত বিষয়?

উত্তর:


19

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

ভী

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

a -> bএকটিটিএকটিটি(একজন)একটিa

সমীকরণীয় তত্ত্ব যতদূর যায়, যেহেতু এই ভাষাগুলিকে উভয়ই একই ভাষার সামান্য পৃথক উপধারায় অনুবাদ করে বর্ণনা করা যায়, তাই তাদের একে অপরের সিনট্যাক্টিক প্রবর্তন বলা সম্পূর্ণ ন্যায়সঙ্গত।

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

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


10

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

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

সাইমন এর বক্তব্য খুব গুরুত্বপূর্ণ historicalতিহাসিক প্রসঙ্গে ফিট করেও। হাস্কেল (1987) এর জন্মের সময়, অ-কঠোর কার্যকরী ভাষার একটি বিশৃঙ্খলা ছিল - কেবল মিরান্ডা নয়, অলস এমএল, অরওয়েল, ক্লিন এবং আরও অনেকগুলি। কিছু সংশ্লেষীয় প্রকরণ বাদে, তারা সবাই খুব একই ভাষা ছিল। যা হ্যাসেল কমিটি গঠনের জন্য স্পষ্টভাবে প্রেরণা ছিল। এই আরো জানার জন্য, দেখুন "Haskell, একটি ইতিহাস: বর্গ সঙ্গে অলস হচ্ছে": http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/


5

আমি মনে করি এসপিজে মূল শব্দার্থবিজ্ঞানের জন্য এটি বলা ঠিক।

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

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

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

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


4

আমি মনে করি সাইমন পিজে'র উদ্ধৃতিটি আসলে অফ-হ্যান্ড মন্তব্যটি।

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

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

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

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

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


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