Vala (programming language)
والا ایک آبجیکٹ پر مبنی پروگرامنگ زبان ہے جس میں سیلف ہوسٹنگ مرتب ہوتا ہے جو سی کوڈ تیار کرتا ہے اور گوبجیکٹ سسٹم استعمال کرتا ہے۔ والا نحو طور پر سی #سے ملتا جلتا ہے اور اس میں قابل ذکر خصوصیات جیسے گمنام افعال، سگنلز، خصوصیات، جنیرکس، اسسٹڈ میموری مینجمنٹ، استثنی ہینڈلنگ، ٹائپ انفریشن، اور فورچ اسٹیٹمنٹ شامل ہیں۔ اس کے ڈویلپرز، جورگ بلیٹر اور رافایل سینڈرینی، ان خصوصیات کو سادہ سی رن ٹائم میں لانا چاہتے تھے جس میں بہت کم اوور ہیڈ اور کوئی خاص رن ٹائم سپورٹ نہیں تھی۔ براہ راست مشین کوڈ یا اسمبلی زبان میں مرتب کرنے کے بجائے، یہ نچلی سطح کی انٹرمیڈیٹ زبان میں مرتب ہوتا ہے۔ یہ سورس ٹو سورس سی کو مرتب کرتا ہے، جسے پھر کسی دیئے گئے پلیٹ فارم، جیسے جی سی سی یا کلانگ کے لیے سی مرتب کے ساتھ مرتب کیا جاتا ہے۔ مقامی کوڈ لائبریریوں سے فعالیت کا استعمال کرنے کے لیے لائبریری انٹرفیس کی وضاحت کرتے ہوئے واپی فائلیں لکھنے کی ضرورت ہوتی ہے۔ ان انٹرفیس تعریفوں کو لکھنا سی لائبریریوں کے لیے اچھی طرح سے دستاویزی ہے۔ بڑی تعداد میں کتب خانوں کے لیے بائنڈنگ پہلے ہی دستیاب ہیں، بشمول وہ کتب خانے جو جی او آبجیکٹ پر مبنی نہیں ہیں جیسے ملٹی میڈیا لائبریری ایس ڈی ایل اور اوپن جی ایل۔ تفصیل والا ایک پروگرامنگ زبان ہے جو اسکرپٹنگ زبانوں کی اعلی سطح کی بلڈ ٹائم کارکردگی کو نچلی سطح کی پروگرامنگ زبانوں کی رن ٹائم کارکردگی کے ساتھ جوڑتی ہے۔ اس کا مقصد GNOME ڈویلپرز کے لیے جدید پروگرامنگ زبان کی خصوصیات کو بغیر کسی اضافی رن ٹائم کی ضروریات کو نافذ کیے اور C میں لکھی گئی ایپلی کیشنز اور لائبریریوں کے مقابلے میں مختلف ABI کا استعمال کیے بغیر لانا ہے۔ والا کا نحو C #سے ملتا جلتا ہے، جسے بہتر طور پر گوگلجیکٹ ٹائپ سسٹم میں فٹ ہونے کے لیے تبدیل کیا گیا ہے۔ ہسٹری والا کا تصور جورگ بلیٹر نے کیا تھا اور اسے اس نے اور رافایل سینڈرینی نے نافذ کیا تھا، جو سی کے بجائے GNOME ایپلی کیشنز تیار کرنے کے لیے ایک اعلی سطح کے متبادل کی خواہش رکھتے تھے۔ انہیں C #کا نحو اور الفاظ پسند تھے لیکن وہ مونو کا استعمال نہیں کرنا چاہتے تھے، اس لیے انہوں نے مئی 2006 میں ایک مرتب مکمل کیا۔ ابتدائی طور پر، اسے سی کا استعمال کرتے ہوئے بوٹسٹریپ کیا گیا تھا، اور ایک سال بعد (جولائی 2007 میں ورژن 0.1.0 کی ریلیز کے ساتھ)، والا مرتب خود میزبان بن گیا۔ 2021 تک، طویل مدتی حمایت کے ساتھ موجودہ مستحکم ریلیز برانچ 0.48 ہے، اور یہ زبان ایک مستحکم ورژن 1 جاری کرنے کے مقصد کے ساتھ فعال ترقی کے تحت ہے۔ زبان کے ڈیزائن کی خصوصیات والا جی لیب اور اس کے ذیلی ماڈیولز (جی او بجیکٹ، جی موڈیول، جی تھریڈ، جی آئی او) کو بنیادی لائبریری کے طور پر استعمال کرتا ہے، جو زیادہ تر آپریٹنگ سسٹمز کے لیے دستیاب ہے اور پلیٹ فارم آزاد تھریڈنگ، ان پٹ/آؤٹ پٹ، فائل مینجمنٹ، نیٹ ورک ساکٹ، پلگ ان، باقاعدہ تاثرات وغیرہ جیسی چیزیں پیش کرتا ہے۔ والا کا نحو فی الحال جدید زبان کی خصوصیات کو مندرجہ ذیل طور پر سپورٹ کرتا ہے: انٹرفیس پراپرٹیز سگنلز فورچ لیمبڈا ایکسپریشنز مقامی متغیرات کے لیے قسم کا تخمینہ جنیرکس غیر خالی اقسام معاون میموری مینجمنٹ مستثنی ہینڈلنگ گرافیکل یوزر انٹرفیس کو جی ٹی کے جی یو آئی ٹول کٹ اور گلیڈ جی یو آئی بلڈر کے ساتھ تیار کیا جا سکتا ہے۔ میموری مینجمنٹ میموری مینجمنٹ کے لیے، جی ٹائپ یا گوبجیکٹ سسٹم حوالہ شمار فراہم کرتا ہے۔ سی میں، ایک پروگرامر کو حوالہ جات کو جوڑنے اور ہٹانے کا انتظام دستی طور پر کرنا چاہیے، لیکن والا میں، اس طرح کے حوالہ جات کی گنتی کا انتظام خودکار ہوتا ہے اگر کوئی پروگرامر سادہ اشارے کے بجائے زبان کی بلٹ ان حوالہ جات کی اقسام کا استعمال کرتا ہے۔ صرف ایک تفصیل جس کے بارے میں آپ کو فکر کرنے کی ضرورت ہے وہ حوالہ چکروں کو پیدا کرنے سے گریز کرنا ہے، کیونکہ اس صورت میں یہ میموری مینجمنٹ سسٹم صحیح طریقے سے کام نہیں کرے گا۔ والا ایک آپشن کے طور پر پوائنٹرز کے ساتھ دستی میموری مینجمنٹ کی بھی اجازت دیتا ہے۔ بائنڈنگز والا کا مقصد موجودہ سی لائبریریوں، خاص طور پر گوبجیکٹ پر مبنی لائبریریوں تک رن ٹائم رسائی فراہم کرنا ہے، بغیر رن ٹائم بائنڈنگ کی ضرورت کے۔ والا کے ساتھ لائبریری کو استعمال کرنے کے لیے، صرف ایک اے پی آئی فائل (. vapi) کی ضرورت ہوتی ہے جس میں والا نحو میں کلاس اور طریقہ کار کے اعلانات ہوتے ہیں۔ تاہم، C + + لائبریریوں کی حمایت نہیں کی جاتی ہے۔ فی الحال، جی ٹی کے سمیت والا کی ہر ریلیز کے ساتھ جی این یو پروجیکٹ اور جی این او ایم پلیٹ فارم کے ایک بڑے حصے کے لیے واپی فائلیں شامل ہیں۔ جی نامی ایک لائبریری بھی ہے، جو والا میں لکھی گئی ہے، جو عام طور پر استعمال ہونے والے ڈیٹا ڈھانچے کے لیے جی او آبجیکٹ پر مبنی انٹرفیس اور کلاسیں فراہم کرتی ہے۔ دوسری زبانوں میں لکھی گئی ایپلی کیشنز سے والا لائبریریوں تک رسائی کے لیے بائنڈنگ جنریٹر لکھنا بھی آسانی سے ممکن ہونا چاہیے، مثال کے طور پر، سی #، جیسا کہ والا پارسر کو لائبریری کے طور پر لکھا جاتا ہے، تاکہ بائنڈنگ تیار کرتے وقت تمام مرتب وقت کی معلومات دستیاب ہوں۔ ٹولز ایڈیٹرز ٹولنگ فار والا ڈویلپمنٹ میں حالیہ برسوں میں نمایاں بہتری دیکھی گئی ہے۔ درج ذیل کچھ مشہور آئی ڈی ای اور ٹیکسٹ ایڈیٹرز کی فہرست ہے جن میں پلگ انز ہیں جو والا میں پروگرامنگ کے لیے سپورٹ کا اضافہ کرتے ہیں: GNOME بلڈر ویژول اسٹوڈیو کوڈ، والا پلگ ان ویم کے ساتھ، arrufat/vala. vim پلگ ان Emacs کے ساتھ، والا موڈ ایٹم جینی کوڈ انٹیلی جنس کے ساتھ فی الحال، دو فعال طور پر ترقی پذیر زبان کے سرورز ہیں جو والا کے لیے کوڈ انٹیلی جنس پیش کرتے ہیں:، کسی بھی ایڈیٹر کے لیے ڈیزائن کیا گیا ہے جو LSP کی حمایت کرتا ہے، بشمول VSCode، vim، اور GNOME بلڈر، جو فی الحال GNOME بلڈر میں والا کے لیے ڈیفالٹ زبان سرور ہے اور LSP بلڈ سسٹمز کے لیے سپورٹ کے ساتھ کسی بھی ایڈیٹر کو سپورٹ فراہم کرتا ہے۔ والا پروگراموں کے لیے ڈیبگنگ جی ڈی بی یا ایل ایل ڈی بی کے ساتھ کی جا سکتی ہے۔ آئی ڈی ای میں ڈیبگنگ کے لیے، GNOME بلڈر کے پاس GDB کے ساتھ والا کے لیے بلٹ ان ڈیبگنگ سپورٹ ہے۔ ویژول اسٹوڈیو کوڈ میں جی ڈی بی اور ایل ایل ڈی بی کے لیے توسیعات ہیں، جیسے سی پی پی ٹولز اور کوڈ ایل ایل ڈی بی۔ مثالیں ہیلو ورلڈ ایک سادہ "ہیلو، ورلڈ!" والا میں پروگرام: وائڈ مین () {پرنٹ ("ہیلو ورلڈ") ؛} جیسا کہ نوٹ کیا جا سکتا ہے، سی یا سی + + کے برعکس، والا میں کوئی ہیڈر فائلیں نہیں ہیں۔ کتب خانوں سے جوڑنا مرتب کرنے کے دوران-- پی کے جی پیرامیٹرز کی وضاحت کر کے کیا جاتا ہے۔ مزید برآں، GLib لائبریری ہمیشہ منسلک رہتی ہے اور اس کی نیم اسپیس کو خارج کیا جا سکتا ہے (پرنٹ دراصل GLib.print ہے)۔ آبجیکٹ پر مبنی پروگرامنگ نیچے ایک زیادہ پیچیدہ ورژن ہے جو ایک ذیلی کلاس ہیلو ورلڈ کی وضاحت کرتا ہے جو بیس کلاس GLib.Object، عرف گوبجیکٹ کلاس سے وراثت میں ملتا ہے۔ یہ والا کی کچھ آبجیکٹ پر مبنی خصوصیات کو ظاہر کرتا ہے: کلاس ہیلو ورلڈ: آبجیکٹ {پرائیویٹ ونٹ سال = 0 ؛ پبلک ہیلو ورلڈ () {} پبلک HelloWorld.with_year (انٹ سال) {اگر (سال> 0) this.year = سال ؛} پبلک وایڈ گریٹنگ () {اگر (سال = = 0) پرنٹ ("ہیلو ورلڈ \n") ؛ بصورت دیگر/* سٹرنگ ٹیمپلیٹس ہیں جو '@' کے ساتھ پہلے سے منسلک ہیں۔ */پرنٹ (@"ہیلو ورلڈ، $(this.year) \n") ؛}} وائڈ مین (سٹرنگ [] آرگس) {وار ہیلو ورلڈ = نیا HelloWorld.with_year (2021) ؛ helloworld.greeting () ؛} جیسا کہ گوبجیکٹ لائبریری کے معاملے میں، والا متعدد وراثت کی حمایت نہیں کرتا ہے، لیکن والا میں ایک کلاس کسی بھی تعداد میں انٹرفیس کو نافذ کر سکتی ہے، جس میں ان کے طریقوں کے لیے ڈیفالٹ نفاذ ہو سکتے ہیں۔ GLib کا استعمال کرتے ہوئے ڈیفالٹ نفاذ کے ساتھ والا انٹرفیس کو ظاہر کرنے کے لیے نمونہ کوڈ کا ایک ٹکڑا ہے۔ انٹرفیس پرنٹ ایبل {پبلک تجریدی سٹرنگ پرنٹ () ؛ پبلک ورچوئل سٹرنگ پریٹی _ پرنٹ () {ریٹرن "پلیز" + پرنٹ () ؛} کلاس نارمل پرنٹ: آبجیکٹ، پرنٹ ایبل {سٹرنگ پرنٹ () {ریٹرن "میرے بارے میں مت بھولیں" ؛} کلاس اووررائیڈ پرنٹ: آبجیکٹ، پرنٹ ایبل {سٹرنگ پرنٹ () {ریٹرن "مائنڈ دی گیپ" ؛} پبلک اووررائیڈ سٹرنگ پریٹی _ پرنٹ () {ریٹرن "اووررائیڈ" ؛} وائڈ مین (سٹرنگ [] آرگس) {ور نارمل = نیو نارمل پرنٹ () ؛ ور اوور اوور پھر کال بیک افعال کلاس کے ایک مثال کے سگنل پر رجسٹرڈ ہوتے ہیں۔ مثال سگنل کا اخراج کر سکتی ہے اور مثال کے طور پر سگنل سے منسلک ہر کال بیک فنکشن (جسے ہینڈلر بھی کہا جاتا ہے) اسی ترتیب میں طلب کیا جائے گا جس میں وہ جڑے ہوئے تھے: کلاس فو {پبلک سگنل وایڈ کچھ _ ایونٹ () ؛// سگنل کی تعریف عوامی وایڈ طریقہ () {کچھ _ ایونٹ () ؛// سگنل خارج کرنا (کال بیکس کو بلایا جاتا ہے)} کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال بیک کو کال نئے دھاگوں کی تخلیق اور مطابقت پذیری GLib میں تھریڈ کلاس کا استعمال کرتے ہوئے کی جاتی ہے، جو نئے دھاگوں کو بناتے وقت فنکشن کو ایک پیرامیٹر کے طور پر لیتا ہے، جیسا کہ مندرجہ ذیل (بہت آسان) مثال میں دکھایا گیا ہے: int سوال () {// کچھ پرنٹ آپریشنز (ver i = 0 ؛ i <3 ؛ i + +) {پرنٹ ("۔ ") ؛ Thread.usleep (800000) ؛ stdout.flush () ؛} واپسی 42 ؛} کالعدم مین () {اگر (! Thread.supported ()) {stderr.printf (" "تھریڈ سپورٹ کے بغیر نہیں چل سکتا۔ \n" ") ؛ واپسی ؛} پرنٹ (" "زندگی، کائنات، اور ہر چیز کا حتمی سوال" ") ؛// عام پیرامیٹر واپسی کی قیمت کی قسم ہے وار تھریڈ = نیا تھریڈ <int> (" "سوال، سوال" ") ؛ پرنٹ (@" "$(thread.join () \n" ") ؛} گرافیکل یوزر انٹرفیس ذیل میں GUI" "ہیلو، ورلڈ!" "بنانے کے لیے GTK کا استعمال کرتے ہوئے ایک مثال ہے۔" پروگرام (جی ٹی کے ہیلو ورلڈ بھی دیکھیں) والا میں: جی ٹی کے کا استعمال کرتے ہوئے ؛ انٹ مین (سٹرنگ [] آرگس) {Gtk.init (ریف آرگس) ؛ ور ونڈو = نئی ونڈو () ؛ window.title = "ہیلو، ورلڈ! "؛ window.border_width = 10 ؛ window.window_position = WindowPosition.CENTER ؛ window.set_default_size (350، 70) ؛ window.destroy.connect (Gtk.main_quit) ؛ ور لیبل = نیا لیبل (" ہیلو، ورلڈ! ") ؛ window.add (لیبل) ؛ window.show_all () ؛ Gtk.main () ؛ واپسی 0 ؛} بیان Gtk.main () واقعات کے لیے ایک مرکزی لوپ سننا تخلیق کرتا ہے اور شروع کرتا ہے، جو کال بیک افعال میں سگنلز کے ذریعے منتقل ہوتے ہیں۔ جیسا کہ یہ مثال جی ٹی کے پیکیج کا استعمال کرتی ہے، اسے مرتب کرنے کے لیے ایک اضافی-- پی کے جی پیرامیٹر (جو سی بیک اینڈ میں پی کے جی-کنفیگ کو مدعو کرتا ہے) کی ضرورت ہوتی ہے: والیک-- پی کے جی ٹی کے +-3.0 hellogtk.vala جینی بھی دیکھیں، جو کہ والا مرتب کرنے والے کے لیے ایک پروگرامنگ زبان ہے جس میں پائیتھن کے قریب نحو ہے۔ شاٹ ویل، والا میں لکھا ہوا ایک تصویری منتظم۔ گیری، والا میں لکھا ہوا ایک ای میل کلائنٹ۔ ایلیمنٹری او ایس، ایک لینکس ڈسٹری بیوشن جس میں ڈیسک ٹاپ ماحول زیادہ تر والا میں پروگرام کیا گیا ہے۔ بڈگی، ایک لینکس ڈیسک ٹاپ ماحول ہے جو زیادہ تر والا میں پروگرام کیا گیا ہے۔ حوالہ جات بیرونی روابط GNOME ویکی پیج API ڈاکیومینٹیشن والا ذخیرہ GNOME · GitLab لبجی پر، والا کے لیے ایک یوٹیلیٹی لائبریری۔ شروع کرنے والوں کے لیے والا نمونہ کوڈ والا پروگراموں کی فہرست آٹووالا، ایک ایسا پروگرام جو والا/سی منصوبوں کے لیے سی میک اور میسن فائلوں کو خودکار اور آسان بناتا ہے گٹ ہب اکیرا پر والا کمیونٹی-لینکس کا مقامی ڈیزائنر ٹول کینگرو-مقبول ڈیٹا بیس کے لیے کراس پلیٹ فارم ڈیٹا بیس کلائنٹ ٹول دیگر زبانوں کے ساتھ موازنہ والا اور جاوا والا اور مختلف زبانوں کے سی #بینچ مارک، بشمول والا پروگرامنگ زبانیں آبجیکٹ پر مبنی پروگرامنگ زبانیں سافٹ ویئر ایل جی پی ایل لائسنس کا استعمال کرتے ہوئے سورس ٹو سورس مرتب کرنے والے اسٹیٹکلی ٹائپڈ پروگرامنگ زبانیں 2006 میں بنائے گئے سافٹ ویئر کراس پلیٹ فارم فری سافٹ ویئر