এমনকি সিপিথন, জেপাইথন, আয়রন পাইথন, পাইপাই একে অপরের থেকে পৃথক কীভাবে তা বুঝতে আমার একই সমস্যা হয়েছিল।
সুতরাং, আমি ব্যাখ্যা করতে শুরু করার আগে আমি তিনটি জিনিস পরিষ্কার করতে ইচ্ছুক:
- পাইথন : এটি একটি ভাষা, এটি কেবল ব্যাখ্যা করে / কীভাবে নিজেকে দোভাষীর কাছে প্রকাশ করতে পারে / বর্ণনা করে (প্রোগ্রামটি যা আপনার পাইথন কোড গ্রহণ করে)।
- বাস্তবায়ন : দোভাষী কীভাবে লেখা হয়েছিল, বিশেষত, কোন ভাষায় এবং কী কাজ শেষ করে তা এই সমস্ত বিষয় ।
- বাইটকোড : এটি এমন একটি কোড যা একটি প্রোগ্রাম দ্বারা প্রসেস করা হয়, সাধারণত একটি ভার্চুয়াল মেশিন হিসাবে পরিচিত, "রিয়েল" কম্পিউটার মেশিনের পরিবর্তে হার্ডওয়্যার প্রসেসর।
সিপিথন হল বাস্তবায়ন, যা সি ভাষায় লেখা হয়েছিল। এটি বাইটোকড (স্ট্যাক-মেশিন ভিত্তিক নির্দেশিকা সেট) তৈরি করে যা পাইথন নির্দিষ্ট এবং তারপরে এটি সম্পাদন করে। পাইথন কোডকে বাইটকোডে রূপান্তর করার কারণ হ'ল মেশিনের নির্দেশাবলীর মতো দেখতে যদি কোনও দোভাষীকে প্রয়োগ করা সহজ হয়। তবে, পাইথন কোড কার্যকর করার আগে কিছু বাইকোড তৈরি করার প্রয়োজন নেই (তবে সিপিথন উত্পাদন করে)।
আপনি যদি সিপথনের বাইটকোডটি দেখতে চান তবে দেখতে পারেন। আপনি কীভাবে পারেন তা এখানে:
>>> def f(x, y): # line 1
... print("Hello") # line 2
... if x: # line 3
... y += x # line 4
... print(x, y) # line 5
... return x+y # line 6
... # line 7
>>> import dis # line 8
>>> dis.dis(f) # line 9
2 0 LOAD_GLOBAL 0 (print)
2 LOAD_CONST 1 ('Hello')
4 CALL_FUNCTION 1
6 POP_TOP
3 8 LOAD_FAST 0 (x)
10 POP_JUMP_IF_FALSE 20
4 12 LOAD_FAST 1 (y)
14 LOAD_FAST 0 (x)
16 INPLACE_ADD
18 STORE_FAST 1 (y)
5 >> 20 LOAD_GLOBAL 0 (print)
22 LOAD_FAST 0 (x)
24 LOAD_FAST 1 (y)
26 CALL_FUNCTION 2
28 POP_TOP
6 30 LOAD_FAST 0 (x)
32 LOAD_FAST 1 (y)
34 BINARY_ADD
36 RETURN_VALUE
এখন, উপরের কোডটি একবার দেখুন। লাইন 1 থেকে 6 একটি ফাংশন সংজ্ঞা। লাইন 8-এ, আমরা 'ডিস' মডিউলটি আমদানি করি যা সিপাইথন (দোভাষী) দ্বারা উত্পাদিত মধ্যবর্তী পাইথন বাইটকোড (বা আপনি বলতে পারেন পাইথন বাইটকোডের জন্য ডিসসেমব্লার) দেখতে ব্যবহার করতে পারেন।
দ্রষ্টব্য : আমি # টিপথ আইআরসি চ্যানেল থেকে এই কোডটির লিঙ্কটি পেয়েছি: https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c
এবং তারপরে, সেখানে জাইথন রয়েছে যা জাভাতে লেখা এবং জাভা বাইট কোড উত্পাদন করে। জাভা বাইট কোডটি জাভা রানটাইম এনভায়রনমেন্টে চলে, যা জাভা ভার্চুয়াল মেশিনের (জেভিএম) বাস্তবায়ন। যদি এটি বিভ্রান্তিকর হয় তবে আমার সন্দেহ হয় যে জাভা কীভাবে কাজ করে তা আপনার কোনও ধারণা নেই। সাধারণ লোকের ভাষায়, জাভা (ভাষাটি, সংকলক নয়) কোডটি জাভা সংকলক গ্রহণ করেছে এবং একটি ফাইল (যা জাভা বাইট কোড) আউটপুট করে যা কেবল একটি জেআরই ব্যবহার করে চালানো যেতে পারে। এটি এমনভাবে করা হয় যাতে একবার জাভা কোডটি সংকলিত হয়ে যায় তবে এটি জাভা বাইট কোড ফর্ম্যাটের অন্যান্য মেশিনে পোর্ট করা যায়, যা কেবল জেআরই দ্বারা চালিত হতে পারে। যদি এটি এখনও বিভ্রান্ত হয় তবে আপনি এই ওয়েব পৃষ্ঠাটি একবার দেখতে চান ।
এখানে, আপনি জিজ্ঞাসা করতে পারেন সিপিথনের বাইকোডটি জাইথনের মতো বহনযোগ্য কিনা, আমি সন্দেহ করি না। বাইটকোড CPython বাস্তবায়ন উত্পাদিত কোডের আরও কার্যকর করার জন্য এটা সহজ তৈরীর জন্য যে ব্যাখ্যাকারী নির্দিষ্ট ছিল (আমি যে, এই ধরনের মধ্যবর্তী বাইটকোড প্রকাশনা সন্দেহ, শুধু কর্মের জন্য প্রক্রিয়াকরণ অন্যান্য অনেক দোভাষী মধ্যে সম্পন্ন করা হয়)।
সুতরাং, জাইথনে, আপনি যখন আপনার পাইথন কোডটি সংকলন করেন, আপনি জাভা বাইট কোডটি শেষ করেন যা একটি জেভিএম-এ চালানো যেতে পারে।
একইভাবে, আয়রন পাইথন (সি # ভাষায় লিখিত) আপনার পাইথন কোডটি কমন ল্যাঙ্গুয়েজ রানটাইম (সিএলআর) তে সংকলন করে, যা মাইক্রোসফ্ট দ্বারা বিকাশিত জেভিএমের তুলনায় একই প্রযুক্তি।