Vala (programming language)
ভালা একটি স্ব-হোস্টিং কম্পাইলার সহ একটি অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষা যা সি কোড তৈরি করে এবং জিওবজেক্ট সিস্টেম ব্যবহার করে। বালা শব্দার্থগতভাবে সি #-এর অনুরূপ এবং এতে বেনামী ফাংশন, সংকেত, বৈশিষ্ট্য, জেনেরিক, সহায়ক মেমরি ম্যানেজমেন্ট, ব্যতিক্রম পরিচালনা, টাইপ অনুমান এবং ফোর্যাচ স্টেটমেন্টের মতো উল্লেখযোগ্য বৈশিষ্ট্য রয়েছে। এর ডেভেলপার, জার্গ বিলেটার এবং রাফায়েল স্যান্ড্রিনি, এই বৈশিষ্ট্যগুলি সাধারণ সি রানটাইমে সামান্য ওভারহেড এবং কোনও বিশেষ রানটাইম সমর্থন ছাড়াই গোবজেক্ট অবজেক্ট সিস্টেমকে লক্ষ্য করে আনতে চেয়েছিলেন। সরাসরি মেশিন কোড বা অ্যাসেম্বলি ভাষায় সংকলন করার পরিবর্তে, এটি একটি নিম্ন-স্তরের মধ্যবর্তী ভাষায় সংকলন করে। এটি উৎস থেকে উৎসে সি-তে সংকলন করে, যা পরে জিসিসি বা ক্ল্যাং-এর মতো একটি প্রদত্ত প্ল্যাটফর্মের জন্য সি সংকলক দিয়ে সংকলিত হয়। নেটিভ কোড লাইব্রেরি থেকে কার্যকারিতা ব্যবহার করার জন্য লাইব্রেরি ইন্টারফেসগুলি সংজ্ঞায়িত করে ভাপি ফাইল লেখার প্রয়োজন হয়। এই ইন্টারফেস সংজ্ঞাগুলি লেখা সি লাইব্রেরির জন্য ভালভাবে নথিভুক্ত। মাল্টিমিডিয়া লাইব্রেরি এসডিএল এবং ওপেনজিএল-এর মতো জিওবজেক্ট ভিত্তিক নয় এমন লাইব্রেরি সহ বিপুল সংখ্যক লাইব্রেরির জন্য বাইন্ডিং ইতিমধ্যে উপলব্ধ। ভাল একটি প্রোগ্রামিং ভাষা যা নিম্ন-স্তরের প্রোগ্রামিং ভাষাগুলির রান-টাইম পারফরম্যান্সের সাথে স্ক্রিপ্টিং ভাষাগুলির উচ্চ-স্তরের বিল্ড-টাইম পারফরম্যান্সকে একত্রিত করে। এর লক্ষ্য হল সি-তে লেখা অ্যাপ্লিকেশন এবং লাইব্রেরির তুলনায় কোনও অতিরিক্ত রানটাইম প্রয়োজনীয়তা আরোপ না করে এবং আলাদা এ. বি. আই ব্যবহার না করে জিনোম ডেভেলপারদের কাছে আধুনিক প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলি নিয়ে আসা। ভালার বাক্য গঠন সি #-এর অনুরূপ, যা গোবজেক্ট টাইপ সিস্টেমের সাথে আরও ভালভাবে খাপ খাইয়ে নেওয়ার জন্য পরিবর্তিত হয়েছে। হিস্ট্রি ভালার ধারণা করেছিলেন জার্গ বিলেটার এবং তাঁর এবং রাফায়েল স্যান্ড্রিনির দ্বারা বাস্তবায়িত হয়েছিল, যারা সি এর পরিবর্তে জিনোম অ্যাপ্লিকেশন বিকাশের জন্য একটি উচ্চতর স্তরের বিকল্প চেয়েছিলেন। তারা সি #এর বাক্য গঠন এবং শব্দার্থবিদ্যা পছন্দ করেছিলেন কিন্তু মনো ব্যবহার করতে চাননি, তাই তারা মে 2006 সালে একটি সংকলক শেষ করেছিলেন। প্রাথমিকভাবে, এটি সি ব্যবহার করে বুটস্ট্র্যাপ করা হয়েছিল এবং এক বছর পরে (জুলাই 2007 সালে সংস্করণ 0.1.0 প্রকাশের সাথে), ভালা সংকলক স্ব-হোস্ট হয়ে ওঠে। 2021 সালের হিসাবে, দীর্ঘমেয়াদী সমর্থন সহ বর্তমান স্থিতিশীল রিলিজ শাখা হল 0.48, এবং একটি স্থিতিশীল সংস্করণ 1.0 প্রকাশের লক্ষ্য নিয়ে ভাষাটি সক্রিয় বিকাশের অধীনে রয়েছে। ভাষা নকশার বৈশিষ্ট্যগুলি ভালা জিএলআইবি এবং এর সাব-মডিউলগুলি (জিওবজেক্ট, জিমোডুল, জি-থ্রেড, জিআইও) মূল গ্রন্থাগার হিসাবে ব্যবহার করে, যা বেশিরভাগ অপারেটিং সিস্টেমের জন্য উপলব্ধ এবং প্ল্যাটফর্ম স্বাধীন থ্রেডিং, ইনপুট/আউটপুট, ফাইল পরিচালনা, নেটওয়ার্ক সকেট, প্লাগইন, নিয়মিত অভিব্যক্তি ইত্যাদির মতো জিনিস সরবরাহ করে। ভালার বাক্যবিন্যাস বর্তমানে আধুনিক ভাষার বৈশিষ্ট্যগুলিকে নিম্নরূপ সমর্থন করেঃ ইন্টারফেস প্রোপার্টি সিগন্যাল ফোরিচ ল্যাম্বডা এক্সপ্রেশন স্থানীয় ভেরিয়েবলের জন্য টাইপ ইনফারেন্স জেনেরিক নন-নাল প্রকার অ্যাসিস্টেড মেমরি ম্যানেজমেন্ট ব্যতিক্রম হ্যান্ডলিং গ্রাফিকাল ইউজার ইন্টারফেসগুলি জিটিকে জিইউআই টুলকিট এবং গ্লেড জিইউআই বিল্ডারের সাহায্যে তৈরি করা যেতে পারে। মেমরি ম্যানেজমেন্ট মেমরি ম্যানেজমেন্টের জন্য, জি টাইপ বা জিওবজেক্ট সিস্টেম রেফারেন্স গণনা প্রদান করে। সি-তে, একজন প্রোগ্রামারকে অবশ্যই রেফারেন্স যোগ এবং অপসারণ ম্যানুয়ালি পরিচালনা করতে হবে, তবে ভালায়, এই ধরনের রেফারেন্স গণনা পরিচালনা করা স্বয়ংক্রিয় হয় যদি কোনও প্রোগ্রামার সাধারণ পয়েন্টারের পরিবর্তে ভাষার অন্তর্নির্মিত রেফারেন্স প্রকারগুলি ব্যবহার করেন। আপনাকে যে একমাত্র বিশদ সম্পর্কে চিন্তা করতে হবে তা হল রেফারেন্স চক্র তৈরি করা এড়ানো, কারণ সেক্ষেত্রে এই মেমরি ম্যানেজমেন্ট সিস্টেমটি সঠিকভাবে কাজ করবে না। ভালা একটি বিকল্প হিসাবে পয়েন্টার সহ ম্যানুয়াল মেমরি পরিচালনার অনুমতি দেয়। বাইন্ডিং ভালার উদ্দেশ্য হল রানটাইম বাইন্ডিংয়ের প্রয়োজন ছাড়াই বিদ্যমান সি লাইব্রেরিতে, বিশেষ করে জিওবজেক্ট-ভিত্তিক লাইব্রেরিতে রানটাইম অ্যাক্সেস প্রদান করা। ভালার সঙ্গে একটি গ্রন্থাগার ব্যবহার করার জন্য, যা প্রয়োজন তা হল একটি এপিআই ফাইল (. ভাপি) যা ভালার বাক্যবিন্যাসে শ্রেণী এবং পদ্ধতি ঘোষণাগুলি ধারণ করে। তবে, সি + + গ্রন্থাগারগুলি সমর্থিত নয়। বর্তমানে জি. টি. কে সহ ভালার প্রতিটি রিলিজের সঙ্গে জি. এন. ইউ প্রকল্প এবং জিনোম প্ল্যাটফর্মের একটি বড় অংশের ভাপি ফাইল অন্তর্ভুক্ত করা হয়েছে। জি নামে একটি গ্রন্থাগারও রয়েছে, যা ভালাতে লেখা, যা সাধারণভাবে ব্যবহৃত তথ্য কাঠামোর জন্য জিওবজেক্ট-ভিত্তিক ইন্টারফেস এবং ক্লাস সরবরাহ করে। অন্যান্য ভাষায় লেখা অ্যাপ্লিকেশনগুলি থেকে ভালা লাইব্রেরিতে প্রবেশাধিকারের জন্য একটি বাইন্ডিং জেনারেটর লেখাও সহজেই সম্ভব হওয়া উচিত, যেমন, সি #, যেহেতু ভালা পার্সারটি একটি লাইব্রেরি হিসাবে লেখা হয়, যাতে একটি বাইন্ডিং তৈরি করার সময় সমস্ত সংকলন-সময়ের তথ্য উপলব্ধ থাকে। সাম্প্রতিক বছরগুলিতে ভালার উন্নয়নের জন্য টুলস এডিটরস টুলিং উল্লেখযোগ্য উন্নতি করেছে। নিচে কিছু জনপ্রিয় আইডিই এবং প্লাগ-ইন সহ পাঠ্য সম্পাদকদের একটি তালিকা দেওয়া হল যা ভালাতে প্রোগ্রামিংয়ের জন্য সমর্থন যোগ করেঃ গ্নোম বিল্ডার ভিজ্যুয়াল স্টুডিও কোড, ভাল প্লাগ-ইন ভিম সহ, অরুফাত/ভালা. ভিম প্লাগ-ইন ইম্যাকস সহ, ভাল-মোড অ্যাটম গিনি কোড বুদ্ধিমত্তা সহ বর্তমানে, দুটি সক্রিয়ভাবে উন্নয়নশীল ভাষা সার্ভার রয়েছে যা ভালার জন্য কোড বুদ্ধিমত্তা প্রদান করেঃ, যে কোনও সম্পাদকের জন্য ডিজাইন করা হয়েছে যা এলএসপি সমর্থন করে, যার মধ্যে রয়েছে ভিএসসিড, ভিএম এবং জিনোম বিল্ডার, বর্তমানে জিনোম বিল্ডারের ভালার জন্য ডিফল্ট ভাষা সার্ভার এবং এলএসপি বিল্ড সিস্টেমের জন্য সমর্থন সহ যে কোনও সম্পাদককে সমর্থন প্রদান করে বর্তমানে, ভালাকে সমর্থন করে এমন বেশ কয়েকটি বিল্ড সিস্টেম রয়েছে। ভালা প্রোগ্রামগুলির জন্য ডিবাগিং জিডিবি বা এলএলডিবি দিয়ে করা যেতে পারে। আইডিই-তে ডিবাগ করার জন্য, জি. ডি. বি-র সঙ্গে ভালার জন্য গনোম বিল্ডারের অন্তর্নির্মিত ডিবাগিং সমর্থন রয়েছে। ভিজ্যুয়াল স্টুডিও কোডে জিডিবি এবং এলএলডিবি-র জন্য এক্সটেনশন রয়েছে, যেমন সিপিপি টুলস এবং কোডএলএলডিবি। উদাহরণস্বরূপ হ্যালো ওয়ার্ল্ড একটি সহজ "হ্যালো, ওয়ার্ল্ড!" ভালাতে প্রোগ্রামঃ অকার্যকর প্রধান () {মুদ্রণ ("হ্যালো ওয়ার্ল্ড");} যেমনটি লক্ষ্য করা যায়, সি বা সি + + এর বিপরীতে, ভালায় কোনও হেডার ফাইল নেই। সংকলন করার সময়-- পি. কে. জি পরামিতি নির্দিষ্ট করে গ্রন্থাগারগুলির সঙ্গে সংযোগ স্থাপন করা হয়। উপরন্তু, জিএলআইবি লাইব্রেরি সবসময় সংযুক্ত থাকে এবং এর নামস্থান বাদ দেওয়া যেতে পারে (প্রিন্ট আসলে GLib.print)। নীচে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং একটি আরও জটিল সংস্করণ যা একটি সাবক্লাস হ্যালোওয়ার্ল্ডকে সংজ্ঞায়িত করে যা বেস ক্লাস GLib.Object, ওরফে জিওবজেক্ট ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। এটি ভালার কিছু অবজেক্ট-ওরিয়েন্টেড বৈশিষ্ট্য দেখায়ঃ ক্লাস হ্যালোওয়ার্ল্ডঃ অবজেক্ট {প্রাইভেট ইউন্ট ইয়ার = 0; পাবলিক হ্যালোওয়ার্ল্ড () {} পাবলিক HelloWorld.with_year (ইন্ট ইয়ার) {যদি (ইয়ার> 0) this.year = ইয়ার;} পাবলিক অকার্যকর অভিবাদন () {যদি (ইয়ার = = 0) প্রিন্ট ("হ্যালো ওয়ার্ল্ড \এন"); অন্যথায়/* স্ট্রিংগুলি '@' দিয়ে প্রিফিক্স করা স্ট্রিং টেমপ্লেট। */প্রিন্ট (@"হ্যালো ওয়ার্ল্ড, $(this.year) \n");}} অকার্যকর প্রধান (স্ট্রিং [] আর্গস) {ভার হ্যালোওয়ার্ল্ড = নতুন HelloWorld.with_year (2021); helloworld.greeting ();} জিওবজেক্ট লাইব্রেরির ক্ষেত্রে, ভালা একাধিক উত্তরাধিকার সমর্থন করে না, তবে ভালার একটি শ্রেণী যে কোনও সংখ্যক ইন্টারফেস প্রয়োগ করতে পারে, যা তাদের পদ্ধতির জন্য ডিফল্ট বাস্তবায়ন ধারণ করতে পারে। জিএলআইবি ব্যবহার করে ডিফল্ট বাস্তবায়ন (কখনও কখনও মিক্সিন হিসাবে উল্লেখ করা হয়) সহ একটি ভালা ইন্টারফেস প্রদর্শনের জন্য এখানে নমুনা কোডের একটি অংশ রয়েছে; ইন্টারফেস মুদ্রণযোগ্য {পাবলিক বিমূর্ত স্ট্রিং প্রিন্ট (); পাবলিক ভার্চুয়াল স্ট্রিং প্রিটি _ প্রিন্ট () {রিটার্ন "প্লিজ" + প্রিন্ট ();}} ক্লাস নরমালপ্রিন্টঃ অবজেক্ট, প্রিন্টযোগ্য {স্ট্রিং প্রিন্ট () {রিটার্ন "ডোন্ট ফরগেট অ্যাবাউট মি";}} ক্লাস ওভাররাইডপ্রিন্টঃ অবজেক্ট, প্রিন্টযোগ্য {স্ট্রিং প্রিন্ট () {রিটার্ন "মাইন্ড দ্য গ্যাপ";} পাবলিক ওভাররাইড স্ট্রিং প্রিটি _ প্রিন্ট () {রিটার্ন "ওভাররাইড";} অকার্যকর প্রধান (স্ট্রিং [] আর্গস) {ভার নরমাল = নতুন নরমাল প্রিন্ট (); ভার ওভার তারপর কলব্যাক ফাংশনগুলি ক্লাসের একটি উদাহরণের সংকেতে নিবন্ধিত হয়। উদাহরণটি সংকেত নির্গত করতে পারে এবং উদাহরণস্বরূপ সংকেতের সাথে সংযুক্ত প্রতিটি কলব্যাক ফাংশন (হ্যান্ডলার হিসাবেও উল্লেখ করা হয়) তারা যে ক্রমে সংযুক্ত ছিল সেই ক্রমে আহ্বান করা হবেঃ শ্রেণী ফু {পাবলিক সিগন্যাল অকার্যকর কিছু _ ইভেন্ট ();// সংকেতের সংজ্ঞা পাবলিক অকার্যকর পদ্ধতি () {কিছু _ ইভেন্ট ();// সংকেত নির্গত করা (কলব্যাক আহ্বান করা হয়)} অকার্যকর কলব্যাক _ এ () {stdout.printf ("কলব্যাক এ\");} অকার্যকর কলব্যাক _ বি () {stdout.printf ("কলব্যাক বি\");} অকার্যকর প্রধান () {ভার ফু = নতুন ফু (); foo.some_event.connect (কলব্যাক); নতুন থ্রেড তৈরি এবং সিঙ্ক্রোনাইজেশন জিএলআইবি-তে থ্রেড ক্লাস ব্যবহার করে করা হয়, যা নতুন থ্রেড তৈরি করার সময় ফাংশনটিকে একটি পরামিতি হিসাবে গ্রহণ করে, যেমনটি নিম্নলিখিত (খুব সরলীকৃত) উদাহরণে দেখানো হয়েছেঃ int প্রশ্ন () {// (ভার আই = 0; আই <3; আই + +) {প্রিন্ট (")-এর জন্য কিছু মুদ্রণ ক্রিয়াকলাপ। "); Thread.usleep (800000); stdout.flush ();} রিটার্ন 42;} অকার্যকর মেইন () {যদি (! Thread.supported ()) {stderr.printf (" "থ্রেড সাপোর্ট ছাড়া চলতে পারে না। \n" "); রিটার্ন;} প্রিন্ট (" "দ্য আলটিমেট কোয়েশ্চেন অফ লাইফ, দ্য ইউনিভার্স, অ্যান্ড এভরিথিং" ");// জেনেরিক প্যারামিটার হল রিটার্ন মান ভার থ্রেড = নিউ থ্রেড <int> (" "প্রশ্ন", "প্রশ্ন); প্রিন্ট (@" "$(thread.join () \n" ");} গ্রাফিক্যাল ইউজার ইন্টারফেস নীচে একটি জি. ইউ. আই" "হ্যালো, ওয়ার্ল্ড!" "তৈরি করতে জি. টি. কে ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে।" ভালাতে প্রোগ্রাম (জিটিকে হ্যালো ওয়ার্ল্ডও দেখুন): জিটিকে ব্যবহার করে; ইন্ট মেইন (স্ট্রিং [] আর্গস) {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 <আই. ডি1> এছাড়াও দেখুন জেনি, যা পাইথনের কাছাকাছি একটি সিনট্যাক্স সহ ভালা কম্পাইলারের জন্য একটি প্রোগ্রামিং ভাষা। শটওয়েল, ভালায় লেখা একজন চিত্র সংগঠক। গিয়ারি, ভালাতে লেখা একটি ইমেল ক্লায়েন্ট। প্রাথমিক ওএস, একটি ডেস্কটপ পরিবেশ সহ একটি লিনাক্স ডিস্ট্রিবিউশন যা বেশিরভাগই ভালাতে প্রোগ্রাম করা হয়েছে। বাডি, একটি লিনাক্স ডেস্কটপ পরিবেশ যা বেশিরভাগই ভালাতে প্রোগ্রাম করা হয়েছে। রেফারেন্স এক্সটার্নাল লিঙ্ক GNOME উইকি পেজ API ডকুমেন্টেশন Vala রিপোজিটরি GNOME · GitLab لبজি, ভালার জন্য একটি ইউটিলিটি লাইব্রেরি। নতুনদের জন্য ভালা নমুনা কোড ভেলা প্রোগ্রামগুলির তালিকা অটোভালা, একটি প্রোগ্রাম যা ভালা/সি প্রকল্পগুলির জন্য সিমেক এবং মেসন ফাইল তৈরি করতে স্বয়ংক্রিয় এবং সহজ করে তোলে গিটহাব আকিরায় ভালা সম্প্রদায়-লিনাক্স নেটিভ ডিজাইনার টুল ক্যাঙ্গারু-জনপ্রিয় ডেটাবেসের জন্য ক্রস-প্ল্যাটফর্ম ডাটাবেস ক্লায়েন্ট টুল অন্যান্য ভাষার সাথে তুলনা ভালা এবং জাভা ভালা এবং সি #বালা প্রোগ্রামিং ভাষা সহ বিভিন্ন ভাষার বেঞ্চমার্ক অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা সফ্টওয়্যার এলজিপিএল লাইসেন্স ব্যবহার করে উৎস-থেকে-উৎস সংকলক স্ট্যাটিক্যালি টাইপ করা প্রোগ্রামিং ভাষা 2006 সালে তৈরি করা সফ্টওয়্যার ক্রস-প্ল্যাটফর্ম মুক্ত সফ্টওয়্যার