Magik (programming language)
ম্যাজিক একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা যা একাধিক উত্তরাধিকার এবং পলিমরফিজমকে সমর্থন করে এবং এটি গতিশীলভাবে টাইপ করা হয়। এটি 1989 সালে স্মলওয়ার্ল্ড জিওগ্রাফিক্যাল ইনফরমেশন সিস্টেমের (জিআইএস) অংশ হিসাবে স্মলওয়ার্ল্ড সিস্টেমস লিমিটেডের আর্থার চান্স দ্বারা ডিজাইন এবং বাস্তবায়িত হয়েছিল। 2000 সালে স্মলওয়ার্ল্ড অধিগ্রহণের পরে, ম্যাজিক এখন জিই এনার্জি দ্বারা সরবরাহ করা হয়, এখনও তার স্মলওয়ার্ল্ড প্রযুক্তি প্ল্যাটফর্মের অংশ হিসাবে। ম্যাজিক (অনুপ্রেরণামূলক ম্যাজিক) মূলত 1990 সালে চালু করা হয়েছিল এবং বছরের পর বছর ধরে উন্নত ও আপডেট করা হয়েছে। এর বর্তমান সংস্করণ হল 5.2। 2012 সালের জুলাই মাসে, ম্যাজিক ডেভেলপাররা ঘোষণা করেন যে তারা জাভা ভার্চ্যুয়াল মেশিনে ম্যাজিক ভাষা পোর্ট করার প্রক্রিয়ায় রয়েছেন। একই বছরের নভেম্বরে ওরাকল কর্পোরেশন সফল পোর্টিং নিশ্চিত করে। স্মলটক ম্যাজিকের সাথে সাদৃশ্যগুলি তার ভাষার বৈশিষ্ট্য এবং স্থাপত্যের দিক থেকে স্মলটকের সাথে কিছু মিল ভাগ করেঃ ম্যাজিক ভাষা ম্যাজিক ভার্চুয়াল মেশিন দ্বারা ব্যাখ্যা করা বাইট কোডে সংকলিত হয়। ম্যাজিক ভার্চ্যুয়াল মেশিনটি মাইক্রোসফ্ট উইন্ডোজ, ইউনিক্স এবং লিনাক্সের বিভিন্ন ফ্লেভার সহ বেশ কয়েকটি প্ল্যাটফর্মে উপলব্ধ। ম্যাজিক কনসোল ভিত্তিক এবং কোনও অ্যাপ্লিকেশন চলার সময়ও কোড পরিবর্তন করা যেতে পারে। কনসোলটি ম্যাজিক কোড কার্যকর করতে এবং ফলাফল দেখতেও ব্যবহার করা যেতে পারে। সংকলিত কোড একটি একক ফাইলে সংরক্ষণ করা হয় যাকে ইমেজ ফাইল বলা হয়। প্রতিটি চিত্র ফাইল সংকলিত বাইট-কোড এবং সেশনের অবস্থা (উদাহরণস্বরূপ পরিবর্তনশীল মান) ধারণ করে যখন চিত্রটি শেষবার সংরক্ষণ করা হয়েছিল। ভাষার বৈশিষ্ট্য মন্তব্য ম্যাজিক #টোকেন ব্যবহার করে কোডের বিভাগগুলিকে মন্তব্য হিসাবে চিহ্নিত করেঃ #এটি একটি মন্তব্য। অ্যাসাইনমেন্ট ম্যাজিক কাজ করার জন্য <<অপারেটর ব্যবহার করেঃ a <1.234 b <<b + a c <<"foo" + "বার" #কনক্যাট স্ট্রিং স্পষ্টতার জন্য, এই স্বরলিপিটি "a হয়ে যায় 1.234" বা "b হয়ে যায় b যোগ a" হিসাবে পড়া হয়। এই পরিভাষাটি নিয়োগকে তুলনা থেকে পৃথক করে। ম্যাজিক এই অপারেটরের একটি সংকুচিত বৈচিত্র্যকেও সমর্থন করে যা সিঃ বি + <<এ #সমতুল্য থেকে বি <<বি + এ-তে পাওয়া একইভাবে কাজ করে একটি পরিবর্তনশীল মুদ্রণ করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন a <<"হ্যালো" লিখুন (ক) প্রতীকগুলির পাশাপাশি প্রচলিত ডেটা প্রকার যেমন পূর্ণসংখ্যা, ভাসমান এবং স্ট্রিং ম্যাজিকও প্রতীক প্রয়োগ করে। প্রতীকগুলি একটি বিশেষ টোকেন ডেটা টাইপ যা বস্তুগুলিকে অনন্যভাবে সনাক্ত করতে ম্যাজিক জুড়ে ব্যাপকভাবে ব্যবহৃত হয়। এগুলি একটি কোলন দ্বারা প্রতিনিধিত্ব করা হয় যার পরে অক্ষরের একটি স্ট্রিং থাকে। উল্লম্ব বার অক্ষর ব্যবহার করে প্রতীকগুলি এড়ানো যেতে পারে। উদাহরণস্বরূপঃ a <<: হ্যালো #যখনইঃ হ্যালো সম্মুখীন হয়, এটি একই উদাহরণ b <<: |hello ওয়ার্ল্ড। ডায়নামিক টাইপিং ম্যাজিক ভেরিয়েবলগুলি টাইপ করা হয় না যেমন তারা সি #বলে এবং রানটাইমে বিভিন্ন বস্তুর উল্লেখ করতে পারে। ম্যাজিকের সবকিছুই একটি বস্তু (বস্তু এবং পূর্ণসংখ্যার মতো আদিম প্রকারের মধ্যে কোনও পার্থক্য নেই): একটি <<1.2 #একটি ভাসমান বিন্দু সংখ্যা পরিবর্তনশীল 'a' a <<1.2 "#কে পরে বরাদ্দ করা হয়, একটি স্ট্রিং পরিবর্তনশীল 'a' কে বরাদ্দ করা হয়। উদাহরণস্বরূপ জাভার মতো অন্যান্য প্রোগ্রামিং ভাষার ক্লাসের সাথে মিল রয়েছে, তবে গুরুত্বপূর্ণ পার্থক্য রয়েছে। ম্যাজিক একাধিক উত্তরাধিকার এবং মিক্সিন (যা কোনও তথ্য ছাড়াই কার্যকারিতা প্রয়োগ করে) সমর্থন করে। একটি বিদ্যমান দৃষ্টান্ত ক্লোনিং করে নতুন দৃষ্টান্ত তৈরি করা হয় (যা সাধারণত উদাহরণস্বরূপ হবে তবে হতে হবে না)। ডেফ _ স্লটেড _ ইমপেলার () বিবৃতি ব্যবহার করে নতুন উদাহরণ তৈরি করা হয়, উদাহরণস্বরূপঃ ডেফ _ স্লটেড _ ইমপেলার (: মাই _ অবজেক্ট, {{: স্লট _ এ, 34}, {: স্লট _ বি, "হ্যালো"}, {: প্যারেন্ট _ অবজেক্ট _ এ,: প্যারেন্ট _ অবজেক্ট _ বি) এই কোড খণ্ডটি মাই _ অবজেক্ট নামে একটি নতুন উদাহরণ সংজ্ঞায়িত করবে যার দুটি স্লট (বা ক্ষেত্র) রয়েছে যা স্লট _ এ (প্রাক-প্রারম্ভিক 34) এবং স্লট _ বি (প্রাক-প্রাথমিক "হ্যালো") নামে পরিচিত যা প্যারেন্ট _ অবজেক্ট _ এ এবং প্যারেন্ট _ অবজেক্ট _ বি নামে পরিচিত দুটি বিদ্যমান উদাহরণ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। তুলনা ম্যাজিক তুলনার জন্য সমস্ত সাধারণ লজিক্যাল অপারেটর (=, <, <=,>,> =, ~ =/<>) প্রয়োগ করে, পাশাপাশি কয়েকটি অস্বাভাবিকও প্রয়োগ করে। _ is এবং _ ist অপারেটরগুলি মানগুলির পরিবর্তে বস্তুর নির্দিষ্ট দৃষ্টান্ত বা বস্তুর রেফারেন্সগুলির তুলনা করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপঃ a <<"হ্যালো" b <<"হ্যালো" a = b #ফেরত দেয় সত্য (_ সত্য) কারণ a এবং b এর মান সমান a _ is b #ফেরত দেয় মিথ্যা (_ false) কারণ a একই উদাহরণ নয় যেমন b a <<"হ্যালো" b <<a = b #ফেরত দেয় সত্য (_ সত্য) কারণ a এবং b এর মান সমান a _ is b #ফেরত দেয় সত্য (_ সত্য) কারণ b কে a হিসাবে একই বস্তুর নির্দিষ্ট উদাহরণ বরাদ্দ করা হয়েছিল, a এর মানের পরিবর্তে। পদ্ধতি পদ্ধতিগুলি স্টেটমেন্ট _ মেথড এবং _ এন্ডমেথোড ব্যবহার করে উদাহরণের উপর সংজ্ঞায়িত করা হয়ঃ _ মেথড my_object.my_method (a, b) _ রিটার্ন a + b _ এন্ডমেথোড এটি দুটি নতুন পদ্ধতি () (একটি নতুন দৃষ্টান্ত তৈরি করতে) এবং init () (একটি দৃষ্টান্ত শুরু করতে) সরবরাহ করার প্রথা। #নতুন পদ্ধতি person.new (নাম, বয়স) _ রিটার্ন _clone.init (নাম, বয়স) _ এন্ডমেথোড #ইনিশিয়ালাইজ পদ্ধতি। প্রাইভেট পদ্ধতি person.init (নাম, বয়স) #প্যারেন্ট বাস্তবায়নে কল করুন। _super.init (নাম, বয়স) #স্লটগুলি শুরু করুন। . নাম <<নাম. বয়স <<বয়স _ রিটার্ন _ সেলফ _ এন্ডমেথোড _ ক্লোন ব্যক্তি বস্তুর একটি শারীরিক অনুলিপি তৈরি করে। সুপার স্টেটমেন্ট বস্তুগুলিকে মূল উদাহরণের উপর একটি পদ্ধতির বাস্তবায়নের আহ্বান করার অনুমতি দেয়। বস্তুগুলি স্ব-বিবৃতি ব্যবহার করে নিজেদের উল্লেখ করতে পারে। একটি বস্তুর স্লটগুলি একটি বিন্দু স্বরলিপি ব্যবহার করে অ্যাক্সেস এবং বরাদ্দ করা হয়। যে পদ্ধতিগুলি বস্তুর পাবলিক ইন্টারফেসের অংশ নয় সেগুলি _ প্রাইভেট স্টেটমেন্ট ব্যবহার করে প্রাইভেট চিহ্নিত করা যেতে পারে। ব্যক্তিগত পদ্ধতিগুলিকে শুধুমাত্র _ সেলফ, _ সুপার এবং _ ক্লোন দ্বারা ডাকা যেতে পারে। ঐচ্ছিক যুক্তিগুলি ঐচ্ছিক বিবৃতি ব্যবহার করে ঘোষণা করা যেতে পারে। যে ঐচ্ছিক আর্গুমেন্টগুলি পাস করা হয় না সেগুলি ম্যাজিক দ্বারা বিশেষ অবজেক্ট _ আনসেট (নালের সমতুল্য)-কে বরাদ্দ করা হয়। ঐচ্ছিক আর্গুমেন্টের একটি তালিকা ঘোষণা করার জন্য সংগ্রহ বিবৃতি ব্যবহার করা যেতে পারে। _ পদ্ধতি my_object.my_method (_ সংগ্রহের মান) _ এন্ডমেথোড পুনরাবৃত্তি ম্যাজিকের মধ্যে, _ for, _ over, _ লূপ এবং _ এন্ডলুপ বিবৃতিগুলি পুনরাবৃত্তির অনুমতি দেয়। ব্লক স্থানীয় s <<0 _ স্থানীয় i <<0 _ যখন i <= 100 _ লুপ s + <<i i + <<1 _ এন্ডলুপ>> s _ এন্ডব্লক এখানে, এই _ ওয়াইলটি _ লুপ এবং _ এন্ডলুপের সাথে মিলিত হয়। _ পদ্ধতি my_object.my_method (_ সংগৃহীত মান) মোট <<0.0 _ একটি জন্য values.elements () _ লুপ মোট + <<a _ এন্ডলুপ _ রিটার্ন মোট _ এন্ডমেথোড m <<my_object.new () x <<m.my_method (1.0,2,3,4) #x = 10.0 এখানে values.elements () একটি পুনরাবৃত্তিকারী যা মানগুলি পুনরাবৃত্ত করতে সহায়তা করে। ম্যাজিক জেনারেটর পদ্ধতিতে ইটারেটর পদ্ধতি বলা হয়। নতুন পুনরাবৃত্তিকারী পদ্ধতিগুলি _ ইটার এবং _ লুপবডি বিবৃতি ব্যবহার করে সংজ্ঞায়িত করা যেতে পারেঃ _self.elements () _ লুপের জন্য a.even? _ is _ ট্রূ _ তারপর _ লুপবডি (a) _ এন্ডিফ _ এন্ডলুপ _ এন্ডমেথোড পদ্ধতি ম্যাজিক পদ্ধতি নামক ফাংশনগুলিকেও সমর্থন করে। পদ্ধতিগুলিও বস্তু এবং _ reproc এবং _ এন্ডপ্রোক বিবৃতি ব্যবহার করে ঘোষণা করা হয়। পদ্ধতিগুলি ভেরিয়েবলগুলিকে বরাদ্দ করা হয় যা তখন আহ্বান করা যেতে পারেঃ মাই _ প্রসিডিউর <<_ প্রোক @my_procedure (এ, বি, সি) _ রিটার্ন এ + বি + সি _ এন্ডপ্রোক এক্স <<মাই _ প্রসিডিউর (1,2,3) #এক্স = 6 রেগুলার এক্সপ্রেশন ম্যাজিক সমর্থন করে// রেগুলার এক্সপ্রেশন সিনট্যাক্সঃ _ ইফ/হ্যালো, \s (\w) +!/. ম্যাচ? (হ্যালো, ম্যাজিক!) তারপর লিখুন ("একটি মিল পেয়েছে!") _ এন্ডিফ এবং রেগেক্সে গোষ্ঠীগুলি ক্যাপচার করতেঃ/এস. ডব্লিউ ([0-9] +)-([0-9] +)। */. প্রতিস্থাপন _ সমস্ত ("এসডব্লিউ 65456-324 এসএসএস", "$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-স্মলওয়ার্ল্ড ম্যাজিক জিই স্মলওয়ার্ল্ডের একটি সংক্ষিপ্ত বিবরণ, ম্যাজিক ডেভেলপারদের জন্য ইম্যাকস এক্সটেনশন স্মলওয়ার্ল্ড ম্যাজিক প্রোগ্রামিং ভাষার জন্য ভিজ্যুয়াল স্টুডিও কোড এক্সটেনশন। শ্রেণী-ভিত্তিক প্রোগ্রামিং ভাষাগুলি গতিশীলভাবে টাইপ করা প্রোগ্রামিং ভাষাগুলি