मैं एक प्रोग्रामिंग भाषा विनिर्देश लिखने के बारे में कैसे जाऊँ?


16

मैं वास्तव में प्रोग्रामिंग भाषा डिजाइन का आनंद लेता हूं। कभी-कभी मुझे लगता है कि मेरी भाषा परियोजनाएं और उनके संभावित उपयोगकर्ता एक व्यापक मानकों के दस्तावेज़ से लाभान्वित होंगे। मैंने कई भाषा मानकों को देखा है, बहुत औपचारिक (C ++) से लेकर अनौपचारिक (ECMAScript) तक, लेकिन मुझे वास्तव में इस बात पर ध्यान नहीं है कि मुझे चीजों को कैसे तोड़ना चाहिए और इस तरह के दस्तावेज़ को व्यवस्थित करना चाहिए, भले ही मैं मुझे लगता है कि मैं सामान्य रूप से तकनीकी लेखन में बहुत अच्छा हूं।

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


1
क्या आपने अभी तक मार्टिन फॉलर द्वारा डोमेन विशिष्ट भाषाएँ पढ़ी हैं? amazon.com/…
गैरी रोवे

@ गैरी रोव: मैंने नहीं किया है। यह एक अच्छा पढ़ा हुआ लगता है, हालाँकि शायद वैसा नहीं जैसा मैं देख रहा हूँ।
जॉन प्यूडी

एक संदर्भ कार्यान्वयन पर एक मानक का लाभ यह है कि आप परिभाषित कर सकते हैं कि अन्य कार्यान्वयन आपके कार्यान्वयन से क्या विचलन कर सकते हैं।
बार्ट वैन इनगेन शेनॉ

जवाबों:


3

मैंने जावा भाषा की युक्ति को औपचारिक और पठनीय दोनों पाया, और मुझे लगता है कि इसकी एक समझदार संरचना है। W3C के कुछ स्पेक्स अच्छे उदाहरण हो सकते हैं।

औपचारिक काम करने से आप भाषा की जटिलता को कम कर सकते हैं और कोने के मामलों को देख सकते हैं।

हेडिंग ब्रेन डंप: स्रोत एन्कोडिंग, लेक्सिंग, मौलिक प्रकार, शाब्दिक, संचालक, भाव, सरल कथन, स्थिति, लूप, फ़ंक्शन (परिभाषाएँ और कॉल), प्रकार की घोषणाएँ, मॉड्यूल, संकलन इकाइयाँ, चर स्कोपिंग, विभिन्न प्रकार के नाम रिज़ॉल्यूशन (जैसे) आयात, तरीके), मेमोरी मॉडल, साइड इफेक्ट्स, टाइपिंग, कंसीडर…


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

7

बहुत पढ़ें और इसे सरल रखें

नई भाषा को डिजाइन करना कठिन है। वास्तव में मुश्किल है। लेकिन अंततः बहुत ही संतोषजनक अगर यह लोकप्रिय हो जाता है और वास्तव में एक समस्या का हल करता है जो लोग सुरुचिपूर्ण तरीके से अनुभव कर रहे हैं।

जैसा कि मैंने टिप्पणियों में उल्लेख किया है, मैं आपको निम्नलिखित कारणों से मार्टिन फाउलर द्वारा डोमेन विशिष्ट भाषाएं पढ़ने की सलाह दूंगा :

  1. वह इस बारे में बहुत अधिक व्यावहारिक गहराई में चला जाता है कि आपको भाषा क्यों डिज़ाइन करनी चाहिए
  2. इसे कैसे करना है, इसके बारे में विवरण हैं (पार्सर, लेक्सिकल एनालिसर्स, भाषा कार्यक्षेत्र आदि)
  3. क्लोजर, एनोटेशन, शाब्दिक सूची, डायनेमिक सूची आदि जैसी अवधारणाओं को संभालने के लिए आपके चुने हुए सिंटैक्स को कैसे बनाया जा सकता है, इसके बारे में विस्तृत कार्यान्वयन निर्देश हैं।

अपने विनिर्देश लिखने के बारे में कैसे जाने के लिए, अपने दर्शकों के बारे में सोचें। जाहिर है, अपनी भाषा डिजाइन करने के लिए कीबोर्ड पर उंगली डालने से पहले, आपने ध्यान से सोचा होगा कि यह क्या करने का इरादा है।

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

यदि यह टाइटन के अगले मिशन पर उपयोग किया जा रहा है, तो प्रत्येक घटक के व्यवहार के सटीक औपचारिक प्रमाण दिखाने वाले अत्यंत विस्तृत विनिर्देश न्यूनतम प्रवेश स्तर होंगे।

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

संक्षेप में, इसे सरल रखें और अधिक लोग इसका उपयोग करेंगे।


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

@Jon Purdy क्या आपके पास ऑनलाइन भाषाओं का कोई उदाहरण है जिसे आप प्रश्न में शामिल कर सकते हैं?
गैरी रोवे

मेरे पास अपनी वर्तमान परियोजना के उदाहरण अभी तक नहीं हैं। मेरे द्वारा की गई भाषा का वास्तव में पूर्ण सार्वजनिक उदाहरण (जो मैं वास्तव में उपयोग करता हूं!) Vision-language.sourceforge.net/cgi-bin/Home पर है
जॉन

@Jon Purdy विज़न दिलचस्प लगता है - एक प्रकार का सूप जैसा वेग। एक तरफ के रूप में, आप यह सुनिश्चित करने के लिए YouTube स्क्रेंकास्ट पर विचार कर सकते हैं कि इसे कैसे स्थापित किया जाए और एक छोटी सी वेबसाइट (स्थानीय ककड़ी के लिए उदाहरण) लिखें। यह सीखने की अवस्था को बहुत आसान बना देगा क्योंकि लोग इसे कार्रवाई में देख सकते हैं और तुरंत लाभ उठा सकते हैं। आप JSP, वेग, ASP.Net, फ़्रीमार्कर आदि की तुलना में लाभों के बारे में बात कर सकते हैं
गैरी रोवे

वह एक अच्छा विचार है; मैं YouTube वीडियो को हाल ही में (लगभग तीन सप्ताह के आसपास) बना रहा हूं, इसलिए मुझे लगता है कि मैं निश्चित रूप से एक में फिट हो सकता हूं।
जॉन प्यूडी

3

Wirth ने कई प्रोग्रामिंग भाषाओं को डिज़ाइन और कार्यान्वित किया: इनमें से, ओबरन और ओबरोन 2 भाषाओं के लिए विशिष्टताएँ पूर्णता, मरोड़ और पठनीयता के लिए उल्लेखनीय हैं।


2

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


वास्तव में, रूबी के पास दो चीजें हैं जिन्हें "विनिर्देशों" माना जा सकता है। आईएसओ रूबी स्पेसिफिकेशन है, जो वर्तमान में अपने अंतिम मसौदा राज्य में है और जिसे कुछ लोगों द्वारा लिखा जा रहा है, जिनके पास भाषा विनिर्देशों के साथ अनुभव है (एएनएसआई कॉमन लिस्प और आईएसओ सी ++ पर काम किया है)। और रुबाईसेक परियोजना है, जो RSpec- शैली के निष्पादन योग्य उदाहरणों का एक सेट है, जो उस विनिर्देश के लिए मानव-पठनीय विनिर्देश और मशीन-निष्पादन योग्य अनुरूपता परीक्षण दोनों का गठन करता है।
जॉर्ग डब्ल्यू मित्तग

1

किसी भी विनिर्देशन का परीक्षण किया जाना चाहिए और समय की कसौटी पर खरा उतरने में सक्षम होना चाहिए

यही कारण है कि आप बीएनएफ की तरह एक अमूर्तता देखते हैं कई भाषा मानकों के लिए इस्तेमाल किए जाने वाले ... इसकी प्रवृत्ति और अभी भी लंबे समय तक समझा जाएगा कि हमारे कई मौजूदा उपकरण पीछे रह गए हैं।

बेशक यह सिर्फ एक व्याकरण की तुलना में अधिक है। देखो कि दूसरों ने क्या किया है ... perl6, स्कीम, C ... वे उन मुद्दों को संबोधित करते हैं जो कार्यान्वयनकर्ता भी ध्यान रखते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.