স্থির ধরনের ভাষার তুলনায় গতিশীল প্রকারের ভাষার সুবিধা এবং সীমাবদ্ধতাগুলি কী?
আরও দেখুন : গতিশীল ভাষার ভালবাসার সাথে কী রয়েছে (আরও অনেক বিতর্কিত থ্রেড ...)
স্থির ধরনের ভাষার তুলনায় গতিশীল প্রকারের ভাষার সুবিধা এবং সীমাবদ্ধতাগুলি কী?
আরও দেখুন : গতিশীল ভাষার ভালবাসার সাথে কী রয়েছে (আরও অনেক বিতর্কিত থ্রেড ...)
উত্তর:
ধরণের এবং ধরণের রূপান্তরগুলি হ্রাস করার জন্য দোভাষীর দক্ষতা বিকাশের সময়কে দ্রুততর করে তোলে, তবে এটি রানটাইম ব্যর্থতাগুলিও উত্সাহিত করতে পারে যা আপনি কেবল স্থিতিযুক্ত টাইপিত ভাষায় পেতে পারেন না যেখানে আপনি সংকলনের সময় এগুলি ধরেন। তবে কার ভাল (বা এমনকি যদি তা সর্বদা সত্য হয়) আজকাল সম্প্রদায়ের (এবং দীর্ঘকাল থেকেই) উষ্ণভাবে আলোচিত।
ইস্যুটি সম্পর্কে একটি ভাল ধারণা হ'ল স্থিতিযুক্ত টাইপিং যেখানে সম্ভব, ডায়নামিক টাইপিং যখন প্রয়োজন: মাইক্রোসফ্টে এরিক মেইজার এবং পিটার ড্রেটন র প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির মধ্যে শীত যুদ্ধের সমাপ্তি :
স্ট্যাটিক টাইপিংয়ের সমর্থকরা যুক্তি দেখান যে স্ট্যাটিক টাইপিংয়ের সুবিধার মধ্যে প্রোগ্রামিং ভুলগুলির পূর্ব সনাক্তকরণ (উদাহরণস্বরূপ একটি বুলিয়ান একটি পূর্ণসংখ্যার যোগ করা রোধ করা), স্বাক্ষর আকারে আরও ভাল ডকুমেন্টেশন (যেমন নামগুলি সমাধানের সময় সংখ্যার এবং যুক্তির প্রকার অন্তর্ভুক্ত করা) অন্তর্ভুক্ত রয়েছে, আরও সংকলক অপ্টিমাইজেশনের সুযোগগুলি (যেমন রিসিভারের সঠিক ধরণেরটি স্ট্যাটিকভাবে জানা গেলে সরাসরি কলগুলির দ্বারা ভার্চুয়াল কলগুলি প্রতিস্থাপন করা), রানটাইম দক্ষতা বৃদ্ধি (যেমন সমস্ত মানকে একটি ডায়নামিক ধরণের বহন করার প্রয়োজন হয় না), এবং আরও ভাল ডিজাইনের সময় বিকাশকারী অভিজ্ঞতা (যেমন জানা প্রাপ্তির ধরণ, আইডিই সমস্ত প্রযোজ্য সদস্যের একটি ড্রপ-ডাউন মেনু উপস্থাপন করতে পারে)। স্ট্যাটিক টাইপিং ধর্মান্ধরা আমাদের বিশ্বাস করতে চেষ্টা করে যে "ভাল-টাইপ করা প্রোগ্রামগুলি ভুল হতে পারে না"। যদিও এটি অবশ্যই চিত্তাকর্ষক মনে হচ্ছে, এটি একটি বরং শূন্য বিবৃতি। স্ট্যাটিক টাইপ চেকিং আপনার প্রোগ্রামের রানটাইম আচরণের একটি সংকলন-সময় বিমূর্ততা এবং তাই এটি কেবল আংশিক শব্দ এবং অসম্পূর্ণ incom এর অর্থ হ'ল প্রোগ্রামগুলি এখনও সেই বৈশিষ্ট্যগুলির কারণে ভুল হতে পারে যা প্রকার-পরীক্ষক দ্বারা ট্র্যাক করা হয় না এবং এমন প্রোগ্রাম রয়েছে যা তারা ভুল হতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। স্ট্যাটিক টাইপ চেকিং আপনার প্রোগ্রামের রানটাইম আচরণের একটি সংকলন-সময় বিমূর্ততা এবং তাই এটি কেবল আংশিক শব্দ এবং অসম্পূর্ণ incom এর অর্থ হ'ল প্রোগ্রামগুলি এখনও সেই বৈশিষ্ট্যগুলির কারণে ভুল হতে পারে যা প্রকার-পরীক্ষক দ্বারা ট্র্যাক করা হয় না এবং এমন প্রোগ্রাম রয়েছে যা তারা ভুল হতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। স্ট্যাটিক টাইপ চেকিং আপনার প্রোগ্রামের রানটাইম আচরণের একটি সংকলন-সময় বিমূর্ততা এবং তাই এটি কেবল আংশিক শব্দ এবং অসম্পূর্ণ incom এর অর্থ হ'ল প্রোগ্রামগুলি এখনও সেই বৈশিষ্ট্যগুলির কারণে ভুল হতে পারে যা প্রকার-পরীক্ষক দ্বারা ট্র্যাক করা হয় না এবং এমন প্রোগ্রাম রয়েছে যা তারা ভুল হতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। এবং তাই এটি অগত্যা কেবল আংশিক শব্দ এবং অসম্পূর্ণ। এর অর্থ হ'ল প্রোগ্রামগুলি এখনও সেই বৈশিষ্ট্যগুলির কারণে ভুল হতে পারে যা প্রকার-পরীক্ষক দ্বারা ট্র্যাক করা হয় না এবং এমন প্রোগ্রাম রয়েছে যা তারা ভুল হতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। এবং তাই এটি অগত্যা কেবল আংশিক শব্দ এবং অসম্পূর্ণ। এর অর্থ হ'ল প্রোগ্রামগুলি এখনও সেই বৈশিষ্ট্যগুলির কারণে ভুল হতে পারে যা প্রকার-পরীক্ষক দ্বারা ট্র্যাক করা হয় না এবং এমন প্রোগ্রাম রয়েছে যা তারা ভুল হতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। এবং এমন কিছু প্রোগ্রাম রয়েছে যেগুলি ভুল করতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন। এবং এমন কিছু প্রোগ্রাম রয়েছে যেগুলি ভুল করতে না পারলে টাইপ-চেক করা যায় না। স্ট্যাটিক টাইপিংকে কম আংশিক এবং আরও সম্পূর্ণ কারণ তৈরি করার প্রবণতা অতিরিক্ত জটিল এবং বহিরাগত হয়ে ওঠে যেমন "ফ্যান্টম টাইপস" [১১] এবং "দোলা দিয়ে টাইপস" [১০] এর মত ধারণাগুলি দ্বারা প্রত্যক্ষিত হয়। এটি আপনার পায়ের সাথে একটি বল এবং চেইন দিয়ে ম্যারাথন চালানোর চেষ্টা করার মতো এবং বিজয়ী চিৎকার করে বলেছিল যে প্রথম মাইল পরে আপনাকে জামিন দেওয়া হলেও আপনি এটি প্রায় তৈরি করেছেন।
গতিশীলভাবে টাইপ করা ভাষার সমর্থকরা যুক্তি দেন যে স্ট্যাটিক টাইপিং খুব কঠোর এবং গতিশীল ভাষাগুলির কোমলতা পরিবর্তন বা অজানা প্রয়োজনীয়তা সহ প্রোটোটাইপিং সিস্টেমে আদর্শভাবে উপযুক্ত করে তোলে বা অপ্রত্যাশিতভাবে পরিবর্তিত (সিস্টেম এবং ডেটা এবং অ্যাপ্লিকেশন সংহতকরণ) অন্যান্য সিস্টেমের সাথে যোগাযোগ করে। অবশ্যই, ডায়নামিকালি টাইপ করা ভাষাগুলি সত্যিকারের গতিশীল প্রোগ্রাম আচরণ যেমন মেথড ইন্টারসেপশন, ডায়নামিক লোডিং, মোবাইল কোড, রানটাইম রিফ্লেকশন ইত্যাদির জন্য অপরিহার্য, স্ক্রিপ্টিং সম্পর্কিত সমস্ত কাগজগুলির জননে [১]] জন অস্টারহাউট যুক্তিযুক্ত যে স্ট্যাটিস্টিকালি টাইপড সিস্টেমসমূহ প্রোগ্রামিং ল্যাঙ্গুয়েজ কোডকে কম পুনঃব্যবহারযোগ্য, আরও ভার্বোজ, বেশি সুরক্ষিত নয় এবং গতিযুক্ত টাইপযুক্ত স্ক্রিপ্টিং ভাষার চেয়ে কম ভাবপূর্ণ করে তোলে। এই যুক্তিটি গতিশীল টাইপ করা স্ক্রিপ্টিং ভাষার প্রচুর সমর্থকরা আক্ষরিক অর্থেই ছড়িয়ে দিয়েছেন। আমরা যুক্তি দিই যে এটি একটি ত্রুটিযুক্ত এবং তর্কযুক্ত হিসাবে একই বিভাগে পড়ে যে ঘোষিত প্রোগ্রামিংয়ের সারমর্মটি নির্ধারণ করে দিচ্ছে। বা জন হিউজেস [৮] যেমন বলেছেন, বৈশিষ্ট্যগুলি বাদ দিয়ে কোনও ভাষাকে আরও শক্তিশালী করা যৌক্তিক অসম্ভবতা। রানটাইমের জন্য সমস্ত ধরণের-চেকিংয়ে বিলম্ব করা একটি ভাল বিষয়, এই সত্যের সাথে উটপাখির কৌশলগুলি খেলছে যে ত্রুটিগুলি যত তাড়াতাড়ি সম্ভব উন্নয়নের প্রক্রিয়াতে ধরা উচিত। বৈশিষ্ট্যগুলি বাদ দিয়ে কোনও ভাষাকে আরও শক্তিশালী করা একটি যৌক্তিক অসম্ভবতা। রানটাইমের জন্য সমস্ত ধরণের-চেকিংয়ে বিলম্ব করা একটি ভাল বিষয়, এই সত্যের সাথে উটপাখির কৌশলগুলি খেলছে যে ত্রুটিগুলি যত তাড়াতাড়ি সম্ভব উন্নয়নের প্রক্রিয়াতে ধরা উচিত। বৈশিষ্ট্যগুলি বাদ দিয়ে কোনও ভাষাকে আরও শক্তিশালী করা একটি যৌক্তিক অসম্ভবতা। রানটাইমের জন্য সমস্ত ধরণের-চেকিংয়ে বিলম্ব করা একটি ভাল বিষয়, এই সত্যের সাথে উটপাখির কৌশলগুলি খেলছে যে ত্রুটিগুলি যত তাড়াতাড়ি সম্ভব উন্নয়নের প্রক্রিয়াতে ধরা উচিত।
স্ট্যাটিক টাইপ সিস্টেমগুলি কিছু ত্রুটিগুলি স্থিতিশীলভাবে মুছে ফেলার চেষ্টা করে, প্রোগ্রামটি পরিচালনা না করে পরীক্ষা করে দেখে এবং নির্দিষ্ট ক্ষেত্রে দৃ sound়তা প্রমাণ করার চেষ্টা করে। কিছু টাইপ সিস্টেম অন্যদের চেয়ে বেশি ত্রুটি ধরতে সক্ষম হয়। উদাহরণস্বরূপ, সি # সঠিকভাবে ব্যবহারের সময় নাল পয়েন্টার ব্যতিক্রমগুলি দূর করতে পারে, যখন জাভাতে এর মতো শক্তি নেই। Twelf একটি টাইপ সিস্টেম যা আসলে হয়েছে গ্যারান্টী বা নিশ্চয়তা প্রমাণাদি বন্ধ করে দেব , "সমাধানে" বিরাম সমস্যা ।
যাইহোক, কোনও টাইপ সিস্টেম নিখুঁত। একটি নির্দিষ্ট শ্রেণীর ত্রুটিগুলি দূর করার জন্য, তাদের অবশ্যই কিছু নিখুঁত বৈধ প্রোগ্রাম বাতিল করতে হবে যা নিয়ম লঙ্ঘন করে। এই কারণেই দ্বাদশটি প্রকৃতপক্ষে থামার সমস্যাটি সমাধান করে না, এটি কেবলমাত্র বিপুল সংখ্যক নিখুঁত বৈধ প্রমাণ ছড়িয়ে দিয়ে এড়িয়ে যায় যা অদ্ভুত উপায়ে শেষ হয়। অনুরূপভাবে, জাভা টাইপ সিস্টেম ক্লোরজুর এর PersistentVector
প্রয়োগগুলি ভিন্ন ভিন্ন অ্যারে ব্যবহারের কারণে প্রত্যাখ্যান করে। এটি রানটাইম এ কাজ করে তবে টাইপ সিস্টেম এটি যাচাই করতে পারে না।
যে কারণে, বেশিরভাগ ধরণের সিস্টেমগুলি স্ট্যাটিক চেকারকে ওভাররাইড করার উপায়গুলি "পলায়ন" সরবরাহ করে। বেশিরভাগ ভাষার ক্ষেত্রে এগুলি ingালাইয়ের রূপ নেয়, যদিও কিছু (সি # এবং হাস্কেলের মতো) এর পুরো মোড রয়েছে যা "অনিরাপদ" হিসাবে চিহ্নিত রয়েছে।
বিষয়গতভাবে, আমি স্থির টাইপিং পছন্দ করি। যথাযথভাবে প্রয়োগ করা হয়েছে (ইঙ্গিত: জাভা নয় ), স্ট্যাটিক টাইপ সিস্টেমটি উত্পাদন সিস্টেমটি ক্র্যাশ করার আগে ত্রুটিগুলি ছাঁটাইতে এক বিশাল সহায়তা হতে পারে। গতিময়ভাবে টাইপ করা ভাষাগুলিতে আরও ইউনিট পরীক্ষার প্রয়োজন হয়, যা সর্বোত্তম সময়ে ক্লান্তিকর। এছাড়াও, স্ট্যাটিকালি টাইপ করা ভাষাগুলিতে কিছু বৈশিষ্ট্য থাকতে পারে যা গতিশীল টাইপ সিস্টেমে অসম্ভব বা অনিরাপদ ( অন্তর্নিহিত রূপান্তরগুলি মনে মনে বসন্ত)। এটি সমস্ত প্রয়োজনীয়তা এবং বিষয়গত স্বাদ একটি প্রশ্ন। আমি সমাবেশে ব্যাকআপ স্ক্রিপ্ট লেখার চেষ্টা করতে বা জাভা ব্যবহার করে একটি কার্নেল প্যাচ করার চেয়ে রুবিতে পরবর্তী গ্রীকটি আর তৈরি করব না।
ওহ, এবং যে লোকেরা বলে যে " এক্স টাইপিং y টাইপিংয়ের চেয়ে 10 গুণ বেশি উত্পাদনশীল " তারা কেবল ধোঁয়া বাধছে। গতিশীল টাইপিং অনেক ক্ষেত্রে দ্রুত "অনুভব" করতে পারে তবে আপনি একবার আপনার অভিনব অ্যাপ্লিকেশনটি চালানোর চেষ্টা করার পরে তা হারিয়ে যায় । তেমনি স্ট্যাটিক টাইপিং এটিকে নিখুঁত সুরক্ষার জাল বলে মনে হতে পারে তবে জাভাতে আরও কিছু জটিল জেনেরিক ধরণের সংজ্ঞা দেখে এক নজর বেশিরভাগ বিকাশকারীকে চোখের দৃষ্টিহীনদের জন্য তাত্পর্যপূর্ণ করে তোলে। এমনকি টাইপ সিস্টেম এবং উত্পাদনশীলতা সহ, কোনও রূপালী বুলেট নেই।
চূড়ান্ত দ্রষ্টব্য: গতিশীল টাইপিংয়ের সাথে স্থির তুলনা করার সময় কার্য সম্পাদনের বিষয়ে চিন্তা করবেন না। ভি 8 এবং ট্রেসমনকের মতো আধুনিক জেআইটি বিপজ্জনকভাবে স্থিত ভাষার পারফরম্যান্সের কাছাকাছি চলে আসছে। এছাড়াও, জাভা আসলে অন্তর্নিহিত গতিশীল মধ্যবর্তী ভাষায় সংকলন করে এমন একটি বিষয় হওয়া উচিত যে বেশিরভাগ ক্ষেত্রে ডায়নামিক টাইপিং এমন বিশাল পারফরম্যান্স-কিলার নয় যা কিছু লোক এটি তৈরি করে।
dadd
কারণ তিনি আগে থেকেই জানেন যে অপারেশনগুলি হ'ল double
।
ঠিক আছে, উভয়ই খুব, খুব খুব ভুল বোঝাবুঝি এবং দুটি সম্পূর্ণ ভিন্ন জিনিস। যে পারস্পরিক একচেটিয়া নয় ।
স্ট্যাটিক প্রকারগুলি ভাষার ব্যাকরণের একটি সীমাবদ্ধতা। স্ট্যাটিকালি টাইপড ল্যাঙ্গগুলি কঠোরভাবে প্রসঙ্গমুক্ত নয় বলা যেতে পারে। সহজ সত্যটি হ'ল কোনও ভাষা প্রসঙ্গমুক্ত ব্যাকরণে বুদ্ধিমানভাবে প্রকাশ করা অসুবিধাজনক হয়ে ওঠে যা এর সমস্ত ডেটা কেবল বিট ভেক্টর হিসাবে বিবেচনা করে না। স্ট্যাটিক টাইপ সিস্টেমগুলি ভাষার ব্যাকরণের একটি অংশ যদি থাকে তবে তারা কেবল এটিকে প্রসঙ্গমুক্ত ব্যাকরণের চেয়ে বেশি সীমাবদ্ধ করে, ব্যাকরণগত চেকগুলি সত্যিকারভাবে উত্সের দুটি পাসে ঘটে। স্ট্যাটিক প্রকারগুলি টাইপ থিওরির গাণিতিক ধারণার সাথে মিলে যায়, গণিতে টাইপ থিওরি কেবল কিছু অভিব্যক্তির বৈধতা সীমাবদ্ধ করে। মত, আমি 3 + [4,7]
গণিতে বলতে পারি না , এটি এর টাইপ থিওরির কারণেই।
স্থিতিশীল প্রকারগুলি তাত্ত্বিক দৃষ্টিকোণ থেকে 'ত্রুটিগুলি রোধ করার' উপায় নয়, এগুলি ব্যাকরণের একটি সীমাবদ্ধতা। প্রকৃতপক্ষে, যদি +, 3 এবং অন্তরগুলির নিয়মিত সেট তাত্ত্বিক সংজ্ঞা থাকে তবে আমরা টাইপ সিস্টেমটিকে সরিয়ে দিলে 3 + [4,7]
একটি সেট সুসংগতভাবে সংজ্ঞায়িত ফলাফল পেয়ে যায় that's 'রানটাইম টাইপ ত্রুটি' তাত্ত্বিকভাবে অস্তিত্বহীন, টাইপ সিস্টেমের ব্যবহারিক ব্যবহার হ'ল অপারেশনগুলি রোধ করা যা মানুষের পক্ষে কোনও ধারণা রাখে না। অপারেশনগুলি এখনও অবশ্যই বিটগুলির স্থানান্তর এবং হেরফের হয়।
এটির মূল বিষয় হ'ল কোনও ধরণের সিস্টেম সিদ্ধান্ত নিতে পারে না যে এই জাতীয় ক্রিয়াকলাপগুলি ঘটতে যাচ্ছে কিনা তা চালানোর অনুমতি দেওয়া হবে কিনা। যেমনটি রয়েছে, ঠিক তেমন সমস্ত সম্ভাব্য প্রোগ্রামের সেটটি বিভাজন করুন যাঁদের 'টাইপ ত্রুটি' হতে চলেছে এবং যা নেই। এটি কেবল দুটি কাজ করতে পারে:
1: প্রমাণ করুন যে কোনও প্রোগ্রামে টাইপ ত্রুটিগুলি ঘটতে চলেছে
2: প্রমাণ করুন যে তারা কোনও প্রোগ্রামে ঘটবে না
এটিকে দেখে মনে হচ্ছে আমি নিজের সাথে বিরোধিতা করছি। তবে সি বা জাভা টাইপ চেকার যা করেন তা হ'ল এটি কোনও প্রোগ্রামকে 'অযৌক্তিক' হিসাবে প্রত্যাখ্যান করে, বা এটি 'টাইপ ত্রুটি' হিসাবে উল্লেখ করে যদি এটি ২ এ সফল না হতে পারে তবে এটি প্রমাণ করতে পারে না যে তারা ঘটবে না, এর অর্থ এই নয় যে তারা ঘটবে না, এর অর্থ হ'ল এটি প্রমাণ করতে পারে না। এটি খুব ভালভাবেই হতে পারে যে কোনও প্রোগ্রামে কোনও ধরণের ত্রুটি থাকবে না কেবল তা কারণ এটি সংকলক দ্বারা প্রমাণিত হতে পারে না তা প্রত্যাখ্যান করা হয়। একটি সহজ উদাহরণif(1) a = 3; else a = "string";
, অবশ্যই এটি সর্বদা সত্য, তাই অন্য শাখা প্রোগ্রামে কখনও চালিত হবে না এবং কোনও ধরণের ত্রুটি ঘটবে না। তবে এটি এই পদ্ধতিগুলিকে সাধারণ উপায়ে প্রমাণ করতে পারে না, সুতরাং এটি প্রত্যাখাত। এটি নিজের থেকে নিজেকে রক্ষা করার ক্ষেত্রে স্ট্যাটিক্যালি টাইপ করা অনেক ভাষার প্রধান দুর্বলতা, আপনার প্রয়োজন না হলে আপনি অগত্যা সুরক্ষিতও হন।
তবে, জনপ্রিয় বিশ্বাসগুলির বিপরীতে, এখানেও নিয়মিতভাবে টাইপ করা ভাষা রয়েছে যা নীতি 1 অনুসারে কাজ করে They তারা কেবলমাত্র এমন সমস্ত প্রোগ্রাম প্রত্যাখ্যান করে যা এর প্রমান করতে পারে যে এটি কোনও ধরণের ত্রুটির কারণ হতে পারে, এবং যে সমস্ত প্রোগ্রাম তারা করতে পারে না তা পাস করে। সুতরাং এটি সম্ভব যে তারা এমন প্রোগ্রামগুলিকে মঞ্জুরি দেয় যাগুলির মধ্যে টাইপ ত্রুটি রয়েছে, একটি ভাল উদাহরণ টাইপড র্যাকেট, এটি গতিশীল এবং স্ট্যাটিক টাইপিংয়ের মধ্যে সংকর। এবং কিছু তর্ক করবে যে আপনি এই ব্যবস্থায় উভয় বিশ্বের সেরা পাবেন।
স্ট্যাটিক টাইপিংয়ের আরেকটি সুবিধা হ'ল টাইপগুলি সংকলন সময়ে জানা যায় এবং এইভাবে সংকলক এটি ব্যবহার করতে পারে। আমরা যদি জাভাতে থাকি "string" + "string"
বা 3 + 3
, উভয় +
টোকন পাঠ্যর শেষে সম্পূর্ণ ভিন্ন অপারেশন এবং ডেটামকে উপস্থাপন করি তবে সংকলকটি জানেন যে একা কী ধরণের থেকে চয়ন করতে পারেন।
এখন, আমি এখানে একটি খুব বিতর্কিত বিবৃতি দিতে যাচ্ছি তবে আমার সাথে সহ্য করুন: 'গতিশীল টাইপিং' বিদ্যমান নেই ।
খুব বিতর্কিত মনে হচ্ছে, তবে এটি সত্য, গতিময়ভাবে টাইপ করা ভাষাগুলি তাত্ত্বিক দৃষ্টিভঙ্গিহীন টাইপযুক্ত । এগুলি কেবলমাত্র এক প্রকারের সাথে স্ট্যাটিকালি টাইপ করা ভাষা। বা সহজ কথায় বলতে গেলে, এগুলি এমন ভাষা যা বাস্তবে ব্যাকরণগতভাবে একটি প্রসঙ্গে নিখরচ্য ব্যাকরণ দ্বারা বাস্তবে উত্পাদিত হয়।
তাদের ধরণ নেই কেন? কারণ প্রতিটি অপারেশন প্রতিটি অপারেটরে সংজ্ঞায়িত এবং অনুমোদিত, তাই 'রানটাইম টাইপ ত্রুটি' ঠিক কী? এটি একটি তাত্ত্বিক উদাহরণ থেকে সম্পূর্ণরূপে একটি পার্শ্ব-প্রতিক্রিয়া । যদি print("string")
স্ট্রিং প্রিন্ট করে এমনটি করা একটি ক্রিয়াকলাপ হয় length(3)
, তবে পূর্বের string
স্ট্যান্ডার্ড আউটপুটটিতে লেখার পার্শ্ব প্রতিক্রিয়া রয়েছে , পরে কেবল error: function 'length' expects array as argument.
এটিই। তাত্ত্বিক দৃষ্টিকোণ থেকে গতিযুক্ত টাইপ করা ভাষা বলে কোনও জিনিস নেই। এরা টাইপড নয়
ঠিক আছে, 'গতিশীল টাইপড' ভাষার স্পষ্টত সুবিধাটি হ'ল ভাববাদী শক্তি, একটি টাইপ সিস্টেমটি ভাববাদী শক্তির সীমাবদ্ধতা ছাড়া কিছুই নয়। এবং সাধারণভাবে, একটি টাইপ সিস্টেম সহ ভাষাগুলির প্রকৃতপক্ষে সেই সমস্ত ক্রিয়াকলাপের জন্য একটি সংজ্ঞায়িত ফলাফল থাকে যা যদি টাইপ সিস্টেমটিকে কেবল উপেক্ষা করা না হয় তবে ফলাফলগুলি মানুষের কাছে বোধগম্য হবে না। অনেকগুলি ভাষা টাইপ সিস্টেম প্রয়োগ করার পরে তাদের টিউরিংয়ের সম্পূর্ণতা হারাতে পারে।
এর স্পষ্ট অসুবিধাটি হ'ল অপারেশনগুলি ঘটতে পারে যা এমন ফলাফল দেয় যা মানুষের কাছে অযৌক্তিক। এ থেকে রক্ষা পেতে, গতিশীলভাবে টাইপ করা ভাষাগুলি সাধারণত সেই অপারেশনাল ফলাফল তৈরি করার পরিবর্তে এই ক্রিয়াকলাপগুলিকে নতুনভাবে সংজ্ঞায়িত করে, ত্রুটি লেখার পার্শ্ব প্রতিক্রিয়া থাকার কারণে এবং সম্ভবত প্রোগ্রামটি পুরোপুরি বন্ধ করে দেওয়ার পরিবর্তে তারা এটিকে পুনরায় সংজ্ঞায়িত করে। এটি মোটেও 'ত্রুটি' নয়, প্রকৃতপক্ষে ভাষার স্পেসিফিকেশনটি এটিকে বোঝায়, এটি তাত্ত্বিক দৃষ্টিকোণ থেকে একটি স্ট্রিং প্রিন্ট করার মতো ভাষার আচরণ behavior প্রকারের সিস্টেমগুলি প্রোগ্রামারকে কোড প্রবাহ সম্পর্কে যুক্তিযুক্ত কারণ এই তা না ঘটে তা নিশ্চিত করতে বাধ্য করে। বা প্রকৃতপক্ষে, যুক্তি যাতে এটি করেঘটনাকে ডিবাগিংয়ের জন্য কিছু পয়েন্টেও কাজে লাগানো যেতে পারে, এটি দেখানো হয় যে এটি কোনও 'ত্রুটি' নয়, তবে ভাষার একটি সংজ্ঞায়িত সম্পত্তি। বাস্তবে, 'ডায়নামিক টাইপিং'-এর একক বাকী অংশগুলি বেশিরভাগ ভাষায় শূন্য দ্বারা একটি বিভাগের বিরুদ্ধে রক্ষা করে। এটি ডায়নামিক টাইপিং যা, কোনও প্রকার নেই, অন্য কোনও সংখ্যার চেয়ে শূন্যের চেয়ে আলাদা কোনও ধরণের টাইপ নেই। লোকেদের যাকে 'টাইপ' বলা হয় তা হ'ল অ্যারের দৈর্ঘ্য বা স্ট্রিংয়ের প্রথম অক্ষরের মতো ড্যাটামের অন্য একটি সম্পত্তি। এবং অনেকগুলি গতিশীল টাইপ করা ভাষা আপনাকে পছন্দ মতো জিনিসগুলি লেখার অনুমতি দেয় "error: the first character of this string should be a 'z'"
।
আরেকটি বিষয় হ'ল ডায়নামিকালি টাইপ করা ভাষাগুলিতে রানটাইম এ টাইপ পাওয়া যায় এবং সাধারণত এটি পরীক্ষা করে এটি মোকাবেলা করতে এবং এ থেকে সিদ্ধান্ত নিতে পারে। অবশ্যই, তত্ত্বগতভাবে এটি কোনও অ্যারের প্রথম চরটি অ্যাক্সেস করা এবং এটি কী তা দেখার চেয়ে আলাদা নয়। প্রকৃতপক্ষে, আপনি নিজের গতিশীল সি তৈরি করতে পারেন, কেবলমাত্র দীর্ঘ টাইপের মতো মাত্র এক প্রকারের ব্যবহার করুন এবং আপনার 'টাইপ' সংরক্ষণ করতে এবং এটির জন্য পরীক্ষা করে ফাংশন বা পূর্ণসংখ্যা সংযোজন সম্পাদন করতে এর প্রথম 8 বিট ব্যবহার করুন। আপনার কাছে এক ধরণের স্ট্যাটিকালি টাইপ করা ভাষা বা একটি গতিশীল ভাষা রয়েছে।
বাস্তবে এই সমস্ত শোতে, স্ট্যাটিকালি টাইপ করা ভাষা সাধারণত বাণিজ্যিক সফ্টওয়্যার লেখার প্রসঙ্গে ব্যবহৃত হয়, অন্যদিকে গতিশীলভাবে টাইপ করা ভাষা কিছু সমস্যা সমাধান এবং কিছু কাজ স্বয়ংক্রিয় করার প্রসঙ্গে ব্যবহৃত হয়। স্ট্যাটিকালি টাইপ করা ভাষায় লিখিত কোডটি কেবল দীর্ঘ সময় নেয় এবং জটিল হয় কারণ আপনি যা জানেন এমন কাজগুলি করতে পারেন না যা ঠিক হয়ে যেতে চলেছে তবে টাইপ সিস্টেমটি এখনও আপনার ত্রুটিগুলির জন্য নিজেকে রক্ষা করে। অনেক কোডার এমনকি এটি বুঝতে পারে না যে তারা এটি করে কারণ এটি তাদের সিস্টেমে রয়েছে তবে আপনি যখন স্থির ভাষায় কোড করেন, আপনি প্রায়শই এই বিষয়টি নিয়ে কাজ করেন যে টাইপ সিস্টেম আপনাকে এমন কাজ করতে দেয় না যা ভুল হতে পারে না, কারণ এটি এটা ভুল হতে হবে প্রমাণ করতে পারবেন না।
যেমনটি আমি উল্লেখ করেছি, 'স্ট্যাটিকালি টাইপড' এর অর্থ সাধারন ক্ষেত্রে কেস 2, নির্দোষ প্রমাণিত না হওয়া পর্যন্ত দোষী। তবে কিছু ভাষা, যা টাইপ থিওরি থেকে তাদের টাইপ সিস্টেমটি ব্যবহার করে না নিয়ম 1: নির্দোষ প্রমাণিত হওয়া পর্যন্ত নির্দোষ, যা আদর্শ সংকর হতে পারে। সুতরাং, সম্ভবত টাইপড র্যাকেটটি আপনার জন্য।
এছাড়াও, ভাল, আরও অযৌক্তিক এবং চরম উদাহরণের জন্য, আমি বর্তমানে এমন একটি ভাষা প্রয়োগ করছি যেখানে 'টাইপস' সত্যই অ্যারের প্রথম চরিত্র, সেগুলি ডেটা, 'টাইপ', 'টাইপ' এর ডেটা, যা নিজেই একটি টাইপ এবং ড্যাটাম, একমাত্র ডাটাম যা টাইপ হিসাবে নিজেকে থাকে। প্রকারগুলি সীমাবদ্ধ বা স্থিতিশীলভাবে সীমাবদ্ধ নয় তবে রানটাইম তথ্যের ভিত্তিতে নতুন ধরণের তৈরি হতে পারে।
সম্ভবত গতিশীল টাইপিংয়ের একক বৃহত্তম "সুবিধা" হ'ল অল্প শিখার বক্ররেখা। টাইপ সীমাবদ্ধতার মতো কর্নারের ক্ষেত্রেগুলির জন্য শিখার জন্য কোনও টাইপ সিস্টেম নেই এবং কোনও ত্রি-তুচ্ছ সিনট্যাক্স নেই। এটি গতিশীল টাইপিংকে অনেক বেশি লোকের কাছে অ্যাক্সেসযোগ্য করে তোলে এবং এমন অনেক ব্যক্তির পক্ষে সম্ভাব্য যাঁর জন্য পরিশীলিত স্ট্যাটিক টাইপ সিস্টেমের নাগালের বাইরে রয়েছে। ফলস্বরূপ, গতিশীল টাইপিং শিক্ষার প্রসঙ্গে (যেমন স্কিম / পাইথন এমআইটিতে) এবং নন-প্রোগ্রামারগুলির জন্য ডোমেন-নির্দিষ্ট ভাষা (যেমন ম্যাথমেটিকা ) a গতিশীল ভাষাগুলিও কুলুঙ্গিতে ধরা পড়েছে যেখানে তাদের কম বা কোনও প্রতিযোগিতা নেই (যেমন জাভাস্ক্রিপ্ট)।
সর্বাধিক সংক্ষিপ্ত গতিশীল টাইপযুক্ত ভাষা (যেমন পার্ল, এপিএল, জে, কে, ম্যাথেমেটিকা ) ডোমেইন নির্দিষ্ট এবং এগুলি যে নকশাগুলির জন্য নকশাকৃত হয়েছিল তার মধ্যে সবচেয়ে সংক্ষিপ্ত সাধারণ-উদ্দেশ্যে স্ট্যাটিকালি-টাইপ করা ভাষাগুলির (যেমন ওসিএএমএল ) তুলনায় আরও সংক্ষিপ্ত হতে পারে can ।
ডায়নামিক টাইপিংয়ের প্রধান অসুবিধাগুলি হ'ল:
রান টাইম ধরণের ত্রুটি।
একই স্তরের যথার্থতা অর্জন করা খুব কঠিন বা এমনকি ব্যবহারিকভাবে অসম্ভব হতে পারে এবং এর জন্য আরও অনেক বেশি পরীক্ষার প্রয়োজন হয়।
কোনও সংকলক-যাচাই করা ডকুমেন্টেশন নেই।
পরিশীলিত অপ্টিমাইজেশনের উপর নির্ভরশীলতার কারণে দুর্বল পারফরম্যান্স (সাধারণত রান-টাইমে তবে কখনও কখনও পরিবর্তে সংকলন সময়ে, উদাহরণস্বরূপ স্টালিন স্কিম) এবং অপ্রত্যাশিত পারফরম্যান্স।
ব্যক্তিগতভাবে, আমি গতিশীল ভাষাগুলিতে বড় হয়েছি তবে পেশাদার হিসাবে 40 এর একটি মেরু দিয়ে তাদের স্পর্শ করব না যতক্ষণ না অন্য কোনও কার্যকর বিকল্প ছিল না।
আর্টিমার টাইপিং থেকে: শক্তিশালী বনাম দুর্বল, স্ট্যাটিক বনাম গতিশীল নিবন্ধ:
দৃ strong় টাইপিং মেলানো অপারেশনের মধ্যে মিশ্রণ ক্রিয়াকে বাধা দেয়। প্রকারের মিশ্রণের জন্য আপনাকে অবশ্যই একটি স্পষ্ট রূপান্তর ব্যবহার করতে হবে
দুর্বল টাইপিংয়ের অর্থ আপনি সুস্পষ্ট রূপান্তর ছাড়াই প্রকারগুলি মেশাতে পারেন
পাস্কাল কোস্টানজার পেপারে ডায়নামিক বনাম স্ট্যাটিক টাইপিং - একটি প্যাটার্ন-ভিত্তিক বিশ্লেষণ (পিডিএফ) তিনি দাবি করেছেন যে কিছু ক্ষেত্রে স্ট্যাটিক টাইপিং ডায়নামিক টাইপিংয়ের চেয়ে ত্রুটি-ঝুঁকির ঝুঁকির চেয়ে বেশি। কিছু স্ট্যাটিকালি টাইপ করা ভাষা আপনাকে "দ্য রাইট থিং" করার জন্য ম্যানুয়ালি ডায়নামিক টাইপিং অনুকরণ করতে বাধ্য করে। এটি ল্যাম্বদা আলটিমেটে আলোচিত ।
এটি প্রসঙ্গে নির্ভর করে। গতিশীল টাইপড সিস্টেমের পাশাপাশি শক্তিশালী টাইপের জন্য অনেকগুলি সুবিধা রয়েছে। আমি অভিমত যে গতিশীল প্রকারের ভাষার প্রবাহ দ্রুততর is গতিশীল ভাষাগুলি শ্রেণিতে বৈশিষ্ট্যগুলি এবং কোডে কী চলছে সে সম্পর্কে সংকলক চিন্তাভাবনার সাথে সীমাবদ্ধ নয়। আপনার কিছুটা স্বাধীনতা আছে। তদ্ব্যতীত, গতিশীল ভাষা সাধারণত আরও প্রকাশিত হয় এবং কম কোডের ফলাফল হয় যা ভাল। তবুও, এটি আরও ত্রুটিযুক্ত প্রবণ যা প্রশ্নবিদ্ধ এবং ইউনিট পরীক্ষা কভারিংয়ের উপর আরও নির্ভর করে। ডায়নামিক ল্যাং সহ এটি সহজ প্রোটোটাইপ তবে রক্ষণাবেক্ষণ দুঃস্বপ্ন হতে পারে।
স্ট্যাটিক টাইপড সিস্টেমের প্রধান লাভটি আইডিই সমর্থন এবং অবশ্যই কোডের স্ট্যাটিক বিশ্লেষক। আপনি প্রতিটি কোড পরিবর্তনের পরে কোড সম্পর্কে আরও আত্মবিশ্বাসী হন। রক্ষণাবেক্ষণ হ'ল এই জাতীয় সরঞ্জাম সহ কেকের শান্তি।
স্থির এবং গতিশীল ভাষা সম্পর্কে প্রচুর বিভিন্ন জিনিস রয়েছে। আমার জন্য, প্রধান পার্থক্য হ'ল গতিশীল ভাষাগুলিতে ভেরিয়েবলগুলির নির্দিষ্ট প্রকার থাকে না; পরিবর্তে, প্রকারগুলি মানগুলিতে আবদ্ধ হয়। এর কারণে, কার্যকর কোডটি কার্যকর হয় তা রানটাইম অবধি নির্ধারিত হয়।
শুরুর দিকে বা নির্লজ্জ বাস্তবায়নে এটি একটি বিশাল পারফরম্যান্স টান, তবে আধুনিক জেআইটিগুলি স্থির সংযোজকগুলির অনুকূলকরণের সাথে সর্বোত্তমভাবে পেতে পারেন you (কিছু কিছু প্রান্তিক ক্ষেত্রে, এর চেয়ে আরও ভাল)
এটি কাজের জন্য সঠিক সরঞ্জাম সম্পর্কে সমস্ত। উভয়ই সময়ের 100% ভাল নয়। উভয় সিস্টেমই মানুষের দ্বারা নির্মিত এবং ত্রুটি রয়েছে। দুঃখিত, কিন্তু আমরা স্তন্যপান এবং নিখুঁত জিনিস তৈরি।
আমি গতিশীল টাইপিং পছন্দ করি কারণ এটি আমার পথ থেকে সরে যায়, তবে হ্যাঁ রানটাইম ত্রুটিগুলি ক্রাইপ হতে পারে যা আমি পরিকল্পনা করি নি। যেখানে স্থির টাইপিং পূর্বোক্ত ত্রুটিগুলি ঠিক করতে পারে তবে একটি ধাত্রী (টাইপ করা ভাষায়) প্রোগ্রামারকে চালিত করে ধ্রুবক চর এবং একটি স্ট্রিংয়ের মধ্যে ফেলে দেওয়ার চেষ্টা করছে crazy
স্ট্যাটিক টাইপিং: জাভা এবং স্কালার মতো ভাষাগুলি স্থির টাইপযুক্ত।
ভেরিয়েবলগুলি কোনও কোডে ব্যবহার করার আগে তাদের সংজ্ঞায়িত করতে হবে এবং শুরু করতে হবে।
প্রাক্তন জন্য ইন্ট এক্স; x = 10;
System.out.println (x) এর;
ডায়নামিক টাইপিং: পার্ল একটি ডায়নামিক টাইপ করা ভাষা।
ভেরিয়েবলগুলি কোডে ব্যবহৃত হওয়ার আগে তাদের আরম্ভ করার দরকার নেই।
Y = 10; কোডের পরবর্তী অংশে এই পরিবর্তনশীলটি ব্যবহার করুন