StaDyn (programming language)
سٹاڈائن. NET پلیٹ فارم کے لیے ایک آبجیکٹ پر مبنی عمومی مقصد کی پروگرامنگ زبان ہے جو ایک ہی پروگرامنگ زبان میں جامد اور متحرک ٹائپنگ دونوں کی حمایت کرتی ہے۔ اسٹیڈن مرتب متحرک طور پر ٹائپ شدہ کوڈ کے لیے ٹائپ کی معلومات جمع کرتا ہے۔ اس قسم کی معلومات کو تالیف کے وقت ٹائپ کی غلطیوں کا پتہ لگانے اور اہم اصلاح انجام دینے کے لیے استعمال کیا جاتا ہے۔ اس مقصد کے لیے، یہ قسم کی تعمیر نو (اندازہ)، بہاؤ حساس اقسام، اتحاد اور چوراہے کی اقسام، رکاوٹ پر مبنی ٹائپنگ، عرف تجزیہ اور طریقہ کار کی تخصص فراہم کرتا ہے۔ اس کا پہلا پروٹو ٹائپ 2007 میں C #3 کی ترمیم کے طور پر نمودار ہوا۔ سی #کے برعکس، قسم کے تخمینے کو ور کو ایک نئی قسم کے طور پر شامل کرکے سپورٹ کیا گیا تھا، جو صرف ابتدائی مقامی متغیرات کی وضاحت کے لیے ور پیش کرتا ہے۔ فلو حساس قسم کے وار حوالہ جات کا اندازہ مرتب کرنے والے کے ذریعے لگایا جاتا ہے، جو ٹائپ سیف ڈک ٹائپنگ فراہم کرتا ہے۔ جب پروگرامر کے لیے زیادہ نرم نقطہ نظر کی ضرورت ہوتی ہے، تو وار کے بجائے ڈائنامکٹائپ استعمال کیا جا سکتا ہے۔ اگرچہ ٹائپ کا اندازہ اب بھی انجام دیا جاتا ہے، متحرک حوالہ جات متحرک زبانوں میں ان کے قریب ہوتے ہیں۔ اسٹا ڈائن کو اوویڈو یونیورسٹی کے فرانسسکو اورٹن نے ڈیزائن کیا ہے۔ اس زبان کو کمپیوٹیشنل ریفلیکشن ریسرچ گروپ کے مختلف اراکین نے لاگو کیا ہے، جن میں فرانسسکو اورٹن کے علاوہ میگوئل گارسیا، جوس بالٹاسار گارسیا پیریز-شوفیلڈ اور جوس کوئروگا شامل ہیں۔ اسٹاڈائن نام جامد اور متحرک کا ایک مجموعہ ہے، جو جامد اور متحرک ٹائپنگ دونوں کے فوائد فراہم کرنے کے اپنے مقصد کی نشاندہی کرتا ہے۔ مختلف اقسام کے کوڈ کے نمونے متغیرات متحرک زبانوں کی طرح، متغیرات ایک ہی دائرہ کار میں مختلف اقسام کے ہو سکتے ہیں: سسٹم کا استعمال کرتے ہوئے ؛ کلاس پروگرام {پبلک اسٹیٹک وایڈ مین () {Console.Write ("نمبر:") ؛ وار ایج = Console.In.ReadLine () ؛ Console.WriteLine ("ہندسوں: + age.Length) ؛ عمر = Convert.ToInt32 (عمر) ؛ عمر + + ؛ Console.WriteLine (" سالگرہ مبارک ہو، آپ اب "+ عمر +" سال کے ہو گئے ہیں۔ ") ؛ int لمبائی = age.Length ؛// * مرتب کرنے والی غلطی} عمر کے متغیر کو پہلے سٹرنگ کے طور پر اندازہ لگایا جاتا ہے، لہذا اس کی لمبائی کی خاصیت حاصل کرنا محفوظ ہے۔ پھر، یہ ایک عدد رکھتا ہے، لہذا عمر + + ایک درست اظہار ہے۔ مرتب کرنے والا آخری سطر میں ایک غلطی کا پتہ لگاتا ہے، کیونکہ لمبائی اب عمر کے لحاظ سے فراہم نہیں کی جاتی ہے۔ تیار کردہ کوڈ عمر کی نمائندگی کرنے کے لیے ایک واحد آبجیکٹ متغیر کا استعمال نہیں کرتا، بلکہ دو مختلف متغیرات استعمال کرتا ہے جن کی اقسام سٹرنگ اور انٹی ہیں۔ یہ ایس ایس اے فارم کا حساب لگانے کے لیے الگورتھم میں ترمیم کے ساتھ حاصل کیا جاتا ہے۔ یہ تیار کردہ کوڈ کو زیادہ موثر بناتا ہے، کیونکہ رن ٹائم قسم کے تبادلوں کی ضرورت نہیں ہے۔ بہاؤ حساس اقسام وار اور متحرک متغیرات بہاؤ حساس اقسام کو برقرار رکھ سکتے ہیں: سسٹم کا استعمال کرتے ہوئے ؛ کلاس پروگرام {پبلک اسٹیٹک وایڈ مین (سٹرنگ [] آرگس) {ور استثناء ؛ اگر (args.Length> 0) استثناء = نیا ایپلیکیشن استثناء ("ایک ایپلیکیشن استثناء"۔ ") ؛ بصورت دیگر استثناء = نیا سسٹم استثناء (" ایک سسٹم استثناء۔ ") ؛ Console.WriteLine (exception.Message) ؛}} میسج پراپرٹی کو استثنی سے حاصل کرنا محفوظ ہے کیونکہ ایپلیکیشن ایکسپشن اور سسٹم ایکسپشن دونوں اس پراپرٹی کو فراہم کرتے ہیں۔ بصورت دیگر، مرتب کرنے میں ایک غلطی دکھائی دیتی ہے۔ اس طرح، اسٹاڈائن ایک ٹائپ سیف جامد ڈک ٹائپنگ سسٹم فراہم کرتا ہے۔ مندرجہ ذیل پروگرام میں: سسٹم کا استعمال کرتے ہوئے ؛ کلاس پروگرام {پبلک اسٹیٹک وایڈ مین (سٹرنگ [] آرگس) {ور ایکسپشن ؛ سوئچ (args.Length) {کیس 0: ایکسپشن = نیا ایپلیکیشن ایکسپشن ("ایک ایپلیکیشن ایکسپشن")۔ ") ؛ بریک ؛ کیس 1: استثناء = نیا سسٹم استثناء (" ایک سسٹم استثناء۔ ") ؛ بریک ؛ ڈیفالٹ: استثنی =" یہ مستثنی نہیں ہے۔ "؛ بریک ؛} Console.WriteLine (exception.Message) ؛// * ور کے ساتھ مرتب کرنے کی غلطی، لیکن متحرک Console.WriteLine (exception.Unknown) کے ساتھ نہیں ؛// * مرتب کرنے کی غلطی} پیغام کی خاصیت سٹرنگ کے ذریعہ فراہم نہیں کی گئی ہے، لہذا exception.Message کے لیے مرتب کرنے کی غلطی دکھائی گئی ہے۔ تاہم، اگر ہم مستثنی کو متحرک قرار دیتے ہیں، تو پچھلے پروگرام کو مرتب کرنے والا قبول کرتا ہے۔ متحرک زبانوں کے ذائقہ کی پیروی کرتے ہوئے متحرک ور سے زیادہ نرم ہے۔ تاہم، جامد قسم کی جانچ اب بھی کی جاتی ہے۔ یہ کوڈ کی آخری لائن میں دکھایا گیا ہے، جہاں مرتب کرنے والا exception.Unknown کے لیے ایک غلطی دکھاتا ہے یہاں تک کہ اگر رعایت کو متحرک قرار دیا جائے۔ اس کی وجہ یہ ہے کہ تین ممکنہ اقسام (ایپلیکیشن ایکسپشن، سسٹم ایکسپشن اور سٹرنگ) میں سے کوئی بھی نامعلوم پیغام کی حمایت نہیں کرتا ہے۔ اگرچہ متحرک اور ور اقسام کو واضح طور پر محفوظ یا زیادہ نرم قسم کی جانچ حاصل کرنے کے لیے استعمال کیا جا سکتا ہے، لیکن سنگل ور حوالہ جات کی حرکیات کو کمانڈ لائن آپشنز، ایکس ایم ایل کنفیگریشن فائلوں اور ویژول اسٹوڈیو کے لیے ایک پلگ ان کے ساتھ بھی تبدیل کیا جا سکتا ہے۔ فیلڈز وار اور متحرک اقسام کی قسم کا تخمینہ آبجیکٹ فیلڈز کے طور پر استعمال کیا جا سکتا ہے: کلاس ریپر {پرائیویٹ وار ایٹریبیوٹ ؛ پبلک ریپر (وار ایٹریبیوٹ) {this.attribute = ایٹریبیوٹ ؛} پبلک ور حاصل کریں () {ریٹرن ایٹریبیوٹ ؛} پبلک وایڈ سیٹ (وار ایٹریبیوٹ) {this.attribute = ایٹریبیوٹ ؛} کلاس ٹیسٹ {پبلک جامد وایڈ مین () {سٹرنگ اے سٹرنگ ؛ انٹیٹ اے انٹ ؛ ریپر ریپر = نیا ریپر ("ہیلو") ؛ اے اسٹرنگ = wrapper.get () ؛ اے انٹ = wrapper.get () ؛// * کمپائلر ایرر wrapper.set (3) ؛ اے اسٹرنگ = wrapper.get ہر بار جب ہم سیٹ میتھڈ کو کال کرتے ہیں، تو ایٹریبیوٹ کی قسم کا اندازہ دلیل کی قسم کے طور پر لگایا جاتا ہے۔ ہر آبجیکٹ میں ممکنہ طور پر مختلف قسم کی خاصیت ہوتی ہے، لہذا اس کی قسم پوری کلاس کے بجائے ہر ایک مثال کے لیے محفوظ کی جاتی ہے۔ اس طرح، مندرجہ بالا کوڈ میں اشارہ کردہ دو لائنیں تالیف کی غلطیوں کی اطلاع دیتی ہیں۔ اس رویے کی حمایت کے لیے ایک قسم پر مبنی عرفی تجزیہ الگورتھم نافذ کیا جاتا ہے۔ رکاوٹوں پر مبنی اقسام آئیے مندرجہ ذیل طریقہ کار کا تجزیہ کریں: پبلک اسٹیٹک وار اپر (وار پیرامیٹر) {ریٹرن parameter.ToUpper () ؛} پیرامیٹر کی قسم اور فنکشن ریٹرن ویلیو کا اندازہ مرتب کرنے والے کے ذریعے لگایا جاتا ہے۔ اس مقصد کے لیے، اوپری طریقہ کار کی قسم میں ایک رکاوٹ شامل کی جاتی ہے: دلیل کو بغیر کسی پیرامیٹرز کے ٹو اپر طریقہ فراہم کرنا چاہیے۔ ہر دعوت پر، رکاوٹ کی جانچ کی جائے گی۔ مزید برآں، اوپری کی واپسی کی قسم کا اندازہ دلیل کے ذریعے نافذ کردہ متعلقہ ٹو اپر طریقہ کار کی واپسی کی قسم کے طور پر لگایا جائے گا۔ پروگرامر پیرامیٹر کا اعلان کرنے کے لیے وار یا ڈائنامک کا استعمال کر سکتا ہے، طریقہ کار کی دعوت پر ٹائپ چیکنگ کرنے کے طریقے کو تبدیل کر سکتا ہے۔ آئیے فرض کریں کہ اوپری طرف منتقل کی گئی دلیل ایک بہاؤ حساس قسم رکھتی ہے (مثال کے طور پر، اوپر کے کوڈ میں ایپلیکیشن ایکسپشن، سسٹم ایکسپشن یا سٹرنگ ایکسپشن متغیر)۔ وار کے ساتھ، دلیل کی تمام ممکنہ اقسام کو ٹوپر فراہم کرنا چاہیے ؛ متحرک کے ساتھ، کم از کم ایک قسم کو ٹوپر فراہم کرنا چاہیے۔ رن ٹائم کارکردگی اسٹاڈائن کے ذریعہ جمع کردہ ٹائپ کی معلومات کو تیار کردہ کوڈ میں اہم اصلاح انجام دینے کے لیے استعمال کیا جاتا ہے: ٹائپ کے معائنے اور ٹائپ کاسٹ کی تعداد کم ہو جاتی ہے، عکاسی سے گریز کیا جاتا ہے، بار بار اقسام کو کیش کیا جاتا ہے، اور رکاوٹوں والے طریقے خصوصی ہوتے ہیں۔ تمام اصلاحات کا مقصد رن ٹائم پر انجام دی جانے والی ٹائپ چیکنگ کارروائیوں کی تعداد کو کم کرنا ہے، جو کہ زیادہ تر متحرک زبانوں کی کارکردگی کا بنیادی جرمانہ ہے۔ ان میں سے بہت سے قسم کے چیک اسٹا ڈائن مرتب کرنے والے کے ذریعے پہلے کیے جاتے ہیں۔ اسٹاڈائن کی رن ٹائم کارکردگی کا تفصیلی جائزہ اس میں تفصیل سے دیا گیا ہے۔ او سی اے ایم ایل سٹرانگ ٹاک بو حوالہ جات بیرونی روابط سرکاری ویب سائٹ گٹ ہب ریپوزیٹری کمپیوٹیشنل ریفلیکشن ریسرچ گروپ پروگرامنگ زبانیں۔ نیٹ پروگرامنگ زبانیں کلاس پر مبنی پروگرامنگ زبانیں مفت مرتب اور ترجمان آبجیکٹ پر مبنی پروگرامنگ زبانیں پروگرامنگ زبانیں 2007 میں تیار کردہ سافٹ ویئر ایم آئی ٹی لائسنس کا استعمال کرتے ہوئے اسٹیٹکلی ٹائپڈ پروگرامنگ زبانیں ڈائنامکلی ٹائپڈ پروگرامنگ زبانیں 2007 سافٹ ویئر ہسپانوی ایجادات