2012-01-12 12 views
6

मुझे हाल ही में कंपाइलर्स में बहुत रुचि है और वे कैसे काम करते हैं। चूंकि जीसीसी के पास इसका स्रोत उपलब्ध है, मुझे लगा कि यह अध्ययन करने के लिए सबसे अच्छी सामग्री होगी।सीखना जीसीसी आंतरिक

पहली बात मुझे एहसास हुआ कि यह जीसीसी का अध्ययन करने के लिए व्यर्थ होगा अगर मुझे सरल कंपाइलर डिज़ाइन सिद्धांतों की बुनियादी समझ नहीं है। मैं तब से "ड्रैगन बुक" को परिश्रमपूर्वक पढ़ रहा हूं, जो मैंने देखा है, संकलक कार्यान्वयन पर वास्तविक तथ्य है।

कोई भी पुस्तक कम नहीं, उस पुस्तक को पढ़ने से केवल जीसीसी जैसे कंपाइलरों के बारे में जानने की मेरी इच्छा बढ़ गई है।

इसके अतिरिक्त, मुझे यह कहना उचित लगता है कि मेरे पास सी/सी ++ (उर्फ, मैं सी जानने के बिना जीसीसी का अध्ययन करने की कोशिश नहीं कर रहा हूं) की मध्यवर्ती समझ है। मुझे आशा है कि जीसीसी का अध्ययन करने से मुझे उस पर भी सुधार करने में मदद मिलेगी।

मैंने नवीनतम निर्माण डाउनलोड किया है जो मुझे मिल सकता है; हालांकि, स्रोत कोड को समझते समय मैं खो जाता हूं।

जो मैं खोज रहा हूं वह आगे बढ़ने के सुझाव हैं। क्या कोई ऐसी परियोजना है, जो इतनी बड़ी नहीं है, मैं जीसीसी के लिए एक कदम पत्थर के रूप में उपयोग कर सकता हूं? क्या जीसीसी का कोई विशेष मॉड्यूल है जो पहले अध्ययन करने की सिफारिश करेगा? क्या कोई किताबें हैं जो जीसीसी के कार्यान्वयन में इसके उपयोग के बजाए जाती हैं? शायद मुझे चमकना बंद कर देना चाहिए और जब तक यह क्लिक नहीं करता तब तक स्रोत को पढ़ना जारी रखें?

कोई भी और सभी प्रतिक्रियाओं की बहुत सराहना की जाएगी।

संपादित करें: यदि आपको लगता है कि मुझे एक अलग कंपाइलर/दुभाषिया का अध्ययन करना चाहिए, तो मैं सुझावों की सराहना करता हूं कि किसके लिए।

+3

आपको ड्रैगन पुस्तक को पढ़ना चाहिए और फिर अपना स्वयं का कंपाइलर लिखना चाहिए। यह जबरदस्त मदद करता है। –

+2

मैंने सुना है कि जीसीसी हैक करने का दर्द है। शायद एलएलवीएम एक विकल्प होगा? – Blender

+0

1. आपको पूरी तरह से एक विशेषज्ञ स्तर पर भाषा को समझना चाहिए 2. पहले अपनी छोटी कंपाइलर को एक छोटी भाषा के लिए लिखें 3. जीसीसी एक गड़बड़ है। – Pubby

उत्तर

6

यदि आप एक बहुत छोटे कंपाइलर को देखना चाहते हैं, तो मैं फैब्रिस बेलर्ड के Tiny C Compiler की अनुशंसा करता हूं।

उल्लेख करने लायक भी है, फैब्रिस बेलर्ड ने Obfuscated Tiny C Compiler के साथ obfuscated सी कोड प्रतियोगिता जीती। एक deobfuscated संस्करण भी है, और यह single c file में फिट बैठता है।

यदि आप कुछ सीखना चाहते हैं और सीखने के लिए प्रबंधनीय होना चाहिए तो यह बहुत अच्छा होना चाहिए।

+0

'8c' भी पढ़ने के लिए बहुत आसान है। – Dave

5

मैं निश्चित रूप से क्लैंग/एलएलवीएम देखता हूं। मुझे लगता है कि कोड बेस बहुत पठनीय है। आपके पास एक बहुत ही व्यवहार्य विकल्प है जो आपके पास एलएलवीएम का बैक एंड के रूप में उपयोग करना है और अपना खुद का सरल लेज़र और पार्सर लिखना है।

+2

मैं मानता हूं, एलएलवीएम जीसीसी की तुलना में सीखने/हैकिंग के लिए बेहतर है। ग्रेड स्कूल में, कंपाइलर कोर्स ने परियोजनाओं के लिए एलएलवीएम का इस्तेमाल किया। – TJD

+1

अस्वीकरण: मैं थोड़ा पक्षपातपूर्ण हूं। मेरा कंपाइलर प्रोजेक्ट एलएलवीएम का उपयोग कर रहा है: http://ellcc.org :-) –

0

मुझे लगता है कि जीसीसी के कोड पढ़ने से पहले "एक माइक्रोस्कोप के तहत रूबी" पुस्तक और रूबी कोर विकास के साथ अभ्यास पढ़ना अच्छा होता है। लेकिन आपको रूबी प्रोग्रामिंग पर ज्ञान की आवश्यकता होनी चाहिए। यह रूबी इंटील्स के बारे में है।

जैसा कि मुझे पता है कि जीसीसी पर सबसे अच्छी किताब "जीसीसी के लिए निश्चित मार्गदर्शिका" https://www.amazon.com/Definitive-Guide-GCC-Guides-Paperback/dp/1590595858 है। हालांकि यह थोड़ा सा पुराना है, मुझे लगता है कि आपको इसे पढ़ना चाहिए।

0

संकलक के बारे में भी जुनूनी, मैंने निकलॉस विर्थ की पुस्तक Algorithms + Data Structures = Programs से बहुत कुछ सीखा। आखिरी अध्यायों में से एक पास्कल -0 भाषाओं का वर्णन करता है, और पिछले अध्याय दिखाते हैं कि एक बहुत ही सरल भाषा को कैसे पार्स और संकलित करना है। पास्कल -0, पीएल/0 दो-चरणीय कंपाइलर हैं, वे पी-कोड उत्पन्न करते हैं, जो एक न्यूनतम वर्चुअल मशीन (जावा के विपरीत नहीं) के लिए 'मशीन कोड' है।

This page describes a PL/0 virtual machine instruction set, और, अंत में, पीएल/0 कंपाइलर और अन्य रोचक जानकारी के लिंक।

Niklaus Wirth has always had a knack पठनीय और अच्छी तरह से संरचित कोड लिखने के लिए।यहां भाषा परिभाषा और कई अन्य रोचक लिंक हैं।

पास्कल का अध्ययन और उपयोग करने का लाभ यह है कि भाषा बहुत संरचित है, और असेंबलर (जैसे सी) से कोई विकास नहीं है। यह संकलन बहुत आसान बनाता है। कई पास करने के लिए भी आवश्यक नहीं है ...