বর্ণিত এবং সংকলিত কোডের মধ্যে পার্থক্য সম্ভবত একটি কল্পকাহিনী, যা রাফেলের মন্তব্য দ্বারা আন্ডারলাইন করা হয়েছে :
the claim seems to be trivially wrong without further assumptions: if there is
an interpreter, I can always bundle interpreter and code in one executable ...
আসল বিষয়টি হ'ল কোডটি সর্বদা ব্যাখ্যা করা হয়, সফ্টওয়্যার দ্বারা, হার্ডওয়্যার বা উভয়ের সংমিশ্রণ দ্বারা এবং সংকলন প্রক্রিয়াটি এটি কী হতে পারে তা বলতে পারে না।
আপনি যেটি সংকলন হিসাবে বুঝতে পেরেছেন তা হ'ল একটি ভাষা (উত্সের জন্য) থেকে অন্য ভাষায় (টার্গেটের জন্য ) এর অনুবাদ প্রক্রিয়া । এবং, এর অনুবাদক সাধারণত জন্য দোভাষী থেকে আলাদা হয় ।STST
সংকলিত প্রোগ্রামটি একটি সিনট্যাকটিক ফর্ম থেকে অন্য সিন্ট্যাক্টিক ফর্ম , যেমন, এবং , এবং ভাষার মূল শব্দার্থতাকে কেন্দ্র করে একই রকম গণনার আচরণ করা হয়, আপনি সাধারণত যে কয়েকটি জিনিস চেষ্টা করতে জটিলতা বা সাধারণ দক্ষতা (সময়, স্থান, পৃষ্ঠ, শক্তি খরচ) এর মতো সম্ভবত অনুকূলিতকরণ change আমি কার্যকরী সমতা সম্পর্কে কথা না বলার চেষ্টা করছি, কারণ এর জন্য সুনির্দিষ্ট সংজ্ঞা দেওয়া দরকার।PSPTSTPSPT
কিছু সংকলক প্রকৃতপক্ষে কোডের আকার হ্রাস করার জন্য ব্যবহার করা হয়েছে, "কার্যকরকরণ" প্রয়োগের জন্য নয়। প্লেটো সিস্টেমে ব্যবহৃত ভাষার ক্ষেত্রে এটি ছিল (যদিও তারা এটি সংকলন বলে না)।
আপনি আপনার কোডটি সম্পূর্ণরূপে সংকলিত বিবেচনা করতে পারেন যদি, সংকলনের প্রক্রিয়াটির পরে, আপনার আর জন্য দোভাষী দরকার নেই । অন্তত, তাত্ত্বিক প্রশ্নের চেয়ে ইঞ্জিনিয়ারিং হিসাবে আমি আপনার প্রশ্নটি পড়ার একমাত্র উপায় (যেহেতু, তাত্ত্বিকভাবে আমি সবসময় দোভাষীকে পুনর্নির্মাণ করতে পারি)।S
আফিক, সমস্যা উত্থাপন করতে পারে এমন একটি বিষয় হ'ল মেটা-সার্কুলারিটি । এটি তখনই যখন কোনও প্রোগ্রাম নিজস্ব উত্স ভাষা তে সিনট্যাক্টিক স্ট্রাকচারগুলি ম্যানিপুলেট করে , প্রোগ্রাম টুকরা তৈরি করে যা তখন ব্যাখ্যা করা হয় যেন তারা মূল প্রোগ্রামের অংশ হয়ে থাকে। যেহেতু আপনি ভাষায় স্বেচ্ছাসেবী প্রোগ্রামের টুকরো উত্পাদন করতে পারেন অর্থহীন সিন্ট্যাক্টিক টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করার ফলে, আমি অনুমান করব যে আপনি প্রোগ্রামটি ভাষায় সংকলন করতে প্রায় অসম্ভব (ইঞ্জিনিয়ারিং দৃষ্টিকোণ থেকে) করতে পারবেন , যাতে এটি এখন টুকরো তৈরি করে । অত: পর জন্য অনুবাদক প্রয়োজন হবে, অথবা থেকে অন্তত কম্পাইলার থেকেSSTTSST জন্য on-the-মাছি কম্পাইল মধ্যে উত্পন্ন টুকরা (এছাড়াও দেখুন এই দস্তাবেজটি )।S
তবে কীভাবে এটি সঠিকভাবে আনুষ্ঠানিকভাবে করা যায় (এবং এর জন্য এখনই সময় নেই) আমি নিশ্চিত নই। আর অসম্ভব একটি বিষয় যে বিধিবদ্ধ করা হয় না জন্য একটি বড় শব্দ।
আরও মন্তব্য
36 ঘন্টা পরে যুক্ত করা হয়েছে। আপনি এটি খুব দীর্ঘ সিক্যুয়ালটি এড়িয়ে যেতে চাইতে পারেন।
এই প্রশ্নের বহু মন্তব্য সমস্যার দুটি মতামত দেখায়: একটি তাত্ত্বিক দৃষ্টিভঙ্গি যা এটিকে অর্থহীন হিসাবে দেখায় এবং দুর্ভাগ্যবশত এত সহজে আনুষ্ঠানিক নয় এমন একটি প্রকৌশল দৃষ্টিভঙ্গি।
ব্যাখ্যা এবং সংকলনটি দেখার জন্য অনেকগুলি উপায় রয়েছে এবং আমি কয়েকটি স্কেচ করার চেষ্টা করব। আমি যেমন পরিচালনা করতে পারি তেমন অনানুষ্ঠানিক হওয়ার চেষ্টা করব
টম্বস্টোন ডায়াগ্রাম
প্রাথমিক আনুষ্ঠানিকতার একটি (১৯60০-এর দশকের গোড়ার দিকে 1990 অবধি) টি বা
টম্বস্টোন ডায়াগ্রাম । এই চিত্রগুলি সংশ্লেষযোগ্য গ্রাফিকাল উপাদানগুলিতে দোভাষী বা সংকলকের প্রয়োগকারী ভাষা, উত্স ভাষাটি ব্যাখ্যা করা বা সংকলন করা এবং সংকলকগুলির ক্ষেত্রে লক্ষ্য ভাষা উপস্থাপন করা হয়েছে। আরও বিস্তৃত সংস্করণ বৈশিষ্ট্য যুক্ত করতে পারে। এই গ্রাফিক উপস্থাপনাগুলিকে অলঙ্কার হিসাবে বিবেচনা করা যেতে পারে, অনুমানের নিয়মগুলি, প্রসেসর প্রজন্মকে অক্সিমোস থেকে তাদের অস্তিত্বের প্রমাণ থেকে ব্যবহারের জন্য ব্যবহারযোগ্য, à লা কারি-হাওয়ার্ড (যদিও আমি নিশ্চিত নই যে ষাটের দশকে হয়েছিল :)।
আংশিক মূল্যায়ন
আর একটি আকর্ষণীয় দৃষ্টিভঙ্গি আংশিক মূল্যায়ন দৃষ্টান্ত। আমি প্রোগ্রামগুলির একধরণের ফাংশন বাস্তবায়নের হিসাবে একটি সাধারণ দৃষ্টিভঙ্গি গ্রহণ করছি যা কিছু ইনপুট ডেটা দেওয়া একটি উত্তরকে গণনা করে। তারপর একজন দোভাষী
ভাষার জন্য একটি প্রোগ্রাম যা একটি প্রোগ্রাম নিতে হয়
লেখা এবং ডেটা যে প্রোগ্রামের জন্য, এবং শব্দার্থবিদ্যা অনুযায়ী ফলাফলের নির্ণয় । আংশিক মূল্যায়ন দুই আর্গুমেন্ট একটি প্রোগ্রাম বিশেষজ্ঞ একটি কৌশল এবং যখন শুধুমাত্র একটি যুক্তি বলে , পরিচিত হয়। আপনি যখন শেষ পর্যন্ত দ্বিতীয় যুক্তিটি পান তখন উদ্দেশ্যটি হ'ল একটি দ্রুত মূল্যায়ন হয়ISSpSSdSa1a2a1a2 । এটি বিশেষত কার্যকর হয় যদি পরিবর্তে পরিবর্তে প্রায়শই পরিবর্তিত হয় কারণ এর সাথে আংশিক মূল্যায়নের সমস্ত যেখানে কেবল পরিবর্তিত হচ্ছে তাতে যেতে পারে ।a2a1a1a2
এটি অ্যালগরিদম ডিজাইনের একটি ঘন ঘন পরিস্থিতি (প্রায়শই এসই-সিএস-এর প্রথম মন্তব্যের বিষয়), যখন ডেটার আরও কিছু স্থির অংশ প্রাক-প্রক্রিয়াজাত হয়, যাতে প্রাক-প্রসেসিংয়ের ব্যয়টি সমস্ত অ্যাপ্লিকেশনগুলিতে এমরাইটিজ করা যায় ইনপুট ডেটার আরও পরিবর্তনশীল অংশগুলির সাথে অ্যালগরিদমের।
এটি দোভাষীদেরও খুব পরিস্থিতি, কারণ প্রথম যুক্তিটি হ'ল প্রোগ্রামটি কার্যকর করা হয় এবং সাধারণত বিভিন্ন ডেটা সহ বেশ কয়েকবার মৃত্যুদন্ড কার্যকর করা হয় (বা বিভিন্ন উপাত্ত সহ সাবপার্টগুলি বহুবার মৃত্যুদন্ড কার্যকর করা হয়েছিল)। সুতরাং এই প্রোগ্রামটিতে প্রথম আর্গুমেন্ট হিসাবে আংশিকভাবে মূল্যায়ন করে প্রদত্ত প্রোগ্রামটির দ্রুত মূল্যায়নের জন্য একজন দোভাষীকে বিশেষজ্ঞ করা স্বাভাবিক ধারণা হয়ে ওঠে। এটি প্রোগ্রামটি সংকলনের একটি উপায় হিসাবে দেখা যেতে পারে এবং তার প্রথম (প্রোগ্রাম) যুক্তিতে কোনও দোভাষীর আংশিক মূল্যায়ন করে সংকলনের বিষয়ে উল্লেখযোগ্য গবেষণা কাজ হয়েছে।
স্মন উপপাদ্য
আংশিক মূল্যায়নের পদ্ধতির সম্পর্কে চমৎকার বক্তব্যটি এটি মূলত তত্ত্বের মূলকে গ্রহণ করে (যদিও তত্ত্বটি মিথ্যাবাদী হতে পারে), বিশেষত
ক্লিনির স্মন উপপাদ্যে । আমি এখানে এর একটি স্বজ্ঞাত উপস্থাপনা দেওয়ার চেষ্টা করছি, আশা করছি এটি খাঁটি তাত্ত্বিকদের বিরক্ত করবে না।
একটি গোডেলের সংখ্যায়ন দেওয়া recursive ফাংশন, আপনি দেখতে পারেন আপনার হার্ডওয়ার যেমন, যাতে গোডেলের নম্বর দেওয়া
(পড়া অবজেক্ট কোড ) একটি প্রোগ্রাম ফাংশন দ্বারা সংজ্ঞায়িত করা হয় (অর্থাত অবজেক্ট কোড দ্বারা নির্ণিত আপনার হার্ডওয়্যার)।φφpφpp
এর সহজতম ফর্মটিতে, উপপাদ্যটি উইকিপিডিয়াতে নিম্নরূপ বর্ণিত হয়েছে (স্বীকৃতিতে একটি ছোট পরিবর্তন পর্যন্ত):
একটি গোডেলের সংখ্যায়ন দেওয়া রিকার্সিভ ফাংশন, একটি আদিম রিকার্সিভ ফাংশন নিম্নলিখিত সম্পত্তি সঙ্গে দুই আর্গুমেন্ট: প্রতিবার গোডেলের সংখ্যার জন্য একটি আংশিক গণনীয় ফাংশনের দুটি আর্গুমেন্ট, এক্সপ্রেশন সঙ্গে এবং প্রাকৃতিক সংখ্যার এবং এর একই সংমিশ্রণের জন্য সংজ্ঞায়িত করা হয় এবং তাদের মানগুলি এই জাতীয় কোনও সংমিশ্রণের জন্য সমান। অন্য কথায়, প্রতিটি জন্য নিম্নলিখিত ক্রিয়াকলাপগুলির এক্সটেনশনাল সাম্যতা থাকে :
φσqfφσ(q,x)(y)f(x,y)xyxφσ(q,x)≃λy.φq(x,y).
এখন, গ্রহণ দোভাষী হিসেবে , একটি প্রোগ্রাম সোর্স কোড হিসাবে , এবং যেমন ডাটা যে প্রোগ্রাম জন্য, আমরা লিখতে পারেন:
qISxpSydφσ(IS,pS)≃λd.φIS(pS,d).
আই এস এসφIS দেখা যেতে পারে যেমন অনুবাদক সঞ্চালনের
, হার্ডওয়্যার, অর্থাত উপর একটি কালো বাক্স ভাষায় লেখা প্রোগ্রাম ব্যাখ্যা করার জন্য প্রস্তুত হিসাবে ।ISS
মূল্যায়নের মতো ফাংশন এমন একটি ফাংশন হিসাবে দেখা যেতে পারে যা প্রোগ্রাম জন্য দোভাষী কে বিশেষ করে । সুতরাং গডেল নম্বর এর অবজেক্ট কোডটি দেখা যেতে পারে যা প্রোগ্রাম সংকলিত সংস্করণ ।আই এস পি এস σ ( আই এস , পি এস ) পি এসσISPSσ(IS,pS)pS
সুতরাং ফাংশনটি একটি ফাংশন হিসাবে দেখা যেতে পারে যা
ভাষায় ভাষায় লিখিত কোনও প্রোগ্রামের উত্স কোড হিসাবে যুক্তি হিসাবে গ্রহণ করে এবং সেই প্রোগ্রামের জন্য অবজেক্ট কোড সংস্করণটি ফিরিয়ে দেয় সুতরাং সাধারণত একটি সংকলক বলা হয়।কিউ এস এস সি এসCS=λqS.σ((IS,qS)qSSCS
কিছু সিদ্ধান্তে
তবে, যেমনটি আমি বলেছিলাম: "তত্ত্বটি মিথ্যাবাদী হতে পারে", বা বাস্তবে এটি একটি বলে মনে হয়। সমস্যাটি হ'ল আমরা ফাংশনটির কিছুই জানি না । প্রকৃতপক্ষে এ জাতীয় অনেকগুলি কার্য রয়েছে এবং আমার ধারণা হ'ল উপপাদ্যের প্রমাণটি এর পক্ষে খুব সাধারণ সংজ্ঞা ব্যবহার করতে পারে, যা ইঞ্জিনিয়ারিং দৃষ্টিকোণ থেকে রাফেলের প্রস্তাবিত সমাধানের চেয়ে ভাল আর কিছু হতে পারে না: সোর্স কোড ব্যাখ্যাকারী সঙ্গে । এটি সর্বদা করা যায়, যাতে আমরা বলতে পারি: সংকলন সর্বদা সম্ভব।q এস আই এসσqSIS
সংকলক কী তার আরও সীমাবদ্ধ ধারণাটি গঠনের জন্য আরও সূক্ষ্ম তাত্ত্বিক পদ্ধতির প্রয়োজন হবে। আমি জানি না সে দিকে কী করা হয়েছিল। আংশিক মূল্যায়নের ক্ষেত্রে খুব বাস্তব কাজটি প্রকৌশল দৃষ্টিকোণ থেকে আরও বাস্তবসম্মত। এবং কারি-হাওয়ার্ড আইসোমরফিজমের ভিত্তিতে টাইপ-থিওরি প্রসঙ্গে বিকশিত যেমন স্পেসিফিকেশনের প্রমাণ থেকে প্রোগ্রামগুলি আহরণ সহ কমপ্লেয়ারগুলি লেখার জন্য অন্যান্য কৌশল অবশ্যই রয়েছে (তবে আমি আমার যোগ্যতার ডোমেনের বাইরে পাচ্ছি) ।
এখানে আমার উদ্দেশ্যটি দেখানো হয়েছে যে রাফেলের মন্তব্যটি "পাগল" নয়, তবে একটি বুদ্ধিমান অনুস্মারক যে জিনিসগুলি সুস্পষ্ট নয়, এমনকি সহজও নয়। এই বলে যে কিছু আছে অসম্ভব একটি শক্তিশালী বিবৃতি সুনির্দিষ্ট সংজ্ঞা ও একটি প্রমাণ করতে চাইছেন যে, যদি শুধুমাত্র কিভাবে এবং কেন এটা হয় একটি সুনির্দিষ্ট বোঝার আছে হয় অসম্ভব । তবে এই জাতীয় প্রমাণ প্রকাশের জন্য যথাযথ আনুষ্ঠানিকতা তৈরি করা বেশ কঠিন হতে পারে।
এটি বলেছিল, কোনও নির্দিষ্ট বৈশিষ্ট্য সংকলনযোগ্য না হলেও, ইঞ্জিনিয়াররা বুঝতে পেরেছেন এমন অর্থে, স্ট্যান্ডার্ড সংকলন কৌশলগুলি সর্বদা এমন প্রোগ্রামগুলির অংশগুলিতে প্রয়োগ করা যেতে পারে যা এই জাতীয় বৈশিষ্ট্য ব্যবহার করে না, যেমন গিলসের উত্তর দ্বারা মন্তব্য করা হয়েছে।
গিলসের মূল বক্তব্য অনুসরণ করার জন্য যে ভাষার উপর নির্ভর করে কিছু কাজ কমপাইল সময়ে করা যেতে পারে, অন্যটি রান-টাইমে করতে হয়, সুতরাং নির্দিষ্ট কোডের প্রয়োজন হয়, আমরা দেখতে পারি যে সংকলনের ধারণাটি আসলে অসৎ সংজ্ঞায়িত, এবং সম্ভবত কোনও সন্তোষজনক উপায়ে এটি চূড়ান্ত নয়। সংকলনটি কেবলমাত্র একটি অপ্টিমাইজেশন প্রক্রিয়া, যেমন আমি আংশিক মূল্যায়ন বিভাগে দেখানোর চেষ্টা করেছি , যখন আমি এটিকে কিছু অ্যালগরিদমে স্থিতিশীল ডেটা প্রিপ্রোসেসিংয়ের সাথে তুলনা করি।
একটি জটিল অপ্টিমাইজেশন প্রক্রিয়া হিসাবে, সংকলনের ধারণাটি আসলে একটি ধারাবাহিকের অন্তর্গত। ভাষার বৈশিষ্ট্য বা প্রোগ্রামের উপর নির্ভর করে কিছু তথ্য স্থিতিশীলভাবে পাওয়া যেতে পারে এবং আরও ভাল অনুকূলকরণের অনুমতি দেয়। অন্যান্য জিনিস রান-টাইম স্থগিত করতে হবে। যখন জিনিসগুলি সত্যই খারাপ হয়ে যায়, কমপক্ষে প্রোগ্রামের কিছু অংশের জন্য রান-টাইমে সবকিছু করতে হবে এবং দোভাষীর সাথে সোর্স-কোড বান্ডিলিং আপনি যা করতে পারেন তা হ'ল। সুতরাং এই বান্ডিলিংটি এই সংকলনের ধারাবাহিকতার কেবলমাত্র নিম্ন প্রান্তে। সংকলকগুলির উপর বেশিরভাগ গবেষণা হ'ল গতিশীলভাবে কী ব্যবহৃত হত তা স্থির করার উপায় খুঁজে পাওয়া finding সংকলন-সময় আবর্জনা সংগ্রহ একটি ভাল উদাহরণ বলে মনে হচ্ছে।
নোট করুন যে সংকলন প্রক্রিয়াটি মেশিন কোড তৈরি করতে হবে তা কোনও সহায়ক নয়। এটাই হ'ল সংক্ষিপ্ত বিবরণটি মেশিন কোড হিসাবে বান্ডিলিংটি কী করতে পারে (ভাল, ক্রস সংকলনের সাহায্যে জিনিসটি আরও কিছুটা জটিল হয়ে উঠতে পারে)।