Strong and weak typing
کمپیوٹر پروگرامنگ میں، پروگرامنگ زبانوں کو بول چال میں درجہ بند کرنے کے بہت سے طریقوں میں سے ایک یہ ہے کہ آیا زبان کا ٹائپ سسٹم اسے مضبوطی سے ٹائپ کرتا ہے یا کمزور ٹائپ (ڈھیلے ٹائپ) کرتا ہے۔ تاہم، اصطلاحات کا کیا مطلب ہے اس کی کوئی قطعی تکنیکی تعریف نہیں ہے اور مختلف مصنفین اصطلاحات کے مضمر معنی اور مرکزی دھارے میں شامل پروگرامنگ زبانوں کے ٹائپ سسٹمز کی "طاقت" کی متعلقہ درجہ بندی کے بارے میں متفق نہیں ہیں۔ اس وجہ سے، جو مصنفین ٹائپ سسٹمز کے بارے میں غیر واضح طور پر لکھنا چاہتے ہیں وہ اکثر "ٹائپ سیفٹی" جیسے مخصوص تاثرات کے حق میں "مضبوط ٹائپنگ" اور "کمزور ٹائپنگ" کی اصطلاحات کو چھوڑ دیتے ہیں۔ عام طور پر، مضبوطی سے ٹائپ کی گئی زبان میں مرتب کرنے کے وقت ٹائپنگ کے سخت اصول ہوتے ہیں، جس کا مطلب ہے کہ تالیف کے دوران غلطیاں اور مستثنیات ہونے کا امکان زیادہ ہوتا ہے۔ ان میں سے زیادہ تر اصول متغیر تفویض، فنکشن ریٹرن ویلیوز، طریقہ کار کے دلائل اور فنکشن کالنگ کو متاثر کرتے ہیں۔ متحرک طور پر ٹائپ کی گئی زبانیں (جہاں ٹائپ کی جانچ رن ٹائم پر ہوتی ہے) بھی مضبوطی سے ٹائپ کی جا سکتی ہیں۔ متحرک طور پر ٹائپ کی گئی زبانوں میں متغیرات کے بجائے اقدار کی قسمیں ہوتی ہیں۔ کمزور ٹائپ شدہ زبان میں ٹائپنگ کے ڈھیلے اصول ہوتے ہیں اور یہ غیر متوقع یا یہاں تک کہ غلط نتائج پیدا کر سکتی ہے یا رن ٹائم پر مضمر قسم کی تبدیلی انجام دے سکتی ہے۔ متحرک ٹائپ شدہ (عام طور پر "کمزور ٹائپ شدہ") زبانوں کے حامی اس طرح کے خدشات کو حد سے زیادہ سمجھتے ہیں اور یقین رکھتے ہیں کہ جامد ٹائپنگ دراصل مسائل اور ناکارہیوں کا ایک بہت بڑا مجموعہ متعارف کراتی ہے۔ ایک مختلف لیکن متعلقہ تصور لیٹنٹ ٹائپنگ ہے۔ 1974 میں، بی۔ لیسکوف اور ایس۔ زیلس نے ایک مضبوط ٹائپ شدہ زبان کی تعریف اس طرح کی تھی جس میں "جب بھی کسی شے کو کالنگ فنکشن سے کالڈ فنکشن میں منتقل کیا جاتا ہے، تو اس کی قسم کالڈ فنکشن میں اعلان کردہ قسم کے ساتھ مطابقت رکھتی ہے"۔ 1977 میں، کے جیکسن نے لکھا، "مضبوطی سے ٹائپ کی گئی زبان میں ہر ڈیٹا ایریا کی ایک الگ قسم ہوگی اور ہر عمل ان اقسام کے لحاظ سے اپنی مواصلاتی ضروریات کو بیان کرے گا۔" "مضبوط" یا "کمزور" کی تعریفیں زبان کے ڈیزائن کے متعدد مختلف فیصلوں کو "مضبوط" یا "کمزور" ٹائپنگ کا ثبوت کہا گیا ہے۔ ان میں سے بہت سے ٹائپ سیفٹی، میموری سیفٹی، جامد ٹائپ چیکنگ، یا متحرک ٹائپ چیکنگ کی موجودگی یا عدم موجودگی کے طور پر زیادہ درست طریقے سے سمجھے جاتے ہیں۔ "مضبوط ٹائپنگ" عام طور پر پروگرامنگ زبان کی اقسام کے استعمال سے مراد ہے تاکہ کوڈ کے غیر متغیرات کو پکڑا جا سکے، اور اس کی درستگی کو یقینی بنایا جا سکے، اور پروگرامنگ کی غلطیوں کی کچھ کلاسوں کو یقینی طور پر خارج کیا جا سکے۔ اس طرح ان مقاصد کو حاصل کرنے کے لیے بہت سے "مضبوط ٹائپنگ" مضامین استعمال کیے جاتے ہیں۔ مضمر قسم کے تبادلوں اور "ٹائپ پننگ" کچھ پروگرامنگ زبانیں ایک قسم کی قدر کو اس طرح استعمال کرنا آسان بناتی ہیں جیسے کہ یہ دوسری قسم کی قدر ہو۔ اسے بعض اوقات "کمزور ٹائپنگ" کے طور پر بیان کیا جاتا ہے۔ مثال کے طور پر، آہز ماروچ مشاہدہ کرتے ہیں کہ "جبر اس وقت ہوتا ہے جب آپ کے پاس مستحکم طور پر ٹائپ کی گئی زبان ہوتی ہے اور آپ زبان کی نحو خصوصیات کا استعمال کرتے ہوئے ایک قسم کے استعمال کو مجبور کرتے ہیں گویا کہ یہ ایک مختلف قسم ہے (سی میں وایڈ * کے عام استعمال پر غور کریں)۔ جبر عام طور پر کمزور ٹائپنگ کی علامت ہے۔ دوسری طرف تبدیلی مناسب قسم کا بالکل نیا آبجیکٹ بناتی ہے۔ " ایک اور مثال کے طور پر، جی سی سی اسے ٹائپ-پیننگ کے طور پر بیان کرتا ہے اور خبردار کرتا ہے کہ یہ سخت عرفیت کو توڑ دے گا۔ تھیاگو میسیئرا کئی مسائل پر تبادلہ خیال کرتا ہے جو اس وقت پیدا ہو سکتے ہیں جب ٹائپ-پیننگ مرتب کرنے والے کو نامناسب اصلاح کرنے کا سبب بنتی ہے۔ ایسی زبانوں کی بہت سی مثالیں ہیں جو مضمر قسم کے تبادلوں کی اجازت دیتی ہیں، لیکن ٹائپ محفوظ انداز میں۔ مثال کے طور پر، سی + + اور سی #دونوں پروگراموں کو آپریٹرز کی وضاحت کرنے کی اجازت دیتے ہیں تاکہ اچھی طرح سے متعین الفاظ کے ساتھ ایک قدر کو ایک قسم سے دوسری قسم میں تبدیل کیا جا سکے۔ جب ایک C + + مرتب اس طرح کے تبادلے کا سامنا کرتا ہے، تو یہ آپریشن کو فنکشن کال کی طرح ہی پیش کرتا ہے۔ اس کے برعکس، کسی قدر کو سی قسم میں تبدیل کرنا ایک غیر محفوظ عمل ہے جو مرتب کرنے والے کے لیے پوشیدہ ہے۔ اشارے کچھ پروگرامنگ زبانیں اشارے کو اس طرح بے نقاب کرتی ہیں جیسے وہ عددی اقدار ہوں، اور صارفین کو ان پر ریاضی انجام دینے کی اجازت دیتی ہیں۔ ان زبانوں کو بعض اوقات "کمزور ٹائپ شدہ" کہا جاتا ہے، کیونکہ پوائنٹر ریاضی کو زبان کے ٹائپ سسٹم کو بائی پاس کرنے کے لیے استعمال کیا جا سکتا ہے۔ کچھ پروگرامنگ زبانیں غیر ٹیگ شدہ یونینوں کی حمایت کرتی ہیں، جو ایک قسم کی قدر کو اس طرح دیکھنے کی اجازت دیتی ہیں جیسے وہ دوسری قسم کی قدر ہو۔ لوکا کارڈلی کے مضمون ٹائپ فل پروگرامنگ میں، ایک "مضبوط قسم کا نظام" بیان کیا گیا ہے جس میں غیر چیک شدہ رن ٹائم قسم کی غلطی کا کوئی امکان نہیں ہے۔ دوسری تحریروں میں، غیر چیک شدہ رن ٹائم غلطیوں کی عدم موجودگی کو سیفٹی یا ٹائپ سیفٹی کہا جاتا ہے ؛ ٹونی ہور کے ابتدائی مقالے اس پراپرٹی سیکیورٹی کو کہتے ہیں۔ پروگرامنگ زبانوں میں تغیر ان میں سے کچھ تعریفیں متضاد ہیں، دیگر محض تصوراتی طور پر آزاد ہیں، اور پھر بھی دیگر دیگر، زیادہ "لبرل" (کم مضبوط) تعریفوں کے خصوصی معاملات (اضافی رکاوٹوں کے ساتھ) ہیں۔ ان تعریفوں میں وسیع اختلاف کی وجہ سے، زیادہ تر پروگرامنگ زبانوں کے بارے میں دعووں کا دفاع کرنا ممکن ہے کہ وہ یا تو مضبوطی سے یا کمزور ٹائپ کی گئی ہیں۔ مثال کے طور پر: جاوا، پاسکل، اڈا، اور سی کے لیے متغیرات کو ایک اعلان شدہ قسم کی ضرورت ہوتی ہے، اور ریاضی کی اقدار کے واضح کاسٹ کو دیگر ریاضی کی اقسام میں استعمال کرنے کی حمایت کرتے ہیں۔ جاوا، سی #، اڈا، اور پاسکل کو بعض اوقات سی سے زیادہ مضبوطی سے ٹائپ کیا جاتا ہے، یہ دعوی شاید اس وجہ سے ہے کہ سی زیادہ قسم کے مضمر تبادلوں کی حمایت کرتا ہے، اور پوائنٹر کی اقدار کو واضح طور پر کاسٹ کرنے کی اجازت دیتا ہے جبکہ جاوا اور پاسکل نہیں کرتے ہیں۔ جاوا کو پاسکل سے زیادہ مضبوطی سے ٹائپ کیا ہوا سمجھا جا سکتا ہے کیونکہ جاوا میں جامد قسم کے نظام سے بچنے کے طریقے جاوا ورچوئل مشین کے ٹائپ سسٹم کے ذریعے کنٹرول کیے جاتے ہیں۔ C #اور VB.NET اس سلسلے میں جاوا سے ملتے جلتے ہیں، حالانکہ وہ واضح طور پر کوڈ کے حصوں کو "غیر محفوظ سیاق و سباق" میں ڈال کر متحرک قسم کی جانچ کو غیر فعال کرنے کی اجازت دیتے ہیں۔ پاسکل کے ٹائپ سسٹم کو "بہت مضبوط" کے طور پر بیان کیا گیا ہے، کیونکہ کسی صف یا سٹرنگ کا سائز اس کی قسم کا حصہ ہوتا ہے، جس سے کچھ پروگرامنگ کے کام بہت مشکل ہو جاتے ہیں۔ تاہم ڈیلفی اس مسئلے کو حل کرتا ہے۔ سمال ٹاک، روبی، ازگر، اور سیلف سبھی اس معنی میں "مضبوطی سے ٹائپ کیے گئے" ہیں کہ ٹائپنگ کی غلطیوں کو رن ٹائم پر روکا جاتا ہے اور وہ بہت کم مضمر قسم کی تبدیلی کرتے ہیں، لیکن یہ زبانیں جامد قسم کی جانچ کا کوئی استعمال نہیں کرتی ہیں: مرتب کرنے والا قسم کی رکاوٹ کے قوانین کو چیک یا نافذ نہیں کرتا ہے۔ ڈک ٹائپنگ کی اصطلاح اب اس گروپ کی زبانوں کے ذریعہ استعمال ہونے والے متحرک ٹائپنگ کے نمونے کو بیان کرنے کے لیے استعمال ہوتی ہے۔ زبانوں کے Lisp خاندان کو اس معنی میں "مضبوطی سے ٹائپ کیا جاتا ہے" کہ ٹائپنگ کی غلطیوں کو رن ٹائم پر روکا جاتا ہے۔ کچھ Lisp بولیاں جیسے کامن Lisp یا Clojure قسم کے اعلانات کی مختلف شکلوں کی حمایت کرتی ہیں اور کچھ مرتب کرنے والے (CMU کامن Lisp (CMUCL) اور متعلقہ) ان اعلانات کو ٹائپ انفریشن کے ساتھ مل کر استعمال کرتے ہیں تاکہ مختلف اصلاحات اور مرتب کردہ ٹائم ٹائپ چیک کی محدود شکلوں کو فعال کیا جا سکے۔ معیاری ایم ایل، ایف #، او سی اے ایم ایل، ہاسکل، گو اور رسٹ کو مستحکم طور پر ٹائپ چیک کیا جاتا ہے، لیکن مرتب کرنے والا خود بخود زیادہ تر اقدار کے لیے ایک عین مطابق قسم کا اندازہ لگاتا ہے۔ اسمبلی زبان اور فورتھ کو غیر ٹائپ شدہ قرار دیا جا سکتا ہے۔ کوئی قسم کی جانچ نہیں ہے ؛ یہ پروگرامر پر منحصر ہے کہ وہ اس بات کو یقینی بنائے کہ افعال کو دیا گیا ڈیٹا مناسب قسم کا ہے۔ کسی بھی قسم کی تبدیلی کی ضرورت واضح ہے۔ پروگرامنگ زبانوں کا موازنہ بھی دیکھیں ڈیٹا ٹائپ میں ٹائپنگ کے مسائل پر مزید مکمل بحث شامل ہے۔ معاہدہ کے لحاظ سے ڈیزائن (مضمر معاہدہ فارم کے طور پر مضبوط ٹائپنگ) لیٹنٹ ٹائپنگ میموری سیفٹی ٹائپ سیفٹی ٹائپ سسٹم مضبوط ٹائپ شدہ شناختی حوالہ جات ٹائپ سسٹم