উত্তর:
ভার্চুয়াল মেশিন হ'ল ভার্চুয়াল কম্পিউটিং এনভায়রনমেন্ট যার সাথে একটি নির্দিষ্ট পারমাণবিক ভাল সংজ্ঞায়িত নির্দেশাবলীর নির্দিষ্ট সেট থাকে যা কোনও নির্দিষ্ট ভাষার থেকে পৃথকভাবে সমর্থিত হয় এবং এটি সাধারণত নিজের কাছে স্যান্ডবক্স হিসাবে বিবেচিত হয়। ভিএম একটি নির্দিষ্ট সিপিইউয়ের একটি নির্দেশের সেটের সাথে সাদৃশ্যপূর্ণ এবং পরবর্তীগুলির তুলনায় স্বতন্ত্র এই জাতীয় নির্দেশাবলীর (বা বাইট কোড) খুব বেসিক বিল্ডিং ব্লকগুলির সাথে আরও মৌলিক স্তরে কাজ করার প্রবণতা রাখে। কোনও নির্দেশ কেবলমাত্র ভার্চুয়াল মেশিনের বর্তমান অবস্থার ভিত্তিতে নির্ধারিতভাবে কার্যকর করে এবং সেই সময়ে নির্দেশের স্ট্রিমের অন্য কোথাও তথ্যের উপর নির্ভর করে না।
অন্যদিকে একজন অনুবাদক আরও পরিশীলিত যে এটি নির্দিষ্ট ভাষায় এবং একটি নির্দিষ্ট ব্যাকরণের কিছু বাক্য গঠনকে পার্স করার জন্য তৈরি করা হয়েছে যা আশেপাশের টোকেনগুলির প্রসঙ্গে ডিকোড করা উচিত। আপনি প্রতিটি বাইট বা এমনকি প্রতিটি লাইন বিচ্ছিন্নভাবে দেখতে পারবেন না এবং ঠিক কী করতে হবে তা জানেন না। ভাষার টোকেনগুলি বিচ্ছিন্নভাবে নেওয়া যায় না যেমন তারা কোনও ভিএম এর নির্দেশাবলী (বাইট কোড) এর সাথে সম্পর্কিত করতে পারে।
একটি জাভা সংকলক জাভা ভাষাকে একটি বাইট-কোড প্রবাহে রূপান্তর করে, সি সংকলক সি ভাষা প্রোগ্রামগুলিকে সমাবেশ কোডে রূপান্তর করে into অন্যদিকে একজন দোভাষী কোনও প্রোগ্রামকে সত্যই কোনও সংজ্ঞায়িত মধ্যবর্তী আকারে রূপান্তরিত করে না, এটি কেবল উত্সকে ব্যাখ্যা করার প্রক্রিয়া হিসাবে প্রোগ্রামের ক্রিয়াগুলি গ্রহণ করে।
কোনও ভিএম এবং দোভাষীর মধ্যে পার্থক্যের আরেকটি পরীক্ষা হ'ল আপনি এটিকে ভাষা স্বাধীন বলে মনে করেন কিনা। আমরা জাভা ভিএম হিসাবে যা জানি তা আসলে জাভা নির্দিষ্ট নয়। আপনি অন্যান্য ভাষা থেকে একটি সংকলক তৈরি করতে পারেন যা বাইট কোডগুলির ফলস্বরূপ যা জেভিএম এ চালানো যেতে পারে। অন্যদিকে, আমি মনে করি না পাইথন দোভাষী দ্বারা ব্যাখ্যা করার জন্য আমরা পাইথন ছাড়া পাইথন ছাড়া অন্য কোনও ভাষা "সংকলন" করার কথা ভাবব।
ব্যাখ্যা প্রক্রিয়াটির পরিশীলতার কারণে, এটি তুলনামূলকভাবে ধীর প্রক্রিয়া হতে পারে .... বিশেষত ভাষার টোকেনগুলি বিশ্লেষণ এবং সনাক্তকরণ ইত্যাদি হতে পারে এবং দোভাষীর মধ্যে কার্যকরকরণ প্রক্রিয়াটি সম্পাদন করতে সক্ষম হতে উত্সের প্রেক্ষাপটটি বুঝতে পারে। এ জাতীয় বর্ণিত ভাষাগুলি ত্বরান্বিত করতে সহায়তা করার জন্য আমরা এখানে প্রাক-পার্সড, প্রাক-টোকেনাইজড উত্স কোডের মধ্যবর্তী ফর্মগুলি সংজ্ঞায়িত করতে পারি যা আরও সহজেই সরাসরি ব্যাখ্যা করা হয়। এই ধরণের বাইনারি ফর্মটি কার্যকর করার সময় এখনও ব্যাখ্যা করা হয়, এটি পারফরম্যান্সের উন্নতির জন্য খুব কম মানব পাঠযোগ্য ফর্ম থেকে শুরু হয়। তবে সেই রূপটি কার্যকর করার যুক্তি কোনও ভার্চুয়াল মেশিন নয়, কারণ এই কোডগুলি এখনও বিচ্ছিন্নভাবে নেওয়া যায় না - আশেপাশের টোকেনগুলির প্রসঙ্গটি এখনও গুরুত্বপূর্ণ, তারা এখন অন্য একটি কম্পিউটার দক্ষ আকারে রয়েছে।
On the other hand, I don't think we would really think of "compiling" some other language other than Python into Python for interpretation by the Python interpreter.
স্কেলাকে জাভা বাইটকোডে সংকলিত ঠিক একইভাবে পাইথন বাইটকোডে সংকলন করা যায় এমন কোনও ভাষা লেখা সম্ভব। ইন্টারেক্টিভ মোডে, পাইথনের ইন্টারেক্টিভ শেল আপনার টাইপ করা কমান্ডকে বাইটকোডে সংকলন করে এবং সেই বাইটকোড কার্যকর করে। আপনি eval এবং exec ব্যবহার করে আপনার নিজের শেলটি লিখতে পারেন এবং স্ট্রিংকে বাইটোকোডে রূপান্তর করতে আপনি কমপাইল () অন্তর্নির্মিত ফাংশনটি ব্যবহার করতে পারেন।
এই পোস্টে, "ভার্চুয়াল মেশিন" বলতে ভার্চুয়াল মেশিনগুলি প্রক্রিয়া বোঝায়, কেমু বা ভার্চুয়ালবক্সের মতো ভার্চুয়াল মেশিনগুলিকে নয়। একটি প্রক্রিয়া ভার্চুয়াল মেশিন কেবল একটি প্রোগ্রাম যা একটি সাধারণ প্রোগ্রামিং পরিবেশ সরবরাহ করে - একটি প্রোগ্রাম যা প্রোগ্রাম করা যায়।
জাভাতে একটি ইন্টারপ্রেটার পাশাপাশি ভার্চুয়াল মেশিন রয়েছে এবং পাইথনের ভার্চুয়াল মেশিনের পাশাপাশি ইন্টারপ্রেটার রয়েছে। জাভাতে "ভার্চুয়াল মেশিন" একটি সাধারণ শব্দ এবং পাইথনের "দোভাষী" একটি প্রচলিত শব্দ দুটি ভাষার মধ্যে প্রধান পার্থক্যের সাথে অনেক কিছু করার আছে: স্ট্যাটিক টাইপিং (জাভা) বনাম গতিশীল টাইপিং (পাইথন)। এই প্রসঙ্গে, "টাইপ" আদিম উপাত্ত প্রকারকে বোঝায় - এমন ধরণ যা ডেটার মেমরি স্টোরেজ আকারের প্রস্তাব দেয়। জাভা ভার্চুয়াল মেশিনে এটি সহজ। প্রোগ্রামারটির প্রতিটি ভেরিয়েবলের আদিম উপাত্ত উল্লেখ করার প্রয়োজন হয়। এটি জাভা বাইটকোডের জাভা ভার্চুয়াল মেশিন দ্বারা কেবল ব্যাখ্যা এবং সম্পাদন করার জন্যই নয়, এমনকি মেশিনের নির্দেশিকায় সংকলন করার জন্য পর্যাপ্ত তথ্য সরবরাহ করে। পাইথন ভার্চুয়াল মেশিনটি এই অর্থে আরও জটিল যে এটি অপারেশনের সাথে জড়িত প্রতিটি ভেরিয়েবল বা ডেটা কাঠামোর জন্য আদিম ডেটা নির্ধারণ করতে প্রতিটি অপারেশন কার্যকর করার আগে বিরতি দেওয়ার অতিরিক্ত কাজটি গ্রহণ করে। পাইথন আদিম তথ্য প্রকারের বিবেচনায় প্রোগ্রামারকে চিন্তাভাবনা থেকে মুক্ত করে এবং উচ্চতর স্তরে অপারেশনগুলি প্রকাশ করার অনুমতি দেয়। এই স্বাধীনতার দাম পারফরম্যান্স। পাইথনের জন্য "ইন্টারপ্রিটার" পছন্দের শব্দটি কারণ এটি ডেটা ধরণের পরিদর্শন করতে বিরতি দিতে হয়েছিল, এবং কারণ গতিশীল টাইপযুক্ত ভাষার তুলনামূলকভাবে সংক্ষিপ্ত বাক্য গঠন ইন্টারেক্টিভ ইন্টারফেসের জন্য ভাল ফিট। একটি ইন্টারেক্টিভ জাভা ইন্টারফেস তৈরিতে কোনও প্রযুক্তিগত বাধা নেই, তবে কোনও স্ট্যাটিকালি টাইপড কোড ইন্টারেক্টিভভাবে লেখার চেষ্টা করা কষ্টকর হবে, সুতরাং এটি ঠিক সেভাবে করা হয়নি।
জাভা বিশ্বে ভার্চুয়াল মেশিনটি শোটি চুরি করে কারণ এটি এমন একটি ভাষায় লিখিত প্রোগ্রাম পরিচালনা করে যা মেশিনের নির্দেশাবলীতে প্রকৃতপক্ষে সংকলন করা যায় এবং ফলাফলটি গতি এবং সংস্থান দক্ষতা। তুলনামূলকভাবে বলতে গেলে, জাভা ভার্চুয়াল মেশিন দ্বারা সংকলিত প্রোগ্রামগুলির পারফরম্যান্সের সাথে সম্পাদন করা যেতে পারে Java এটি বাইটকোডে আদিম তথ্য টাইপের তথ্যের উপস্থিতির কারণে। জাভা ভার্চুয়াল মেশিন জাভাটিকে নিজস্ব একটি বিভাগে রাখে:
পোর্টেবল স্ট্যাটিক্যালি টাইপড ভাষায় ব্যাখ্যা করা
পরবর্তী নিকটতম জিনিসটি হল এলএলভিএম, তবে এলএলভিএম ভিন্ন স্তরে কাজ করে:
বহনযোগ্য অনুবাদ সভা সমাবেশ
"বাইটকোড" শব্দটি জাভা এবং পাইথন উভয় ক্ষেত্রেই ব্যবহৃত হয়, তবে সমস্ত বাইটকোড সমানভাবে তৈরি হয় না। বাইকোড হ'ল সংকলক / দোভাষী দ্বারা ব্যবহৃত মধ্যবর্তী ভাষার জন্য সাধারণ শব্দ। এমনকি সিসি সংকলকগণ যেমন জিসিসি একটি কাজ করার জন্য একটি মধ্যবর্তী ভাষা (বা বেশ কয়েকটি) ব্যবহার করে। জাভা বাইটকোডে আদিম ডেটা ধরণের তথ্য রয়েছে, যেখানে পাইথন বাইটকোড নেই। এই ক্ষেত্রে, পাইথন (এবং বাশ, পার্ল, রুবি, ইত্যাদি) ভার্চুয়াল মেশিনটি জাভা ভার্চুয়াল মেশিনের তুলনায় প্রকৃতপক্ষে মৌলিকভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে যায়, তবে এর আরও কাজ করার দরকার আছে। বিভিন্ন বাইকোড ফর্ম্যাটে কী তথ্য রয়েছে তা বিবেচনা করা দরকারী:
একটি বাস্তব-বিশ্বের উপমা আঁকতে: এলএলভিএম পরমাণুর সাথে কাজ করে, জাভা ভার্চুয়াল মেশিন অণুগুলির সাথে কাজ করে এবং পাইথন ভার্চুয়াল মেশিনটি পদার্থের সাথে কাজ করে। যেহেতু সবশেষে সাবটমিক কণাগুলিতে (রিয়েল মেশিন অপারেশন) বিভক্ত হওয়া আবশ্যক, পাইথন ভার্চুয়াল মেশিনটির সবচেয়ে জটিল কাজ রয়েছে।
স্ট্যাটিকালি টাইপযুক্ত ভাষার সংজ্ঞাদাতা / সংকলকগুলির কাছে কেবল একই ব্যাগেজ নেই যা ডায়ামিকাল-টাইপ করা ভাষার সংজ্ঞাদাতারা / সংকলকগণের কাছে থাকে। স্ট্যাটিক্যালি টাইপযুক্ত ভাষার প্রোগ্রামারদের শিথিলতা গ্রহণ করতে হবে, যার জন্য বেতনটি হচ্ছে পারফরম্যান্স। যাইহোক, সমস্ত অ-সংজ্ঞাবিরোধী ফাংশন যেমন গোপনে নির্জনবাদী হয়, তেমনি সমস্ত গতিময়ভাবে টাইপ করা ভাষাগুলিও গোপনে স্ট্যাটিকালি টাইপ করা থাকে। পাইথনের নামটি এইচএল 9000 হিসাবে পরিবর্তিত করার সময় দুটি ভাষার পরিবারের মধ্যে পারফরম্যান্সের পার্থক্য দেখা উচিত।
পাইথনের মতো ডায়নামিক ভাষার ভার্চুয়াল মেশিনগুলি কিছু আদর্শযুক্ত লজিকাল মেশিন প্রয়োগ করে এবং অগত্যা কোনও বাস্তব শারীরিক হার্ডওয়্যারের সাথে খুব ঘনিষ্ঠতার সাথে মিল রাখে না। বিপরীতে, জাভা ভার্চুয়াল মেশিনটি ক্লাসিকাল সি সংকলকটির সাথে কার্যকারিতার তুলনায় আরও বেশি অনুরূপ, কেবল মেশিনের নির্দেশাবলী নির্গমন করার পরিবর্তে এটি অন্তর্নির্মিত রুটিনগুলি সম্পাদন করে। পাইথনে, একটি পূর্ণসংখ্যা হল পাইথন অবজেক্ট যা এর সাথে সংযুক্তিযুক্ত বৈশিষ্ট্য এবং পদ্ধতিগুলির একগুচ্ছ। জাভাতে, কোনও ইন্ট হ'ল বিটগুলির একটি নির্ধারিত সংখ্যা, সাধারণত 32 It's এটি সত্যই তুলনা নয়। পাইথন পূর্ণসংখ্যার সত্যই জাভা পূর্ণসংখ্যার শ্রেণীর সাথে তুলনা করা উচিত। জাভার "ইনট" আদিম ডেটা টাইপের সাথে পাইথন ভাষার যে কোনও কিছুর সাথে তুলনা করা যায় না, কারণ পাইথন ভাষায় আদিমতার এই স্তরটির সহজলভ্যতা নেই এবং পাইথন বাইটকোডও রয়েছে।
কারণ জাভা ভেরিয়েবল স্পষ্টভাবে টাইপ করা হয়, এক যুক্তিসঙ্গতভাবে ভালো কিছু আশা করতে পারেন Jython কর্মক্ষমতা ডিস্কের ন্যয় হতে cPython । অন্যদিকে, পাইথনে প্রয়োগ করা একটি জাভা ভার্চুয়াল মেশিনটি প্রায় কাদা থেকে ধীর হওয়ার গ্যারান্টিযুক্ত। এবং রুবি, পার্ল ইত্যাদির চেয়ে আরও ভাল কিছু আশা করবেন না। তারা এটি করার জন্য ডিজাইন করা হয়নি। এগুলি "স্ক্রিপ্টিং" এর জন্য ডিজাইন করা হয়েছিল, এটিকেই ডায়নামিক ভাষায় প্রোগ্রামিং বলা হয়।
ভার্চুয়াল মেশিনে সংঘটিত প্রতিটি ক্রিয়াকলাপটি শেষ পর্যন্ত সত্যিকারের হার্ডওয়্যারে আঘাত করতে হয়। ভার্চুয়াল মেশিনগুলিতে প্রাক-সংকলিত রুটিন থাকে যা যৌক্তিক ক্রিয়াকলাপগুলির সংমিশ্রণে যথেষ্ট সাধারণ enough ভার্চুয়াল মেশিনটি নতুন মেশিনের নির্দেশাবলী প্রেরণ করছে না তবে এটি অবশ্যই নিজের রুটিনগুলি বারবার ট্রাইলি জটিল ক্রমে চালাচ্ছে। জাভা ভার্চুয়াল মেশিন, পাইথন ভার্চুয়াল মেশিন এবং অন্য যে সমস্ত সাধারণ-উদ্দেশ্যমূলক ভার্চুয়াল মেশিন রয়েছে সেগুলি এই অর্থে সমান যে তারা যে স্বপ্ন যুক্ত করতে পারে তার কোনও যুক্তি সম্পাদনের ক্ষেত্রে তারা একত্রে গঠিত হতে পারে তবে তারা কোন কাজের ক্ষেত্রে তা ভিন্ন different গ্রহণ করুন এবং প্রোগ্রামারটির কাছে তারা কী কাজ ছেড়ে যায়।
পাইথনের জন্য সাইকো একটি পূর্ণ পাইথন ভার্চুয়াল মেশিন নয়, তবে একটি নির্দিষ্ট সময়ের মধ্যে সংকলক নিয়মিত পাইথন ভার্চুয়াল মেশিনটিকে পয়েন্টগুলিতে হাইজ্যাক করে যা মনে করে যে এটি কোডের কয়েকটি লাইন সংকলন করতে পারে - মূলত এমন লুপ যেখানে এটি কিছুটির আদিম ধরণের কথা মনে করে ভেরিয়েবল স্থির থাকবে এমনকি যদি প্রতিটি পুনরাবৃত্তির সাথে মান পরিবর্তন হয়। সেক্ষেত্রে এটি নিয়মিত ভার্চুয়াল মেশিনের অবিচ্ছিন্ন প্রকারের দৃ determination় সংকল্পের পূর্বে কিছু করতে পারে। আপনাকে কিছুটা সতর্ক থাকতে হবে, পাছে আপনি সাইকোর পায়ের নিচে থেকে টাইপটি সরিয়ে ফেলবেন না। পাইস্কো অবশ্য সাধারণত নিয়মিত ভার্চুয়াল মেশিনে ফিরে যেতে জানে যদি পুরোপুরি আত্মবিশ্বাস না হয় তবে টাইপটি পরিবর্তন হবে না।
গল্পটির নৈতিকতা হল আদিম ডাটা টাইপের তথ্য একটি সংকলক / ভার্চুয়াল মেশিনের পক্ষে সত্যই সহায়ক।
পরিশেষে, এটিকে সমস্ত দৃষ্টিভঙ্গিতে রাখার জন্য এটি বিবেচনা করুন: জাভা ইন্টারপ্রিটার / ভার্চুয়াল মেশিনে জাভাতে প্রয়োগ করা একটি পাইথন ইন্টারপ্রেটার / ভার্চুয়াল মেশিন দ্বারা কার্যকর করা একটি পাইথন প্রোগ্রাম এলএফভিতে প্রয়োগ করা একটি আইএমফোনে চলমান একটি কিউমু ভার্চুয়াল মেশিনে চলছে।
trying to write any statically-typed code interactively would be tedious
। আপনি OCaml এবং Haskell জানেন তাহলে আপনি যে সত্য নয় যেহেতু তারা দেখতে পাবেন খুব সংক্ষিপ্ত স্ট্যাটিক্যালি টাইপ ভাষায়।
সম্ভবত বিভিন্ন পরিভাষার একটি কারণ হ'ল একজন সাধারণত অজগর দোভাষীকে কাঁচা মানব-পঠনযোগ্য উত্স কোড খাওয়ানো এবং বাইটোকড এবং সেগুলি সম্পর্কে উদ্বিগ্ন না হওয়ার কথা ভাবেন।
জাভাতে আপনাকে স্পষ্টভাবে বাইটকোডে সংকলন করতে হবে এবং তারপরে ভিএম-তে সোর্স কোড নয়, কেবল বাইটকোড চালাতে হবে।
যদিও পাইথন ব্যবহারকারীর দৃষ্টিকোণ থেকে কভারগুলির আওতায় ভার্চুয়াল মেশিন ব্যবহার করে তবে বেশিরভাগ সময় এই বিশদটি উপেক্ষা করা যায়।
দোভাষী , উত্স কোডটি কিছু দক্ষ মধ্যবর্তী উপস্থাপনায় (কোড) অনুবাদ করে এবং তত্ক্ষণাত এটিকে কার্যকর করে।
ভার্চুয়াল মেশিন , স্পষ্টরূপে সংকলক দ্বারা নির্মিত সংরক্ষিত প্রাক-সংকলিত কোড কার্যকর করে যা দোভাষী ব্যবস্থার অংশ।
ভার্চুয়াল মেশিনের একটি খুব গুরুত্বপূর্ণ বৈশিষ্ট্যটি হ'ল সফ্টওয়্যারটি ভিতরে চলছে, ভার্চুয়াল মেশিন দ্বারা সরবরাহিত সংস্থানগুলিতে সীমাবদ্ধ। স্পষ্টতই, এটি তার ভার্চুয়াল দুনিয়া থেকে বেরিয়ে আসতে পারে না। রিমোট কোড, জাভা অ্যাপলেটগুলির নিরাপদ প্রয়োগের কথা ভাবেন।
পাইথনের ক্ষেত্রে, যদি আমরা পিআইসি ফাইলগুলি রাখি , যেমনটি এই পোস্টের মন্তব্যে উল্লিখিত হয়েছে, তবে প্রক্রিয়াটি আরও ভিএম এর মতো হয়ে উঠবে, এবং এই বাইটকোডটি দ্রুত সম্পাদন করে - এটি এখনও ব্যাখ্যা করা হবে তবে অনেক কম্পিউটার বন্ধুত্বপূর্ণ ফর্ম থেকে । যদি আমরা সামগ্রিকভাবে এটি দেখি, পিভিএম পাইথন ইন্টারপ্রেটারের একটি শেষ পদক্ষেপ।
মূল কথাটি হল, পাইথন ইন্টারপ্রেটারকে রেফারেন্স করার সময় এর অর্থ আমরা পুরোটিকে উল্লেখ করছি এবং যখন আমরা পিভিএম বলি, তার অর্থ আমরা কেবল পাইথন ইন্টারপ্রেটারের একটি অংশ, রানটাইম-এনভায়রনমেন্টের কথা বলছি। জাভা এর মতোই, আমরা বিভিন্ন অংশ পৃথক পৃথক, জেআরই, জেভিএম, জেডিকে ইত্যাদি উল্লেখ করি
আরও তথ্যের জন্য, উইকিপিডিয়া এন্ট্রি: দোভাষী এবং ভার্চুয়াল মেশিন । তবুও এখানে অন্য একটি । এখানে আপনি অ্যাপ্লিকেশন ভার্চুয়াল মেশিনের তুলনা খুঁজে পেতে পারেন । এটি কম্পাইলার, দোভাষী এবং ভিএম এর মধ্যে পার্থক্য বুঝতে সহায়তা করে।
শব্দ দোভাষা হ'ল পূর্ববর্তী শেল স্ক্রিপ্টিং ভাষাগুলির সাথে সম্পর্কিত একটি উত্তরাধিকার শব্দ। "স্ক্রিপ্টিং ল্যাঙ্গুয়েজ" যেমন পুরো বৈশিষ্ট্যযুক্ত ভাষায় রূপান্তরিত হয়েছে এবং এর সাথে সম্পর্কিত প্ল্যাটফর্মগুলি আরও পরিশীলিত এবং স্যান্ডবক্সে পরিণত হয়েছে, ভার্চুয়াল মেশিন এবং ইন্টারপ্রেটার (পাইথন অর্থে) এর মধ্যে পার্থক্য খুব ছোট বা অস্তিত্বহীন।
পাইথন ইন্টারপ্রেটারটি এখনও শেল স্ক্রিপ্টের মতো একইভাবে কাজ করে, এই অর্থে যে এটি একটি পৃথক সংকলন পদক্ষেপ ছাড়াই কার্যকর করা যেতে পারে। এর বাইরে, পাইথনের দোভাষী (বা পার্ল বা রুবির) এবং জাভার ভার্চুয়াল মেশিনের মধ্যে পার্থক্য বেশিরভাগ বাস্তবায়নের বিশদ। (যে কেউ যুক্তি দিতে পারে যে জাভা পাইথনের চেয়ে আরও পুরোপুরি স্যান্ডবক্সযুক্ত, তবে উভয়ই শেষ পর্যন্ত সিটি ইন্টারফেসের মাধ্যমে অন্তর্নিহিত আর্কিটেকচারে অ্যাক্সেস সরবরাহ করে))
" কেন জাভা ভার্চুয়াল মেশিন, তবে পাইথন ইন্টারপ্রেটার? " এই প্রশ্নের গভীর উত্তর দেওয়ার জন্য আসুন আলোচনার সূচনা পয়েন্ট হিসাবে সংকলন তত্ত্বের ক্ষেত্রে ফিরে যাওয়ার চেষ্টা করি।
প্রোগ্রাম সংকলনের সাধারণ প্রক্রিয়াটিতে পরবর্তী পদক্ষেপগুলি অন্তর্ভুক্ত রয়েছে:
a = b + c
বাক্যসংলগ্ন দৃষ্টিকোণ থেকে সঠিক বিবৃতি, তবে a
স্থির বস্তু হিসাবে ঘোষিত হলে শব্দার্থ দৃষ্টিকোণ থেকে সম্পূর্ণ ভুল )ঠিক আছে. এখন শর্তাবলী সংজ্ঞায়িত করা যাক।
দোভাষী , এই শব্দের ধ্রুপদী অর্থের মধ্যে প্রোগ্রামের পাঠ্য থেকে সরাসরি উত্পাদিত এএসটির ভিত্তিতে প্রোগ্রামের মূল্যায়নের ভিত্তিতে মৃত্যুদন্ড গ্রহণ করে । সেক্ষেত্রে একটি প্রোগ্রাম উত্স কোড আকারে বিতরণ করা হয় এবং প্রায়শই গতিশীল উপায়ে (স্টেটমেন্ট-বাই-স্টেটমেন্ট বা লাইন বাই লাইন) ইন্টারপ্রেটারকে প্রোগ্রামের পাঠ্য দ্বারা খাওয়ানো হয়। প্রতিটি ইনপুট বিবৃতি জন্য, দোভাষী তার এএসটি তৈরি করে এবং তত্ক্ষণাত প্রোগ্রামের "রাষ্ট্র" পরিবর্তন করে তা মূল্যায়ন করে। এটি একটি সাধারণ আচরণ যা স্ক্রিপ্টিং ভাষাগুলির দ্বারা প্রদর্শিত হয়। উদাহরণস্বরূপ বাশ, উইন্ডোজ সিএমডি ইত্যাদির জন্য বিবেচনা করুন ধারণাটি অনুসারে, পাইথনও এই পথে চলে।
যদি আমরা ইন্টারপ্রেটারে ইন্টারমিডিয়েট মেশিন-ইন্ডিপেন্ডেন্ট বাইনারি বাইটকোড পদক্ষেপের জেনারেশনে এএসটি-ভিত্তিক এক্সিকিউশন পদক্ষেপটি প্রতিস্থাপন করি তবে আমরা প্রোগ্রামের প্রয়োগের পুরো প্রক্রিয়াটিকে দুটি পৃথক পর্যায়ে বিভক্ত করব: সংকলন এবং কার্যকরকরণ। যে ক্ষেত্রে কি পূর্বে ছিল একজন দোভাষী একটি বাইটকোড কম্পাইলার, যার ফর্ম থেকে প্রোগ্রাম রূপান্তরিত হবে হয়ে যাবে ইন টেক্সট কিছু মধ্যে বাইনারি ফর্ম। তারপরে প্রোগ্রামটি সেই বাইনারি আকারে বিতরণ করা হয় তবে সোর্স কোড আকারে নয়। ব্যবহারকারী মেশিনে, বাইটোকোডকে একটি নতুন সত্তা - ভার্চুয়াল মেশিনে খাওয়ানো হয় , যা বাস্তবে সেই বাইটোকোডকে ব্যাখ্যা করে। এ কারণে ভার্চুয়াল মেশিনগুলিকে বাইটকোড ইন্টারপ্রিটার বলা হয় । তবে এখানে আপনার মনোযোগ দিন! একটি শাস্ত্রীয় দোভাষী একটিপাঠ্য দোভাষী , কিন্তু ভার্চুয়াল মেশিনটি বাইনারি ইন্টারপ্রেটার ! এটি জাভা এবং সি # এর গৃহীত একটি পদ্ধতি।
পরিশেষে, আমরা যদি বাইকোড সংকলকটিতে মেশিন কোড জেনারেশনটি যুক্ত করি তবে ফলস্বরূপ আমরা যা অর্জন করি তাকে আমরা শাস্ত্রীয় সংকলক বলে । একটি ধ্রুপদী সংকলক প্রোগ্রামের উত্স কোডটিকে একটি নির্দিষ্ট প্রসেসরের মেশিন কোডে রূপান্তর করে । সেই মেশিন কোডটি তখন কোনও অতিরিক্ত মধ্যস্থতা ছাড়াই টার্গেট প্রসেসরে সরাসরি সম্পাদন করা যেতে পারে (কোনও ধরণের দোভাষী ছাড়া কোনও পাঠ্য দোভাষী এবং বাইনারি ইন্টারপ্রেটার নাও)।
আসুন এখন আসুন মূল প্রশ্নে ফিরে যান এবং জাভা বনাম পাইথন বিবেচনা করুন।
জাভা প্রাথমিকভাবে ডিজাইন করা হয়েছিল যতটা সম্ভব বাস্তবায়ন নির্ভরতা রয়েছে। এর নকশাটি "একবার লিখুন, যে কোনও জায়গায় চালান" (ডাব্লুওআরএ) নীতির ভিত্তিতে তৈরি is এটি বাস্তবায়নের জন্য, জাভা প্রথমে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে ডিজাইন করা হয়েছিল যা মেশিন-স্বতন্ত্র বাইনারি বাইটকোডে সংকলিত হয় , যা তারপরে পুনরায় সংকলনের প্রয়োজন ছাড়াই জাভা সমর্থনকারী সমস্ত প্ল্যাটফর্মগুলিতে কার্যকর করা যেতে পারে । আপনি জাভা সম্পর্কে যেমন ডাব্লুওআরএ-ভিত্তিক সি ++ সম্পর্কে ভাবতে পারেন । আসলে জাভা পাইথনের মতো স্ক্রিপ্টিং ভাষার চেয়ে সি ++ এর কাছাকাছি । তবে সি ++ এর বিপরীতে , এটি সংকলন করার জন্য ডিজাইন করা হয়েছিল জাভাবাইনারি বাইটকোড যা তখন ভার্চুয়াল মেশিনের পরিবেশে কার্যকর করা হয় , যখন সি ++ মেশিন কোডে সংকলিত করার জন্য ডিজাইন করা হয়েছিল এবং তারপরে সরাসরি লক্ষ্য প্রসেসরের দ্বারা নির্বাহ করা হয়েছিল।
পাইথন প্রথমে এক ধরণের স্ক্রিপ্টিং প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে ডিজাইন করা হয়েছিল যা স্ক্রিপ্টগুলি ব্যাখ্যা করে ( প্রোগ্রামিং ভাষার নিয়ম অনুসারে লিখিত পাঠ্য আকারে প্রোগ্রামগুলি)। এর কারণে, পাইথন শুরুতে এক-লাইন কমান্ড বা বিবৃতিগুলির গতিশীল ব্যাখ্যা সমর্থন করেছিল, যেমন বাশ বা উইন্ডোজ সিএমডি করে do একই কারণে পাইথনের প্রাথমিক বাস্তবায়নের অভ্যন্তরে এ জাতীয় বাইকোড কার্যকর করার জন্য কোনও ধরণের বাইটকোড সংকলক এবং ভার্চুয়াল মেশিন ছিল না, তবে শুরু থেকেই পাইথনের জন্য দোভাষী দরকার ছিল যা পাইথন প্রোগ্রামের পাঠ্যটি বুঝতে এবং মূল্যায়ণ করতে সক্ষম ।
এই কারণে, ঐতিহাসিকভাবে, জাভা ডেভেলপারদের সম্পর্কে কথা বলতে সেদিকেই ঝুঁকেছে জাভা ভার্চুয়াল মেশিন (কারণ প্রথমে জাভা এর প্যাকেজ হিসাবে এসেছে জাভা বাইটকোড কম্পাইলার এবং বাইটকোড ব্যাখ্যাকারী - জেভিএম ), এবং পাইথন ডেভেলপারদের কথা সেদিকেই ঝুঁকেছে পাইথন ইন্টারপ্রেটার (কারণ প্রাথমিকভাবে পাইথন হয়েছে কোনও ভার্চুয়াল মেশিন নয় এবং এটি এক ধরণের ধ্রুপদী পাঠ্য দোভাষী ছিল যা কোনও প্রকারের সংকলন বা বাইনারি কোডের কোনও রূপে রূপান্তর ছাড়াই প্রোগ্রাম পাঠ্যকে সরাসরি চালিত করে )।
বর্তমানে পাইথনেরও হুডের নিচে ভার্চুয়াল মেশিন রয়েছে এবং পাইথন বাইটকোড সংকলন ও ব্যাখ্যা করতে পারে। এবং এই সত্যটি বিভ্রান্তিতে অতিরিক্ত বিনিয়োগ করে " কেন জাভা ভার্চুয়াল মেশিন, তবে পাইথন ইন্টারপ্রেটার?এবং সেই প্রোগ্রামগুলি ঠিক একই আচরণ প্রদর্শন করবে এবং সমান ইনপুট থেকে সমানভাবে একই আউটপুট উত্পাদন করবে। একমাত্র পর্যবেক্ষণযোগ্য পার্থক্য হ'ল প্রোগ্রাম সম্পাদনের গতি এবং দোভাষী দ্বারা মেমরির পরিমাণ। সুতরাং, পাইথনের ভার্চুয়াল মেশিন ভাষা ডিজাইনের একটি অপরিহার্য অংশ নয়, তবে প্রধান পাইথন ইন্টারপ্রেটারের কেবল একটি anচ্ছিক বর্ধন রয়েছে।
জাভা একইভাবে বিবেচনা করা যেতে পারে। হুডের নীচে জাভাতে একটি জেআইটি সংকলক রয়েছে এবং এটি নির্বাচিতভাবে জাভা ক্লাসের পদ্ধতিগুলি লক্ষ্য প্ল্যাটফর্মের মেশিন কোডে সংকলন করতে পারে এবং তারপরে সরাসরি এটি কার্যকর করতে পারে। কিন্ত! জাভা এখনও জাভা প্রোগ্রাম কার্যকর করার প্রাথমিক উপায় হিসাবে বাইটকোড ব্যাখ্যাটি ব্যবহার করে। পাইথন বাস্তবায়নগুলির মতো যা হুডের আওতায় ভার্চুয়াল মেশিনগুলি একচেটিয়াভাবে অপ্টিমাইজেশনের কৌশল হিসাবে ব্যবহার করে, জাভা ভার্চুয়াল মেশিনগুলি কেবলমাত্র অনুকূলিতকরণের উদ্দেশ্যে জাস্ট-ইন-টাইম সংকলক ব্যবহার করে। একইভাবে, কেবলমাত্র জাভা বাইটকোডের ব্যাখ্যার চেয়ে কমপক্ষে দশগুণ দ্রুত মেশিন কোডের সরাসরি সম্পাদন করার কারণে। এবং পাইথনের ক্ষেত্রে, জেভিএম এর অধীন জেআইটি সংকলকের উপস্থিতি জাভা ভাষার ডিজাইনার এবং জাভা প্রোগ্রাম বিকাশকারী উভয়েরই পক্ষে একেবারেই স্বচ্ছ। একই জাভা প্রোগ্রামিং ভাষাটি JVM দ্বারা JIT সংকলক সহ এবং ছাড়া প্রয়োগ করতে পারে। এবং একইভাবে, একই প্রোগ্রামগুলি জেভিএম-এর সাথে জেআইটির অভ্যন্তরে এবং বাইরে ছাড়া কার্যকর করা যেতে পারে এবং একই প্রোগ্রামগুলি ঠিক একই আচরণ প্রদর্শন করবে এবং উভয় জেভিএমের (জেআইটি সহ এবং ছাড়া) সমান ইনপুট থেকে সমানভাবে আউটপুট উত্পাদন করবে। এবং পাইথনের ক্ষেত্রে, তাদের মধ্যে একমাত্র পর্যবেক্ষণযোগ্য পার্থক্যটি কার্যকর করার গতিতে এবং জেভিএম দ্বারা ব্যবহৃত স্মৃতির পরিমাণে হবে। এবং পরিশেষে, পাইথনের মতো জাভাতেও জেআইটি ভাষা নকশার একটি অপরিহার্য অংশ নয়, তবে প্রধান জেভিএম বাস্তবায়নের কেবল একটি extensionচ্ছিক বর্ধন। এবং একই প্রোগ্রামগুলি ঠিক একই আচরণ প্রদর্শন করবে এবং উভয় জেভিএমের (জেআইটি সহ এবং না) সমান ইনপুট থেকে সমানভাবে একই আউটপুট উত্পাদন করবে। এবং পাইথনের ক্ষেত্রে, তাদের মধ্যে একমাত্র পর্যবেক্ষণযোগ্য পার্থক্যটি কার্যকর করার গতিতে এবং জেভিএম দ্বারা ব্যবহৃত স্মৃতির পরিমাণে হবে। এবং পরিশেষে, পাইথনের মতো জাভাতেও জেআইটি ভাষা নকশার একটি অপরিহার্য অংশ নয়, তবে প্রধান জেভিএম বাস্তবায়নের কেবল একটি extensionচ্ছিক বর্ধন। এবং একই প্রোগ্রামগুলি ঠিক একই আচরণ প্রদর্শন করবে এবং উভয় জেভিএমের (জেআইটি সহ এবং না) সমান ইনপুট থেকে সমানভাবে একই আউটপুট উত্পাদন করবে। এবং পাইথনের ক্ষেত্রে, তাদের মধ্যে একমাত্র পর্যবেক্ষণযোগ্য পার্থক্যটি কার্যকর করার গতিতে এবং জেভিএম দ্বারা ব্যবহৃত স্মৃতির পরিমাণে হবে। এবং পরিশেষে, পাইথনের মতো জাভাতেও জেআইটি ভাষা নকশার একটি অপরিহার্য অংশ নয়, তবে প্রধান জেভিএম বাস্তবায়নের কেবল একটি extensionচ্ছিক বর্ধন।
জাভা এবং পাইথনের ভার্চুয়াল মেশিনগুলির নকশা এবং প্রয়োগের দৃষ্টিকোণ থেকে এগুলির মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে, যদিও (মনোযোগ!) উভয় এখনও ভার্চুয়াল মেশিনে রয়েছেন। জেভিএম সাধারণ বেসিক ক্রিয়াকলাপ এবং উচ্চ নির্দেশিকা প্রেরণের ব্যয় সহ নিম্ন-স্তরের ভার্চুয়াল মেশিনের একটি উদাহরণ। পাইথন এর পরিবর্তে একটি উচ্চ-স্তরের ভার্চুয়াল মেশিন, যার জন্য নির্দেশাবলী জটিল আচরণ প্রদর্শন করে এবং নির্দেশিকা প্রেরণের ব্যয়টি তাত্পর্যপূর্ণ নয়। জাভা খুব কম বিমূর্ত স্তরের সাথে পরিচালনা করে। জেভিএম আদিম ধরণের ছোট ছোট সংজ্ঞায়িত সেটগুলিতে কাজ করে এবং বাইটকোড নির্দেশাবলী এবং নেটিভ মেশিন কোড নির্দেশাবলীর মধ্যে খুব কড়া চিঠিপত্র (সাধারণত এক থেকে এক) থাকে। বিপরীতে, পাইথন ভার্চুয়াল মেশিনটি উচ্চ বিমূর্ত স্তরে কাজ করে, এটি জটিল ডেটা টাইপ (অবজেক্ট) দিয়ে পরিচালনা করে এবং অ্যাড-হক পলিমারফিজম সমর্থন করে, বাইটকোড নির্দেশাবলী জটিল আচরণ প্রকাশ করে, যা একাধিক নেটিভ মেশিন কোড নির্দেশাবলীর দ্বারা প্রতিনিধিত্ব করা যেতে পারে। উদাহরণস্বরূপ, পাইথন আনবাউন্ডেড রেঞ্জের গণিতকে সমর্থন করে। সুতরাং পাইথন ভিএম সম্ভাব্য বড় পূর্ণসংখ্যার জন্য দীর্ঘ গাণিতিক ব্যবহার করতে বাধ্য হয় যার জন্য অপারেশনের ফলে যন্ত্রের শব্দটি উপচে পড়তে পারে। অতএব, পাইথনের পাটিগণিত সম্পর্কিত একটি বাইটকোড নির্দেশ পাইথন ভিএম-র ভিতরে ফাংশন কলটি প্রকাশ করতে পারে, যখন জেভিএম গাণিতিক ক্রিয়াকলাপে এক বা কয়েকটি নেটিভ মেশিনের নির্দেশাবলী দ্বারা প্রকাশিত সাধারণ অপারেশনটিকে প্রকাশ করা হবে। সুতরাং পাইথন ভিএম সম্ভাব্য বড় পূর্ণসংখ্যার জন্য দীর্ঘ গাণিতিক ব্যবহার করতে বাধ্য হয় যার জন্য অপারেশনের ফলে যন্ত্রের শব্দটি উপচে পড়তে পারে। অতএব, পাইথনের পাটিগণিত সম্পর্কিত একটি বাইটকোড নির্দেশ পাইথন ভিএম-র ভিতরে ফাংশন কলটি প্রকাশ করতে পারে, যখন জেভিএম গাণিতিক ক্রিয়াকলাপে এক বা কয়েকটি নেটিভ মেশিনের নির্দেশাবলী দ্বারা প্রকাশিত সাধারণ অপারেশনটিকে প্রকাশ করা হবে। সুতরাং পাইথন ভিএম সম্ভাব্য বড় পূর্ণসংখ্যার জন্য দীর্ঘ গাণিতিক ব্যবহার করতে বাধ্য হয় যার জন্য অপারেশনের ফলে যন্ত্রের শব্দটি উপচে পড়তে পারে। অতএব, পাইথনের পাটিগণিত সম্পর্কিত একটি বাইটকোড নির্দেশ পাইথন ভিএম-র ভিতরে ফাংশন কলটি প্রকাশ করতে পারে, যখন জেভিএম গাণিতিক ক্রিয়াকলাপে এক বা কয়েকটি নেটিভ মেশিনের নির্দেশাবলী দ্বারা প্রকাশিত সাধারণ অপারেশনটিকে প্রকাশ করা হবে।
ফলস্বরূপ, আমরা পরবর্তী সিদ্ধান্তগুলি আঁকতে পারি। জাভা ভার্চুয়াল মেশিন কিন্তু পাইথন ইন্টারপ্রেটার কারণ:
সুতরাং, জাভা এবং পাইথন উভয়েরই ভার্চুয়াল মেশিনগুলি বাইনারি বাইটকোড ইন্টারপ্রেটার রয়েছে, যা " কেন জাভা ভার্চুয়াল মেশিন, তবে পাইথন ইন্টারপ্রেটারের মতো বিভ্রান্তি ঘটাতে পারে ?" " এর । এখানে মূল বিষয়টি হ'ল পাইথনের জন্য ভার্চুয়াল মেশিন প্রোগ্রাম প্রয়োগের প্রাথমিক বা প্রয়োজনীয় মাধ্যম নয়; এটি কেবল শাস্ত্রীয় পাঠ্য দোভাষী এর একটি extensionচ্ছিক বর্ধন। অন্যদিকে, ভার্চুয়াল মেশিনটি জাভা প্রোগ্রাম কার্যকরকরণ ইকোসিস্টেমের একটি মূল এবং অপরিবর্তনীয় অংশ। প্রোগ্রামিং ভাষার ডিজাইনের জন্য স্থিতিশীল বা গতিশীল টাইপিং পছন্দটি মূলত কেবল ভার্চুয়াল মেশিন বিমূর্তকরণ স্তরকে প্রভাবিত করে, তবে ভার্চুয়াল মেশিনের প্রয়োজন কিনা তা নির্দেশ করে না। উভয় টাইপিং সিস্টেম ব্যবহার করে ভাষাগুলি তাদের কাঙ্ক্ষিত এক্সিকিউশন মডেলের উপর নির্ভর করে ভার্চুয়াল মেশিনের পরিবেশের মধ্যে সংকলিত, ব্যাখ্যা করা বা সম্পাদন করার জন্য ডিজাইন করা যেতে পারে।
তাদের মধ্যে সত্যিকারের কোনও পার্থক্য নেই, লোকেরা কেবল স্রষ্টাগুলি বেছে নেওয়া সম্মেলনগুলি অনুসরণ করে।
ভুলে যাবেন না যে পাইথনের কাছে জেআইটি সংকলক রয়েছে x86 এর জন্য, আরও বিষয়টি বিভ্রান্ত করে। (সাইকো দেখুন)
ভিএম এর পারফরম্যান্স সম্পর্কিত ইস্যুগুলি নিয়ে আলোচনা করার সময় কেবল একটি 'অনুবাদিত ভাষার' আরও কঠোর ব্যাখ্যা কার্যকর হয়, উদাহরণস্বরূপ, পাইথনের সাথে তুলনা করলে রুবিকে (??) ধীর বলে মনে করা হত কারণ এটি পাইথনের বিপরীতে একটি ব্যাখ্যাযুক্ত ভাষা - অন্যভাবে শব্দ, প্রসঙ্গ সবকিছু।
পাইথন কোডটিকে বাইটোকোডে সংকলন না করে ব্যাখ্যা করতে পারে। জাভা পারে না ।
পাইথন একটি সংকলিতটির বিপরীতে বর্ণিত ভাষা, যদিও বাইটকোড সংকলক উপস্থিতির কারণে পার্থক্যটি ঝাপসা হতে পারে। এর অর্থ হ'ল উত্স ফাইলগুলি সরাসরি চালানো যেতে পারে নির্ধারিতভাবে এক্সিকিউটেবল তৈরি না করে যা তখন চালানো হয়।
(ডকুমেন্টেশন থেকে)।
জাভা, প্রতি একক ফাইল আছে একটি থেকে সংকলিত করতে .class
ফাইল, যা পরে জেভিএম চলন খুব বেশি। বিপরীতে, পাইথন সেগুলি আপনার মূল স্ক্রিপ্ট দ্বারা আমদানি করে, সেই ফাইলগুলির পরবর্তী ব্যবহারগুলিকে গতিতে সহায়তা করে।
তবে, সাধারণ ক্ষেত্রে, বেশিরভাগ অজগর (কমপক্ষে সিপিথন) কোডটি এমুলেটেড স্ট্যাক মেশিনে চালিত হয়, যার জেভিএম-র প্রায় একই ধরণের নির্দেশনা রয়েছে, তাই কোনও দুর্দান্ত পার্থক্য নেই।
তবে এই বিভ্রান্তির আসল কারণ কারণ শুরু থেকেই, জাভা নিজেকে "পোর্টেবল, এক্সিকিউটেবল বাইটকোড" হিসাবে চিহ্নিত করেছিলেন এবং পাইথন নিজেকে আরআরপিএল দ্বারা গতিময়, ব্যাখ্যাযুক্ত ভাষা হিসাবে চিহ্নিত করেছিলেন। নাম লাঠি!
সবার আগে আপনার বুঝতে হবে যে প্রোগ্রামিং বা কম্পিউটার বিজ্ঞান সাধারণভাবে গণিত নয় এবং আমরা প্রায়শই ব্যবহার করি এমন বেশিরভাগ শর্তের জন্য আমাদের কঠোর সংজ্ঞা নেই।
এখন আপনার প্রশ্ন:
দোভাষী কী (কম্পিউটার বিজ্ঞানে)
এটি উত্স কোডটি ক্ষুদ্রতম এক্সিকিউটেবল ইউনিট দ্বারা অনুবাদ করে এবং তারপরে সেই ইউনিটটি কার্যকর করে।
ভার্চুয়াল মেশিন কি?
জেভিএমের ক্ষেত্রে ভার্চুয়াল মেশিনটি এমন একটি সফ্টওয়্যার যা একটি ইন্টারপ্রিটার, শ্রেণি লোডার, আবর্জনা সংগ্রহকারী, থ্রেড শিডিয়ুলার, জেআইটি সংকলক এবং অন্যান্য অনেকগুলি বিষয় রয়েছে।
যেহেতু আপনি দেখতে পাচ্ছেন দোভাষী একটি অংশ বা জেভিএম এবং পুরো জেভিএমকে দোভাষী বলা যায় না কারণ এতে আরও অনেক উপাদান রয়েছে।
পাইথনের কথা বলার সময় কেন "ইন্টারপ্রিটার" শব্দটি ব্যবহার করুন
জাভা সহ সংকলনের অংশটি স্পষ্ট। অন্যদিকে অজগরটি এর সংকলন এবং ব্যাখ্যা প্রক্রিয়া সম্পর্কে জাভা হিসাবে স্পষ্ট নয়, শেষ ব্যবহারকারীর দৃষ্টিকোণ থেকে পাইথন প্রোগ্রামগুলি কার্যকর করতে ব্যবহৃত একমাত্র প্রক্রিয়া
না, তারা উভয়ই বাইট কোড ব্যাখ্যা করে না।
পাইথন কেবলমাত্র বাইপোডকে ব্যাখ্যা করে যদি আপনি পাইপির সাথে চালাচ্ছেন। অন্যথায় এটি সিতে সংকলিত হয় এবং সেই স্তরে ব্যাখ্যা করা হয়।
জাভা বাইকোডে সংকলন করে।
আমি মনে করি উভয়ের মধ্যে লাইনগুলি অস্পষ্ট, লোকেরা বেশিরভাগ ক্ষেত্রে "দোভাষী" শব্দের অর্থ এবং ভাষা "দোভাষী ... সংকলক" বর্ণালীটির প্রতিটি পাশে কতটা কাছাকাছি দাঁড়িয়েছে তা নিয়ে তর্ক করে। তবে কেউই 100% করে না। আমি মনে করি জাভা বা পাইথন বাস্তবায়ন লিখতে সহজ যা বর্ণালীটির কোনও মূল্য হতে পারে।
বর্তমানে জাভা এবং পাইথন উভয়ের ভার্চুয়াল মেশিন এবং বাইটকোড রয়েছে, যদিও একটি কংক্রিট মান আকার দ্বারা চালিত হয় (32-বিট পূর্ণসংখ্যার মতো) অন্যদিকে প্রতিটি কলের জন্য আকার নির্ধারণ করতে হয়, যা আমার মতে শর্তগুলির মধ্যে সীমানা নির্ধারণ করে না।
পাইথনটি অফিসিয়ালভাবে বাইটকোড সংজ্ঞায়িত করেনি এবং এটি কেবল স্মৃতিতে বিদ্যমান তা এই যুক্তিটিও আমাকে বোঝায় না, কারণ আমি এমন ডিভাইসগুলি বিকাশের পরিকল্পনা করছি যা কেবল পাইথন বাইটকোডকে স্বীকৃতি দেবে এবং সংকলনের অংশটি ব্রাউজার জেএস মেশিনে সম্পন্ন হবে।
পারফরম্যান্স শুধুমাত্র কংক্রিট বাস্তবায়ন সম্পর্কে। এটির সাথে কাজ করতে সক্ষম হওয়ার জন্য আমাদের আকারের প্রয়োজন জানার দরকার নেই এবং শেষ পর্যন্ত বেশিরভাগ ক্ষেত্রে আমরা কাঠামোগুলি নিয়ে কাজ করি, মৌলিক ধরণের নয়। পাইথন ভিএমকে এমনভাবে অপ্টিমাইজ করা সম্ভব যে এটি উপস্থিতিগুলিকে পুনরায় ব্যবহার করে অভিব্যক্তি গণনার সময় প্রতিবার নতুন অবজেক্ট তৈরির প্রয়োজনীয়তা দূর করবে। এটি সম্পন্ন হয়ে গেলে, দুটি পূর্ণসংখ্যার যোগফলের গণনা করার মধ্যে বিশ্বব্যাপী পারফরম্যান্সের পার্থক্য নেই, এটি যেখানে জাভা জ্বলজ্বল করে।
উভয়ের মধ্যে কোনও হত্যাকারী পার্থক্য নেই, কেবলমাত্র কিছু বাস্তবায়ন ঘনত্ব এবং অপ্টিমাইজেশনের অভাব যা শেষ ব্যবহারকারীর কাছে অপ্রাসঙ্গিক, সম্ভবত তিনি যে পয়েন্টে পারফরম্যান্সের পিছনে লক্ষ্য করতে শুরু করেন, তবে এটি আবার বাস্তবায়ন এবং আর্কিটেকচার ইস্যু নয়।
যে পোস্টগুলিতে উল্লেখ করা হয়েছে যে অজগরকে বাইট কোড উত্পন্ন করার দরকার নেই, আমি নিশ্চিত নই যে এটি সত্য। মনে হচ্ছে যে পাইথন সমস্ত callables একটি থাকতে হবে .__code__.co_code
অ্যাট্রিবিউট যা বাইট কোড ধারণ করে। পাইথনটিকে "সংকলিত নয়" বলার কোনও অর্থপূর্ণ কারণ আমি দেখছি না কারণ কেবল সংকলিত নিদর্শনগুলি সংরক্ষণ না করা যেতে পারে; এবং প্রায়শই পাইথনের নকশার সাহায্যে সংরক্ষণ করা হয় না, উদাহরণস্বরূপ সমস্ত ইনক্লিজেনশন এটির ইনপুটটির জন্য নতুন বাইকোড সংকলন করে, এ কারণেই বোঝা পরিবর্তনশীল সুযোগটি পাইথন স্ক্রিপ্ট চালানো এবং পিডিবি ব্যবহারের মধ্যে যেমন compile(mode='exec, ...)
সংকলন করে না তার মধ্যে সংগত নয়compile(mode='single', ...)