2010-07-15 8 views
6

यह सवाल सिर्फ कुछ है जो मैं हाल ही में सोच रहा था। क्या एक प्रोग्रामिंग भाषा उस भाषा में दूसरे कार्यान्वयन के रूप में लिखी जा सकती है? जैसे जावा। क्या जावा प्रोग्रामिंग भाषा का उपयोग कर जावा प्रोग्रामिंग भाषा को फिर से लिखना संभव है?क्या उस भाषा में प्रोग्रामिंग भाषा का दूसरा कार्यान्वयन लिखा जा सकता है?

क्षमा करें अगर यह एक मूर्ख सवाल है लेकिन मुझे पता होना चाहिए!

जीएफ

उत्तर

9

हां, यह संभव है। BootStrapping देखें।

+0

+1 मैं उस शब्द की खोज के लिए अपने दिमाग (और Google पर जा रहा था) को रैक कर रहा था। मैंने सी संकलकों को सफलतापूर्वक अपने आप में लागू होने के बारे में कुछ याद किया। –

12

हमेशा। कोई भी Turing-Complete भाषा है - अच्छी तरह से - एक ट्यूरिंग-पूर्ण भाषा। यदि आप एक पूर्ण भाषा में कंपाइलर लिख सकते हैं, तो आप इसे किसी समकक्ष भाषा में लिख सकते हैं।

+0

यहां तक ​​कि कुछ ट्यूरिंग-पूर्ण भाषाओं में सीमाएं भी हो सकती हैं, जिसका अर्थ है 'कार्यान्वयन' से हमारा क्या मतलब है। एक ट्यूरिंग-पूर्ण भाषा की कल्पना करें जो केवल ASCII पाठ को इनपुट और आउटपुट कर सकती है। ऐसी भाषा निष्पादन योग्य द्विआधारी उत्पादन करने में असमर्थ होगी और इसलिए अपना "फ्रीस्टैंडिंग" दुभाषिया बनाने में सक्षम नहीं होगा। –

+0

[निष्पादन योग्य ASCII पाठ फ़ाइलें] (https://astr0baby.wordpress.com/2012/08/31/executable-ascii-files-pt-2/) – barbecue

3

हां। जब तक भाषा पूर्ण हो रही है, आप भाषा को स्वयं लागू कर सकते हैं।

+1

ट्यूरिंग-पूर्णता सख्ती से आईआईआरसी की आवश्यकता नहीं है। लेकिन मौजूदा ट्यूरिंग-अपूर्ण भाषाएं (रेगेक्स, एसक्यूएल और ऐसे) अभी भी अपर्याप्त हैं। –

+0

आप रेगेक्स का उपयोग कर रेगेक्स पढ़ सकते हैं, लेकिन मुझे लगता है कि इसका उपयोग कर रेगेक्स कार्यान्वयन बनाना असंभव है। एक जावा कंपाइलर लिखने के लिए ट्यूरिंग पूर्णता सिद्धांत है, आपको बिट्स में हेरफेर करने और डिस्क पर लिखने की आवश्यकता है (जावा यह कर सकता है)। – tovare

+2

@tovare: वास्तव में आप [regex का उपयोग कर regex सत्यापित नहीं कर सकते] [http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid-regular-expression/172363 # 172363) (यानी नियमित भाषा निर्दिष्ट करने के लिए हम जिस भाषा का उपयोग करते हैं वह नियमित नहीं है)! –

1

यह न केवल यह कर सकता है। ecj (ग्रहण संकलक) एक उदाहरण है, और मुझे लगता है कि एसडीके स्वयं एक शुद्ध जावा कंपाइलर के साथ आता है, हालांकि मैं इसके बारे में गलत हो सकता था।

7

हाँ किसी भी ट्यूरिंग पूर्ण भाषा के लिए हाँ। Lisp अपने लिए एक दुभाषिया/कंपाइलर लिखने के लिए सबसे आसान भाषाओं में से एक के रूप में दिमाग में आता है।

2

इस के कई व्यावहारिक उदाहरण हैं, एक उदाहरण है क्योंकि संकलक कोड बहुत पठनीय यह मुफ्त में उपलब्ध पुस्तक परियोजना ओबेरोन में है ओबेरोन भाषा, इस चर्चा में ब्याज की है जो है:

http://www.oberon.ethz.ch/bibliography/publications

http://en.wikipedia.org/wiki/Bootstrapping_(compilers)

+0

दिलचस्प लिंक। धन्यवाद। –

6

यह कर सकता है। एक हालिया उदाहरण यह है कि पायथन में pypy है। विकिपीडिया पेज और कुछ अच्छे लिंक पर थोड़ी अधिक जानकारी है।

+0

AFAIK पापी व्याख्या नहीं करता है, यह वीएम संकलित करता है। – mathk

+1

पायपी पाइथन (RPython) के कम सबसेट में लिखित पायथन दुभाषिया है। हालांकि परियोजना आरपी संस्करण और यहां तक ​​कि एक ट्रेसिंग जेआईटीसी भी आरपीथन स्रोत पर परिवर्तन करके कर सकती है। –

+0

हां लेकिन क्या वीएम डिजाइन की व्याख्या कर सकते हैं? – mathk

0

ज़रूर। मैंने किसी को भी कोबोल में लिखे गए कोबोल कंपाइलर को देखा है! (ठीक है, एक पूर्ण कंपाइलर नहीं है ... लेकिन कम से कम एक पार्सर।)

4

निश्चित रूप से।

कई सालों पहले मेरे पहले घरेलू कंप्यूटरों में से एक, एक विक 20, अंतर्निहित मूलभूत दुभाषिया के साथ आया था, लेकिन वह था। इसलिए मैंने बेसिक में इसके लिए एक असेंबलर का पहला संस्करण लिखा था। फिर मैंने एक बेहतर असेंबलर लिखने के लिए अपना पहला आदिम असेंबलर इस्तेमाल किया।

+0

+1! :-) – monojohnny

+0

@monojohnny पंच कार्ड वापस आ रहे हैं। यह यूएसबी ड्राइव सामान सिर्फ एक फीड है। :-) – Jay

2

जीसीसी संकलक सी

में लिखे गए हैं यह एक लंबे समय के बाद से किसी को भी विधानसभा से किसी भी सी compilers बनाया गया है।

1

जावा में जावा कंपाइलर लिखें - कोई समस्या नहीं। वास्तव में मुझे लगता है कि सूर्य का जाव जावा में लिखा गया है।

हालांकि, 'जावा' आमतौर पर केवल जावैक की तुलना में अधिक चीजों का मतलब है, इसलिए आपका प्रश्न बहुत स्पष्ट नहीं है।

2

न केवल संभव है, लेकिन मूल कोड कंपेलरों के लिए, यह सबसे आम कार्यान्वयन तकनीक है। एंड्रयू एपेल का पेपर Axiomatic Bootstrapping: A Guide for Compiler Hackers है।

संबंधित मुद्दे