দুর্বল টাইপের পক্ষে কী যুক্তি রয়েছে?


40

এটি একটি বন্ধুর সাথে আলোচনায় উঠে এসেছিল এবং কোনও ভাল যুক্তি ভাবার জন্য নিজেকে কঠোর মনে হয়েছিল। দুর্বল টাইপিংয়ের সাথে কী কী সুবিধা পাওয়া যায়?


17
কুপার এবং টর্কসনের ইঞ্জিনিয়ারিং একটি সংকলক দুর্বল টাইপিংয়ের একটি দুর্বল ডিজাইনের টাইপ সিস্টেমকে নিয়োগ হিসাবে সংজ্ঞায়িত করেছে। এটি নিশ্চিত যে এটি কারও উপকার করবে এমন শোনাচ্ছে না।
কর্বিন মার্চ

@ কর্বিন মার্চ: চমৎকার। এটি আমার তালিকায় যুক্ত করা দরকার।
Jörg ডব্লু মিটাগ

5
কর্পোরেট কার্যনির্বাহকরা সেরা যুক্তি দিতে পারেন: এটি আমাকে আমার সিস্টেম তৈরিতে সস্তা লোক নিয়োগের অনুমতি দেয়
ভেক্টর

উত্তর:


46

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

সুতরাং, যতক্ষণ না আপনার বন্ধু "দুর্বল টাইপিং" শব্দের সংজ্ঞা প্রদান করেন যা আলোচনার ভিত্তি হিসাবে পরিপূরক হিসাবে যথেষ্ট স্থিতিশীল, ততক্ষণ পর্যন্ত এই প্রশ্নের উত্তর দেওয়ার পক্ষেও তা বোঝা যায় না।

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

সর্বাধিক ব্যবহৃত সংজ্ঞাগুলির কয়েকটি হ'ল (এবং হ্যাঁ, আমি জানি যে এগুলির মধ্যে কোনোটাই কোনও অর্থবোধ করে না, তবে সেগুলি সংজ্ঞাগুলি যা আমি মানুষকে ব্যবহার করতে দেখেছি):

  • দুর্বল টাইপিং = অনিরাপদ টাইপিং / শক্তিশালী টাইপিং = নিরাপদ টাইপিং
  • দুর্বল টাইপিং = গতিশীল টাইপিং / শক্তিশালী টাইপিং = স্ট্যাটিক টাইপিং
  • দুর্বল টাইপিং = হাঁসের টাইপিং / শক্ত টাইপিং = নামমাত্র টাইপিং
  • দুর্বল টাইপিং = স্ট্রাকচারাল টাইপিং / শক্ত টাইপিং = নামমাত্র টাইপিং
  • দুর্বল টাইপিং = অন্তর্নিহিত টাইপিং / শক্ত টাইপিং = সুস্পষ্ট টাইপিং
  • দুর্বল টাইপিং = সুপ্ত টাইপিং / শক্তিশালী টাইপিং = ম্যানিফেস্ট টাইপিং
  • দুর্বল টাইপিং = কোন টাইপিং / শক্ত টাইপিং = টাইপিং নয়
  • দুর্বল টাইপিং = অন্তর্নিহিত কাস্ট / শক্ত টাইপিং = কেবল সুস্পষ্ট কাস্ট
  • দুর্বল টাইপিং = অন্তর্নিহিত বা সুস্পষ্ট কাস্ট / শক্ত টাইপিং = কোনও কাস্ট নেই
  • দুর্বল টাইপিং = অন্তর্নিহিত রূপান্তর / শক্তিশালী টাইপিং = কেবল সুস্পষ্ট রূপান্তর
  • দুর্বল টাইপিং = অন্তর্নিহিত বা স্পষ্ট রূপান্তর / শক্ত টাইপিং = কোনও রূপান্তর নেই
  • দুর্বল টাইপিং = ব্যাখ্যা / শক্তিশালী টাইপিং = সংকলন
  • দুর্বল টাইপিং = ধীর / শক্তিশালী টাইপিং = দ্রুত
  • দুর্বল টাইপিং = আবর্জনা সংগ্রহ / শক্তিশালী টাইপিং = ম্যানুয়াল মেমরি পরিচালনা
  • দুর্বল টাইপিং = ম্যানুয়াল মেমরি পরিচালনা / শক্তিশালী টাইপিং = আবর্জনা সংগ্রহ
  • … এবং আরও অনেক কিছু

যে তিনটি সংজ্ঞা সবচেয়ে বেশি ব্যবহৃত হয় বলে মনে হয় তা হ'ল

  • দুর্বল টাইপিং = আপনার মূ .় ক্রেপি প্রোগ্রামিং ভাষা / শক্তিশালী টাইপিং = আমার সুপার-অসাধারণ প্রোগ্রামিং ভাষা
  • দুর্বল টাইপিং = প্রতিটি অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ / শক্তিশালী টাইপিং = একমাত্র প্রোগ্রামিং ল্যাঙ্গুয়েজ যা আমি শিখতে বিরক্ত করেছিলাম (সাধারণত জাভা, সি # বা সি ++; হয় আশ্চর্যের বিষয়, যেসব মানুষ উদাহরণস্বরূপ হাস্কেল বা স্কিম তাদের প্রথম এবং একমাত্র ভাষা হিসাবে শেখে তাদের ভাগ করে নেওয়া হয় না বলে মনে হয়) এই বিশ্বদর্শন)
  • দুর্বল টাইপিং = প্রতিটি ভাষা আমি বুঝতে পারি না / শক্তিশালী টাইপিং = জাভা (ইচ্ছামত সি # বা সি ++ এর বিকল্প)

যদি না সবাই কি "দুর্বল টাইপিং" এমনকি একটি সংজ্ঞা উপর সম্মত হয় , এটা এমনকি অর্থে কি এর সুবিধাগুলো হতে পারে আমার মনে হয় না। কি লাভ? এমনকি খারাপ, যদি কোন সংজ্ঞা নেই এ সব , তারপর সবাই শুধু তাদের সংজ্ঞা তাদের আর্গুমেন্ট মাপসই নামান করতে পারেন, এবং যে আলোচনা প্রায় কাছাকাছি একটি flamewar মধ্যে বর্তা নিশ্চিত করা হয়।

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


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

7
@ রেনেসিস: আমি এটিকে "বাস্তববাদ" বলছি :-) আমি টাইপ সিস্টেমগুলি সম্পর্কে যথেষ্ট আলোচনা দেখেছি বুঝতে পেরেছি যে অর্ধেক লোক বুঝতে পারে না যে তারা সম্পূর্ণ ভিন্ন বিষয় নিয়ে কথা বলছে এবং অন্যরা জানে না তারা কী কথা বলছে সম্পর্কে এ সব । পারফরম্যান্স উন্নয়নের জন্য একটি optionচ্ছিক টাইপ সিস্টেম যুক্ত করার বিষয়ে কয়েক মাস আগে, আমি নাম দেব না এমন একটি ভাষার মূল বিকাশের তালিকায় একটি আলোচনা হয়েছিল। এই আলোচনাটি এক সপ্তাহ চলল, কয়েক ডজন মানুষ এবং কয়েকশ মেল জড়িত। না এক উপলব্ধি করেন যে একটি ঐচ্ছিক টাইপ সিস্টেম সংজ্ঞা দ্বারা কর্মক্ষমতা উন্নত করতে পারবে না। …
জার্গ ডব্লু মিটাগ

8
নিন্দার জন্য +1! আপনি যুক্ত করতে পারেন "
দৃ strong়

1
টাইপিং সিস্টেমগুলির জন্য উন্নততর সংজ্ঞায়িত নামগুলির অন্তর্নিহিত মান রায় দুর্বল এবং শক্তিশালী রয়েছে।
ইভা

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

25

মনে রাখবেন দুটি প্রধান ধারণা রয়েছে যা সাধারণত বিভ্রান্ত হয়:

গতিশীল টাইপিং

একটি প্রোগ্রামিং ল্যাঙ্গুয়েজকে গতিশীল টাইপ করা হয় বলা হয় যখন এর বেশিরভাগ টাইপ চেকিং রান-টাইমে সংকলন-সময়ের বিপরীতে সঞ্চালিত হয়। গতিশীল টাইপিংয়ে, মানগুলির প্রকার থাকে তবে ভেরিয়েবলগুলি থাকে না; অর্থাৎ, একটি ভেরিয়েবল যে কোনও প্রকারের মান উল্লেখ করতে পারে।

এখানে সুবিধাগুলি প্রায়শই কেবল "নতুন" প্রোগ্রামার হিসাবে খারিজ করা হয়, তবে যে কোনও প্রোগ্রামার জন্য এটি সুবিধাজনক হতে পারে:

if (!(arr is Array)) arr = [arr]; // is, instanceof, .constructor ==, whatever

আপনাকে অন্যথায় কোনও নতুন মান কাস্ট করতে বা অর্পণ করতে হবে এমন ক্ষেত্রে কম কোড:

if (data is Array)) {
    i = data.length; // no i = ((Array)data).length or Array myArr=(Array)data;
}

আলগা বা দুর্বল টাইপিং

দুর্বল টাইপিংয়ের অর্থ হ'ল কোনও ভাষা যখন ব্যবহার করা হয় তখন স্পষ্টভাবে রূপান্তরিত হয় (বা ক্যাসেট) প্রকারগুলি।

উপকারিতা:

  • কোনও ফাংশনে প্যারামিটার হিসাবে যে কোনও ধরণের মান পাস করুন । কলব্যাক, নমনীয় এপিআই, এবং ক্লোজারগুলির সহজ বাস্তবায়নের জন্য কার্যকর।
  • অন্তর্নিহিত বুলিয়ান মূল্যায়ন । যে কোনও ধরণের বুলিয়ান হিসাবে মূল্যায়ন করা যেতে পারে। এর পার্শ্ব সুবিধাগুলি যেমন ||বুলিয়ান রূপান্তর ছাড়াই অ্যাসাইনমেন্টে একটি অংশ ব্যবহার করা যেতে পারে:

    var a = param || defaultValue;
    
  • আবার, কম কোড:

    var num = 5;
    var str = "Hello";
    input.innerHTML = input.value = num;
    for (var i=0; i < input.value; i++) { ... }
    

    এমনকি জাভাও কিছুটা যেতে হয়েছিল, .toString()যখন একটির সাথে বস্তুর সংমিশ্রণ করার জন্য অন্তর্নিহিত কল দিয়ে String; অন্যথায় জাভা প্রোগ্রামাররা সারাদিন এটি অভিশাপ দিয়ে থাকবে (লগ স্টেটমেন্টগুলি নিয়ন্ত্রণের বাইরে থাকবে)।


উভয় সংজ্ঞা http://en.wikedia.org/wiki/Type_system থেকে । এটি আমার চেয়ে ভাল বলেছে।


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

3
আপনার মন্তব্য "// না i = ((অ্যারে) ডেটা)। দৈর্ঘ্য বা অ্যারে myArr = (অ্যারে) ডেটা;" ডায়নামিক টাইপিংয়ের সাথে আসলেই কিছু করার দরকার নেই, কারণ ডেটা অ্যারে-নেস সংকলন সময়ে প্রমাণযোগ্য। একটি স্ট্যাটিকালি টাইপ করা ভাষা উদাহরণ থেকে প্রাপ্ত জ্ঞান প্রচার করতে পারে।
পিটার টেলর

@ পিটার টেইলর, আমি মনে করি এটি সাধারণ ক্ষেত্রে সত্য, আপনি কি এমন কিছু জানেন? এটি ডায়নামিক টাইপিংয়ের সাথে সম্পর্কিত যে কোনও ifব্লক ব্যবহৃত হয় বা আরও কিছু জটিল (এমনকি রানটাইম বা গতিশীল) যুক্তিযুক্ত না কেন, পরবর্তী লাইনটি আইনী এবং ত্রুটি থেকে নিরাপদ থাকবে।
নিকোল

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

1
@ পিটার টেইলর সঠিক। ডায়নামিক টাইপিংয়ের অনেকগুলি সুবিধাগুলি হাস্কেল, স্কেলা বা এমনকি কিছু ক্ষেত্রে সি # এর মতো আরও ভাল স্ট্যাটিক টাইপিং সিস্টেমগুলির সাথে ভাষায় পাওয়া যায়। আমি বলব গতিশীল টাইপিংয়ের প্রধান সুবিধা হ'ল এইচটিএমএল ডিওমের মতো অন্তর্নিহিত টাইপলেস জিনিসগুলির সাথে কাজ করে। নোড.এ্যাটটারের পরিবর্তে কেন নোড ["অ্যাট্রি"] লিখবেন? এগুলি সর্বদা রানটাইমের সময়ে যাইহোক সমাধান করা হয়।
ম্যাট ওলেনিক

7

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

সি হ'ল সর্বাধিক বিখ্যাত দুর্বলভাবে টাইপ করা ভাষা এবং এটি কোনও রান টাইম চেকিং সম্পাদন করে না বা ভেরিয়েবলের ধরণের টাইম চেক সংকলন করে না। সারাংশ আপনি একটি কাস্ট করতে পারেন char *একটি থেকে int *এবং ভাষা পরোয়া না। তাহলে আপনি এই কাজ করবেন কেন?

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

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

এটি বলেছে, বেশিরভাগ ক্ষেত্রে একটি শক্তিশালী টাইপ সিস্টেম থাকে যা হয় সময় চেক করা সংকলন হয় বা রানটাইম চেক করা তার ব্যথার চেয়ে প্রায়শই সহায়তা করে।


2
আমি দেখতে পাচ্ছি না কেন দৃ strongly়-টাইপযুক্ত ভাষা সি এর মতো দক্ষতার সাথে সংকলন করতে পারে না তবে সংকলকটি আরও জটিল হওয়া উচিত।
9-10

2
সি ++ এমন একটি ভাষার উদাহরণ। সি ++ তে সমস্ত ধরণের চেকিং সংকলন সময়ে করা হয়, এবং রান টাইমে কোনও কিছুই করা হয় না ... আপনি আরটিটিআই সক্ষম করেছেন ততক্ষণ।
বেরিন লরিটস্ক 20'11

2
নিশ্চিত হতে পারছি না আমি এই কর্মক্ষমতা যুক্তি সাথে একমত, কিন্তু এটা হয় একটি আকর্ষণীয় দৃশ্য।
মার্টিন বা

2

দুর্বল টাইপিং সাধারণত newbies উপলব্ধি করা সহজ, উদাহরণস্বরূপ এক্সেল, জাভাস্ক্রিপ্ট এবং vbscript এর মতো জিনিসগুলিতে। আপনি সম্ভাব্য ত্রুটিগুলির জন্য কিছু বিকাশের গতিও বাণিজ্য করেন।

বিষয়টিতে ভাল নিবন্ধ: শক্তিশালী টাইপিং বনাম স্ট্রং টেস্টিং


1
আমি মনে করি না দুর্বলভাবে টাইপ করা ভাষা এবং নবাগত বন্ধুত্বপূর্ণ ভাষার মধ্যে একটি শক্তিশালী যোগাযোগ রয়েছে। রুবি এবং পাইথন দৃ strongly়ভাবে টাইপ করা হয় এবং সাধারণত নবাগত বন্ধুত্বপূর্ণ বলে বিবেচিত হয়। সি দুর্বলভাবে টাইপ করা হয় এবং সাধারণত নবাগত বৈরী হিসাবে বিবেচিত হয়।
sepp2k

না, সাধারণভাবে ভাষা নয়, আমি কেবল টাইপিংয়ের কথা বলছিলাম
হোমদে

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

3
@ এমসিএল: স্থির / গতিশীল বা শক্তিশালী / দুর্বল টাইপিংয়ের সাথে এর কোনও যোগসূত্র নেই। প্রকার ঘোষনা করা সুস্পষ্ট / অন্তর্নিহিত টাইপিং সম্পর্কে।
Jörg ডব্লু মিট্টাগ

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