Charm (programming language)
চার্ম একটি কম্পিউটার প্রোগ্রামিং ভাষা যা 1990-এর দশকের গোড়ার দিকে তৈরি করা হয়েছিল যার নিজস্ব কিছু অনন্য বৈশিষ্ট্য ছাড়াও আরটিএল/2, পাস্কাল এবং সি ভাষার সাথে মিল রয়েছে। কম্পাইলার ডিজাইনের মৌলিক বইগুলিতে বর্ণিত হিসাবে আকর্ষণীয় ভাষাটি একটি প্রসঙ্গ-মুক্ত ব্যাকরণ দ্বারা সংজ্ঞায়িত করা হয় যা পুনরাবৃত্তিমূলক বংশোদ্ভূত পার্সার দ্বারা প্রক্রিয়াজাত হওয়ার জন্য উপযুক্ত। অ্যাকর্নের আরআইএসসি ওএস প্ল্যাটফর্মের জন্য একটি কম্পাইলার, অ্যাসেম্বলার এবং লিঙ্কার সহ আকর্ষণীয় সরঞ্জামের একটি সেট উপলব্ধ করা হয়েছিল। আরআইএসসি ওএস প্ল্যাটফর্মের জন্য পুনর্নির্মাণ করা চার্ম পরবর্তীকালে আর্কাইভ ম্যাগাজিনে পর্যালোচনা করা হয়েছে। ই-বুক প্রোগ্রামিং ইন চার্ম অন দ্য রাস্পবেরি পাই-তে আরও বর্ণনা করা হয়েছে। ব্যাকরণ আকর্ষণীয় ভাষার পৃষ্ঠায় আকর্ষণীয় গঠনের বর্ণনামূলক উদাহরণ সহ ব্যাকাস-নৌর আকারে আকর্ষণীয় ব্যাকরণের সংজ্ঞা সংজ্ঞায়িত করা হয়েছে। ভাষাটি ব্লক কাঠামোগত, প্রতিটি ব্লক একটি ভাষা কীওয়ার্ড দ্বারা প্রবর্তিত হয় যা ব্লকে সঞ্চালিত ক্রিয়াকলাপের বর্ণনামূলক যেমন। ,, (পুনরাবৃত্তি),, (নির্বাচন)। প্রতিটি ব্লক {এবং} সীমানা দ্বারা বেষ্টিত। উপরন্তু, একটি ব্লকের মধ্যে ভাষার লাইনগুলি সাধারণত স্বচ্ছতার জন্য ইন্ডেন্ট করা হয়, যদিও সাদা স্থান উপেক্ষা করা হয় বলে এর প্রয়োজন হয় না। প্রতিটি ব্যাকরণগতভাবে সামঞ্জস্যপূর্ণ পাঠ্য এক্সিকিউটেবল কোড এবং সম্পর্কিত ডেটার একটি সংগ্রহের প্রতিনিধিত্ব করে যা একটি প্রোগ্রাম একত্রিত করার সময় একটি চার্ম টুল সেট দ্বারা একটি উপাদান হিসাবে ব্যবহার করা যেতে পারে যা একটি অপারেটিং সিস্টেমের অধীনে ডেটা প্রসেসিং বা গ্রাফিকাল ইউজার ইন্টারফেসের (জিইউআই) মাধ্যমে ব্যবহারকারীদের সাথে যোগাযোগের মতো দরকারী কাজ করার জন্য সরবরাহ করা পরিষেবাগুলি ব্যবহার করে চালানো যেতে পারে। তথ্যের ধরন চার্ম একটি দৃঢ়ভাবে টাইপ করা ভাষা, তবে সংখ্যাসূচক এবং ভাসমান বিন্দু প্রকারের মধ্যে কিছু অন্তর্নিহিত রূপান্তরের অনুমতি দেয়। নিম্নলিখিত মৌলিক পরিবর্তনশীল প্রকারগুলি সমর্থিত হয়ঃ-পূর্ণসংখ্যা-অক্ষর-বুলিয়ান মান (বা)-ভাসমান বিন্দু সংখ্যা একই ধরনের ডেটা সমষ্টি কীওয়ার্ড ব্যবহার করে ঘোষণা করা যেতে পারে এবং স্থিতিশীলভাবে সূচনা করা যেতে পারে এবং এগুলি বহুমাত্রিক হতে পারে। কীওয়ার্ড ব্যবহার করে বিভিন্ন ধরনের সমষ্টি ঘোষণা করা যেতে পারে এবং এই ধরনের ঘোষণার জন্য সংরক্ষণ বরাদ্দের ক্ষেত্রে একে অপরকে আচ্ছাদন করে এমন রেকর্ড ক্ষেত্রগুলির একটি সংজ্ঞায়িত করা অনুমোদিত। মডিউলগুলি স্ট্যাটিক এবং ডাইনামিক ডেটা সদস্যদের মিশ্রণও একত্রিত করতে পারে। রেকর্ড এবং মডিউল উভয়ের উদাহরণ (শুধুমাত্র গতিশীল বিষয়বস্তু) স্ট্যাকের উপর বা অপারেটরের মাধ্যমে হিপে তাত্ক্ষণিকভাবে দেওয়া যেতে পারে। মডিউলগুলি সি + + ভাষার মতো একই পদ্ধতিতে সম্পদ প্রকাশের জন্য গতিশীল তথ্য এবং সংশ্লিষ্ট ডিকনস্ট্রাক্টর পদ্ধতি শুরু করার জন্য একটি কনস্ট্রাক্টর পদ্ধতিও সংজ্ঞায়িত করতে পারে। একটি মডিউলের ক্ষেত্রের মধ্যে তথ্য বা পদ্ধতির উল্লেখ করা কীওয়ার্ড ব্যবহার করে চূড়ান্ত প্রয়োগের জন্য বিশ্বব্যাপী করা যেতে পারে। যদি কোনও মডিউল অন্য চার্ম মডিউল থেকে কোনও পদ্ধতি বা ডেটা উল্লেখ করতে চায়, তবে এটি কীওয়ার্ড ব্যবহার করে তা করে। মডিউলগুলিতে উদাহরণ ভিত্তিক সদস্য ভেরিয়েবল থাকতে পারে যা অন্তর্নিহিত প্রথম প্যারামিটার পয়েন্টারের মাধ্যমে কীওয়ার্ড দিয়ে ঘোষিত পদ্ধতির মাধ্যমে অ্যাক্সেসযোগ্য। কীওয়ার্ড ব্যবহার করে ডেটা গঠন এবং পদ্ধতির উল্লেখ করা যেতে পারে। কীওয়ার্ড ব্যবহার করে এগুলি উল্লেখ করা যেতে পারে। রেফারেন্স ভেরিয়েবল ব্যবহার করার সময়, তুলনা অপারেটররা দুটি রেফারেন্স ভেরিয়েবল একই তথ্যের (: =:) উল্লেখ করে কিনা বা তারা যে তথ্য নির্দেশ করে তা একই (=) কিনা তা পরীক্ষা করার জন্য উপলব্ধ। উদাহরণ চার্মে লেখা আসল ক্লাসিক হ্যালো ওয়ার্ল্ড প্রোগ্রামটি হলঃ এক্সটপ্রোক রাইট _ স্ট্রিং (রেফ অ্যারে চার); মডিউল হ্যালো; এনটপ্রোক স্টার্ট (); রাইট _ স্ট্রিং ("হ্যালো ওয়ার্ল্ড"); এন্ড _ প্রোক; এন্ড _ মডিউল; এবং বিবর্তনীয় বাক্যবিন্যাসের ভাষা পরিবর্তনের পরবর্তী সমতুল্য সর্বশেষ সংস্করণটি হলঃ ইম্পোর্ট lib.Out; মডিউল হ্যালো {এক্সপোর্ট প্রোক ~ স্টার্ট () {Out.vdu.str ("হ্যালো ওয়ার্ল্ড")। এন. এল. ();} টুল সেট বাস্তবায়নগুলি চার্ম সোর্স কোড এবং অ্যাসেম্বলার সোর্স কোড থেকে অবজেক্ট ফাইল তৈরি করার জন্য একটি কম্পাইলার এবং একটি অ্যাসেম্বলার সরবরাহ করবে বলে আশা করা হচ্ছে, যা পরে একটি এক্সিকিউটেবল প্রোগ্রাম তৈরি করার জন্য লাইব্রেরি এবং রান টাইম সাপোর্ট ফাইলগুলির সাথে একসাথে লিঙ্ক করা যেতে পারে। লেখার সময় শুধুমাত্র একটি চার্ম টুল সেট ইনস্টলেশন ডাউনলোডের জন্য উপলব্ধ (বিনামূল্যে)। সরঞ্জামগুলি নিজেই চার্ম ভাষায় লেখা হয় এবং সোর্স কোডটি জিএনইউ জেনারেল পাবলিক লাইসেন্সের শর্তাবলীর অধীনে উপলব্ধ। এগুলি আরআইএসসি ওএস পিসি এবং এআরএম সিপিইউ সহ প্ল্যাটফর্মগুলিতে (যেমন রাস্পবেরি পাই) এবং আরআইএসসি ওএসের জন্য এমুলেটরগুলিতে চলে যা উইন্ডোজ বা লিনাক্স প্ল্যাটফর্মগুলিতে (যেমন আরপিসিইমু) হোস্ট করা হয়। হার্ডওয়্যার সহায়তায় ডাবল প্রিসিশন ফ্লোটিং পয়েন্ট অপারেশনের জন্য কোড জেনারেশন এআরএম চিপের উপর ভিত্তি করে প্ল্যাটফর্মগুলির জন্য সমর্থিত যা ভিএফপি সংস্করণ 2 সহপ্রসেসর স্থাপত্যকে সমর্থন করে। কম্পাইলার চার্ম কম্পাইলার একটি পুনরাবৃত্তিমূলক অবতরণ একক পাস কম্পাইলার যা ফর্ম ফলাফলের চতুর্ভুজ তৈরি করতে চার্ম সোর্স কোডকে বিশ্লেষণ করেঃ = একটি মধ্যবর্তী ভাষায় lhs op rhs যা গাণিতিক, যৌক্তিক এবং নিয়ন্ত্রণ ক্রিয়াকলাপের প্রবাহকে সমর্থন করে। তথ্য সাময়িকভাবে সংরক্ষণ করা হয় যা কম্পাইলারের পিছনের প্রান্তে রেজিস্টার এবং মেমরির অবস্থানগুলিতে বরাদ্দ করা হয়। বর্তমানে দুটি পিছনের প্রান্ত বিদ্যমান, একটি মটোরোলা 68000 অ্যাসেম্বলি ভাষা তৈরি করে এবং অন্যটি এআরএম স্থাপত্য তৈরি করে। হ্যালো ওয়ার্ল্ড উদাহরণ থেকে চতুর্ভুজ আউটপুট হলঃ প্যারাম l1 $কল রাইট _ স্ট্রিং [প্রোক (রেফ অ্যারে চার) অকার্যকর] এবং অ্যাসেম্বলার আউটপুট হলঃ স্ট্রিং "হ্যালো" xdef _ স্টার্ট অ্যালাইন _ স্টার্ট xref _ রাইট _ স্ট্রিং stmfd sp!, {rp} adr r0, _ l1 $bl _ লিখেং _ স্ট্রিং ldmfd sp!, {pc} ঠিকানা সারিবদ্ধ _ l1 $স্ট্রিং "হ্যালো ওয়ার্ল্ড" সরাসরি শেষ চার্মের আরও সাম্প্রতিক প্রকাশগুলিতে, I/O পদ্ধতিগুলি তাদের নিজস্ব মডিউল ইন এবং আউট-এ বিভক্ত করা হয়েছে। অন্যান্য মানক গ্রন্থাগার পদ্ধতিগুলি ক্ষেত্র হিসাবে পদ্ধতি রেফারেন্স সহ রেকর্ডের একটি সেটে সংগঠিত করা হয়। এই পুনর্গঠনের অংশ হিসাবে, রাইট _ স্ট্রিং পদ্ধতিটি এখন স্ট্যাটিক মেম্বার রেফারেন্স. ভি. ডি. ইউ-এর মাধ্যমে রান টাইম লাইব্রেরি মডিউল আউট-এর মাধ্যমে চালু করা হয়েছে। উপরে 'হ্যালো ওয়ার্ল্ড' উদাহরণে 'রাইট _ স্ট্রিং' ('হ্যালো ওয়ার্ল্ড') হয়ে যায় Out.vdu.str ('হ্যালো ওয়ার্ল্ড')। অ্যাসেম্বলার নির্দেশমূলক স্মৃতিবিদ্যা, তথ্য ঘোষণা এবং নির্দেশাবলী গ্রহণ করে এবং লক্ষ্য প্রসেসরের সিপিইউ দ্বারা সহজেই বোধগম্য তথ্য সম্বলিত একটি অবজেক্ট ফাইল তৈরি করে, বিশেষত বাইনারি কোডে কোড নির্দেশাবলীতে। লিঙ্কার ওয়ান এবং একটি এক্সিকিউটেবল প্রোগ্রাম গঠনের জন্য সংযুক্ত চার্ম মডিউলগুলির মধ্যে একটিতে অবশ্যই স্বাক্ষরগুলির মধ্যে একটির সাথে মেলে এমন একটি পদ্ধতি থাকতে হবেঃ এক্সপোর্ট প্রোক ~ স্টার্ট () এক্সপোর্ট প্রোক ~ স্টার্ট (ইন্ট আরজিসি, রেফ অ্যারে রেফ অ্যারে চার আরজভি) এটি সি এবং জাভা ভাষার প্রধান ফাংশনের অনুরূপ। এখানে আর. জি. সি-তে কমান্ড লাইনে পাস করা পরামিতিগুলির সংখ্যা রয়েছে এবং আর. জি. ভি-তে আর. জি. সি + 1 স্ট্রিংয়ের একটি অ্যারে-র একটি রেফারেন্স রয়েছে (ক্রমানুসারে অবস্থানগত পরামিতি প্রতি একটি স্ট্রিং এবং একটি সমাপ্তি শূন্য)। উপরন্তু, মডিউলগুলিতে ঐচ্ছিকভাবে প্রোগ্রাম স্টার্টআপ এবং শাটডাউনের সময় স্ট্যাটিক স্টার্টআপ এবং শাটডাউন পদ্ধতি থাকতে পারে যা স্বাক্ষরের সাথে মেলেঃ এক্সপোর্ট প্রোক ~ স্টার্টআপ () এক্সপোর্ট প্রোক ~ শাটডাউন () লিঙ্কার প্রোগ্রামটি কার্যকর করার জন্য অপারেটিং সিস্টেমের দ্বারা প্রয়োজনীয় যে কোনও হেডার তথ্য যুক্ত করে এবং রান টাইম লাইব্রেরি অ্যাসেম্বলার সাপোর্ট কোড চালানো নিশ্চিত করে যা রান টাইম এনভায়রনমেন্ট (ডেটা এবং স্ট্যাক পয়েন্টার) সেট করে এবং অ্যাপ্লিকেশনটির স্টার্ট পদ্ধতিতে নিয়ন্ত্রণ প্রেরণ করে। বৈশ্বিক তথ্য এবং কোড রেফারেন্স সহ প্রোগ্রাম গঠনের জন্য সংযুক্ত সমস্ত মডিউলের নাম দেখানো একটি মানচিত্র ফাইল ঐচ্ছিকভাবে তৈরি করা হয় যা ডিবাগার এবং প্রোফাইলারদের দ্বারা ব্যবহার করা যেতে পারে। রেফারেন্স বাহ্যিক লিঙ্ক আরআইএসসি ওএস রিস্ক পিসি এমুলেটর এআরএম ইনফরমেশন সেন্টার প্রোগ্রামিং ল্যাঙ্গুয়েজ আরআইএসসি ওএস প্রোগ্রামিং টুলস-এর জন্য আকর্ষণ উদাহরণ কোড সহ নিবন্ধ