লিস্প এবং স্কিমের প্রকারগুলি


10

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

উত্তর:


6

সিএল টাইপ সিস্টেমটি হ্যাস্কেল একের চেয়ে বেশি অভিব্যক্তিপূর্ণ , উদাহরণস্বরূপ, আপনার (or (integer 1 10) (integer 20 30))কোনও মানের জন্য একটি প্রকার থাকতে পারে 1,2,...9,10,20,21,...,30

তবে, লিসপ সংকলকগণ তাদের গলাতে সুরক্ষা প্রকারের বোঝার জন্য জোর করে না, তাই আপনি তাদের "নোটগুলি" উপেক্ষা করতে পারেন - আপনার নিজের ঝুঁকিতে

এর অর্থ হ'ল আপনি ল্যাস্পে হাস্কেল লিখতে পারেন (সুতরাং কথা বলার জন্য) সমস্ত মানের ধরণ ঘোষণা করে এবং সাবধানতার সাথে নিশ্চিত করে নিন যে সমস্ত প্রয়োজনীয় প্রকারের অনুমান করা হয়েছে, তবে প্রথমে হাস্কেল ব্যবহার করা আরও সহজ easier

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


19
"আপনার গলাতে জোর টাইপ সুরক্ষা" এর মতো পদ ব্যবহার করা যে কেউ বুঝতে পারে না কী ধরণের সুরক্ষা বা এটি কেন দরকারী।
ম্যাসন হুইলারের

11
@ ম্যাসনওহিলার: যে কোনও একটি বাক্যাংশ থেকে সুস্পষ্ট উপসংহার তৈরি করা অন্যথায় এর চেয়ে নিজেকে প্রায়ই ভুল বলে মনে করবে। যেমন, উদাহরণস্বরূপ।
এসডিএস

4
বিষয়টি যেহেতু ভাষাগুলি, তাই "আপনার গলা নামা" শব্দটি উপযুক্ত এবং উপযুক্ত চিত্রাবলীর।
লুসার droog

1
@ কেচালাক্স: উদাহরণটি দিয়ে স্পষ্ট করে বলা হয়েছে, আমি "অভিব্যক্তিপূর্ণ" বলতে চাইছিলাম।
এসডিএস

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

5

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

(define (first some-list)
  (if (empty? some-list)
      #f
      (car some-list)))

খালি খালি তালিকার জন্য, এটি প্রথম উপাদানটি প্রদান করে। খালি তালিকার জন্য, এটি মিথ্যা প্রত্যাবর্তন করে। এটি টাইপ করা ভাষায় প্রচলিত; একটি টাইপ করা ভাষা কিছু মোড়কের প্রকার যেমন Maybeখালি ক্ষেত্রে ত্রুটি ছুঁড়ে ব্যবহার করবে । আমরা যদি এই ফাংশনে কোনও প্রকার যুক্ত করতে চাই, তবে কোন প্রকারটি ব্যবহার করা উচিত? এটি [a] -> a(হাস্কেল স্বরলিপিটিতে) নয়, কারণ এটি মিথ্যা ফিরে আসতে পারে। এটিও নয় [a] -> Either a Boolean, কারণ (১) এটি সর্বদা খালি ক্ষেত্রে মিথ্যা ফেরত দেয়, একটি স্বেচ্ছাসেবক বুলেটিয়ান নয় এবং (২) যে কোনও একটির মধ্যে উপাদানগুলি Leftমিথ্যা এবং মিথ্যা থাকে Rightএবং প্রকৃত উপাদানটিতে পৌঁছানোর জন্য আপনাকে "উভয়ই আনপ্রেপ" করতে হবে। পরিবর্তে, মানটি একটি সত্য ইউনিয়ন দেয়- কোনও মোড়ক নির্মাণকারী নেই, এটি কেবল কিছু ক্ষেত্রে এক প্রকার এবং অন্য ক্ষেত্রে অন্য ধরণের দেয়। টাইপড র‌্যাকেটে এটি ইউনিয়ন ধরণের নির্মাতার সাথে প্রতিনিধিত্ব করা হয়:

(: first (All (A) (-> (Listof A) (U A #f))))
(define (first some-list)
  (if (empty? some-list)
      #f
      (car some-list)))

টাইপ (U A #f)যুক্তরাষ্ট্রের ফাংশন কোনো মোড়ানো ছাড়া তালিকা বা মিথ্যা একটি উপাদান আসতে পারে Eitherউদাহরণস্বরূপ। টাইপ চেকারটি some-listটাইপ (Pair A (Listof A))বা ফাঁকা তালিকার যেটি হয় তা নির্ধারণ করতে পারে এবং তদতিরিক্ত এটি যদি অনুমান করে যে যদি বিবৃতিটির দুটি শাখায় এটি জানা যায় যে কেসের ক্ষেত্রে এটি রয়েছে । প্রকারের পরীক্ষক জানেন যে (car some-list)এক্সপ্রেশনটিতে তালিকার অবশ্যই টাইপ থাকতে হবে(Pair A (Listof A)) কারণ যদি শর্তটি এটি নিশ্চিত করে। এটিকে ইভেন্ট টাইপিং বলা হয় এবং টাইপড কোড থেকে টাইপড কোডে স্থানান্তর সহজ করতে ডিজাইন করা হয়েছে।

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

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


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

"একটি টাইপ সিস্টেম ডিজাইনের একটি উদাহরণ যা": এই বাক্যটি সম্পূর্ণ নয়
২ored

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

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

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