StaDyn (programming language)
স্টাডিন হল. নেট প্ল্যাটফর্মের জন্য একটি অবজেক্ট-ওরিয়েন্টেড সাধারণ-উদ্দেশ্যমূলক প্রোগ্রামিং ভাষা যা একই প্রোগ্রামিং ভাষায় স্ট্যাটিক এবং ডায়নামিক উভয় টাইপিং সমর্থন করে। স্ট্যাডিন কম্পাইলার গতিশীলভাবে টাইপ করা কোডের জন্য টাইপ তথ্য সংগ্রহ করে। এই ধরনের তথ্য সংকলনের সময় প্রকারের ত্রুটি সনাক্ত করতে এবং উল্লেখযোগ্য অপ্টিমাইজেশন সম্পাদন করতে ব্যবহৃত হয়। সেই উদ্দেশ্যে, এটি প্রকার পুনর্গঠন (অনুমান), প্রবাহ-সংবেদনশীল প্রকার, ইউনিয়ন এবং ছেদ প্রকার, সীমাবদ্ধতা-ভিত্তিক টাইপিং, উপনাম বিশ্লেষণ এবং পদ্ধতি বিশেষীকরণ প্রদান করে। এর প্রথম প্রোটোটাইপ 2007 সালে সি #3 এর একটি পরিবর্তন হিসাবে উপস্থিত হয়েছিল। টাইপ অনুমান একটি নতুন প্রকার হিসাবে ভার অন্তর্ভুক্ত করে সমর্থিত হয়েছিল, সি #এর বিপরীতে, যা শুধুমাত্র প্রারম্ভিক স্থানীয় ভেরিয়েবল সংজ্ঞায়িত করার জন্য ভার প্রদান করে। প্রবাহ-সংবেদনশীল ধরনের ভার রেফারেন্সগুলি সংকলক দ্বারা অনুমান করা হয়, যা টাইপ-নিরাপদ হাঁসের টাইপিং প্রদান করে। যখন প্রোগ্রামারের আরও নমনীয় পদ্ধতির প্রয়োজন হয়, তখন ভারের পরিবর্তে ডায়নামিকটাইপ ব্যবহার করা যেতে পারে। যদিও টাইপ অনুমান এখনও সঞ্চালিত হয়, গতিশীল রেফারেন্সগুলি গতিশীল ভাষার কাছাকাছি আচরণ করে। স্টাডিন ডিজাইন করেছেন ওভিয়েডো বিশ্ববিদ্যালয়ের ফ্রান্সিসকো অর্টিন। ভাষাটি ফ্রান্সিসকো অর্টিন ছাড়াও মিগুয়েল গার্সিয়া, জোসে বাল্টাসার গার্সিয়া পেরেজ-স্কোফিল্ড এবং জোসে কুইরোগা সহ গণনামূলক প্রতিফলন গবেষণা দলের বিভিন্ন সদস্যদের দ্বারা প্রয়োগ করা হয়েছে। স্ট্যাডিন নামটি স্ট্যাটিক এবং ডাইনামিকের একটি পোর্টম্যান্টিউ, যা স্ট্যাটিক এবং ডাইনামিক টাইপিং উভয়ের সুবিধা প্রদানের লক্ষ্যকে নির্দেশ করে। বিভিন্ন ধরনের কোডের নমুনা ভেরিয়েবল গতিশীল ভাষার মতো, ভেরিয়েবল একই পরিসরে বিভিন্ন ধরনের হতে পারেঃ সিস্টেম ব্যবহার করে; ক্লাস প্রোগ্রাম {পাবলিক স্ট্যাটিক অকার্যকর মেইন () {Console.Write ("সংখ্যাঃ"); ভার বয়স = Console.In.ReadLine (); Console.WriteLine ("সংখ্যাঃ + age.Length); বয়স = Convert.ToInt32 (বয়স); বয়স + +; Console.WriteLine (" শুভ জন্মদিন, আপনার বয়স + "এখন। "); int দৈর্ঘ্য = age.Length;// * কম্পাইলার ত্রুটি} বয়সের পরিবর্তনশীলকে প্রথমে স্ট্রিং হিসাবে অনুমান করা হয়, তাই এর দৈর্ঘ্যের বৈশিষ্ট্যটি পাওয়া নিরাপদ। তারপর, এটি একটি পূর্ণসংখ্যা ধারণ করে, তাই বয়স + + একটি বৈধ অভিব্যক্তি। কম্পাইলার শেষ লাইনে একটি ত্রুটি সনাক্ত করে, যেহেতু দৈর্ঘ্য আর বয়স দ্বারা সরবরাহ করা হয় না। জেনারেটেড কোডটি বয়সের প্রতিনিধিত্ব করার জন্য একটি একক অবজেক্ট ভেরিয়েবল ব্যবহার করে না, তবে দুটি ভিন্ন ভেরিয়েবল ব্যবহার করে যার প্রকারগুলি স্ট্রিং এবং ইন্ট। এসএসএ ফর্ম গণনা করার জন্য অ্যালগরিদমের পরিবর্তনের মাধ্যমে এটি অর্জন করা হয়। এটি উৎপন্ন কোডটিকে আরও দক্ষ করে তোলে, কারণ রানটাইম টাইপ রূপান্তরগুলির প্রয়োজন হয় না। প্রবাহ-সংবেদনশীল প্রকার ভার এবং গতিশীল চলক প্রবাহ-সংবেদনশীল প্রকার ধারণ করতে পারেঃ সিস্টেম ব্যবহার করে; শ্রেণী প্রোগ্রাম {পাবলিক স্ট্যাটিক অকার্যকর মেইন (স্ট্রিং [] আর্গস) {ভার ব্যতিক্রম; যদি (args.Length> 0) ব্যতিক্রম = নতুন অ্যাপ্লিকেশন ব্যতিক্রম ("একটি অ্যাপ্লিকেশন ব্যতিক্রম। "); অন্যথায় ব্যতিক্রম = নতুন সিস্টেম এক্সসেপশন (" একটি সিস্টেম ব্যতিক্রম। "); Console.WriteLine (exception.Message);}} ব্যতিক্রম থেকে বার্তা সম্পত্তি পাওয়া নিরাপদ কারণ অ্যাপ্লিকেশনএক্সসেপশন এবং সিস্টেমএক্সসেপশন উভয়ই সেই সম্পত্তি সরবরাহ করে। অন্যথায়, একটি সংকলক ত্রুটি প্রদর্শিত হয়। এইভাবে, স্ট্যাডিন একটি টাইপ-নিরাপদ স্ট্যাটিক ডাক-টাইপিং ব্যবস্থা প্রদান করে। নিম্নলিখিত প্রোগ্রামেঃ সিস্টেম ব্যবহার করে; ক্লাস প্রোগ্রাম {পাবলিক স্ট্যাটিক অকার্যকর মেইন (স্ট্রিং [] আর্গস) {ভার ব্যতিক্রম; সুইচ (args.Length) {কেস 0: ব্যতিক্রম = নতুন অ্যাপ্লিকেশন ব্যতিক্রম ("একটি অ্যাপ্লিকেশন ব্যতিক্রম। "); বিরতি; কেস 1: ব্যতিক্রম = নতুন সিস্টেম এক্সসেপশন (" একটি সিস্টেম ব্যতিক্রম। "); বিরতি; ডিফল্টঃ ব্যতিক্রম =" এটি ব্যতিক্রম নয়। "; ব্রেক;} Console.WriteLine (exception.Message);// * ওয়ার দিয়ে কম্পাইলার ত্রুটি, কিন্তু ডাইনামিক Console.WriteLine (exception.Unknown) দিয়ে নয়;// * কম্পাইলার ত্রুটি} বার্তা বৈশিষ্ট্য স্ট্রিং দ্বারা সরবরাহ করা হয় না, তাই exception.Message এর জন্য একটি কম্পাইলার ত্রুটি দেখানো হয়। যাইহোক, যদি আমরা ব্যতিক্রমকে গতিশীল হিসাবে ঘোষণা করি, তবে পূর্ববর্তী প্রোগ্রামটি সংকলক দ্বারা গৃহীত হয়। গতিশীল ভাষার স্বাদ অনুসরণ করে গতিশীল ভার্-এর চেয়ে বেশি নমনীয়। যাইহোক, স্ট্যাটিক টাইপ চেকিং এখনও সঞ্চালিত হয়। এটি কোডের শেষ লাইনে দেখানো হয়েছে, যেখানে কম্পাইলার exception.Unknown-এর জন্য একটি ত্রুটি দেখায়, এমনকি ব্যতিক্রমকে গতিশীল হিসাবে ঘোষণা করা হলেও। এর কারণ হল তিনটি সম্ভাব্য প্রকারের (অ্যাপ্লিকেশন-এক্সসেপশন, সিস্টেম-এক্সসেপশন এবং স্ট্রিং) কোনওটিই অজানা বার্তা সমর্থন করে না। যদিও গতিশীল এবং ভার প্রকারগুলি স্পষ্টভাবে নিরাপদ বা আরও নমনীয় প্রকারের চেকিং পাওয়ার জন্য ব্যবহার করা যেতে পারে, একক ভার রেফারেন্সগুলির গতিশীলতা কমান্ড-লাইন বিকল্প, এক্সএমএল কনফিগারেশন ফাইল এবং ভিজ্যুয়াল স্টুডিওর জন্য একটি প্লাগইন দিয়েও সংশোধন করা যেতে পারে। ভার এবং গতিশীল প্রকারের ক্ষেত্রের প্রকার অনুমান অবজেক্ট ক্ষেত্র হিসাবে ব্যবহার করা যেতে পারেঃ শ্রেণী র্যাপার {ব্যক্তিগত ভার বৈশিষ্ট্য; পাবলিক র্যাপার (ভার বৈশিষ্ট্য) {this.attribute = অ্যাট্রিবিউট;} পাবলিক ভার গেট () {রিটার্ন অ্যাট্রিবিউট;} পাবলিক অকার্যকর সেট (ভার বৈশিষ্ট্য) {this.attribute = অ্যাট্রিবিউট;}} শ্রেণী পরীক্ষা {পাবলিক স্ট্যাটিক অকার্যকর মেইন () {স্ট্রিং এ স্ট্রিং; ইন্ট এ ইন্ট; র্যাপার র্যাপার = নতুন র্যাপার ("হ্যালো"); এ স্ট্রিং = wrapper.get (); এ ইন্ট = wrapper.get ();// * কম্পাইলার ত্রুটি wrapper.set (3); এ স্ট্রিং = wrapper.get ();// * কম্পাইলার প্রতিবার যখন আমরা সেট মেথডকে কল করি, তখন অ্যাট্রিবিউটের ধরনটি আর্গুমেন্টের ধরন হিসাবে অনুমান করা হয়। প্রতিটি বস্তুর একটি সম্ভাব্য ভিন্ন ধরনের বৈশিষ্ট্য রয়েছে, তাই এর ধরন পুরো শ্রেণীর পরিবর্তে প্রতিটি একক দৃষ্টান্তের জন্য সংরক্ষণ করা হয়। এইভাবে, উপরের কোডে নির্দেশিত দুটি লাইন সংকলনের ত্রুটিগুলি রিপোর্ট করে। এই আচরণকে সমর্থন করার জন্য একটি প্রকার-ভিত্তিক উপনাম বিশ্লেষণ অ্যালগরিদম প্রয়োগ করা হয়। সীমাবদ্ধতা-ভিত্তিক প্রকারগুলি আসুন নিম্নলিখিত পদ্ধতিটি বিশ্লেষণ করিঃ পাবলিক স্ট্যাটিক ভার আপার (ভার প্যারামিটার) {রিটার্ন parameter.ToUpper ();} প্যারামিটারের ধরণ এবং ফাংশন রিটার্নের মান কম্পাইলার দ্বারা অনুমান করা হয়। সেই লক্ষ্যে, উপরের পদ্ধতির প্রকারের সাথে একটি সীমাবদ্ধতা যুক্ত করা হয়ঃ যুক্তিটি অবশ্যই কোনও পরামিতি ছাড়াই একটি টুপার পদ্ধতি প্রদান করতে হবে। প্রতিটি আহ্বানের সময়, সীমাবদ্ধতা পরীক্ষা করা হবে। উপরন্তু, উপরের রিটার্নের ধরনটি যুক্তি দ্বারা বাস্তবায়িত সংশ্লিষ্ট টুআপার পদ্ধতির রিটার্নের ধরন হিসাবে অনুমান করা হবে। প্রোগ্রামার প্যারামিটার ঘোষণা করতে ভার বা ডায়নামিক ব্যবহার করতে পারেন, পদ্ধতির আহ্বানের উপর টাইপ চেকিং করার পদ্ধতি পরিবর্তন করতে পারেন। ধরে নেওয়া যাক যে উপরের দিকে পাস করা যুক্তিটি একটি প্রবাহ-সংবেদনশীল প্রকার ধারণ করে (যেমন, অ্যাপ্লিকেশন-ব্যতিক্রম, সিস্টেম-ব্যতিক্রম বা স্ট্রিং ব্যতিক্রম উপরের কোডে পরিবর্তনশীল)। ভার-এর ক্ষেত্রে, সম্ভাব্য সমস্ত ধরনের আর্গুমেন্টকে অবশ্যই টপ প্রদান করতে হবে; ডাইনামিক-এর ক্ষেত্রে, অন্তত একটি প্রকারকে টপ প্রদান করতে হবে। রানটাইম পারফরম্যান্স স্ট্যাডিন দ্বারা সংগৃহীত প্রকারের তথ্য উত্পন্ন কোডে উল্লেখযোগ্য অপ্টিমাইজেশন সম্পাদনের জন্য ব্যবহৃত হয়ঃ প্রকার পরিদর্শন এবং প্রকার কাস্টের সংখ্যা হ্রাস করা হয়, প্রতিফলন এড়ানো হয়, ঘন ঘন প্রকার ক্যাশে করা হয় এবং সীমাবদ্ধতার সাথে পদ্ধতিগুলি বিশেষায়িত হয়। সমস্ত অপ্টিমাইজেশনের উদ্দেশ্য হল রানটাইমে সঞ্চালিত টাইপ-চেকিং ক্রিয়াকলাপের সংখ্যা হ্রাস করা, যা বেশিরভাগ গতিশীল ভাষার প্রধান পারফরম্যান্স পেনাল্টি। এই ধরনের অনেক চেক স্ট্যাডিন কম্পাইলার দ্বারা আগে করা হয়। স্টাডিনের রানটাইম পারফরম্যান্সের একটি বিস্তারিত মূল্যায়ন এখানে বিস্তারিতভাবে দেওয়া হয়েছে। আরও দেখুন ওসিএএমএল স্ট্রংটলক বু রেফারেন্স এক্সটার্নাল লিঙ্ক অফিসিয়াল ওয়েবসাইট গিটহাব রিপোজিটরি কম্পিউট্যাশনাল রিফ্লেকশন রিসার্চ গ্রুপ প্রোগ্রামিং ল্যাঙ্গুয়েজ. নেট প্রোগ্রামিং ল্যাঙ্গুয়েজ ক্লাস-ভিত্তিক প্রোগ্রামিং ল্যাঙ্গুয়েজ ফ্রি কম্পাইলার এবং ইন্টারপ্রেটার অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রোগ্রামিং ল্যাঙ্গুয়েজ 2007 সালে এমআইটি লাইসেন্স ব্যবহার করে তৈরি করা সফ্টওয়্যার স্ট্যাটিক্যালি টাইপ করা প্রোগ্রামিং ল্যাঙ্গুয়েজ ডাইনামিক্যালি টাইপ করা প্রোগ্রামিং ল্যাঙ্গুয়েজ 2007 সফ্টওয়্যার স্প্যানিশ উদ্ভাবন