Y তে Z তে X সংকলক লেখার জন্য সাধারণ নিয়ম


9

ধরা যাক এক্স ইনপুট ল্যাঙ্গুয়েজ, জেড আউটপুট ল্যাঙ্গুয়েজ, তারপরে চ কম্পাইলার, যা Y ভাষায় লেখা হয়েছে is

f = X -> Z

যেহেতু চ কেবলমাত্র একটি প্রোগ্রাম, আমি মনে করি Y কোনও ভাষা হতে পারে, তাই না? সুতরাং আমরা সংকলক f1, f2, প্রতিটি Y1, Y2 এ লিখিত থাকতে পারি।

f1 = f Y1    
f2 = f Y2

g = Z -> M
h = g . f    # We get a compiler X -> M

উদাহরণস্বরূপ, সিপিথন সংকলক নিন, এক্সটি পাইথন, জেডটি পাইথন ভিএম কোড, ওয়াই সি C.

cpython = Python -> PythonVMCode C
interpreter = PythonVMCode -> Nothing
interpreter2 = PythonVMCode -> MachineCode

পাইথন উত্সগুলি পাইথন ভিএম কোড, .pyc ফাইলগুলিতে সংকলিত হয়, তারপরে দোভাষী দ্বারা তা ব্যাখ্যা করা হয়। দেখে মনে হচ্ছে এটির একটি সংকলক রয়েছে যা সরাসরি পাইথন -> মেশিনকোড করতে পারে, বাস্তবায়ন করা অনেক কঠিন হলেও:

   hardpython = interpreter2 . cpython 

পাইথন -> পাইথনভিএমকোড, অন্য ভাষায় কাজ করার জন্য আমরা আরেকটি সংকলকও লিখতে পারি, পাইথন নিজেই বলে।

mypython = Python -> PythonVMCode Python
mypython2 = Python -> PythonVMCode Ruby

এখন, পাইপাই এর জটিল উদাহরণ। আমি পাইপাইয়ের একমাত্র নবাগত, আমি ভুল হলে আমাকে সংশোধন করুন:

পিপিপি ডক http://doc.pypy.org/en/latest/architecture.html#pypy-transla-- ফ্রেমওয়ার্ক

ভাষা লক্ষ্য প্রয়োগকারীদের সমস্যাটির একটি সম্ভাব্য সমাধান প্রদান আমাদের লক্ষ্য: l গতিশীল ভাষার জন্য l * o * p ইন্টারপ্রেটার এবং o প্ল্যাটফর্মের গুরুতর নকশার সিদ্ধান্ত নিয়ে লিখতে।

আমরা ভাবতে পারি যে l হ'ল এক্স, পি হ'ল একটি প্রোগ্রাম রয়েছে যা সমস্ত আরপিথন প্রোগ্রামগুলিকে সি তে অনুবাদ করে:

 rpython_compiler = RPython -> C  Python

 pypy = Python -> Nothing RPython

 translate = compile the program pypy written in RPython using rpython_compiler

 py2rpy = Python -> RPython  Python
 py2c = Python -> C Python 
 py2c = rpython_compiler . py2rpy

আরপিথন প্রোগ্রামগুলি ঠিক ভিএম নির্দেশিকার মতো, আরপিথন_কম্পেলারটি ভিএম।

Q1। পাইপি হ'ল দোভাষী, একটি আরপিথন প্রোগ্রাম যা পাইথন কোডটি ব্যাখ্যা করতে পারে, কোনও আউটপুট ভাষা নেই, তাই আমরা এটিকে সংকলক হিসাবে বিবেচনা করতে পারি না, তাই না?

যোগ করা হয়েছে:

  • আমি সবেমাত্র আবিষ্কার করেছি যে অনুবাদ করার পরেও পাইপি এখনও দোভাষী হয়, কেবলমাত্র এবার সি-তে লেখা time
  • আমরা যদি ইন্টারপ্রেটার পাইপির গভীরে নজর রাখি তবে আমি বিশ্বাস করি যে এখানে অবশ্যই এক ধরণের সংকলক উপস্থিত থাকতে হবে, যা পাইথনের উত্সগুলিকে কিছু এএসটি সংকলন করে, তারপর মৃত্যুদন্ড কার্যকর করবে

এটার মত:

compiler_inside_pypy = Python -> AST_or_so

Q2। সমস্ত পাইথন প্রোগ্রামগুলিকে আরপিথনে রূপান্তর করে পাইপআরপি সংকলক উপস্থিত থাকতে পারে? কোন ভাষায় এটি লিখিত তা অপ্রাসঙ্গিক। যদি হ্যাঁ, আমরা পাই আরও একটি সংকলক পাই। প্রকৃতিতে পাইপি এবং পাইপিআরপি-র মধ্যে পার্থক্য কী? পাইপির চেয়ে লেখার জন্য পাইপআইআরপি কি আরও শক্ত?

Q3। এ সম্পর্কে কিছু সাধারণ নিয়ম বা তত্ত্ব উপলব্ধ?

আরও সংকলক:

gcc_c = C -> asm? C  # not sure, gimple or rtl?
g++ =   C++ -> asm? C
clang = C -> LLVM_IR  C++
jython = Python -> JVMCode java
ironpython = Python -> CLI C#

Q4। প্রদত্ত এফ = এক্স -> জেড, এক্স-এ লেখা একটি প্রোগ্রাম পি When আমরা পি-কে দ্রুত করতে চাইলে আমরা কী করতে পারি? সম্ভাব্য উপায়:

  • আরও দক্ষ অ্যালগরিদমে পি পুনরায় লিখুন

  • আরও ভাল জেড উত্পন্ন করতে পুনরায় লিখুন

  • যদি জেডকে ব্যাখ্যা করা হয় তবে আরও ভাল জেড ইন্টারপ্রিটার লিখুন (পাইপাই এখানে রয়েছে?)

  • জেড লিখিত প্রোগ্রামগুলিকে পুনরাবৃত্তিতে গতি দিন

  • একটি ভাল মেশিন পান

পুনশ্চ. এই প্রশ্নটি কীভাবে একটি সংকলক লিখতে হবে তার প্রযুক্তিগত বিষয়গুলি সম্পর্কে নয়, তবে একটি নির্দিষ্ট ধরণের সংকলক লেখার সম্ভাব্যতা এবং জটিলতা।


সরাসরি সম্পর্কিত নয়, তবে কিছুটা অনুরূপ ধারণা: en.wikedia.org/wiki/Sompercompilation
এসকে-যুক্তি

1
আমি নিশ্চিত নই যে এই প্রশ্নটি সত্যই স্ট্যাক ওভারফ্লোতে খাপ খায়, বিশেষত যেহেতু এতে প্রচুর সাবকেশন রয়েছে তবে আমি এখনও এই চিন্তাকে প্রশংসা করি।

4
আপনাকে যা শেখানো হতে পারে তবুও, একটি এএসটি প্রয়োজন হয় না - এটি কেবল এমন কিছু কৌশল যা ব্যবহারকারীরা ব্যবহার করে।

1
সম্ভবত এটি cstheory.stackexchange.com
9000

3
পাইপির পাইথন বাস্তবায়ন, বেশিরভাগ "দোভাষী" এর মতো সত্যই একটি বাইটকোড সংকলক এবং একটিতে বাইটকোড ফর্ম্যাটটির জন্য অনুবাদক।

উত্তর:


4

Q1। পাইপি হ'ল দোভাষী, একটি আরপিথন প্রোগ্রাম যা পাইথন কোডটি ব্যাখ্যা করতে পারে, কোনও আউটপুট ভাষা নেই, তাই আমরা এটিকে সংকলক হিসাবে বিবেচনা করতে পারি না, তাই না?

পাইপাই সিপিথনের অনুরূপ, উভয়েরই একটি সংকলক + ইন্টারপ্রেটার রয়েছে। সিপাইথন সি-তে লিখিত একটি সংকলক রয়েছে যা পাইথনকে পাইথন ভিএম বাইটকোড সংকলন করে তারপরে সি-র লিখিত একটি দোভাষীর বাইটকোড কার্যকর করে পাইপাইয়ের একটি সংকলক রয়েছে পিপিথন থেকে পাইথনকে পাইথন ভিএম বাইটকোড সংকলন করে, তারপরে এটি পিপিপি ইন্টারপ্রেটারে আরপিথন-এ লেখা হয়।

Q2। সমস্ত পাইথন প্রোগ্রামগুলিকে আরপিথনে রূপান্তর করে পাইপআরপি সংকলক উপস্থিত থাকতে পারে? কোন ভাষায় এটি লিখিত তা অপ্রাসঙ্গিক। যদি হ্যাঁ, আমরা পাই আরও একটি সংকলক পাই। প্রকৃতিতে পাইপি এবং পাইপিআরপি-র মধ্যে পার্থক্য কী? পাইপির চেয়ে লেখার জন্য পাইপআইআরপি কি আরও শক্ত?

একটি সংকলক পাই 2 রিপি উপস্থিত থাকতে পারে? তাত্ত্বিকভাবে হ্যাঁ টুরিং সম্পূর্ণতা গ্যারান্টি দেয়।

নির্মাণের একটি পদ্ধতি py2rpyহ'ল উত্পন্ন উত্স কোডে RPYthon এ লিখিত পাইথন ইন্টারপ্রেটারের উত্স কোডটি কেবল অন্তর্ভুক্ত করা। পাইতেআরপি সংকলকের উদাহরণ, বাশে লেখা:

// suppose that /pypy/source/ contains the source code for pypy (i.e. Python -> Nothing RPython)
cp /pypy/source/ /tmp/py2rpy/pypy/

// suppose $inputfile contains an arbitrary Python source code
cp $inputfile /tmp/py2rpy/prog.py

// generate the main.rpy
echo "import pypy; pypy.execfile('prog.py')" > /tmp/py2rpy/main.rpy

cp /tmp/py2rpy/ $outputdir

এখন যখনই আপনাকে পাইথন কোডটি আরপিথন কোডে অনুবাদ করার দরকার হয়, আপনি এই স্ক্রিপ্টটিকে কল করেন যা produces আউটপুটডায়ার - একটি আরপিথন main.rpy, আরপিথনের পাইথন ইন্টারপ্রেটার উত্স কোড এবং একটি বাইনারি ব্লব প্রোগ্রিপি তৈরি করে produces এবং তারপরে আপনি কল করে জেনারেট হওয়া আরপিথন স্ক্রিপ্টটি কার্যকর করতে পারেন rpython main.rpy

(দ্রষ্টব্য: যেহেতু আমি আরপিথন প্রকল্পের সাথে পরিচিত নই, তাই আরপিথন ইন্টারপ্রেটারকে কল করার সিনট্যাক্স, পাইপি আমদানি করার এবং পাইপাই.এক্সফাইফিল করার ক্ষমতা এবং আরপি এক্সটেনশনটি নিখুঁতভাবে তৈরি হয়েছে, তবে আমি মনে করি আপনি পয়েন্টটি পেয়েছেন)

Q3। এ সম্পর্কে কিছু সাধারণ নিয়ম বা তত্ত্ব উপলব্ধ?

হ্যাঁ, যে কোনও টুরিং সম্পূর্ণ ভাষা তাত্ত্বিকভাবে যে কোনও টুরিং সম্পূর্ণ ভাষায় অনুবাদ করা যেতে পারে। কিছু ভাষাগুলি অন্যান্য ভাষার তুলনায় অনুবাদ করা অনেক বেশি কঠিন হতে পারে, তবে যদি প্রশ্নটি হয় "এটি কি সম্ভব?", উত্তরটি হ্যাঁ "হ্যাঁ"

Q4। ...

এখানে কোন প্রশ্ন নেই।


আপনার পাইপিআরপি সংকলকটি সত্যিই চালাক। এটি আমাকে অন্য ধারণার দিকে নিয়ে যায়। 1. পাইপিকে কি আপনার সংকলকটিতে RPython এ লিখতে হবে? আপনার যা কিছু দরকার তা পাইথন ফাইলগুলি ব্যাখ্যা করতে পারে তাই না? ২. ওএস.সিস্টেম ('পাইথন-ইনপুটফিল') এটি RPython এ সমর্থিত হলে কাজ করতে পারে। এটিকে এখনও কমপাইলার বলা যেতে পারে কিনা তা নিশ্চিত নন, অন্তত আক্ষরিক অর্থে নয় not

পাইপি এখনও পাইথন ভিএম ব্যবহার করছেন? এখন এটা পরিষ্কার। pypy_the_compiler = পাইথন -> PythonVMCode RPython, pypy_the_interpreter = PythonVMCode -> কিছুই RPython, cpython_the_compiler = পাইথন -> PythonVMCode সি, cpython_the_interpreter = PythonVMCode -> কিছুই সি

@ জাইমেচেন: Does pypy have to be written in RPython in your compiler?না, এটি আরপিথনে লেখার দরকার নেই, তবে পাইপথন কোডটি কার্যকর করার জন্য আরপিথন অবশ্যই "সহায়ক দোভাষী" / "রানটাইম" বলতে সক্ষম হবে। হ্যাঁ এটি সত্য যে এটি ব্যবহারিক দিক থেকে "সংকলক" নয়, তবে এটি রচনামূলক প্রমাণ যে এটি লেখা সম্ভব Python -> RPythonIs pypy still using the Python VM?আমি বিশ্বাস করি পাইপি সিপিথন মোটেও ব্যবহার করে না (আমি ভুল হতে পারি), পরিবর্তে পাইপির নিজস্ব "পাইথন ভিএম" প্রয়োগ করা হয়েছে যা আরপিটাইনে লেখা আছে।
মিথ্যা রায়ান

@ জাইমেচেন: আরও কার্যকর সংকলক সম্ভবত কোড সিকোয়েন্সগুলির জন্য ইনপুট ফাইলটিকে বিশ্লেষণ করতে পারে যে এটি আলাদাভাবে কীভাবে এইগুলি সংকলন এবং সংকলন করতে পারে এবং "পুনরায় সংশ্লেষিত-টু-আরপিথন" পাইথন এবং "দোভাষী" - এর মধ্যে পিছনে পিছনে লাফিয়ে যাওয়ার উপায়ও জানে knows সহায়তা "পাইথন। এটি আরআইপিথন এবং পাইথনের শব্দার্থকতার পার্থক্যের কারণে এবং কোনও ক্ষেত্রে ব্যাখ্যায় ফ্যালব্যাকের কারণে কোনও নির্দিষ্ট ইনপুট বিভিন্ন আউটপুট তৈরি করতে পারে কিনা তা সনাক্ত করতে এটি সাধারণত জেআইটি সংকলনে ব্যবহৃত কৌশলগুলিও ব্যবহার করতে পারে। এগুলি হ'ল পরিশীলিত যা সম্ভবত আরও ব্যবহারিক Python -> RPythonসংকলকটিতে দেখা যেতে পারে ।
মিথ্যা রায়ান

সম্ভবত এখানে একটি বাধা যুক্ত করা উচিত: বিদ্যমান তৃতীয় মেশিনের সহায়তা ছাড়াই রাষ্ট্রীয় মেশিন এক্সকে রাষ্ট্রীয় মেশিন জেডে রূপান্তর করুন। এক্সটি সম্পূর্ণ নতুন হয়ে গেলে এ পর্যন্ত কোনও সংকলক বা দোভাষীর অস্তিত্ব নেই।
jaimechen

2

কেবলমাত্র Q2- র উত্তর দেওয়ার জন্য, উইলিয়াম ম্যাককিম্যানের একটি সংকলক বই রয়েছে যেখানে ভাষায় Y রচনাকৃত ভাষা X এর সংকলক তত্ত্বটি টি-ডায়াগ্রামের সিস্টেমের মাধ্যমে অন্বেষণ করা হয়েছে। সত্তরের দশকে প্রকাশিত, শিরোনাম না দেওয়ার জন্য, দুঃখিত।


হ্যাঁ, এটি, ধন্যবাদ en.wikipedia.org/wiki/Tombstone_diagram
jaimechen

1

Q1। সাধারণত, একজন দোভাষী কোনও সংকলক নয়। সংকলক এবং দোভাষীর মধ্যে প্রধান পার্থক্য হ'ল প্রতিবেদক সোর্স ল্যাঙ্গুয়েজে সোর্স কোড সহ প্রতিটি সময় নতুন করে শুরু হয়। যদি আপনার পাইপটি পরিবর্তে পাইস্ট বা পাইপ-কোড হয় এবং তারপরে আপনার কাছে একটি এএসটি বা পি-কোড ইন্টারপ্রেটার থাকে, তবে আপনি পাইওয়াস্টকে একটি সংকলক বলতে পারেন। পুরানো ইউসিএসডি পাস্কল সংকলকটি এইভাবে কাজ করেছিল (পাশাপাশি বেশ কয়েকটি অন্যান্য): তারা কিছু পি-কোডে সংকলন করেছিল, যা প্রোগ্রামটি চলাকালীন ব্যাখ্যা করা হয়েছিল। (এমনকি। নেট এটির মতো কিছু সরবরাহ করে, যখন উত্পন্ন বস্তুর কোডের সংক্ষিপ্ততা গতির চেয়ে অনেক বেশি গুরুত্বপূর্ণ))

Q2। হ্যা অবশ্যই. ইউসিএসডি পাস্কাল দেখুন (এবং অন্যদের একগুচ্ছ)।

Q3। কম্পিউটার বিজ্ঞানের ক্লাসিক পাঠগুলি খনন করুন। পার ব্রিঞ্চ-হ্যানসেনের (যদি স্মৃতি আমাকে পরিবেশন করে) সাম্প্রতিক প্যাসকাল পড়ুন। সংকলক এবং কোড উত্পন্ন সম্পর্কে অনেক কিছু লেখা হয়েছে। একটি মেশিন-স্বতন্ত্র সিউডোকোড তৈরি করা সাধারণত মেশিন কোড উত্পন্ন করার চেয়ে অনেক সহজ: সিউডোকোড সাধারণত প্রকৃতির মেশিনগুলি প্রায়শই থাকে এমন ক্রিকগুলি থেকে মুক্ত থাকে।

Q4। আপনি যদি নিজের উত্পন্ন বস্তুটি দ্রুত চালিত করতে চান, তবে আরও ভাল অপটিমাইজেশন করতে, আপনি সংকলকটিকে আরও স্মার্ট করে তুলুন। যদি আপনার অবজেক্টটি ব্যাখ্যা করা হয়, আপনি আরও জটিল ক্রিয়াকলাপগুলিকে আদিম সিউডোইনস্ট্রাকশনগুলি (সিআইএসসি বনাম আরআইএসসি উপমা হিসাবে চিহ্নিত করেছেন) এর দিকে ঠেলে বিবেচনা করেন, তবে আপনি আপনার দোভাষীর বাইরে ফ্রেমটিকে অনুকূলিত করার জন্য যথাসাধ্য চেষ্টা করুন।

আপনি যদি চান যে আপনার সংকলকটি দ্রুত চালিত হোক, আপনার উত্স কোডটি পুনর্বিবেচনা সহ আপনাকে এটি যা কিছু করতে হবে তা দেখতে হবে। সংকলক নিজেই লোড করার পরে, সংকলনের সর্বাধিক সময় গ্রহণকারী অংশ হ'ল সংকলকটিতে উত্স কোডটি পড়া W (উদাহরণস্বরূপ সি ++ বিবেচনা করুন other অন্য সমস্ত জিনিস তুলনামূলকভাবে সমান হচ্ছে, একটি সাধারণ "হ্যালো, ওয়ার্ল্ড" প্রোগ্রাম সংকলন করতে # অন্তর্ভুক্ত ফাইলগুলির 9,000 (বা হতে পারে 50,000) লাইন কেটে ফেলতে হবে এমন একটি সংকলক কখনই দ্রুতগতিতে চলে না এটি কেবল চার বা পাঁচটি লাইন পড়তে হবে))

আমি এটি কোথায় পড়েছি তা মনে নেই তবে ইটিএইচ-জুরিখের মূল ওবেরন সংকলকটির একটি অত্যন্ত পরিশীলিত প্রতীক টেবিল প্রক্রিয়া ছিল, বেশ মার্জিত। সংকলক পারফরম্যান্সের জন্য উইথের মানদণ্ডটি সংকলকটি নিজেই সংকলন করতে সময় নিয়েছিল। এক সকালে, তিনি ভিতরে গেলেন, চমত্কার গুণিত-সংযুক্ত আল্ট্রা-ট্রি প্রতীক টেবিলটি বের করলেন এবং এটিকে একটি সরল রৈখিক অ্যারে এবং সোজা লিনিয়ার অনুসন্ধানগুলি দিয়ে প্রতিস্থাপন করলেন। তার গ্রুপের স্নাতক শিক্ষার্থীরা শকড হয়েছিল। পরিবর্তনের পরে, সংকলকটি দ্রুততর ছিল, কারণ এটি যে মডিউলগুলি সংকলন করছিল তা সর্বদা যথেষ্ট ছোট ছিল যে মার্জিত দানবটি লিনিয়ার অ্যারে এবং লিনিয়ার অনুসন্ধানের চেয়ে আরও মোট ওভারহেড চাপিয়ে দেয়।


1
ধন্যবাদ। একটি সংকলক 'সংকলন', যখন একজন অনুবাদক 'এক্সিকিউট করে', সেখানে দুটি ধরণের প্রোগ্রামের মতো কী আরও আলাদাভাবে অন্তর্দৃষ্টি থাকতে পারে?
jaimechen

1

বর্ণিত আপনার প্রশ্নগুলি আমাকে বিশ্বাস করতে পরিচালিত করে যে আপনি কী চান / প্রয়োজন তা একটি সংকলক কী, একটি দোভাষী কী এবং উভয়ের মধ্যে পার্থক্য তার ব্যাখ্যা।

একটি সংকলক X ভাষায় লিখিত একটি প্রোগ্রামকে মানচিত্রের Y এর ভাষায় কার্যকরী সমতুল্য প্রোগ্রামে মানচিত্র করে তোলে maps উদাহরণস্বরূপ, পাস্কাল থেকে সি পর্যন্ত একটি সংকলক সংকলন করতে পারে

function Square(i: Integer)
begin
    Square := i * i
end

প্রতি

int Square(int i)
{
    return i * i;
}

বেশিরভাগ সংকলক 'নীচের দিকে' সংকলন করে, তাই তারা উচ্চ-স্তরের প্রোগ্রামিং ভাষাগুলিকে নিম্ন-স্তরের ভাষায় সংকলন করে, চূড়ান্ত নিম্ন স্তরের ভাষা মেশিন কোড।

বেশিরভাগ সংকলক সরাসরি মেশিন কোডে সংকলন করেন তবে কিছু (উল্লেখযোগ্যভাবে জাভা এবং। নেট ভাষা) 'বাইটোকোড' ( জাভা বাইটকোড এবং সিআইএল ) সংকলন করে । অনুমানকৃত কম্পিউটারের জন্য মেশিন কোড হিসাবে বাইটকোডটিকে ভাবেন। এই বাইটকোডটি তখন চালিত হয় বা এটি JITted হয় (এটি আরও পরে)।

একজন দোভাষী কোনও ভাষায় জেড লিখিত একটি প্রোগ্রাম কার্যকর করেন An এই ক্ষেত্রে:

int i = 0;
while (i < 1)
{
    i++
}
return i;

কল্পনা করুন যে দোভাষী সে প্রোগ্রামটির জন্য লাইনটির জন্য লাইনের দিকে তাকিয়ে আছেন, লাইনটি পরীক্ষা করছেন, যা করেন তা সম্পাদন করে, পরের লাইনে এবং আরও কিছুক্ষণ দেখুন।

দোভাষীর সর্বোত্তম উদাহরণ হ'ল আপনার কম্পিউটারের সিপিইউ। এটি মেশিন কোডকে ব্যাখ্যা করে এবং এটি কার্যকর করে। সিপিইউ কীভাবে কাজ করে তা কীভাবে শারীরিকভাবে নির্মিত তা নির্দিষ্ট করে। একজন দোভাষী প্রোগ্রাম কীভাবে কাজ করে তা তার কোডটির মতো দেখায় is সিপিইউ তাই দোভাষী প্রোগ্রামটি ব্যাখ্যা করে এবং সম্পাদন করে, যা পরিবর্তে এর ইনপুটটি ব্যাখ্যা করে এবং কার্যকর করে। আপনি দোভাষীকে এভাবে চেইন করতে পারেন।

একটি জিটটার হ'ল একটি জাস্ট-ইন-টাইম সংকলক। একটি জিটটার একটি সংকলক। পার্থক্য কেবলমাত্র এটি কার্যকর করার সময়: বেশিরভাগ প্রোগ্রাম তাদের ব্যবহারকারীদের কাছে লেখা, সংকলন, শিপ করা হয় এবং পরে সম্পাদন করা হয়, তবে জাভা বাইটকোড এবং সিআইএল প্রথমে তাদের ব্যবহারকারীদের কাছে প্রেরণ করা হয়, এবং তারপরে মৃত্যুদন্ড কার্যকর করার আগে তারা মেশিনে সংকলিত হয় তাদের ব্যবহারকারীদের কোড।

সি # -> (সংকলন) -> সিআইএল -> গ্রাহকের কাছে প্রেরণ করা হয়েছে -> (মৃত্যুদন্ডের ঠিক আগে সংকলন করুন) -> মেশিন কোড -> (সম্পাদন)

আপনি শেষ জিনিসটি সম্পর্কে জানতে চাইছেন সেটি হচ্ছে টুরিং সম্পূর্ণতা ( লিঙ্ক )। একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ টিউরিং কমপ্লিট হয় যদি এটি ' টিউরিং মেশিন ' ক্যান হিসাবে সমস্ত কিছু গণনা করতে পারে, অর্থাত এটি ট্যুরিং মেশিনের মতো কমপক্ষে 'শক্তিশালী' is চার্চ-টুরিং থিসিস রাজ্যের একটি টুরিং মেশিন অন্তত কোনো মেশিন আমরা কখনও নির্মাণ করতে পারেন হিসাবে শক্তিশালী হয়। এটি অনুসরণ করে যে প্রতিটি টিউরিং সম্পূর্ণ ভাষা টিউরিং মেশিনের মতোই শক্তিশালী এবং তাই সমস্ত টিউরিং সম্পূর্ণ ভাষাও সমান শক্তিশালী।

অন্য কথায়, যতক্ষণ না আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজ টিউরিং সম্পূর্ণ (প্রায় সবগুলিই) ততক্ষণ আপনি কোন ভাষাটি বেছে নেন তা বিবেচ্য নয়, যেহেতু তারা সকলেই একই জিনিস গণনা করতে পারে। এর অর্থ এটিও হ'ল এটি যে খুব বেশি প্রাসঙ্গিক নয় আপনি কোন প্রোগ্রামিং ভাষাটি আপনার সংকলক বা আপনার অনুবাদক লিখতে বেছে নেন। সর্বশেষে তবে সর্বনিম্ন নয়, এর অর্থ X এবং Y উভয়ই টুরিং সম্পূর্ণ হলে আপনি সর্বদা ভাষা X থেকে Y পর্যন্ত একটি সংকলক লিখতে পারেন।

নোট করুন যে টুরিং সম্পূর্ণ হওয়ার সাথে সাথে আপনার ভাষা দক্ষ কিনা, আপনার সিপিইউ এবং অন্যান্য হার্ডওয়্যার সম্পর্কিত সমস্ত বাস্তবায়ন বিবরণ, বা ভাষার জন্য আপনি যে সংকলকটি ব্যবহার করেন তার গুণগত মান সম্পর্কে কিছুই বলতে পারে না। এছাড়াও, আপনার অপারেটিং সিস্টেমটি সিদ্ধান্ত নিতে পারে যে আপনার প্রোগ্রামের কোনও ফাইল খোলার অধিকার নেই, তবে এটি কোনও কিছুর গণনা করার ক্ষমতাকে বাধা দেয় না - আমি ইচ্ছাকৃতভাবে কম্পিউটিংকে সংজ্ঞায়িত করি নি, যেহেতু এটি পাঠ্যের অন্য প্রাচীর গ্রহণ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.