আপনি আপনার প্রশ্নের বাক্য তৈরির ক্ষেত্রে গিডোর বক্তব্যকে বড় আকারের করেছেন। সমস্যাটি গতিময় টাইপযুক্ত ভাষার জন্য সংকলক লিখছে না। সমস্যাটি হ'ল যা (মানদণ্ড 1) সর্বদা সঠিক, (মানদণ্ড 2) গতিশীল টাইপিং রাখে এবং একটি উল্লেখযোগ্য পরিমাণের কোডের জন্য (মানদণ্ড 3) লক্ষণীয়ভাবে দ্রুত হয় writing
পাইথনের 90% (ব্যর্থ মাপদণ্ড 1) বাস্তবায়ন করা এবং এটিতে ধারাবাহিকভাবে দ্রুত হওয়া সহজ। একইভাবে, স্ট্যাটিক টাইপিং (ব্যর্থ মানদণ্ড 2) এর সাথে একটি দ্রুত পাইথন বৈকল্পিক তৈরি করা সহজ) ১০০% বাস্তবায়ন করাও সহজ (অসম্ভব জটিল ভাষা প্রয়োগের ক্ষেত্রে ইনফার) তবে এখন পর্যন্ত এটি কার্যকর করার প্রতিটি সহজ উপায় তুলনামূলকভাবে ধীর হয়ে যায় (ব্যর্থতার মানদণ্ড 3)।
একটি ইন্টারপ্রেটার প্লাস জেআইটি প্রয়োগ করা যা সঠিক, পুরো ভাষাটি প্রয়োগ করে এবং কিছু কোড কার্যকর করা যায় তার জন্য দ্রুত হয় যদিও উল্লেখযোগ্যভাবে শক্ত (সিএফ। পাইপাই) হয় এবং কেবলমাত্র আপনি যদি জেআইটি সংকলক তৈরির কাজটি স্বয়ংক্রিয়ভাবে করেন (সাইকো এটি না করেই করেন) , তবে এটি কী গতিতে পারে তা খুব সীমিত ছিল)। তবে নোট করুন যে এটি স্পষ্টভাবে সুযোগের বাইরে নয়, যেমন আমরা স্থির সম্পর্কে বলছি(ওরফে অফ-টাইম) সংকলক। স্থির সংকলকগুলির জন্য কেন এটির পদ্ধতির কাজ হয় না তা ব্যাখ্যা করার জন্য আমি কেবল এটিই উল্লেখ করেছি (বা কমপক্ষে কোনও বিদ্যমান কাউন্টারেক্সামাল নেই): এটি প্রথমে প্রোগ্রামটির ব্যাখ্যা এবং পর্যবেক্ষণ করতে হবে, তারপরে একটি লুপের নির্দিষ্ট পুনরাবৃত্তির জন্য কোড তৈরি করতে হবে (বা অন্য কোনও লিনিয়ার কোড) পাথ), তারপরে সেই নির্দিষ্ট পুনরাবৃত্তির জন্যই (বা কমপক্ষে, সমস্ত সম্ভাব্য পুনরাবৃত্তির জন্য নয়) অনুমানের ভিত্তিতে নরকটিকে অপ্টিমাইজ করে। প্রত্যাশাটি হ'ল সেই কোডটির পরবর্তী অনেকগুলি মৃত্যুদণ্ডও প্রত্যাশার সাথে মেলে এবং এইভাবে অপ্টিমাইজেশন থেকে উপকৃত হবে। নির্ভুলতার আশ্বাসে কিছু (তুলনামূলক সস্তা) চেক যুক্ত করা হয়। এই সমস্ত করতে, আপনার কীসের জন্য বিশেষত করতে হবে এবং আপনার পিছনে পড়ার জন্য একটি ধীর অথচ সাধারণ বাস্তবায়ন প্রয়োজন need এওটি সংকলকগুলির কোনও নেই। তারা বিশেষজ্ঞ না পারেন, এ সবকোডের উপর ভিত্তি করে তারা দেখতে পাচ্ছে না (যেমন ডায়নামিকালি লোড কোড), এবং অযত্নে দক্ষতার অর্থ আরও কোড উত্পন্ন করা, যার বেশ কয়েকটি সমস্যা রয়েছে (আইচাচের ব্যবহার, বাইনারি আকার, সংকলনের সময়, অতিরিক্ত শাখা)।
পুরো ভাষাটি সঠিকভাবে প্রয়োগ করে এমন একটি এওটি সংকলক বাস্তবায়ন করাও তুলনামূলকভাবে সহজ: এই কোডটি খাওয়ানোর সময় দোভাষী কী করবেন তা রানটাইমে কল করে এমন কোড তৈরি করুন। নুতকা (বেশিরভাগ) এটি করেন। তবে এটির ফলে পারফরম্যান্সের খুব বেশি সুবিধা পাওয়া যায় না (ব্যর্থতার মাপদণ্ড 3), কারণ আপনাকে এখনও একজন দোভাষী হিসাবে ঠিক ততটাই অপ্রয়োজনীয় কাজ করতে হবে, সি কোডের ব্লকে বাইটকোড প্রেরণের জন্য সংরক্ষণ করুন যা আপনি সংকলন করেছেন তা কিন্তু। এটি কেবল একটি স্বল্প ব্যয় - একটি বিদ্যমান দোভাষীর কাছে অনুকূল হওয়ার পক্ষে যথেষ্ট তাৎপর্যপূর্ণ তবে এটি তার নিজস্ব সমস্যা সহ পুরো নতুন বাস্তবায়নকে ন্যায়সঙ্গত করার পক্ষে যথেষ্ট তাত্পর্যপূর্ণ নয়।
তিনটি মানদণ্ড পূরণ করার জন্য কী দরকার হবে? আমাদের কোন ধারণা নেই। কিছু স্থিতিশীল বিশ্লেষণ প্রকল্প রয়েছে যা পাইথন প্রোগ্রামগুলি থেকে কংক্রিটের প্রকারগুলি, নিয়ন্ত্রণ প্রবাহ ইত্যাদি সম্পর্কে কিছু তথ্য আহরণ করতে পারে। যেগুলি একক বেসিক ব্লকের পরিধি ছাড়িয়ে সঠিক ডেটা দেয় তা অত্যন্ত ধীর এবং পুরো প্রোগ্রামটি দেখার প্রয়োজন হয় বা কমপক্ষে বেশিরভাগ অংশ। তবুও, বিল্টিন ধরণের কয়েকটি অপারেশনটিকে অপ্টিমাইজ করা ছাড়া আপনি সেই তথ্য দিয়ে বেশি কিছু করতে পারবেন না।
এটা কেন? এটিকে কথায় কথায় বলতে গেলে, একটি সংকলক হয় রানটাইমের সময় লোড পাইথন কোডটি কার্যকর করার ক্ষমতা সরিয়ে দেয় (1 টি ব্যর্থ মাপদণ্ড), বা এটি কোনও অনুমান যে কোনও পাইথন কোড দ্বারা অকার্যকর হতে পারে তা করে না। দুর্ভাগ্যবশত, যে প্রোগ্রাম নিখুঁত জন্য প্রায় কাছাকাছি সবকিছু দরকারী রয়েছে: ফাংশন রিবাউন্ড হতে পারে, ক্লাস ভাবে পরিবর্তিত করা যেতে পারে বা সম্পূর্ণরূপে প্রতিস্থাপিত, মডিউল ইচ্ছামত খুব পরিবর্তন করা যাবে সহ Globals, আমদানি বিভিন্নভাবে হাইজ্যাক করা যেতে পারে, ইত্যাদি একটি একক পংক্তি প্রেরণ করা eval
, exec
, __import__
বা অন্যান্য অসংখ্য ফাংশন, এর যে কোনও একটি করতে পারে। ফলস্বরূপ, এর অর্থ প্রায় কোনও বড় অপ্টিমাইজেশান প্রয়োগ করা যাবে না, সামান্য পারফরম্যান্স সুবিধা দেওয়া (মানদণ্ড 3 ব্যর্থ হওয়া)। উপরের অনুচ্ছেদে ফিরে যান।