প্রকারের লিখনটি জেএসে স্থানান্তর করে। তারপরে গাছের কাঁপুনি রয়েছে, "কম" (alচ্ছিক) এবং স্থাপনার প্রক্রিয়াতে আর কী what তবে "সংকলন" এর মতো (আফাইক) কিছুই করার নেই। সবকিছু বান্ডিল হয়ে যায় এবং ভারি অনুকূলিত হয়, তবে এটি আসলে সংকলিত হয় না, তাই না?
সংকলন একটি ভাষায় লিখিত একটি প্রোগ্রাম রূপান্তর মানে একটি একটি শব্দার্থগতভাবে সমতুল্য ভাষায় লেখা প্রোগ্রাম বি যেমন যে ভাষার নিয়ম অনুযায়ী কম্পাইল প্রোগ্রাম মূল্যায়ন বি (উদাহরণস্বরূপ জন্য একজন দোভাষী সঙ্গে এটি ব্যাখ্যা বি ) একই ফলাফল উৎপাদ এবং আছে মূল ভাষার নিয়ম অনুযায়ী প্রোগ্রাম মূল্যায়ন হিসাবে একই পার্শ্ব প্রতিক্রিয়া একটি (জন্য একজন দোভাষী সঙ্গে এটি ব্যাখ্যা উদাহরণস্বরূপ একটি )।
সংকলনটির অর্থ সহজভাবে একটি প্রোগ্রাম A থেকে ভাষা B তে অনুবাদ করা । এটিই এর অর্থ। (এছাড়াও লক্ষ করুন যে এ এবং বি এর একই ভাষা হওয়া পুরোপুরি সম্ভব ))
কিছু ক্ষেত্রে, আমাদের কাছে A এবং B কী হয় এবং সংকলকটি কী করে তার উপর নির্ভর করে নির্দিষ্ট ধরণের সংকলকগুলির জন্য আরও বিশেষজ্ঞের নাম রয়েছে :
- যদি একটি সমাবেশ ভাষা হিসেবে প্রমাণিত হয় এবং বি মেশিন ভাষা হিসেবে প্রমাণিত হয়, তাহলে আমরা এটি একটি কল প্রতীকী ভাষান্তর ,
- যদি একটি মেশিন ভাষা হিসেবে প্রমাণিত হয় এবং বি সমাবেশ ভাষা হিসেবে প্রমাণিত হয়, তাহলে আমরা এটি একটি কল disassembler ,
- যদি একটি কম-স্তরের হিসেবে প্রমাণিত হয় বি , তাহলে আমরা এটি একটি কল decompiler ,
- যদি এ এবং বি একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি কোনও উপায়ে দ্রুত বা হালকা হয়, তবে আমরা একে অপ্টিমাইজার বলি ,
- যদি এ এবং বি একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি ছোট হয়, তবে আমরা একে মিনিফায়ার বলি ,
- যদি A এবং B একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি কম পঠনযোগ্য হয়, তবে আমরা একে অপ্রচলিত বলি ,
- যদি A এবং B মোটামুটি বিমূর্ততার একই স্তরের বলে মনে হয়, তবে আমরা এটিকে ট্রান্সপ্লার বলি এবং
- যদি A এবং B মোটামুটি বিমূর্ততার একই স্তরের বলে মনে হয় এবং ফলস্বরূপ প্রোগ্রামটি বিন্যাস, মন্তব্য এবং প্রোগ্রামার অভিপ্রায় সংরক্ষণ করে যে ফলস্বরূপ প্রোগ্রামটি মূল প্রোগ্রাম হিসাবে একই ফ্যাশনে বজায় রাখা সম্ভব হয়, তবে আমরা কল করি এটি একটি পুনরায় প্রকৌশল সরঞ্জাম ।
এছাড়াও, নোট করুন যে পুরানো উত্সগুলি "সংকলন" এবং "সংকলক" এর পরিবর্তে "অনুবাদ" এবং "অনুবাদক" শব্দটি ব্যবহার করতে পারে। উদাহরণস্বরূপ, সি "অনুবাদ ইউনিট" সম্পর্কে কথা বলেন।
আপনি "ভাষা প্রসেসর" শব্দটি জুড়ে হোঁচট খেতে পারেন। এর সংজ্ঞা সংজ্ঞা অনুসারে একটি সংকলক, একটি দোভাষী বা উভয় সংকলক এবং দোভাষী হতে পারে।
জাভাস্ক্রিপ্ট নিজেই এখনও ব্যাখ্যা করা হয়, তাই না?
জাভাস্ক্রিপ্ট একটি ভাষা। ভাষাগুলি যৌক্তিক নিয়ম এবং বিধিনিষেধের একটি সেট। ভাষার ব্যাখ্যা বা সংকলন হয় না are ভাষা ঠিক আছে ।
সংকলন এবং ব্যাখ্যা একটি সংকলক বা দোভাষী (দুহ!) এর বৈশিষ্ট্য। প্রতিটি ভাষা সংকলক সহ প্রয়োগ করা যেতে পারে এবং প্রতিটি ভাষা একজন দোভাষী দ্বারা প্রয়োগ করা যেতে পারে। অনেক ভাষায় সংকলক এবং দোভাষী উভয়ই থাকে। অনেকগুলি আধুনিক উচ্চ-কার্য সম্পাদনকারী ইঞ্জিনগুলির কমপক্ষে একটি সংকলক এবং কমপক্ষে একটি দোভাষী অন্তর্ভুক্ত থাকে।
এই দুটি পদ বিমূর্ততার বিভিন্ন স্তর সম্পর্কিত belong ইংরাজী যদি কোনও টাইপ করা ভাষা হত তবে "ইন্টারপ্রিটেড-ল্যাঙ্গুয়েজ" টাইপ ত্রুটি হত।
এটিও লক্ষ করুন যে কয়েকটি ভাষায় না ইন্টারপ্রেটার বা সংকলক রয়েছে। এমন কিছু ভাষা রয়েছে যার বাস্তবায়ন হয় না have তবুও এগুলি ভাষা এবং আপনি সেগুলিতে প্রোগ্রাম লিখতে পারেন। আপনি তাদের চালাতে পারবেন না।
এছাড়াও, নোট করুন যে কোনও কিছুতে সমস্ত কিছু ব্যাখ্যা করা হয় : আপনি যদি কিছু কার্যকর করতে চান তবে আপনাকে অবশ্যই এটি ব্যাখ্যা করতে হবে। সংকলন কেবল একটি ভাষা থেকে অন্য ভাষায় কোড অনুবাদ করে। এটি এটি চালায় না। ব্যাখ্যা এটি চালায়। (কখনও কখনও, যখন কোনও অনুবাদক হার্ডওয়্যারে প্রয়োগ করা হয়, আমরা এটিকে একটি "সিপিইউ" বলি, তবে এটি এখনও দোভাষী হয় ter)
কেস পয়েন্ট: বর্তমানে বিদ্যমান প্রতিটি মূলধারার জাভাস্ক্রিপ্ট প্রয়োগের একটি সংকলক রয়েছে।
V8 খাঁটি সংকলক হিসাবে শুরু হয়েছে: এটি জাভাস্ক্রিপ্টটি সংমিতভাবে সংযোজিত নেটিভ মেশিন কোড থেকে সংকলিত। পরে, একটি দ্বিতীয় সংকলক যুক্ত করা হয়েছিল। এখন, দুটি সংকলক রয়েছে: একটি হালকা ওজনের সংকলক যা মাঝারিভাবে অনুকূলিত কোড তৈরি করে তবে সংকলকটি নিজেই খুব দ্রুত এবং সামান্য র্যাম ব্যবহার করে। এই সংকলকটিও সংকলিত কোডের মধ্যে প্রোফাইলিং কোডটি ইনজেক্ট করে। দ্বিতীয় সংকলকটি আরও বেশি ভারী ওজন, ধীর এবং আরও ব্যয়বহুল সংকলক, যা তবে আরও শক্ত, আরও দ্রুত কোড তৈরি করে। এটি গতিশীল অপ্টিমাইজেশনের সিদ্ধান্ত নেওয়ার জন্য প্রথম সংকলক দ্বারা ইনজেক্ট করা প্রোফাইলিং কোডের ফলাফলগুলিও ব্যবহার করে। এছাড়াও, দ্বিতীয় সংকলকটি ব্যবহার করে কোন কোডটি পুনরায় সংকলন করতে হবে সে সিদ্ধান্তটি সেই প্রোফাইলিং তথ্যের ভিত্তিতে করা হয়েছে। মনে রাখবেন যে কোনও সময়েই দোভাষী জড়িত নেই। ভি 8 কখনই ব্যাখ্যা করে না, এটি সর্বদা সংকলন করে। এটা না এমনকি একটি দোভাষী অন্তর্ভুক্ত। (আসলে, আমি আজকাল এটি বিশ্বাস করি, আমি প্রথম দুটি পুনরাবৃত্তি বর্ণনা করছি))
স্পাইডারমনকি স্পাইডারমনকি বাইটকোডে জাভাস্ক্রিপ্ট সংকলন করে যা এর পরে এটি ব্যাখ্যা করে। দোভাষা কোডটিও প্রোফাইল দেয় এবং তারপরে কোডটি যা প্রায়শই সম্পাদিত হয় সেগুলি দেশীয় মেশিন কোডে একটি সংকলক দ্বারা সংকলিত হয়। সুতরাং, স্পাইডারমোনকিতে দুটি সংকলক রয়েছে : একটি জাভাস্ক্রিপ্ট থেকে স্পাইডারমনকি বাইটকোড এবং অন্যটি স্পাইডারমনকি বাইটকোড থেকে নেটিভ মেশিন কোডে।
প্রায় সমস্ত জাভাস্ক্রিপ্ট এক্সিকিউশন ইঞ্জিনগুলি (ভি 8 বাদে) একটি এওটি সংকলকের এই মডেলটিকে অনুসরণ করে যা জাভাস্ক্রিপ্টকে বাইটকোডে সংকলিত করে এবং একটি মিশ্র-মোড ইঞ্জিন যা সেই বাইটোকোডকে ব্যাখ্যা এবং সংকলনের মধ্যে স্যুইচ করে।
আপনি একটি মন্তব্যে লিখেছেন:
আমি সত্যিই ভাবছিলাম যে মেশিন কোডটি কোথাও জড়িত।
"মেশিন কোড" এর অর্থ কী?
একজন মানুষের মেশিন ল্যাঙ্গুয়েজ কি অন্য মানুষের মধ্যবর্তী ভাষা এবং তদ্বিপরীত? উদাহরণস্বরূপ, এমন সিপিইউ রয়েছে যা মূলত জেভিএম বাইটকোড কার্যকর করতে পারে, এই জাতীয় সিপিইউতে, জেভিএম বাইটকোড হল নেটিভ মেশিন কোড। আর যখন আপনি ঐ এক্স 86 মেশিন কোডের চালানো এক্স 86 মেশিন কোড জন্য দোভাষী হয় হয় বাইটকোড বুঝিয়ে দিলেন।
জাভাতে জেপিসি লেখা একটি x86 দোভাষী রয়েছে। যদি আমি জেপিসিতে x86 মেশিন কোডটি কোনও স্থানীয় জেভিএম সিপিইউতে চালিত করি… কোনটি বাইটকোড এবং কোনটি স্থানীয় কোড? আমি যদি জাভাস্ক্রিপ্টে x86 মেশিন কোডটি সংকলন করি (হ্যাঁ, এমন সরঞ্জাম রয়েছে যা করতে পারে) এবং এটি আমার ফোনের একটি ব্রাউজারে চালিত করে (যার একটি এআরএম সিপিইউ রয়েছে), যা বাইটকোড এবং কোন নেটিভ মেশিন কোড? আমি যে প্রোগ্রামটি সংকলন করছি তা যদি একটি স্পার্ক এমুলেটর হয় এবং আমি স্পারক কোড চালানোর জন্য এটি ব্যবহার করি?
নোট করুন যে প্রতিটি ভাষা একটি বিমূর্ত মেশিনকে প্ররোচিত করে এবং সেই মেশিনটির জন্য মেশিন ভাষা। সুতরাং, প্রতিটি ভাষা (খুব উচ্চ স্তরের ভাষা সহ) দেশীয় মেশিন কোড। এছাড়াও, আপনি প্রতিটি ভাষার জন্য একজন দোভাষী লিখতে পারেন। সুতরাং, প্রতিটি ভাষা (x86 মেশিন কোড সহ) স্থানীয় নয়।