কোনও বিশেষ বৈশিষ্ট্যটি সঠিকভাবে কাজ করে তা নির্ধারণ বা প্রমাণ করতে ভাষা ডিজাইনাররা কী করবেন?


11

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

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

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

আমার মূল প্রশ্নের জাস্ট এবং এর মালিকানার সাথে বিশেষভাবে কোনও সম্পর্ক নেই - তবে আপনার প্রয়োজন হলে আপনার মন্তব্য / উত্তরে এটি উদাহরণ হিসাবে ব্যবহার করতে নির্দ্বিধায় হন।

ভাষা ডিজাইনাররা যখন কোনও নতুন বৈশিষ্ট্য ডিজাইন করেন, তখন বৈশিষ্ট্যটি সঠিকভাবে কাজ করে তা স্থির করতে তারা কোন পদ্ধতি বা প্রক্রিয়া ব্যবহার করেন?

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

  • এটি কি বিচার এবং ত্রুটি প্রক্রিয়া, এই অর্থে যে আপনি বৈশিষ্ট্যের একটি সাধারণ ফর্ম নিয়ে এসেছেন, তারপরে এটি লঙ্ঘন করার উপায়গুলি অনুসন্ধান করার চেষ্টা করুন, তারপরে আপনি যদি সফলভাবে এটি লঙ্ঘন করেন তবে তা পুনরাবৃত্তি করুন? এবং তারপরে, যখন আপনি অন্য কোনও সম্ভাব্য লঙ্ঘনের কথা ভাবতে পারেন না, তখন আপনি কি আশা করেন যে কিছুই নেই এবং একটি দিন বলবেন?

  • অথবা আসলেই (শব্দের গাণিতিক অর্থে) প্রমাণ করার কোনও আনুষ্ঠানিক উপায় আছে যা আপনার বৈশিষ্ট্যটি কাজ করে এবং তারপরে প্রমাণটি আত্মবিশ্বাসের সাথে শুরু থেকেই বৈশিষ্ট্যটি সঠিকভাবে (বা বেশিরভাগই সঠিক) পেতে ব্যবহার করতে পারেন?

(আমার উল্লেখ করা উচিত যে আমার কম্পিউটার ইঞ্জিনিয়ারিং নয়, একটি ইঞ্জিনিয়ারিং পটভূমি রয়েছে So সুতরাং যদি আমি সিএস লোকের কাছে সুস্পষ্ট কিছু মনে করি তবে দয়া করে এটিকে নির্দিষ্ট করে বলি))


আপনি যখন "ল্যাঙ্গুয়েজ ডিজাইনার" বলছেন তখন আপনার অর্থ কি এমন ব্যক্তি যিনি সংকলক তৈরি করেন, বা কেবল বাক্য গঠন, বা উভয়ই?
স্নুপ

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

4
জিউজ 1942-1946 তবে কেবল ১৯ 197৫ সালে প্রয়োগ করা হয়েছিল। নিকলাস ওয়ার্থ প্রথমে তার ভাষাগুলি সম্পূর্ণরূপে ডিজাইন করেছিলেন এবং নকশাটি শেষ করার পরে কেবল সেগুলি প্রয়োগ করেছিলেন (এবং ভাষাটি কতটা ভাল ছিল তার অনুভূতি পেতে তিনি নিজেই ভাষায় প্রথম সংকলক লিখেছিলেন) ডিজাইন করা - তারপরে তিনি তার ছাত্রদের বুটস্ট্র্যাপিংয়ের জন্য সংকলকটিকে অন্য ভাষায় হ্যান্ড-ট্রান্সলেট করেছিলেন। অনেক বেশি একাডেমিক ভাষা কখনই প্রয়োগ করা হয় না, সেগুলি কেবল কোনও বিন্দু প্রমাণের জন্য বা কোনও ভাষা বৈশিষ্ট্যের সাথে একটি বিমূর্ত উপায়ে পরীক্ষা করার জন্য তৈরি করা হয়েছে are পারস্পরিক বাজির ফলস্বরূপ স্মার্টটাক তৈরি হয়েছিল: অ্যালান কে বাজি
ধরেছিলেন

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

3
পড়তে হবে: গোডেলের, Escher, Bach । এটি সময়ে কিছুটা অদ্ভুত, তবে শেষের দিকে টিউরিং এবং গডেলের কাজগুলি বেশিরভাগ ক্ষেত্রে যায় যা ভাষার নকশার আনুষ্ঠানিকতার উপর ব্যাপকভাবে প্রভাব ফেলে।
রাবারডাক

উত্তর:


6

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

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

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


2
আমি বিশ্বাস করি রেফারেন্স আপনি যা খুঁজছেন সিরিজ, সম্ভবত "মধ্যে Haskell প্রকারভেদ সঙ্গে ইসলাম" একটিতে আছে এই এক থাম্বনেল চিত্র বোর্ডের সামগ্রীর জন্য প্রদত্ত ...
জুলে

8

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

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

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

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


4
The only thing that makes languages special is that they are (almost always) infinite. You literally cannot test all inputs.আসলেই কি তাই বিশেষ? এটা আমার কাছে সাধারণ ঘটনা বলে মনে হচ্ছে। উদাহরণস্বরূপ একটি ফাংশন যা একটি তালিকা হিসাবে আর্গুমেন্ট হিসাবে গ্রহণ করে তাতেও অসীম সংখ্যার ইনপুট থাকে। আপনার চয়ন করা যে কোনও আকারের জন্য, আকারের এন + 1
ডোভাল

আমি মনে করি @ ডোভাল - এবং স্ট্রিংগুলিও। একটি ভাল পয়েন্ট।
টেলাস্টিন

4

নতুন বৈশিষ্ট্য প্রবর্তন করার সময় কোনও ভাষা ডিজাইনারের অবশ্যই প্রথম এবং সবচেয়ে কঠিন বিষয়টি যত্ন সহকারে নেওয়া উচিত, তা হল তার ভাষাটিকে ধারাবাহিক রাখা:

  • বিদ্যমান কোডটি ভঙ্গ না করে কীভাবে এটি ভাষা ব্যাকরণে সংহত করা যায় (এটি গাণিতিকভাবে প্রমাণিত হতে পারে)
  • এটি বিদ্যমান বৈশিষ্ট্যগুলির সাথে কীভাবে সম্পর্কযুক্ত (উদাহরণস্বরূপ যদি আপনি 0..n-1 সূচিকৃত অ্যারেগুলি স্থির করে থাকেন তবে আপনি 1.nn অনুসারে নতুন ভেরিয়েবল অ্যারে বৈশিষ্ট্যটি প্রবর্তন করবেন না) (এটি ডিজাইনের শৈল্পিক অংশ)
  • কীভাবে বৈশিষ্ট্যটি পুরো সরঞ্জামচেইন জুড়ে কার্যকর করা যায় যাতে নতুন বৈশিষ্ট্যটি বাস্তুসংস্থান, সরঞ্জাম নির্মাতারা এবং প্রোগ্রামাররা শোষিত করতে পারে (ধারণার প্রমাণ দিয়ে সম্ভাব্যতা প্রদর্শন করা যায়, তবে সম্পূর্ণ বাস্তবায়ন প্রোগ্রামিংয়ের মতোই একটি পদ্ধতির)

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

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


4

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

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

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

"সঠিকভাবে কাজ করে" এর অর্থ হ'ল বৈশিষ্ট্যটি উদ্দিষ্ট সমস্যাটিকে সঠিকভাবে সমাধান করে এবং এটি যুক্তিযুক্ত বুলেটপ্রুফ।

উত্পাদনের ভাষা হিসাবে চিহ্নিত ভাষাগুলির জন্য , এটি নির্ভরযোগ্য উত্পাদন সফ্টওয়্যার তৈরি করতে অনেক প্রোগ্রামার দ্বারা ব্যবহৃত হয়, "সঠিকভাবে কাজ করে" এর অর্থ অবশ্যই অভিযুক্ত দর্শকদের জন্য উদ্দিষ্ট সমস্যাটি সঠিকভাবে সমাধান করা উচিত

অন্য কথায় ভাষা ব্যবহারের ক্ষেত্রে যেমন ব্যবহারযোগ্যতা তেমনি অন্যান্য ডিজাইনের মতোও গুরুত্বপূর্ণ। এটিতে (1) ব্যবহারযোগ্যতার জন্য নকশা (উদাহরণস্বরূপ আপনার শ্রোতাদের জানা) এবং (2) ব্যবহারযোগ্যতার পরীক্ষা করা আবশ্যক।

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

এই বিষয়টির একটি উদাহরণ এসই প্রশ্নটি হ'ল কোনও প্রোগ্রামিং ভাষার সংশ্লেষের ব্যবহারযোগ্যতা পরীক্ষা করা হয়েছে?

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

স্মলটাক, পাইথন এবং ডার্টের মতো ভাষা ব্যবহারের উপর জোর দিয়ে ডিজাইন করা হয়েছিল। স্পষ্টতই হাস্কেল ছিলেন না।


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