তারা যতটা বৈচিত্র্যময়, মুষ্টিমেয় প্রচলিত ধারণাগুলি রয়েছে যা সমস্ত গুরুতর, আধুনিক প্রোগ্রামিং ভাষাগুলি ভাগ করে। উপরে দুটি আপনার প্রশ্নের উত্তরের মূল দুটি।
এন্টার বোতামটি চাপানো এবং আমার সিপিইউতে আমার পাইথন কোড থেকে উত্পাদিত মেশিন কোডের মধ্যে কী পদক্ষেপ ঘটে?
কোডটি বিশ্লেষণ করা, বিশ্লেষণ করা এবং দোভাষী হিসাবে খাওয়ানো হয়। এই কম্পিউটার বিজ্ঞান নামে পরিচিত একটি খুব গুরুত্বপূর্ণ এলাকা সম্পর্কে সব হয় কম্পাইলার তত্ত্ব । সংকলক একটি প্রোগ্রাম যা একটি ভাষা থেকে কোড অনুবাদ করে (আপনার উত্স কোড) অন্য ভাষায় অনুবাদ করে (সাধারণত মেশিন কোড, যদিও "ট্রান্সপ্লারস" যা একটি উচ্চ-স্তরের ভাষা থেকে অন্য ভাষায় অনুবাদ করে)। এটি সত্যিই বিশাল একটি বিষয় যা আপনি গবেষণার জন্য বছরগুলি কাটাতে পারেন তবে এখানে মূল সংস্করণটি রয়েছে:
সংকলকটি পার্সার দিয়ে শুরু হয় , একটি রুটিন যা আপনার উত্স কোডটি পড়ে এবং ভাষাটির সিনট্যাক্স বিধিগুলিকে এটিতে বৈধ পাইথন (আপনার ক্ষেত্রে) কোড হিসাবে বিবেচনা করে কিনা তা নির্ধারণ করার জন্য এটিটিতে প্রয়োগ করে। যদি এটি না হয়, পার্সারটি একটি ত্রুটি ছুঁড়ে দেবে এবং সংকলকটি বিল হয়ে যাবে, তবে এটি যদি হয় তবে পার্সার সংক্ষিপ্তসার হিসাবে অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি বা এএসটি হিসাবে পরিচিত যা আউটপুট করে। এএসটি হ'ল একটি ট্রি ডেটা স্ট্রাকচার, যার নোডগুলিতে প্রতিটি সিনট্যাক্সের একটি উপাদান থাকে। উদাহরণস্বরূপ, আপনি যদি বলেন x = 5, আপনি BinaryExpressionএকটি operatorমান =, একটি Leftমান ReferenceExpression(x)এবং একটি Rightমান সঙ্গে একটি নোড দিয়ে শেষ হতে পারে IntegerLiteralExpression(5)। আপনার পুরো প্রোগ্রামটি এর মতো একটি বড় গাছ দ্বারা প্রতিনিধিত্ব করা যেতে পারে।
পার্সার একবার এএসটি তৈরি করলে, দ্বিতীয় ধাপটি সিনেটিক বিশ্লেষণ । সরল ইংরেজিতে, এর অর্থ "এই এটিএসটির অর্থ কী তা নির্ধারণ করুন" " এটি বৈধ পার্স হওয়া সত্ত্বেও আপনি অবৈধ যে কোনও কাজ করেছেন কিনা তা নির্ধারণ করার জন্য এটিএসটি পরীক্ষা করে থাকে (উদাহরণস্বরূপ, 3 টি যুক্তিযুক্ত 1 টি যুক্তি ফাংশন কল করার চেষ্টা করা) এবং যদি আপনি তা করেন ত্রুটি উত্থাপন করে। অন্যথায়, এটি এএসটি বিশ্লেষণ করে এবং কোনও মেশিনকে বোঝার জন্য সহজ করার জন্য এটি সম্পাদনা করে।
তৃতীয় ধাপটি কোড জেনারেশন। একবার আপনি সম্পূর্ণ বিশ্লেষণ, সরল, কার্যকর বৈধ এএসটি হয়ে গেলে, আপনি এটিকে জেনারেটরে খাওয়ান, যা এএসটি চলে এবং আউটপুট ভাষায় কোড উত্পন্ন করে। এটি আপনার সমাপ্ত পণ্য।
পাইথনের সাথে এটি সংকলকটির পরিবর্তে একটি দোভাষী ব্যবহার করে। একটি ইন্টারপ্রেটার সংক্ষেপক হিসাবে ঠিক একইভাবে কাজ করে, একটি পার্থক্য সহ: কোড উত্পন্নকরণের পরিবর্তে, এটি মেমরিটিকে আউটপুট লোড করে এবং এটি সরাসরি আপনার সিস্টেমে চালায়। (কীভাবে এটি ঘটে যায় তার সঠিক বিবরণটি বিভিন্ন ভাষা এবং বিভিন্ন অনুবাদকের মধ্যে বন্যার সাথে পরিবর্তিত হতে পারে))
এবং এটি কীভাবে পাইথন রানটাইম সিস্টেম এবং / অথবা লাইব্রেরির সাথে সম্পর্কিত?
খুব সাধারণ ভাষা ব্যতীত সমস্ত পূর্বনির্ধারিত ফাংশনগুলির একটি সেট নিয়ে আসে যা ব্যবহারকারীর একটি বিশাল শতাংশের জন্য গুরুত্বপূর্ণ এবং ব্যবহারকারীরা তাদের নিজেরাই এক কারণে বা অন্য কারণে বাস্তবায়ন করা কঠিন। তাদের কোড কোনও তৃতীয় পক্ষের লাইব্রেরির প্রয়োজন ছাড়াই এই ফাংশনগুলিতে কল করতে পারে। (উদাহরণস্বরূপ, পাইথনে আপনার printযা আউটপুট প্রেরণ করে stdoutGood শুভেচ্ছা আপনার নিজেরাই এটি প্রয়োগ করে!) ফাংশনগুলির এই সেটটি একটি ভাগ করা লাইব্রেরিতে সাধারণত সংগ্রহ করা হয় যা কোড রান-টাইমে কল করতে পারে, এজন্যই এটি পরিচিত ভাষা রানটাইম লাইব্রেরি হিসাবে বা সংক্ষেপে কেবল "রানটাইম"।