ओबेरोन -2: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{multiple issues|
{{Primary sources|date=April 2011}}
{{More footnotes needed|date=April 2011}}
}}
{{Infobox programming language
{{Infobox programming language
| name = Oberon-2
| name = Oberon-2
Line 28: Line 23:
| influenced = [[Oberon (programming language)#Oberon-07|Oberon-07]], [[Zonnon]], [[Active Oberon]], [[Component Pascal]], [[Go (programming language)|Go]], [[Nim (programming language)|Nim]]
| influenced = [[Oberon (programming language)#Oberon-07|Oberon-07]], [[Zonnon]], [[Active Oberon]], [[Component Pascal]], [[Go (programming language)|Go]], [[Nim (programming language)|Nim]]
}}
}}
ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) [[प्रोग्रामिंग भाषा]] का एक विस्तार है जो सीमित [[प्रतिबिंब (कंप्यूटर विज्ञान)]] और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और  [[मॉड्यूल-2]] से फॉर लूप को पुन: प्रस्तुत करता है।
ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) [[प्रोग्रामिंग भाषा]] का ऐसा विस्तार है जो सीमित [[प्रतिबिंब (कंप्यूटर विज्ञान)]] और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और  [[मॉड्यूल-2]] से फॉर लूप को पुन: प्रस्तुत करता है।


इसे 1991 में ETH ज्यूरिख में [[Niklaus Wirth]] और Hanspeter Mössenbock द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के [[लिंज़ विश्वविद्यालय]] के Institut für Systemsoftware (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है,इसके साथ पूरी तरह से संगत है,और [[ऑब्जेक्ट ओबेरॉन]] का एक नया स्वरूप था।
इसे 1991 में ईटीएच (ETH) ज्यूरिख में [[Niklaus Wirth|निक्लौस विर्थ]] और हैन्सपीटर मौसेनबाॅक द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के [[लिंज़ विश्वविद्यालय]] के इंस्टीट्यूट फाॅर सिस्टम साॅफ्टवेयर (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है, इसके साथ पूर्ण रूप से संयोजित है,और [[ऑब्जेक्ट ओबेरॉन]] का नवीन स्वरूप था।


ओबेरॉन -2 को ओबेरॉन से इंटरफेस या [[मिश्रण|mixin]] के बिना सीमित प्रतिबिंब और एकल [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों  (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। [[सी ++]] - शैली आभासी विधियों  के टेबल का उपयोग करके [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] पर विधि कॉल्स को हल किया गया था।
ओबेरॉन -2 को ओबेरॉन से इंटरफेस या [[मिश्रण|mixin]] के बिना सीमित प्रतिबिंब और एकल [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों  (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। [[सी ++]] - शैली आभासी विधियों  के टेबल का उपयोग करके [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] पर विधिवत कॉल करके हल किया गया था।


स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक [[डेटा प्रकार]] और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ETH ओबेरॉन में प्रदर्शित किया गया है,और [[बहुरूपता (कंप्यूटर विज्ञान)]] एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है ([[पायथन (प्रोग्रामिंग भाषा)]] में कोई [[बतख टाइपिंग]] नहीं होती है),<ref>{{Cite web |url=http://www.drdobbs.com/templates-and-duck-typing/184401971 |title=Related Reading |website=Dr. Dobb's}}</ref> और [[जावा (प्रोग्रामिंग भाषा)]] के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।
स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक [[डेटा प्रकार]] और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ईटीएच ओबेरॉन में प्रदर्शित किया गया है,और [[बहुरूपता (कंप्यूटर विज्ञान)]] एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है ([[पायथन (प्रोग्रामिंग भाषा)]] में कोई [[बतख टाइपिंग]] नहीं होती है),<ref>{{Cite web |url=http://www.drdobbs.com/templates-and-duck-typing/184401971 |title=Related Reading |website=Dr. Dobb's}}</ref> और [[जावा (प्रोग्रामिंग भाषा)]] के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।


ओबेरॉन -2 में प्रतिबिंब [[metaobject]] का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर [[संकलक]] से निष्पादन योग्य बायनेरिज़ में पढ़ता है,और मॉड्यूल में उजागर होता है जो प्रकार और प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियों में), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है।मुख्य रूप से, ETH ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।
ओबेरॉन -2 में प्रतिबिंब [[metaobject|मेटाओब्जेक्ट]] का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर [[संकलक]] से निष्पादन योग्य बायनेरिज़ में पढ़ता है,और मॉड्यूल में उजागर होता है जो प्रकार और प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियों में), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है। यह मुख्य रूप से, ईटीएच ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।


ओबेरॉन -2 जावा के समान [[कचरा संग्रह (कंप्यूटर विज्ञान)]] के लिए अंतर्निहित रनटाइम समर्थन प्रदान करता है सीमा और सरणी सूचकांक जांच आदि करता है, जो संभावित स्टैक और सरणी सीमा ओवरराइटिंग समस्याओं और मैनुअल मेमोरी प्रबंधन विवादों को भाषा सी और सी ++ में निहित करता है। मॉड्यूल आर्किटेक्चर के माध्यम से प्रतीक फ़ाइलों और नामस्थानों का उपयोग करके अलग संकलन तेजी से पुनर्निर्माण सुनिश्चित करता है क्योंकि बदले हुए इंटरफेस वाले मॉड्यूल को फिर से कंपाइल करने की आवश्यकता होती है।
ओबेरॉन -2 जावा के समान [[कचरा संग्रह (कंप्यूटर विज्ञान)]] के लिए अंतर्निहित रनटाइम समर्थन प्रदान करता है सीमा और सरणी सूचकांक जांच आदि करता है, जो संभावित स्टैक और सरणी सीमा ओवरराइटिंग समस्याओं और मैनुअल मेमोरी प्रबंधन विवादों को भाषा सी और सी ++ में निहित करता है। मॉड्यूल आर्किटेक्चर के माध्यम से प्रतीक फ़ाइलों और एड्रेस का उपयोग करके अलग तरह से कंपाइल करके इसका तेजी से पुनर्निर्माण सुनिश्चित करता है क्योंकि परिवर्तन करने के पश्चात इंटरफेस वाले मॉड्यूल को फिर से कंपाइल करने की आवश्यकता होती है।


भाषा [[घटक पास्कल]]<ref>{{Cite web |last=Pfister |first=Cuno |date=2001 |url=http://www.oberon.ch/pdf/CP-New.pdf |title=What's New in Component Pascal (changes from Oberon-2 to CP) |website=Oberon microsystems |access-date=10 January 2007 |url-status=dead |archive-url=https://web.archive.org/web/20110515111149/http://www.oberon.ch/pdf/CP-New.pdf |archive-date=2011-05-15}}</ref> ओबेरॉन-2 का परिशोधन (एक सुपरसेट) है।
भाषा [[घटक पास्कल]]<ref>{{Cite web |last=Pfister |first=Cuno |date=2001 |url=http://www.oberon.ch/pdf/CP-New.pdf |title=What's New in Component Pascal (changes from Oberon-2 to CP) |website=Oberon microsystems |access-date=10 January 2007 |url-status=dead |archive-url=https://web.archive.org/web/20110515111149/http://www.oberon.ch/pdf/CP-New.pdf |archive-date=2011-05-15}}</ref> ओबेरॉन-2 का परिशोधन (सुपरसेट) है।


== उदाहरण कोड ==
== उदाहरण कोड ==
निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:
निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:
 
MODULE Trees;
<वाक्यविन्यास प्रकाश लैंग = सीपी शैली = फ़ॉन्ट-आकार: 10pt>
मॉड्यूल पेड़;
TYPE
 
    Tree* = POINTER TO Node;
प्रकार
    Node* = RECORD
    ट्री * = पॉइंटर टू नोड;
        name-: POINTER TO ARRAY OF CHAR;
    नोड* = रिकॉर्ड
        left, right: Tree
        नाम-: चार की सरणी के लिए सूचक;
    END;
        बाएँ, दाएँ: पेड़
    अंत;
PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR);
 
    VAR p, father: Tree;
प्रक्रिया (टी: ट्री) डालें* (नाम: चार की सरणी);
BEGIN p := t;
    वार पी, पिता: वृक्ष;
    REPEAT father := p;
BEGIN p := t;
        IF name = p.name^ THEN RETURN END;
    रिपीट फादर := p;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
        IF नाम = p.name ^ फिर वापसी अंत;
    UNTIL p = NIL;
        IF नाम <p.name^ THEN p := p.left ELSE p := p.right END
    NEW(p); p.left := NIL; p.right := NIL; NEW(p.name, LEN(name)+1); COPY(name, p.name^);
    जब तक पी = शून्य;
    IF name < father.name^ THEN father.left := p ELSE father.right := p END
    नया पी); p.बाएँ:= शून्य; p.right := शून्य; नया (पी.नाम, एलईएन (नाम) +1); कॉपी (नाम, पी। नाम ^);
END Insert;
    IF नाम <Father.name^ THEN father.left := p ELSE father.right:= p END
अंत डालें;
PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree;
 
    VAR p: Tree;
प्रक्रिया (टी: पेड़) खोज* (नाम: चार की सरणी): पेड़;
BEGIN p := t;
    वार पी: ट्री;
    WHILE (p # NIL) & (name # p.name^) DO
BEGIN p := t;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    जबकि (पी # एनआईएल) और (नाम # पी.नाम ^) डीओ
    END;
        IF नाम <p.name^ THEN p := p.left ELSE p := p.right END
    RETURN p
    अंत;
END Search;
    रिटर्न पी
अंत खोज;
PROCEDURE NewTree* (): Tree;
 
    VAR t: Tree;
प्रक्रिया NewTree* (): ट्री;
BEGIN NEW(t); NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL; RETURN t
    वर टी: ट्री;
END NewTree;
नया प्रारंभ करें (टी); नया (टी.नाम, 1); टी नाम [0] := 0X; t.बाएँ:= शून्य; टी.राइट := शून्य; वापसी टी
न्यूट्री समाप्त करें;
END Trees.
 
अंत पेड़।
</वाक्यविन्यास हाइलाइट>


== ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए<ref>[http://members.home.nl/jmr272/Oberon/Oberon2.Differences.pdf Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)]</ref> ==
== ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए<ref>[http://members.home.nl/jmr272/Oberon/Oberon2.Differences.pdf Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)]</ref> ==
Line 98: Line 90:


=== रनटाइम प्रकार की जाँच ===
=== रनटाइम प्रकार की जाँच ===
पहला, सबसे पारंपरिक, दृष्टिकोण प्रकार बाध्यकारी प्रणाली पर भरोसा करना है। दूसरा दृष्टिकोण विथ स्टेटमेंट का उपयोग करना है, जो एक चर के गतिशील उपप्रकार को सीधे जांचने की अनुमति देता है। दोनों ही स्थितियों में, एक बार उपप्रकार की पहचान हो जाने के बाद, प्रोग्रामर उपप्रकार के लिए उपयुक्त किसी भी प्रकार की बाध्य प्रक्रियाओं या चर का उपयोग कर सकता है। इन दृष्टिकोणों के उदाहरण नीचे दिखाए गए हैं।
पहला, सबसे पारंपरिक, दृष्टिकोण प्रकार बाध्यकारी प्रणाली पर भरोसा करना है। दूसरा दृष्टिकोण विथ स्टेटमेंट का उपयोग करना है, जो इसके वैरिएबल के लिए गतिशील उपप्रकार को सीधे जांचने की अनुमति देता है। दोनों ही स्थितियों में, इस प्रकार की पहचान हो जाने के पश्चात प्रोग्रामर इसके प्रकार के लिए उपयुक्त किसी भी प्रकार की बाध्य प्रक्रियाओं या चर का उपयोग करता है। इन दृष्टिकोणों के उदाहरण नीचे दिखाए गए हैं।


ध्यान दें कि ओबेरॉन-2 में प्रयुक्त विथ स्टेटमेंट का फॉर्म पास्कल और मोडुला-2 विथ स्टेटमेंट से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने की यह विधि ओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।
ध्यान दें कि ओबेरॉन-2 में प्रयुक्त विथ स्टेटमेंट का फॉर्म पास्कल और मोडुला-2 विथ स्टेटमेंट से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने की यह विधि ओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।


==== बाइंडिंग टाइप करें ====
==== बाइंडिंग टाइप करें ====
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
  MODULE Birds;
मॉड्यूल पक्षी;
      TYPE
    प्रकार
          Bird* = RECORD
        पक्षी* = रिकॉर्ड
              sound* : ARRAY 10 OF CHAR;
            ध्वनि*: सरणी 10 चार;
          END;
        अंत;
  END Birds.
अंत पक्षी।
 
  MODULE Ducks;
मॉड्यूल बतख;
      IMPORT Birds;
    आयात पक्षी;
 
      TYPE
    प्रकार
          Duck* = RECORD (Birds.Bird) END;
        बतख * = रिकॉर्ड (पक्षी। पक्षी) अंत;
 
      PROCEDURE SetSound* (VAR bird : Duck);
    प्रक्रिया सेटसाउंड * (वार पक्षी: बतख);
      BEGIN
    प्रारंभ
          bird.sound := "Quack!"
        चिड़िया। ध्वनि: = नीम हकीम!
      END SetSound;
    अंत सेटसाउंड;
  END Ducks.
अंत बतख।
 
  MODULE Cuckoos;
मॉड्यूल कोयल;
      IMPORT Birds;
    आयात पक्षी;
 
      TYPE
    प्रकार
          Cuckoo* = RECORD (Birds.Bird) END;
        कोयल* = रिकॉर्ड (पक्षी। पक्षी) अंत;
 
      PROCEDURE SetSound* (VAR bird : Cuckoo);
    प्रक्रिया सेटसाउंड * (वार पक्षी: कोयल);
      BEGIN
    प्रारंभ
          bird.sound := "Cuckoo!"
        चिड़िया की आवाज�:= कोयल�!
      END SetSound;
    अंत सेटसाउंड;
  END Cuckoos.
  अंत कोयल।
</वाक्यविन्यास हाइलाइट>
 
==== <code>WITH</code> कथन ====
==== <code>WITH</code> कथन ====
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
मॉड्यूल टेस्ट;
    आयात बाहर, पक्षी, कोयल, बत्तख;
    प्रकार
        समबर्ड* = रिकॉर्ड (पक्षी.पक्षी) END;
    वीएआर
        एसबी: समबर्ड;
        c : कोयल। कोयल;
        डी: बत्तख। बत्तख;
    प्रक्रिया सेटसाउंड * (वार पक्षी: पक्षी। पक्षी);
    प्रारंभ
        पक्षी के साथ: कोयल। कोयल DO
              चिड़िया की आवाज�:= कोयल=!
            | चिड़िया�: बत्तख। बत्तख डीओ
              चिड़िया। ध्वनि: = नीम हकीम!
        अन्य
              बर्ड.साउंड�:= कलरव!
        अंत
    अंत सेटसाउंड;
    प्रक्रिया MakeSound* (VAR b�: Birds.Bird);
    प्रारंभ
        आउट.लन;
        आउट.स्ट्रिंग (बी.साउंड);
        आउट.ल.न
    अंत बनाओ ध्वनि;
प्रारंभ
    सेटसाउंड (सी);
    सेटसाउंड (डी);
    सेटसाउंड (एसबी);
    मेकसाउंड (सी);
    मेकसाउंड (डी);
    मेकसाउंड (एसबी)
अंत परीक्षण।
</वाक्यविन्यास हाइलाइट>


MODULE Test;
      IMPORT Out, Birds, Cuckoos, Ducks;
 
      TYPE
          SomeBird* = RECORD (Birds.Bird) END;
 
      VAR
          sb : SomeBird;
          c  : Cuckoos.Cuckoo;
          d  : Ducks.Duck;
 
      PROCEDURE SetSound* (VAR bird : Birds.Bird);
      BEGIN
          WITH bird : Cuckoos.Cuckoo DO
              bird.sound := "Cuckoo!"
            | bird : Ducks.Duck DO
              bird.sound := "Quack!"
          ELSE
              bird.sound := "Tweet!"
          END
      END SetSound;
 
      PROCEDURE MakeSound* (VAR b : Birds.Bird);
      BEGIN
          Out.Ln;
          Out.String(b.sound);
          Out.Ln
      END MakeSound;
 
  BEGIN
      SetSound(c);
      SetSound(d);
      SetSound(sb);
 
      MakeSound(c);
      MakeSound(d);
      MakeSound(sb)
  END Test.
==== <code>POINTER</code> ====
==== <code>POINTER</code> ====
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
 
  मॉड्यूल सूचक पक्षी;
  MODULE PointerBirds;
    बाहर आयात करें;
      IMPORT Out;
 
    प्रकार
      TYPE
        बर्डरेक* = रिकॉर्ड
          BirdRec*   = RECORD
            ध्वनि*: सरणी 10 चार;
              sound* : ARRAY 10 OF CHAR;
        अंत;
          END;
        DuckRec* = रिकॉर्ड (बर्डरैक) END;
          DuckRec*   = RECORD (BirdRec) END;
        CuckooRec* = रिकॉर्ड (बर्डरैक) END;
          CuckooRec* = RECORD (BirdRec) END;
 
        बर्ड = बर्डरेक के लिए सूचक;
          Bird  = POINTER TO BirdRec;
        कोयल = कोयल के लिए सूचक;
          Cuckoo = POINTER TO CuckooRec;
        डक = पॉइंटर टू डक आरईसी;
          Duck  = POINTER TO DuckRec;
 
    वीएआर
    VAR
        पीबी: पक्षी;
        pb : Bird;
        पीसी : कोयल;
        pc : Cuckoo;
        पीडी: बतख;
        pd : Duck;
 
    प्रक्रिया सेट डक साउंड * (पक्षी: बतख);
      PROCEDURE SetDuckSound* (bird : Duck);
    प्रारंभ
      BEGIN
        चिड़िया। ध्वनि: = नीम हकीम!
          bird.sound := "Quack!"
    अंत सेट डक साउंड;
      END SetDuckSound;
 
    प्रक्रिया सेटकोयलसाउंड* (पक्षी: कोयल);
      PROCEDURE SetCuckooSound* (bird : Cuckoo);
    प्रारंभ
      BEGIN
        चिड़िया की आवाज�:= कोयल�!
          bird.sound := "Cuckoo!"
    END सेटCuckooSound;
      END SetCuckooSound;
 
    प्रक्रिया सेटसाउंड * (पक्षी: पक्षी);
      PROCEDURE SetSound* (bird : Bird);
    प्रारंभ
      BEGIN
        पक्षी के साथ�: कोयल DO
          WITH bird : Cuckoo DO
              कुक्कूसाउंड (पक्षी) सेट करें
              SetCuckooSound(bird)
            | पक्षी�: बतख DO
            | bird : Duck DO
              सेट डक साउंड (पक्षी)
              SetDuckSound(bird)
        अन्य
          ELSE
              बर्ड.साउंड := कलरव!
              bird.sound := "Tweet!"
        अंत
          END
    अंत सेटसाउंड;
      END SetSound;
 
प्रारंभ
  BEGIN
    नया (पीसी);
      NEW(pc);
    नया (पीडी);
      NEW(pd);
 
    सेट कुकूसाउंड (पीसी);
      SetCuckooSound(pc);
    सेट डक साउंड (पीडी);
      SetDuckSound(pd);
 
    आउट.लन; आउट.स्ट्रिंग (पीसी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pc^.sound); Out.Ln;
    आउट.लन; आउट.स्ट्रिंग (पीडी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pd^.sound); Out.Ln;
 
    सेटसाउंड (पीसी);
      SetSound(pc);
    सेटसाउंड (पीडी);
      SetSound(pd);
 
    आउट.लन; आउट.स्ट्रिंग (पीसी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pc^.sound); Out.Ln;
    आउट.लन; आउट.स्ट्रिंग (पीडी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pd^.sound); Out.Ln;
 
(* ----------------------------------------------------- *)
  (* -------------------------------------- *)
(* प्रक्रिया के लिए गतिशील प्रकार पास करें *)
  (* Pass dynamic type to procedure        *)
 
    पीबी: = पीडी;
      pb := pd;
 
    सेटडकसाउंड (पंजाब (बतख));
      SetDuckSound(pb(Duck));
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
    पंजाब�:= पीसी;
      pb := pc;
 
    सेट कुकूसाउंड (पंजाब (कोयल));
      SetCuckooSound(pb(Cuckoo));
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
(* ----------------------------------------------------- *)
  (* -------------------------------------- *)
 
    सेटसाउंड (पंजाब);
      SetSound(pb);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
    पीबी: = पीडी;
      pb := pd;
 
    सेटसाउंड (पंजाब);
      SetSound(pb);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
(* ----------------------------------------------------- *)
  (* -------------------------------------- *)
 
    नया (पंजाब);
      NEW(pb);
 
    सेटसाउंड (पंजाब);
      SetSound(pb);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.ल.न
      Out.Ln; Out.String(pb^.sound); Out.Ln
अंत सूचक पक्षी।
 
</वाक्यविन्यास हाइलाइट>
  END PointerBirds.


==== <code>IS</code> संचालिका ====
==== <code>IS</code> संचालिका ====
Line 273: Line 260:
== सिंटेक्स ==
== सिंटेक्स ==
[[ALGOL]] → [[पास्कल (प्रोग्रामिंग भाषा)]] → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।
[[ALGOL]] → [[पास्कल (प्रोग्रामिंग भाषा)]] → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।
Module        = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] END ident ".".
ImportList    = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq      = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl    = IdentDef "=" ConstExpr.
TypeDecl      = IdentDef "=" Type.
VarDecl      = IdentList ":" Type.
ProcDecl      = PROCEDURE [Receiver] IdentDef [FormalPars] ";" DeclSeq [BEGIN StatementSeq] END ident.
ForwardDecl  = PROCEDURE "^" [Receiver] IdentDef [FormalPars].
FormalPars    = "(" [FPSection {";" FPSection}] ")" [":" Qualident].
FPSection    = [VAR] ident {"," ident} ":" Type.
Receiver      = "(" [VAR] ident ":" ident ")".
Type          = Qualident
<nowiki> </nowiki>            <nowiki>|</nowiki> ARRAY [ConstExpr {"," ConstExpr}] OF Type
<nowiki> </nowiki>            <nowiki>|</nowiki> RECORD ["("Qualident")"] FieldList {";" FieldList} END
<nowiki> </nowiki>            <nowiki>|</nowiki> POINTER TO Type
<nowiki> </nowiki>            <nowiki>|</nowiki> PROCEDURE [FormalPars].
FieldList    = [IdentList ":" Type].
StatementSeq  = Statement {";" Statement}.
Statement    = [ Designator ":=" Expr
<nowiki> </nowiki>            <nowiki>|</nowiki> Designator ["(" [ExprList] ")"]
<nowiki> </nowiki>            <nowiki>|</nowiki> IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>| CASE Expr OF Case {"|</nowiki>" Case} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>|</nowiki> WHILE Expr DO StatementSeq END
<nowiki> </nowiki>            <nowiki>|</nowiki> REPEAT StatementSeq UNTIL Expr
<nowiki> </nowiki>            <nowiki>|</nowiki> FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
<nowiki> </nowiki>            <nowiki>|</nowiki> LOOP StatementSeq END
<nowiki> </nowiki>            <nowiki>| WITH Guard DO StatementSeq {"|</nowiki>" Guard DO StatementSeq} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>|</nowiki> EXIT
<nowiki> </nowiki>            <nowiki>|</nowiki> RETURN [Expr]
<nowiki> </nowiki>    ].
Case          = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels    = ConstExpr [".." ConstExpr].
Guard        = Qualident ":" Qualident.
ConstExpr    = Expr.
Expr          = SimpleExpr [Relation SimpleExpr].
SimpleExpr    = ["+" | "-"] Term {AddOp Term}.
Term          = Factor {MulOp Factor}.
Factor        = Designator ["(" [ExprList] ")"] | number | character | string | NIL | Set | "(" Expr ")" | "~" Factor.
Set          = "{" [Element {"," Element}] "}".
Element      = Expr [".." Expr].
Relation      = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp        = "+" | "-" | OR.
MulOp        = "*" | "/" | DIV | MOD | "&".
Designator    = Qualident {"." ident | "[" ExprList "]" | "^" | "(" Qualident ")"}.
ExprList      = Expr {"," Expr}.
IdentList    = IdentDef {"," IdentDef}.
Qualident    = [ident "."] ident.


<वाक्यविन्यास लैंग = ईबीएनएफ>
IdentDef     = ident ["*" | "-"].
मॉड्यूल = मॉड्यूल पहचान; [ImportList] DeclSeq [BEGIN StatementSeq] END पहचान। .
आयात सूची = आयात [पहचान: =] पहचान {, [पहचान: =] पहचान}; .
DeclSeq = { CONST {ConstDecl; } | प्रकार {टाइपडीसीएल; } | वार {VarDecl ; }} {ProcDecl; | आगेDecl ; }.
ConstDecl = IdentDef = ConstExpr.
TypeDecl = IdentDef = Type.
VarDecl = पहचान सूची: प्रकार।
ProcDecl = प्रक्रिया [रिसीवर] IdentDef [FormalPars]; DeclSeq [BEGIN StatementSeq] END पहचान।
ForwardDecl = PROCEDURE ^ [रिसीवर] IdentDef [FormalPars]।
FormalPars = ([FPSection { ; FPSection}] ) [ : योग्य]।
FPSection = [VAR] पहचान {, पहचान} : प्रकार।
रिसीवर = ([VAR] पहचान: पहचान)।
प्रकार = योग्य
              | ARRAY [ConstExpr { , ConstExpr}] प्रकार का
              | रिकॉर्ड [( योग्य ) ] फील्डलिस्ट { ; फील्डलिस्ट} अंत
              | टाइप करने के लिए सूचक
              | प्रक्रिया [औपचारिक पार]।
फील्डलिस्ट = [पहचान सूची: प्रकार]।
स्टेटमेंटसेक = स्टेटमेंट {; कथन}।
कथन = [Designator := Expr
              | डिज़ाइनर [( [ExprList] ) ]
              | IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
              | केस एक्सप्रेशन ऑफ केस { | Case} [ELSE StatementSeq] END
              | जबकि Expr DO StatementSeq END
              | रिपीट स्टेटमेंटSeq Expr तक
              | पहचान के लिए:= Expr से Expr [BY ConstExpr] DO StatementSeq END
              | पाश StatementSeq अंत
              | विद गार्ड डीओ स्टेटमेंटसेक { | गार्ड DO StatementSeq} [ELSE StatementSeq] END
              | बाहर निकलना
              | रिटर्न [एक्सप्र]
      ]।
केस = [केस लेबल { , केस लेबल} : स्टेटमेंटसेक]।
CaseLabels = ConstExpr [.. ConstExpr]।
पहरेदार = योग्य : योग्य।
कॉन्स्टएक्सपीआर = एक्सप्रेशन।
Expr = SimpleExpr [रिलेशन SimpleExpr]।
सिंपलएक्सप्र = [+ | - ] अवधि {AddOp अवधि}।
टर्म = फैक्टर {MulOp फैक्टर}।
कारक = डिज़ाइनर [([ExprList])] | संख्या | चरित्र | स्ट्रिंग | शून्य | सेट | (एक्सपीआर) | ~ कारक।
सेट = { [तत्व {, तत्व}]}।
तत्व = एक्सप्रेशन [.. एक्सप्र]।
संबंध = = | # | < | <= | > | >= | में | है।
एडऑप = + | - | या।
मुलोप = * | / | डीआईवी | एमओडी | और।
डिज़ाइनर = क्वालिडेंट {। पहचान | [एक्सप्रलिस्ट] | ^ | (योग्यता)}।
एक्सप्रलिस्ट = एक्सप्र {, एक्सप्र}।
IdentList = IdentDef {, IdentDef}।
पात्रा = [पहचान । ] पहचान।
पहचान डीफ = पहचान [* | - ]।
</वाक्यविन्यास हाइलाइट>


== कार्यान्वयन ==
== कार्यान्वयन ==
[[ईटीएच]] द्वारा बनाए गए अनुरक्षित ओबेरॉन-2 कंपाइलर्स में [[खिड़कियाँ]], [[लिनक्स]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], मैकओएस के संस्करण में सम्मलित होते हैं।
[[ईटीएच]] द्वारा बनाए गए अनुरक्षित ओबेरॉन-2 कंपाइलर्स में [[खिड़कियाँ|विंडोज]], [[लिनक्स]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], मैकओएस के संस्करण में सम्मलित होते हैं।


[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और [[मैक ओएस]] एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे [[माइकल स्पाइवी]] द्वारा बनाया जाता है  अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।<ref name="keiko_spec">डॉ. माइकल स्पाइवी।
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और [[मैक ओएस]] एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे [[माइकल स्पाइवी]] द्वारा बनाया जाता है  अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।<ref name="keiko_spec">डॉ. माइकल स्पाइवी।
[https://web.archive.org/web/20160304070606/https://spivey.oriel.ox.ac.uk/corner/Specification_of_Keiko_(संकलक) कीको की विशिष्टता]।
[https://web.archive.org/web/20160304070606/https://spivey.oriel.ox.ac.uk/corner/Specification_of_Keiko_(संकलक) कीको की विशिष्टता]।
</रेफरी><ref name="keiko machine" >
</ref><ref name="keiko machine" >
Dr. Michael Spivey.
Dr. Michael Spivey.
[https://spivey.oriel.ox.ac.uk/corner/Design_overview_for_OBC "Design overview for OBC: The Keiko Abstract Machine"].
[https://spivey.oriel.ox.ac.uk/corner/Design_overview_for_OBC "Design overview for OBC: The Keiko Abstract Machine"].
Line 336: Line 321:
"The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
"The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
</ref>
</ref>
मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 [[लेक्स (सॉफ्टवेयर)]] स्कैनर और वाईएसीसी [[पार्सर]] है। यह संस्करण 1.4 पर होते है।
मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 [[लेक्स (सॉफ्टवेयर)]] स्कैनर और वाईएसीसी [[पार्सर]] है। यह संस्करण 1.4 पर होते है।


[[देशी ओबेरॉन]] नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित होते है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।
[[देशी ओबेरॉन]] नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित होते है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।


ETHZ में कुछ साधारण .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क|.NET कार्यान्वयन भी विकसित किया गया है।
ETHZ में कुछ साधारणतयः .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क या .NET का कार्यान्वयन भी विकसित किया गया है।


[http://www.fim.uni-linz.ac.at/pow/Pow.htm प्रोग्रामर का खुला कार्यक्षेत्र] (पाउ!)<ref>{{Cite magazine |last=Collingbourne |first=H. |date=February 2000 |title=What Pascal's inventor did next |magazine=[[PC Plus]] |issue=160}}</ref> एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह Microsoft Windows निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है; कंपाइलर ओबेरॉन -2 में लिखा गया है।
[http://www.fim.uni-linz.ac.at/pow/Pow.htm प्रोग्रामर का खुला कार्यक्षेत्र] (पाउ!)<ref>{{Cite magazine |last=Collingbourne |first=H. |date=February 2000 |title=What Pascal's inventor did next |magazine=[[PC Plus]] |issue=160}}</ref> एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह माइक्रोसाॅफ्ट विंडोज निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है, जिसे मुख्य रूप से कंपाइलर ओबेरॉन -2 में लिखा गया है।


[https://web.archive.org/web/20110720112830/http://www.uni-vologda.ac.ru/JOB/ Java to Oberon Compiler] (JOB) को रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स ([[बाईटकोड]]) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।
[https://web.archive.org/web/20110720112830/http://www.uni-vologda.ac.ru/JOB/ जावा से ओबेराॅन के कंपाइलरr] (JOB) को रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स ([[बाईटकोड]]) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।


[http://sourceforge.net/projects/ooc ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर] कार्यक्रम जनरेशन बनाने के लिए [[जीएनयू संकलक संग्रह]] (GCC) टूलचेन का उपयोग करके C में संकलित करता है।
[http://sourceforge.net/projects/ooc ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर] कार्यक्रम जनरेशन बनाने के लिए [[जीएनयू संकलक संग्रह]] (GCC) टूलचेन का उपयोग करके C में संकलित करता है।


[http://www.ralphsommerer.com/obn.htm ओबेरॉन स्क्रिप्ट] एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का [[जावास्क्रिप्ट]] में अनुवाद करता है। कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से बुलाया जा सकता है।
[http://www.ralphsommerer.com/obn.htm ओबेरॉन स्क्रिप्ट] एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का [[जावास्क्रिप्ट]] में अनुवाद करता है। इसका कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से काॅल किया जा सकता है।


[https://web.archive.org/web/20110820112230/http://www.excelsior-usa.com/xds.html XDS Modula2/Oberon2] एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली होती है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध होते है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।
[https://web.archive.org/web/20110820112230/http://www.excelsior-usa.com/xds.html XDS मोडुला2/ओबेरान2] एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली होती है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध होते है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।


[http://sourceforge.net/projects/oberonrevival/files/ ओबेरॉन रिवाइवल] ओबेरॉन 2 और कंपोनेंट पास्कल ([[ब्लैकबॉक्स घटक बिल्डर]]) को लिनक्स और विन32 में लाने की एक परियोजना होती है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध किया जाता था और यह मूल रूप से केवल [[माइक्रोसॉफ़्ट विंडोज़]] पर चलता था।
[http://sourceforge.net/projects/oberonrevival/files/ ओबेरॉन रिवाइवल] ओबेरॉन 2 और कंपोनेंट पास्कल ([[ब्लैकबॉक्स घटक बिल्डर]]) को लिनक्स और विन32 में लाने की एक परियोजना होती है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध किया जाता था और यह मूल रूप से केवल [[माइक्रोसॉफ़्ट विंडोज़]] पर चलता था।


XOberon [[PowerPC]] के लिए एक [[रीयल-टाइम ऑपरेटिंग सिस्टम]] है, जिसे ओबेरॉन-2 में लिखा गया है।
Xओबेरान [[PowerPC|पावर पीसी]] के लिए एक [[रीयल-टाइम ऑपरेटिंग सिस्टम]] है, जिसे ओबेरॉन-2 में लिखा गया है।


पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को [[ओबेरॉन सिस्टम]] को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।<ref name="OP2">{{cite thesis |url=https://www.research-collection.ethz.ch/handle/20.500.11850/141604 |title=Separate Compilation and Module Extension |last=Crelier |first=Régis |year=1994 |publisher=ETH Zurich |doi=10.3929/ethz-a-000945227 |hdl=20.500.11850/141604 |access-date=18 November 2018|type=Doctoral Thesis }}</ref>
पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को [[ओबेरॉन सिस्टम]] को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।<ref name="OP2">{{cite thesis |url=https://www.research-collection.ethz.ch/handle/20.500.11850/141604 |title=Separate Compilation and Module Extension |last=Crelier |first=Régis |year=1994 |publisher=ETH Zurich |doi=10.3929/ethz-a-000945227 |hdl=20.500.11850/141604 |access-date=18 November 2018|type=Doctoral Thesis }}</ref>
== कीको बायटेकोड ==
== कीको बायटेकोड ==


ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।<ref name="keiko_spec" /><ref name="keiko machine" />उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह ([[ओ-कोड]], [[पी-कोड]], आदि देखें),
ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।<ref name="keiko_spec" /><ref name="keiko machine" /> उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह उपयोग में लाया जाता हैं इसके लिए [[ओ-कोड]], [[पी-कोड]], आदि देखें।
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] पहले एक मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सकता है या केवल उपयोग किया जा सकता है -इन-टाइम संकलन।
 
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] पहले मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सके या केवल -इन-टाइम कंपाइल के लिए उपयोग किया जा सके।


== यह भी देखें ==
== यह भी देखें ==
Line 370: Line 369:
{{Reflist}}
{{Reflist}}


 
=== ओबेरॉन और ओबेरॉन -2 का विकास ===
=== ओबेरॉन और ओबेरॉन -2 === का विकास
* [https://web.archive.org/web/20130529020132/http://www.ethoberon.ethz.ch/genealogy.html ओबेराॅन Language Genealogy Tree] [[ETHZ]] में अनुरक्षित
* [https://web.archive.org/web/20130529020132/http://www.ethoberon.ethz.ch/genealogy.html Oberon Language Genealogy Tree] [[ETHZ]] में अनुरक्षित
* दूसरा अंतर्राष्ट्रीय मोडुला-2 सम्मेलन, सितंबर 1991।
* दूसरा अंतर्राष्ट्रीय मोडुला-2 सम्मेलन, सितंबर 1991।


Line 391: Line 389:


== बाहरी संबंध ==
== बाहरी संबंध ==
* {{Official website|www.ethoberon.ethz.ch}}, ETH Zürich
* {{Official website|www.ethoberon.ethz.ch}}, ईटीएच Zürich
* [https://web.archive.org/web/20050221100629/http://www.oberon.ethz.ch/ Oberon Reference page at ETH Zürich]
* [https://web.archive.org/web/20050221100629/http://www.oberon.ethz.ch/ ओबेराॅन Reference page at ईटीएच Zürich]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Oberon.html Oberon at SSW, Linz]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Oberon.html ओबेराॅन at SSW, Linz]
* [http://www.zinnamturm.eu/downloadsOS.htm#Pow Pow Tutorial (in Romanian language), by Dan Popa]
* [http://www.zinnamturm.eu/downloadsOS.htm#Pow Pow Tutorial (in Romanian language), by Dan Popa]
* ftp://ftp.inf.ethz.ch/pub/Oberon/
* [ftp://ftp.inf.ethz.ch/pub/Oberon/ ftp://ftp.inf.ethz.ch/pub/ओबेराॅन/]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Reflection/Reflection99/paper.ps The Oberon-2 Reflection Model and its Applications]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Reflection/Reflection99/paper.ps The ओबेराॅन-2 Reflection Model and its Applications]


{{Modula, Oberon}}
{{Modula, Oberon}}
{{Wirth}}
{{Wirth}}
[[Category: मॉड्यूला प्रोग्रामिंग भाषा परिवार]] [[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]] [[Category: ओबेरॉन प्रोग्रामिंग भाषा परिवार]] [[Category: 1991 में बनाई गई प्रोग्रामिंग लैंग्वेज]]


[[Category: Machine Translated Page]]
[[Category:1991 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Official website not in Wikidata]]
[[Category:Pages with reference errors]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite magazine]]
[[Category:Wikipedia metatemplates]]
[[Category:ओबेरॉन प्रोग्रामिंग भाषा परिवार]]
[[Category:मॉड्यूला प्रोग्रामिंग भाषा परिवार]]
[[Category:वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]]

Latest revision as of 16:19, 28 February 2023

Oberon-2
Oberon programming language logo.svg
ParadigmsImperative, structured, modular, object-oriented
परिवारWirth Oberon
द्वारा डिज़ाइन किया गयाNiklaus Wirth
Hanspeter Mössenböck
DeveloperETH Zurich
पहली प्रस्तुति1991; 33 years ago (1991)
टाइपिंग अनुशासनStrong, hybrid (static and dynamic)
स्कोपLexical
प्लेटफॉर्मCeres (NS32032), IA-32, x86-64
ओएसWindows, Linux, Solaris, macOS
वेबसाइटwww.ethoberon.ethz.ch
Influenced by
Oberon, Modula-2, Object Oberon
Influenced
Oberon-07, Zonnon, Active Oberon, Component Pascal, Go, Nim

ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग भाषा का ऐसा विस्तार है जो सीमित प्रतिबिंब (कंप्यूटर विज्ञान) और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और मॉड्यूल-2 से फॉर लूप को पुन: प्रस्तुत करता है।

इसे 1991 में ईटीएच (ETH) ज्यूरिख में निक्लौस विर्थ और हैन्सपीटर मौसेनबाॅक द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के लिंज़ विश्वविद्यालय के इंस्टीट्यूट फाॅर सिस्टम साॅफ्टवेयर (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है, इसके साथ पूर्ण रूप से संयोजित है,और ऑब्जेक्ट ओबेरॉन का नवीन स्वरूप था।

ओबेरॉन -2 को ओबेरॉन से इंटरफेस या mixin के बिना सीमित प्रतिबिंब और एकल वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। सी ++ - शैली आभासी विधियों के टेबल का उपयोग करके रनटाइम (कार्यक्रम जीवनचक्र चरण) पर विधिवत कॉल करके हल किया गया था।

स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक डेटा प्रकार और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ईटीएच ओबेरॉन में प्रदर्शित किया गया है,और बहुरूपता (कंप्यूटर विज्ञान) एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है (पायथन (प्रोग्रामिंग भाषा) में कोई बतख टाइपिंग नहीं होती है),[1] और जावा (प्रोग्रामिंग भाषा) के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।

ओबेरॉन -2 में प्रतिबिंब मेटाओब्जेक्ट का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर संकलक से निष्पादन योग्य बायनेरिज़ में पढ़ता है,और मॉड्यूल में उजागर होता है जो प्रकार और प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियों में), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है। यह मुख्य रूप से, ईटीएच ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।

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

भाषा घटक पास्कल[2] ओबेरॉन-2 का परिशोधन (सुपरसेट) है।

उदाहरण कोड

निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:

MODULE Trees;

TYPE
    Tree* = POINTER TO Node;
    Node* = RECORD
        name-: POINTER TO ARRAY OF CHAR;
        left, right: Tree
    END;

PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR);
    VAR p, father: Tree;
BEGIN p := t;
    REPEAT father := p;
        IF name = p.name^ THEN RETURN END;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    UNTIL p = NIL;
    NEW(p); p.left := NIL; p.right := NIL; NEW(p.name, LEN(name)+1); COPY(name, p.name^);
    IF name < father.name^ THEN father.left := p ELSE father.right := p END
END Insert;

PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree;
    VAR p: Tree;
BEGIN p := t;
    WHILE (p # NIL) & (name # p.name^) DO
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    END;
    RETURN p
END Search;

PROCEDURE NewTree* (): Tree;
    VAR t: Tree;
BEGIN NEW(t); NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL; RETURN t
END NewTree;

END Trees.

ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए[3]

टाइप-बाउंड प्रक्रियाएं

प्रक्रियाओं को एक रिकॉर्ड (या सूचक) प्रकार के लिए बाध्य किया जा सकता है। वे वस्तु-उन्मुख शब्दावली में उदाहरण के विधियों के बराबर होते हैं।

केवल-पढ़ने के लिए निर्यात

निर्यात किए गए चर और रिकॉर्ड फ़ील्ड का उपयोग केवल-पढ़ने के लिए उपयोग तक सीमित किया जा सकता है। यह - दृश्यता ध्वज के साथ दिखाया गया है।

खुली सरणी

सरणी में जिसे पहले केवल औपचारिक पैरामीटर प्रकार के रूप में घोषित किया जा सकता था,उन्हें अब सूचक आधार प्रकार के रूप में घोषित किया जा सकता है।

कथन के लिए

ओबेरॉन में पास्कल और मोडुला-2 का फॉर स्टेटमेंट में लागू नहीं किया गया था। इसे ओबेरॉन-2 में फिर से सम्मलित किया गया है।

रनटाइम प्रकार की जाँच

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

ध्यान दें कि ओबेरॉन-2 में प्रयुक्त विथ स्टेटमेंट का फॉर्म पास्कल और मोडुला-2 विथ स्टेटमेंट से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने की यह विधि ओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।

बाइंडिंग टाइप करें

 MODULE Birds;
     TYPE
         Bird* = RECORD
             sound* : ARRAY 10 OF CHAR;
         END;
 END Birds.
 
 MODULE Ducks;
     IMPORT Birds;
 
     TYPE
         Duck* = RECORD (Birds.Bird) END;
 
     PROCEDURE SetSound* (VAR bird : Duck);
     BEGIN
         bird.sound := "Quack!" 
     END SetSound;
 END Ducks.
 
 MODULE Cuckoos;
     IMPORT Birds;
 
     TYPE
         Cuckoo* = RECORD (Birds.Bird) END;
 
     PROCEDURE SetSound* (VAR bird : Cuckoo);
     BEGIN
         bird.sound := "Cuckoo!"
     END SetSound;
END Cuckoos.

WITH कथन

MODULE Test;
     IMPORT Out, Birds, Cuckoos, Ducks;
 
     TYPE
         SomeBird* = RECORD (Birds.Bird) END;
 
     VAR
         sb : SomeBird;
         c  : Cuckoos.Cuckoo;
         d  : Ducks.Duck;
 
     PROCEDURE SetSound* (VAR bird : Birds.Bird);
     BEGIN
         WITH bird : Cuckoos.Cuckoo DO
              bird.sound := "Cuckoo!"
            | bird : Ducks.Duck DO
              bird.sound := "Quack!"
         ELSE
              bird.sound := "Tweet!"
         END
     END SetSound;
 
     PROCEDURE MakeSound* (VAR b : Birds.Bird);
     BEGIN
         Out.Ln;
         Out.String(b.sound);
         Out.Ln
     END MakeSound;
 
 BEGIN
     SetSound(c);
     SetSound(d);
     SetSound(sb);
 
     MakeSound(c);
     MakeSound(d);
     MakeSound(sb)
 END Test.

POINTER

MODULE PointerBirds;
     IMPORT Out;
 
     TYPE
         BirdRec*   = RECORD
             sound* : ARRAY 10 OF CHAR;
         END;
         DuckRec*   = RECORD (BirdRec) END;
         CuckooRec* = RECORD (BirdRec) END;
 
         Bird   = POINTER TO BirdRec;
         Cuckoo = POINTER TO CuckooRec;
         Duck   = POINTER TO DuckRec;
 
    VAR
        pb : Bird;
        pc : Cuckoo;
        pd : Duck;
 
     PROCEDURE SetDuckSound* (bird : Duck);
     BEGIN
         bird.sound := "Quack!"
     END SetDuckSound;
 
     PROCEDURE SetCuckooSound* (bird : Cuckoo);
     BEGIN
         bird.sound := "Cuckoo!"
     END SetCuckooSound;
 
     PROCEDURE SetSound* (bird : Bird);
     BEGIN
         WITH bird : Cuckoo DO
              SetCuckooSound(bird)
            | bird : Duck DO
              SetDuckSound(bird)
         ELSE
              bird.sound := "Tweet!"
         END
     END SetSound;
 
 BEGIN
     NEW(pc);
     NEW(pd);
 
     SetCuckooSound(pc);
     SetDuckSound(pd);
 
     Out.Ln; Out.String(pc^.sound); Out.Ln;
     Out.Ln; Out.String(pd^.sound); Out.Ln;
 
     SetSound(pc);
     SetSound(pd);
 
     Out.Ln; Out.String(pc^.sound); Out.Ln;
     Out.Ln; Out.String(pd^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 (* Pass dynamic type to procedure         *)
 
     pb := pd;
 
     SetDuckSound(pb(Duck));
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
     pb := pc;
 
     SetCuckooSound(pb(Cuckoo));
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
     pb := pd;
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 
     NEW(pb);
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln
 END PointerBirds.

IS संचालिका

आईएस ऑपरेटर का उपयोग करके तीसरा दृष्टिकोण संभव है। यह एक रिलेशन ऑपरेटर है जिसकी समान प्राथमिकता यह बराबर (=), बड़ा (>), आदि किन्तु जो गतिशील प्रकार का परीक्षण करता है। दो अन्य दृष्टिकोणों के विपरीत, चूंकि, यह प्रोग्रामर को उस उपप्रकार तक पहुंचने की अनुमति नहीं देता है जिसका पता लगाया गया है।

सिंटेक्स

ALGOLपास्कल (प्रोग्रामिंग भाषा) → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।

Module        = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] END ident ".".
ImportList    = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq       = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl     = IdentDef "=" ConstExpr.
TypeDecl      = IdentDef "=" Type.
VarDecl       = IdentList ":" Type.
ProcDecl      = PROCEDURE [Receiver] IdentDef [FormalPars] ";" DeclSeq [BEGIN StatementSeq] END ident.
ForwardDecl   = PROCEDURE "^" [Receiver] IdentDef [FormalPars].
FormalPars    = "(" [FPSection {";" FPSection}] ")" [":" Qualident].
FPSection     = [VAR] ident {"," ident} ":" Type.
Receiver      = "(" [VAR] ident ":" ident ")".
Type          = Qualident
              | ARRAY [ConstExpr {"," ConstExpr}] OF Type
              | RECORD ["("Qualident")"] FieldList {";" FieldList} END
              | POINTER TO Type
              | PROCEDURE [FormalPars].
FieldList     = [IdentList ":" Type].
StatementSeq  = Statement {";" Statement}.
Statement     = [ Designator ":=" Expr
              | Designator ["(" [ExprList] ")"]
              | IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
              | CASE Expr OF Case {"|" Case} [ELSE StatementSeq] END
              | WHILE Expr DO StatementSeq END
              | REPEAT StatementSeq UNTIL Expr
              | FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
              | LOOP StatementSeq END
              | WITH Guard DO StatementSeq {"|" Guard DO StatementSeq} [ELSE StatementSeq] END
              | EXIT
              | RETURN [Expr]
      ].	
Case          = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels    = ConstExpr [".." ConstExpr].
Guard         = Qualident ":" Qualident.
ConstExpr     = Expr.
Expr          = SimpleExpr [Relation SimpleExpr].
SimpleExpr    = ["+" | "-"] Term {AddOp Term}.
Term          = Factor {MulOp Factor}.
Factor        = Designator ["(" [ExprList] ")"] | number | character | string | NIL | Set | "(" Expr ")" | "~" Factor.
Set           = "{" [Element {"," Element}] "}".
Element       = Expr [".." Expr].
Relation      = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp         = "+" | "-" | OR.
MulOp         = "*" | "/" | DIV | MOD | "&".
Designator    = Qualident {"." ident | "[" ExprList "]" | "^" | "(" Qualident ")"}.
ExprList      = Expr {"," Expr}.
IdentList     = IdentDef {"," IdentDef}.
Qualident     = [ident "."] ident.
IdentDef      = ident ["*" | "-"].

कार्यान्वयन

ईटीएच द्वारा बनाए गए अनुरक्षित ओबेरॉन-2 कंपाइलर्स में विंडोज, लिनक्स, सोलारिस (ऑपरेटिंग सिस्टम), मैकओएस के संस्करण में सम्मलित होते हैं।

ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और मैक ओएस एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे माइकल स्पाइवी द्वारा बनाया जाता है अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।[4][5]

मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 लेक्स (सॉफ्टवेयर) स्कैनर और वाईएसीसी पार्सर है। यह संस्करण 1.4 पर होते है।

देशी ओबेरॉन नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित होते है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।

ETHZ में कुछ साधारणतयः .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क या .NET का कार्यान्वयन भी विकसित किया गया है।

प्रोग्रामर का खुला कार्यक्षेत्र (पाउ!)[6] एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह माइक्रोसाॅफ्ट विंडोज निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है, जिसे मुख्य रूप से कंपाइलर ओबेरॉन -2 में लिखा गया है।

जावा से ओबेराॅन के कंपाइलरr (JOB) को रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स (बाईटकोड) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।

ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर कार्यक्रम जनरेशन बनाने के लिए जीएनयू संकलक संग्रह (GCC) टूलचेन का उपयोग करके C में संकलित करता है।

ओबेरॉन स्क्रिप्ट एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का जावास्क्रिप्ट में अनुवाद करता है। इसका कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से काॅल किया जा सकता है।

XDS मोडुला2/ओबेरान2 एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली होती है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध होते है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।

ओबेरॉन रिवाइवल ओबेरॉन 2 और कंपोनेंट पास्कल (ब्लैकबॉक्स घटक बिल्डर) को लिनक्स और विन32 में लाने की एक परियोजना होती है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध किया जाता था और यह मूल रूप से केवल माइक्रोसॉफ़्ट विंडोज़ पर चलता था।

Xओबेरान पावर पीसी के लिए एक रीयल-टाइम ऑपरेटिंग सिस्टम है, जिसे ओबेरॉन-2 में लिखा गया है।

पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को ओबेरॉन सिस्टम को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।[7]







कीको बायटेकोड

ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।[4][5] उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह उपयोग में लाया जाता हैं इसके लिए ओ-कोड, पी-कोड, आदि देखें।

ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर पहले मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सके या केवल -इन-टाइम कंपाइल के लिए उपयोग किया जा सके।

यह भी देखें

संदर्भ

  1. "Related Reading". Dr. Dobb's.
  2. Pfister, Cuno (2001). "What's New in Component Pascal (changes from Oberon-2 to CP)" (PDF). Oberon microsystems. Archived from the original (PDF) on 2011-05-15. Retrieved 10 January 2007.
  3. Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)
  4. 4.0 4.1 डॉ. माइकल स्पाइवी। कीको की विशिष्टता
  5. 5.0 5.1 Dr. Michael Spivey. "Design overview for OBC: The Keiko Abstract Machine". quote: "The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
  6. Collingbourne, H. (February 2000). "What Pascal's inventor did next". PC Plus. No. 160.
  7. Crelier, Régis (1994). Separate Compilation and Module Extension (Doctoral Thesis). ETH Zurich. doi:10.3929/ethz-a-000945227. hdl:20.500.11850/141604. Retrieved 18 November 2018.

ओबेरॉन और ओबेरॉन -2 का विकास

विस्तृत कागजात

किताबें

बाहरी संबंध