Magik (programming language)
میجک ایک آبجیکٹ پر مبنی پروگرامنگ زبان ہے جو متعدد وراثت اور پولیمرفزم کی حمایت کرتی ہے، اور یہ متحرک طور پر ٹائپ کی جاتی ہے۔ اسے 1989 میں سمال ورلڈ جیوگرافیکل انفارمیشن سسٹم (جی آئی ایس) کے حصے کے طور پر سمال ورلڈ سسٹمز لمیٹڈ کے آرتھر چانس نے ڈیزائن اور نافذ کیا تھا۔ 2000 میں سمال ورلڈ کے حصول کے بعد، میجک اب جی ای انرجی کے ذریعہ فراہم کیا جاتا ہے، جو اب بھی اس کے سمال ورلڈ ٹیکنالوجی پلیٹ فارم کے حصے کے طور پر ہے۔ میجک (متاثر کن میجک) اصل میں 1990 میں متعارف کرایا گیا تھا اور اسے سالوں کے دوران بہتر اور اپ ڈیٹ کیا گیا ہے۔ اس کا موجودہ ورژن 5.2 ہے۔ جولائی 2012 میں، میجک ڈویلپرز نے اعلان کیا کہ وہ جاوا ورچوئل مشین پر میجک زبان کو پورٹ کرنے کے عمل میں ہیں۔ اوریکل کارپوریشن نے اسی سال نومبر میں کامیاب پورٹنگ کی تصدیق کی۔ سمال ٹاک میجک کے ساتھ مماثلت خود اسمال ٹاک کے ساتھ اس کی زبان کی خصوصیات اور اس کے فن تعمیر کے لحاظ سے کچھ مماثلت رکھتی ہے: میجک زبان کو بائٹ کوڈز میں مرتب کیا گیا ہے جس کی تشریح میجک ورچوئل مشین کرتی ہے۔ میجک ورچوئل مشین مائیکروسافٹ ونڈوز، یونکس اور لینکس کے مختلف ذائقوں سمیت کئی پلیٹ فارمز پر دستیاب ہے۔ میجک کنسول پر مبنی ہے اور کوڈ کو فلائی پر اس وقت بھی تبدیل کیا جا سکتا ہے جب کوئی ایپلیکیشن چل رہی ہو۔ کنسول کو میجک کوڈ کو چلانے اور نتائج دیکھنے کے لیے بھی استعمال کیا جا سکتا ہے۔ مرتب شدہ کوڈ ایک واحد فائل میں محفوظ کیا جاتا ہے جسے امیج فائل کہا جاتا ہے۔ ہر تصویری فائل میں مرتب کردہ بائٹ کوڈز اور سیشن کی حالت (مثال کے طور پر متغیر اقدار) ہوتی ہے جب تصویر کو آخری بار محفوظ کیا گیا تھا۔ زبان کی خصوصیات تبصرے میجک کوڈ کے حصوں کو تبصرے کے طور پر نشان زد کرنے کے لیے #ٹوکن کا استعمال کرتا ہے: #یہ ایک تبصرہ ہے۔ تفویض میجک تفویض کرنے کے لیے <<آپریٹر کا استعمال کرتا ہے: a <<1.234 b <<b + a c <<<"foo" + "بار" #کونکیٹ سٹرنگز وضاحت کے لیے، اس اشارے کو "a بن جاتا ہے 1.234" یا "b بن جاتا ہے b جمع a" کے طور پر پڑھا جاتا ہے۔ یہ اصطلاح تفویض کو موازنہ سے الگ کرتی ہے۔ میجک اس آپریٹر کے ایک کمپریسڈ تغیر کو بھی سپورٹ کرتا ہے جو C: b + <<a #کے مساوی b <<b + a میں پائے جانے والوں کی طرح کام کرتا ہے۔ ایک متغیر کو پرنٹ کرنے کے لیے آپ درج ذیل کمانڈ a <<"ہیلو" لکھیں (a) علامتوں کے ساتھ ساتھ روایتی ڈیٹا کی اقسام جیسے انٹیجرز، فلوٹس اور سٹرنگز میجک بھی علامتوں کو لاگو کرتے ہیں۔ علامتیں ایک خاص ٹوکن ڈیٹا ٹائپ ہیں جو اشیاء کی منفرد شناخت کے لیے پورے میجک میں بڑے پیمانے پر استعمال ہوتی ہیں۔ ان کی نمائندگی کالون کے ذریعے کی جاتی ہے جس کے بعد حروف کی ایک تار آتی ہے۔ عمودی بار کردار کا استعمال کرتے ہوئے علامتوں سے بچا جا سکتا ہے۔ مثال کے طور پر: a <<: ہیلو #جب بھی: ہیلو کا سامنا ہوتا ہے، تو یہ وہی مثال ہے جس میں b <<: |hello ورلڈ | ڈائنامک ٹائپنگ میجک متغیرات ٹائپ نہیں کیے جاتے ہیں جیسا کہ وہ C #میں ہیں اور رن ٹائم پر مختلف اشیاء کا حوالہ دے سکتے ہیں۔ میجک میں ہر چیز ایک آبجیکٹ ہے (آبجیکٹ اور ابتدائی اقسام جیسے انٹیجرز کے درمیان کوئی فرق نہیں ہے): ایک <<1.2 #فلوٹنگ پوائنٹ نمبر متغیر 'a' a <<1.2 "#کو بعد میں تفویض کیا جاتا ہے، ایک سٹرنگ متغیر 'a' کو تفویض کی جاتی ہے۔ مثالوں کا استعمال کرتے ہوئے میجک میں آبجیکٹ کو لاگو کیا جاتا ہے۔ مثالیں دیگر پروگرامنگ زبانوں جیسے جاوا کی کلاسوں سے مماثلت رکھتی ہیں، لیکن اہم اختلافات کے ساتھ۔ میجک متعدد وراثت، اور مکسین (جو بغیر کسی ڈیٹا کے فعالیت کو نافذ کرتے ہیں) کی حمایت کرتا ہے۔ نئی مثالیں موجودہ مثال کی کلوننگ کے ذریعے بنائی جاتی ہیں (جو عام طور پر مثال ہوگی لیکن ہونا ضروری نہیں ہے)۔ نئی مثالیں ڈیف _ سلاٹڈ _ ایمپلر () بیان کا استعمال کرتے ہوئے بنائی جاتی ہیں، مثال کے طور پر: ڈیف _ سلاٹڈ _ ایمپلر (: مائی _ آبجیکٹ، {{: سلاٹ _ اے، 34}، {: سلاٹ _ بی، "ہیلو"}، {: پیرنٹ _ آبجیکٹ _ اے،: پیرنٹ _ آبجیکٹ _ بی}) یہ کوڈ ٹکڑا مائی _ آبجیکٹ نامی ایک نئی مثال کی وضاحت کرے گا جس میں دو سلاٹ (یا فیلڈز) ہیں جسے سلاٹ _ اے (34 سے پہلے شروع کیا گیا) اور سلاٹ _ بی ("ہیلو" سے پہلے شروع کیا گیا) جو کہ پیرنٹ _ آبجیکٹ _ اے اور پیرنٹ _ آبجیکٹ _ بی نامی دو موجودہ مثالوں سے وراثت میں ملتا ہے۔ موازنہ میجک موازنہ کے لیے تمام معمول کے منطقی آپریٹرز (=، <، <=،>،> =، ~ =/<>) کے ساتھ ساتھ کچھ غیر معمولی آپریٹرز کو بھی لاگو کرتا ہے۔ The _ is and _ ist آپریٹرز کا استعمال اقدار کے بجائے اشیاء، یا آبجیکٹ حوالہ جات کی مخصوص مثالوں کا موازنہ کرنے کے لیے کیا جاتا ہے۔ مثال کے طور پر: a <<"ہیلو" b <<"ہیلو" a = b #واپس کرتا ہے سچ (_ سچ) کیونکہ a اور b کی اقدار برابر ہیں a _ is b #واپس کرتا ہے غلط (_ غلط) کیونکہ a وہی مثال نہیں ہے جس طرح b a <<"ہیلو" b <<a = b #واپس کرتا ہے سچ (_ سچ) کیونکہ a اور b کی اقدار برابر ہیں a _ is b #واپس کرتا ہے سچ (_ سچ) کیونکہ b کو a کی قیمت کے بجائے ایک ہی شے کی مخصوص مثال تفویض کی گئی تھی۔ طریقوں کو اسٹیٹمنٹ _ میتھڈ اور _ اینڈ میتھڈ: _ میتھڈ my_object.my_method (a، b) _ ریٹرن a + b _ اینڈ میتھڈ کا استعمال کرتے ہوئے مثالوں پر بیان کیا جاتا ہے۔ یہ دو نئے طریقوں () (ایک نئی مثال بنانے کے لیے) اور init () (ایک مثال شروع کرنے کے لیے) کی فراہمی کا رواج ہے۔ #نیا طریقہ _ طریقہ person.new (نام، عمر) _ واپسی _clone.init (نام، عمر) _ اینڈ میتھوڈ #ابتدائی طریقہ۔ پرائیویٹ _ میتھڈ person.init (نام، عمر) #پیرنٹ امپلیمینٹیشن کو کال کریں۔ _super.init (نام، عمر) #سلاٹس کو شروع کریں۔ . نام <<نام. عمر <<عمر _ واپسی _ خود _ اختتامی طریقہ کلون شخص آبجیکٹ کی فزیکل کاپی بناتا ہے۔ سپر سٹیٹمنٹ آبجیکٹ کو پیرنٹ مثالی پر کسی طریقہ کار کے نفاذ کی درخواست کرنے کی اجازت دیتا ہے۔ آبجیکٹ خود بیان کا استعمال کرتے ہوئے اپنا حوالہ دے سکتے ہیں۔ کسی آبجیکٹ کے سلاٹس تک رسائی حاصل کی جاتی ہے اور ڈاٹ نوٹیشن کا استعمال کرتے ہوئے تفویض کیا جاتا ہے۔ وہ طریقے جو آبجیکٹ کے پبلک انٹرفیس کا حصہ نہیں ہیں انہیں پرائیویٹ سٹیٹمنٹ کا استعمال کرتے ہوئے پرائیویٹ نشان زد کیا جا سکتا ہے۔ نجی طریقوں کو صرف سیلف، سپر اور کلون کے ذریعے بلایا جا سکتا ہے۔ اختیاری دلائل کو اختیاری بیان کا استعمال کرتے ہوئے اعلان کیا جا سکتا ہے۔ اختیاری دلائل جو منظور نہیں ہوتے ہیں وہ میجک کے ذریعہ خصوصی آبجیکٹ _ ان سیٹ (صفر کے مساوی) کو تفویض کیے جاتے ہیں۔ جمع کرنے کا بیان اختیاری دلائل کی فہرست کا اعلان کرنے کے لیے استعمال کیا جا سکتا ہے۔ ۔ ہیں دیتے اجازت کی تکرار بیانات اینڈلوپ اور لوپ _ فار، _ اوور، _ فار جبکہ میں میجک تکرار _ اینڈمیتھڈ) _ اینڈمیتھڈ _ ویلیوز (_ میتھڈ my_object.my_method بلاک مقامی s <<0 _ مقامی i <<0 _ جبکہ i <= 100 _ لوپ s + <<i i + <<1 _ اینڈ لوپ>> s _ اینڈ بلاک یہاں، جبکہ کو _ لوپ اور _ اینڈ لوپ کے ساتھ ملایا جاتا ہے۔ میتھڈ my_object.my_method (جمع اقدار) کل <<0.0 _ for a _ over values.elements () _ لوپ کل + <<a _ एन्डلوپ _ ریٹرن کل _ اینڈ میتھوڈ m <<my_object.new () x <<m.my_method (1,0,2,3,4) #x = 10.0 یہاں values.elements () ایک تکرار ہے جو اقدار کو دہرانے میں مدد کرتا ہے۔ میجک جنریٹر کے طریقوں کو آئیٹریٹر کے طریقے کہا جاتا ہے۔ نئے تکرار کے طریقوں کی وضاحت _ iter اور _ लूप باڈی بیانات کا استعمال کرتے ہوئے کی جا سکتی ہے: a _ اوور _self.elements () _ لوپ _ اگر a.even کے لیے _ iter _ طریقہ my_object.even_elements () _ _ is _ ट्रू _ تب _ لوپ باڈی (a) _ اینڈف _ اینڈلوپ _ اینڈمیتھوڈ طریقہ کار میجک بھی افعال کی حمایت کرتا ہے جسے طریقہ کار کہا جاتا ہے۔ طریقہ کار بھی اعتراضات ہیں اور ان کا اعلان _ پروک اور _ اینڈپروک بیانات کا استعمال کرتے ہوئے کیا جاتا ہے۔ طریقہ کار متغیرات کو تفویض کیے جاتے ہیں جنہیں پھر طلب کیا جا سکتا ہے: میرا طریقہ کار <<_ پروک @my_procedure (a, b, c) _ ریٹرن a + b + c _ اینڈپروک x <<میرا طریقہ کار (1,2,3) #x = 6 باقاعدہ اظہار جادو کی حمایت کرتا ہے// باقاعدہ اظہار نحو: _ اگر/ہیلو, \s (\w) +!/. میچ؟ ("ہیلو، جادو!") پھر لکھیں ("میچ ملا!") اینڈف اور ریجیکس:/سوی ([0-9] +)-([0-9] +) میں گروپوں کو پکڑنے کے لیے۔ */. Replaces _ all ("سوئ 65456-324 sss"، "$1") #"65456"/سوئ ([0-9] +)-([0-9] +)۔ */. प्रतिस्थापन _ تمام ("سوئ 65456-324 ایس ایس ایس"، "$2") #"324" ایچ ٹی ٹی پی لائبریری میجک ایچ ٹی ٹی پی لائبریری کے ذریعے ایچ ٹی ٹی پی یا ایچ ٹی ٹی پی ایس کی درخواستیں کرنے کی حمایت کرتا ہے، نیچے دی گئی مثالیں دیکھیں: میجیکھٹ پی <<http.new () magikhttp.url ("https://www.google.com"). حاصل کریں () magikhttp.url ("https://www.google.com"). پوسٹ ({"یوزر-ایجنٹ"، "بوٹ"}، "کچھ ڈیٹا") زبان کے سوالات کیونکہ میجک اصل میں انگلینڈ میں تیار کیا گیا تھا، بنیادی چھوٹی دنیا کی لائبریریوں میں طریقوں کی ہجے برطانوی انگریزی کا استعمال کرتے ہوئے کی جاتی ہے۔ مثال کے طور پر: "شروع کریں" استعمال کریں، نہ کہ "شروع کریں"۔ دیگر پروگرامنگ زبانوں کی طرح میجک کے بھی مجموعے ہیں۔ ان میں درج ذیل شامل ہیں: سادہ ویکٹر رسی ہیش ٹیبل پراپرٹی لسٹ مساوات سیٹ بیگز ہیلو ورلڈ مثال درج ذیل میجک میں لکھے گئے ہیلو ورلڈ پروگرام کی ایک مثال ہے: لکھیں ("ہیلو ورلڈ!") حوالہ جات بیرونی روابط سمال ورلڈ پروڈکٹ سویٹ ٹیکنالوجی ایم ڈی ٹی-جی ای سمال ورلڈ جی آئی ایس ڈویلپرز کے لیے میجک ڈویلپمنٹ ٹولز آئی ڈی ای اوپن سورس (سورس فورج) زبان فورم پوسٹ میجک ٹیکنیکل پیپر نمبر۔ 5-سمال ورلڈ میجک جی ای سمال ورلڈ کا ایک جائزہ، میجک ڈویلپرز کے لیے ایمیکس ایکسٹینشنز سمال ورلڈ میجک پروگرامنگ زبان کے لیے ویژول اسٹوڈیو کوڈ ایکسٹینشن۔ کلاس پر مبنی پروگرامنگ زبانیں متحرک طور پر ٹائپ شدہ پروگرامنگ زبانیں