2011-06-14 20 views
6

मैं वर्तमान में प्रोग्रामिंग भाषाओं के साथ खेल रहा हूं। मैंने उच्च स्तर की भाषाओं में सबसे अधिक पार्सर्स और दुभाषियों को लिखने में कुछ समय बिताया है (सबसे विशेष रूप से हेक्से)।एक मध्यवर्ती भाषा का चयन

मेरे पास कुछ नतीजे हैं, जो मुझे लगता है कि वास्तव में काफी अच्छा है, लेकिन अब मैं उन्हें तेज़ी से बनाना चाहता हूं।

मेरा विचार इनपुट भाषा का अनुवाद सी
मेरा सी ज्ञान विश्वविद्यालय में जो भी आप सीखते हैं, उससे सीमित है। कुछ अभ्यासों से परे, मैंने कभी भी वास्तविक सी कार्यक्रम नहीं लिखे हैं। लेकिन मुझे विश्वास है कि मैं इसे काम कर सकता हूं।

बेशक मैं एलएलवीएम के लिए फ्रंटेंड लिखने या एमएसआईएल या जेवीएम बाइटकोड उत्पन्न करने का प्रयास कर सकता हूं। लेकिन मुझे लगता है कि अभी सीखने के लिए बहुत कुछ है, और मुझे वास्तव में बहुत अधिक लाभ नहीं दिख रहा है।
इसके अलावा सी पूरी तरह से मानव पठनीय है, इसलिए यदि मैं खराब हो जाता हूं, तो यह समझना बहुत आसान है कि क्यों। और सी, सब के बाद, उच्च स्तर है। मैं वास्तव में बिना इनपुट दिमागी झुकाव इनपुट भाषा से अवधारणाओं का अनुवाद कर सकता हूं। मुझे कुछ समय तक काम करना चाहिए और उचित समय में चलना चाहिए और फिर फिट होने के बाद इसे अनुकूलित करना चाहिए।

तो: क्या सी का उपयोग करने के लिए कोई डाउनसाइड्स हैं? क्या आप एक विकल्प की सिफारिश कर सकते हैं?
अपने अंतर्दृष्टि :) के लिए धन्यवाद


संपादित करें: कुछ स्पष्टीकरण

  • कारण है कि मैं सभी तरह से नीचे जाने के लिए है, कि मैं OOP समर्थन के साथ एक भाषा लिख ​​रहा हूँ चाहता हूँ और मैं वास्तव में हाथ से प्रेषण की मेरी विधि को लागू करना चाहता हूं, क्योंकि मेरे मन में कुछ विशिष्ट है।
  • उपयोग का एक प्राथमिक क्षेत्र HTTP सेवाएं लिख रहा होगा, लेकिन मैं एक जीयूआई लाइब्रेरी (wxwidgets शायद) या जो भी हो, में बाइंडिंग जोड़ सकता हूं।
+0

सवाल क्या है? – unwind

+0

@unwind: बस संपादित किया गया। – back2dos

+3

अधिकांश कंपाइलर जिन्हें मैं सोच सकता हूं कि देशी जाने से पहले मध्यवर्ती कदम लेते हैं, इसलिए, हाँ, मुझे लगता है कि सी एक अच्छी पसंद है, खासकर जब से यह आपको पोर्टेबिलिटी का एक बड़ा सौदा देता है। यदि आपकी भाषा ऑब्जेक्ट उन्मुख है, तो आपके पास सी ++ या ऑब्जेक्टिव-सी में अनुवाद करने का बेहतर समय हो सकता है; इसी प्रकार, यदि यह कार्यात्मक है तो आपके पास हास्केल में अनुवाद करने का बेहतर समय हो सकता है। –

उत्तर

2

सी वास्तव में एक छोटे या प्रयोगात्मक कंपाइलर के लिए लक्षित भाषा के लिए एक बहुत अच्छी पसंद है - यह कई प्लेटफ़ॉर्म पर व्यापक रूप से उपलब्ध है, इसलिए आपका कंपाइलर कई वातावरण में तुरंत उपयोगी हो जाता है। मुख्य दोष उन चीजों से निपट रहा है जो सी में अच्छी तरह से समर्थित नहीं हैं, या सी स्पेक में अच्छी तरह से परिभाषित नहीं हैं। उदाहरण के लिए, यदि आप गतिशील कोड जनरेशन (जेआईटी संकलन) करना चाहते हैं, सी समस्याग्रस्त है। अवांछित और प्रतिबिंब की तरह चीजें सी में करना मुश्किल है (हालांकि setjmp/longjmp और structs का सावधानीपूर्वक उपयोग जिसके लिए आप लेआउट विवरण उत्पन्न करते हैं) बहुत कुछ कर सकते हैं। शब्द आकार, बड़े या छोटे-एंडियन लेआउट जैसी चीजें, और अंकगणितीय परिशुद्धता सी कंपाइलर्स के बीच भिन्न होती है, इसलिए आपको इसके बारे में पता होना चाहिए, लेकिन यदि आप कई लक्ष्य मशीनों का समर्थन करना चाहते हैं तो उन चीज़ों के साथ आपको निपटने की आवश्यकता है।

अन्य भाषाओं का भी उपयोग किया जा सकता है - सी का मुख्य लाभ इसकी सर्वव्यापीता है।

+0

बिग/थोड़ा एंडियन कोई मुद्दा नहीं होगा कोई फर्क नहीं पड़ता भाषा। बेशक, ऐसी भाषाएं जो बाइट स्तर पर चीजों को करने के लिए बहुत अधिक स्तर हैं, उन्हें किसी भी एंडियन मुद्दों का अनुभव नहीं होगा, क्योंकि वे उनका समर्थन भी नहीं करते हैं। – Lundin

6

सी आप जो करने की कोशिश कर रहे हैं उसके लिए एक अच्छी और काफी लोकप्रिय पसंद है।

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

एलएलवीएम दृष्टिकोण और आईआर के कुछ स्निपेट के परिचय के लिए The Architecture of Open Source Applications, Chapter 11 देखें।


आपका लक्षित वातावरण क्या है? इससे आपको बेहतर उत्तर देने में मदद मिल सकती है।

+0

+1: एलएलवीएम आईआर विशेष रूप से इसके लिए डिज़ाइन किया गया था। – rubenvb

+0

@ रूबेनव: हाँ, यह था। यही कारण है कि आप इसे देखने के लायक हैं भले ही आप अंत में इसका उपयोग नहीं करेंगे। और हो सकता है कि आप इसे सीधे उपयोग करने में सक्षम न हों (उदा। एलएलवीएम सी ++ है, इसलिए कुछ वातावरणों में इसका उपयोग करना मुश्किल हो सकता है)। या यह आपको अपनी शुरुआती योजना के ठीक विपरीत कुछ करने के लिए प्रेरित कर सकता है: कुछ मौजूदा (और लोकप्रिय) भाषा के लिए एलएलवीएम फ्रंटएंड का उपयोग करें और अपने आवेदन के लिए अपना स्वयं का अनुकूलित बैकएंड या वीएम प्रदान करें। –

2

आप C--, एक सी की तरह सी

+0

धन्यवाद, यह बहुत दिलचस्प लगता है;) – back2dos

0

सी से कोड पीढ़ी के लिए एक बेहतर लक्ष्य होने के लिए लक्षित भाषा पर विचार हो सकता एक अच्छा विकल्प है, IMHO है। कई भाषाओं के विपरीत, सी को आम तौर पर "सुरुचिपूर्ण" माना जाता है जिसमें आपके पास केवल 32 कीवर्ड होते हैं, और बहुत ही बुनियादी संरचनाएं (अनुक्रम, चयन, पुनरावृत्ति), टोकन और ऑपरेटरों के एक बहुत ही सरल और लगातार संग्रह के साथ।

क्योंकि वाक्यविन्यास सी (ब्रैकेट्स और ब्रेसेस, ब्लॉक और कथन, अभिव्यक्तियों का उपयोग) के भीतर बहुत संगत है, इसलिए आप भाषा विस्तार की एक असंबद्ध दुनिया में नहीं जा रहे हैं। सी एक परिपक्व भाषा है, जिसने अच्छी तरह से समय कम किया है, और आजकल एक "ज्ञात मात्रा" है (जो कई अन्य भाषाओं के बारे में भी कहना मुश्किल है, यहां तक ​​कि "परिपक्व" भी)।

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