প্রোটোটাইপ-ভিত্তিক ভাষার নকশাকে কীভাবে স্ট্যাটিক টাইপ সিস্টেম প্রভাবিত করে?


15

প্রোটোটাইপ-ভিত্তিক ভাষার উইকিপিডিয়ার নিবন্ধ নিচের অনুচ্ছেদটি রয়েছে:

প্রায় সমস্ত প্রোটোটাইপ-ভিত্তিক সিস্টেমগুলি ব্যাখ্যা করা এবং গতিশীল টাইপ করা ভাষার উপর ভিত্তি করে। স্থিতিযুক্ত টাইপ করা ভাষার উপর ভিত্তি করে সিস্টেমগুলি প্রযুক্তিগতভাবে সম্ভব, তবে।

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


2
+1 এবং পছন্দসই: আমি নিজেকে বেশ কিছুদিন ধরেই ভাবছিলাম এবং স্ট্রাকচারাল টাইপ সিস্টেমে কোনও অসাধারণ সমস্যা খুঁজে পেলাম না । আসলে, এটি আমাকে এতটা বিরক্ত করে যে আমি এগিয়ে যেতে চাই এবং সেখানে কী কী সমস্যা রয়েছে তা দেখার জন্য একটি স্ট্যাটিকালি

আমি ঠিক সেই কারণেই সেই প্রক্রিয়াটি শুরু করছি :)
জো

উত্তর:


6

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

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

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

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

স্ট্যাটিক-টাইপ করা হয়:

  • কার্যকর করা সহজ
  • দ্রুত / আরও দক্ষ
  • নিরাপদ
  • বিমূর্ততার কারণে বড় সিস্টেমগুলি বজায় রাখা / নথিভুক্ত করা সহজ।

গতিশীল টাইপযুক্ত:

  • দ্রুত লিখতে,
  • আরও সংক্ষিপ্ত
  • ভাষা শিখতে সহজ
  • ডিজাইনের ত্রুটির জন্য আরও ক্ষমাশীল।

দুজনের মিশ্রণ দ্বারা, আপনি অনেক ত্যাগ করেন।

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

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

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

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

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

1
আপনি "ডায়নামিক" কে "প্রোটোটাইপস" দিয়ে বিভ্রান্ত করেন। এই স্বাধীনতাগুলি যা স্ট্যাটিক টাইপ সিস্টেমগুলির সাথে ভালভাবে মিশে যায় না সেগুলি প্রোটোটাইপের বৈশিষ্ট্য নয়, এগুলি গতিশীলতার বৈশিষ্ট্য। অবশ্যই স্ট্যাটিক টাইপ করা তাদের বাধা দেয়, তবে তারা প্রোটোটাইপের অংশ নয় (এটি আইএমজিও মূলত ক্লোনিং অবজেক্টের পক্ষে পিতা-মাতার চরিত্রে কাজ করার পক্ষে ক্লাসের অভাব নয়)। সেই গতিশীলতা প্রোটোটাইপগুলিতে অরথোগোনাল। সমস্ত জনপ্রিয় প্রোটোটাইপ ভাষাগুলি সেগুলি অন্তর্ভুক্ত করার জন্য ঘটে তবে তারা পূর্বের মতো প্রোটোটাইপ থেকে স্বতন্ত্র । একটি কল্পিত ভাষায় এই স্নিপেট বিবেচনা করুন: পেস্টবিন . com / 9pLuAu9F । এটি কীভাবে প্রোটোটাইপ নয়?

3

অসুবিধাটি দেখতে বেশ সোজা:

  • সমস্ত অভিধান কী / বার্তাগুলি স্ট্যাটিক্যালি ঘোষিত শনাক্তকারী ব্যবহার করে সাধারণত আগাম ঘোষণা করা হয়।

  • কিছু বার্তাগুলির সেটগুলি আগেই ঘোষণা করা হয় এবং তারা কোন বার্তাগুলিতে প্রতিক্রিয়া জানায় তা নির্ধারণ করতে এই সেটগুলির সাথে অবজেক্টগুলি যুক্ত থাকে।

  • বার্তাগুলির এক সেটের অন্য সেটেলগুলির অন্তর্ভুক্তির সম্পর্কগুলি স্থিতিশীলভাবে এবং স্পষ্টভাবে ঘোষণা করা হয়; অঘোষিত কিন্তু লজিকাল উপগ্রহগুলি বৈধ নয়।

  • টাইপ-চেকিং সমস্ত বার্তাগুলি কেবল তাদের প্রতিক্রিয়া জানিয়েছে এমন বস্তুগুলিতে প্রেরণ করা হয়েছে তা নিশ্চিত করার চেষ্টা করে।

প্রোটোটাইপ-ভিত্তিক সিস্টেমের সাথে এই বিরোধগুলির প্রতিটি একটি পরিমাণে:

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

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

  • অন্তর্ভুক্তি সম্পর্কের সাথে উপরের দুটি হিটের আসল প্রভাব, যেখানে সুস্পষ্ট ঘোষণা সম্পূর্ণ অকার্যকর। স্থিতিশীল, নামমাত্র সাব টাইপিং অর্থে উত্তরাধিকার একটি প্রোটোটাইপ-ভিত্তিক সিস্টেমের বিরোধী।

যা আমাদের চূড়ান্ত পর্যায়ে নিয়ে আসে, যা আমরা আসলে পরিবর্তন করতে চাই না । আমরা এখনও নিশ্চিত করতে চাই যে বার্তাগুলি কেবলমাত্র তাদের প্রতিক্রিয়াযুক্ত বস্তুগুলিতে পাঠানো হয়েছে। যাহোক:

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

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

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

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


1

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

ধারণাগুলি একসময় সি ++ 0x এর জন্য পরিকল্পিত বৈশিষ্ট্য ছিল। সি ++ টেম্পলেটগুলির জেনেরিক কোডটি ইতিমধ্যে "স্ট্যাটিকালি হাঁস-টাইপড" রয়েছে de কনসেপ্টস এর ধারণাটি সেই সদস্যের অন্তর্গত শ্রেণি-উত্তরাধিকারের মডেলটির প্রয়োজন বা প্রয়োগ না করে প্রয়োজনীয় সদস্য এবং প্রকারের বৈশিষ্ট্যগুলি সম্পর্কে কিছু বলতে সক্ষম হয় (কারণ এটি বিদ্যমান টেম্পলেট কোড যা ইতিমধ্যে "স্ট্যাটিকভাবে হাঁস টাইপ করা ছিল" এর সাথে কাজ করতে হয়েছিল) )।

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

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

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