Кіріспе
Оберон 2 – бастапқы Оберон бағдарламалау тілінің кеңейтімі, ол шектеулі рефлексивті бағдарламалау (рефлексия) және объектіге бағытталған бағдарламалау мүмкіндіктерін, ашық массивтерді көрсеткіштік базалық типтер ретінде, тек оқуға арналған өріс экспортын және Modula 2-ден FOR циклын қайта енгізеді. Ол 1991 жылы Цюрихтегі ETH-де Никлаус Вирт және ХансПетер Мёссенбёк әзірледі, қазір ол Австрияның Линц университетінің Жүйелік бағдарламалық құралдар институтында (SSW) жұмыс істейді. Оберон 2 – Оберонның суперсеті, оған толыққанды үйлесімді және Object Oberon-ның жаңа дизайны. Оберон 2 шектеулі рефлексияны және интерфейстері немесе миксиндері жоқ бір мұрагерлікті ("типті кеңейту") Oberon-нан алды, бірақ тиімді виртуалды әдістерді ("типке байланысты процедуралар") қосты. Әдіс шақырулары C++ стиліндегі виртуалды әдіс кестелерін пайдаланып, орындалу кезінде шешілді. Smalltalk сияқты толыққанды объектіге бағытталған тілдермен салыстырғанда, Оберон 2-де негізгі дерек типтері мен сыныптар объектілер емес, көптеген операциялар әдістер емес, хабар алмасу жоқ (эмуляциялауға болады, мысалы, ETH Oberon-де көрсетілгендей, рефлексия және хабар кеңейту арқылы), және полиморфизм ортақ сыныптың кіші сыныптарымен шектеледі (Python-дағы қазтай тестілеу сияқты емес, және Java-дағыдай интерфейстерді анықтау мүмкін емес). Оберон 2 объекті немесе сынып деңгейінде инкапсуляцияны қолдамайды, бірақ осы мақсатта модульдерді пайдалануға болады. Оберон 2-дегі рефлексия метаобъектілерді пайдаланбайды, орындалатын бинарлық файлдарға компиляцияланған және типтерді және/немесе процедураларды анықтайтын модульдерде ашылған типтік сипаттамалардан оқиды. Егер осы құрылымдардың форматы тіл деңгейінде көрсетілсе (мысалы, ETH Oberon үшін), кітапхана деңгейінде рефлексияны жүзеге асыруға болады. Осылайша, тілдік кодты өзгертпей, оны негізінен кітапхана деңгейінде жүзеге асыруға болады. Шындығында, ETH Oberon тіл және кітапхана деңгейіндегі рефлексия мүмкіндіктерін кеңінен пайдаланады. Оберон 2 Java сияқты қоқыс жинау үшін кіріктірілген орындалу уақыты қолдауын қамтамасыз етеді және C және C++-қа тән стек және массив шегінен асып кету проблемаларын және жадты қолмен басқару мәселелерін жоятын шектеулерді және массив индексін тексеруді жүзеге асырады. Модульдік архитектура арқылы символ файлдарын және атау кеңістіктерін пайдалана отырып, жеке компиляция жылдам қайта құруды қамтамасыз етеді, өйткені тек өзгертілген интерфейстері бар модульдерді қайта компиляциялау қажет. Компонент Паскаль тілі – Оберон 2-нің жетілдірілген түрі.
Oberon 2 is an extension of the original Oberon programming language that adds limited reflective programming (reflection) and object oriented programming facilities, open arrays as pointer base types, read only field export, and reintroduces the FOR loop from Modula 2. It was developed in 1991 at ETH Zurich by Niklaus Wirth and Hanspeter Mössenböck, who is now at Institut für Systemsoftware (SSW) of the University of Linz, Austria. Oberon 2 is a superset of Oberon, is fully compatible with it, and was a redesign of Object Oberon. Oberon 2 inherited limited reflection and single inheritance ("type extension") without the interfaces or mixins from Oberon, but added efficient virtual methods ("type bound procedures"). Method calls were resolved at runtime using C++ style virtual method tables. Compared to fully object oriented languages like Smalltalk, in Oberon 2, basic data types and classes are not objects, many operations are not methods, there is no message passing (it can be emulated somewhat by reflection and through message extension, as demonstrated in ETH Oberon), and polymorphism is limited to subclasses of a common class (no duck typing as in Python, and it's not possible to define interfaces as in Java). Oberon 2 does not support encapsulation at object or class level, but modules can be used for this purpose. Reflection in Oberon 2 does not use metaobjects, but simply reads from type descriptors compiled into the executable binaries, and exposed in the modules that define the types and/or procedures. If the format of these structures are exposed at the language level (as is the case for ETH Oberon, for example), reflection could be implemented at the library level. It could thus be implemented almost entirely at library level, without changing the language code. Indeed, ETH Oberon makes use of language level and library level reflection abilities extensively. Oberon 2 provides built in runtime support for garbage collection similar to Java and performs bounds and array index checks, etc., that eliminate the potential stack and array bounds overwriting problems and manual memory management issues inherent in C and C++. Separate compiling using symbol files and namespaces via the module architecture ensure fast rebuilds since only modules with changed interfaces need to be recompiled. The language Component Pascal is a refinement (a superset) of Oberon 2.
Түрге байланысты рәсімдер
Процедуралар жазбаға (немесе сілтемеге) байланыстырылуы мүмкін. Олар объектіге бағытталған бағдарламалаудағы нысан әдістерімен мағынасы бірдей.
Тек оқу үшін экспорттау
Экспортталған айнымалылар мен жазба өрістеріне тек оқуға рұқсат етуге болады. Бұл көріну белгісімен (" ") көрсетіледі.
Ашық массивтер
Бұрын тек формалды параметрлердің типтері ретінде ғана жариялануға болатын ашық массивтерді енді көрсеткіштің негізгі типтері ретінде жариялауға болады.
FOR мәлімдемесі
Паскаль және Modula 2 тілдеріндегі FOR операторы Oberon жүйесінде іске асырылмады. Ол Oberon 2-де қайтадан қолдануға енгізілді.
Орындау уақытында түрін тексеру
Oberon 2 объектілердің динамикалық түрін тексеру үшін бірнеше механизмдерді ұсынады. Мысалы, егер Bird объектісі Duck немесе Cuckoo түріне жаратылса, Oberon 2 бағдарламашыға орындалу барысында объектінің нақты түріне сәйкес әрекет етуге мүмкіндік береді. Бірінші, ең көп қолданылатын тәсіл – тип байланыстыру жүйесіне сүйену. Екінші тәсіл – WITH операторын пайдалану, ол айнымалының динамикалық подтипін тікелей тексеруге мүмкіндік береді. Екі жағдайда да, подтип анықталғаннан кейін бағдарламашы осы подтипке сәйкес келетін типтік процедураларды немесе айнымалыларды қолдана алады. Осы тәсілдердің мысалдары төменде көрсетілген. Oberon 2-де қолданылатын WITH операторының түрі Pascal және Modula 2-дегі WITH операторынан өзгеше екенін ескеріңіз. Жазу өрістеріне қолжетімділікті қысқартудың бұл әдісі Oberon немесе Oberon 2-де іске асырылмаған.
IS операторы
Үшінші тәсіл IS операторын пайдаланып іске асыруға болады. Бұл тең (=), үлкен (>), сияқтыларымен бірдей басымдыққа ие қатынас операторы, бірақ ол динамикалық түрді тексереді. Дегенмен, басқа екі тәсілден өзгеше, ол бағдарламашыға анықталған субтипке қол жеткізуге мүмкіндік бермейді.
Қолданылу
ETH-тің Oberon 2 компиляторлары Windows, Linux, Solaris және macOS нұсқаларын қамтиды. Oxford Oberon 2 компиляторы түпкілікті машиналық кодқа компиляцияланады және Windows, Linux және macOS жүйелерінде JIT-ті пайдалана алады. Оны Майк Спиви жасап, күтіп-ұстайды және Keiko виртуалды машинасы қолданылады. Ұлыбританияның Манчестер университетінің Стивен Дж. Беван жасаған Oberon 2 Lex сканері мен Yacc талдаушысы бар, ол Мессенбок пен Вирт еңбегіне негізделген. Оның нұсқасы 1.4. Операциялық жүйені қамтитын және PC класындағы аппараттық құрылғыда тікелей жүктелетін Native Oberon деп аталатын нұсқа бар. ETHZ-де Oberon-ның NET нұсқасы жасалған, оған шағын NET-ке қатысты кеңейтімдер қосылған. Бағдарламашының ашық жұмыс ортасы (POW!) – өте қарапайым интеграцияланған әзірлеу ортасы, ол редактормен, байланыстырушымен және Oberon 2 компиляторымен бірге келеді. Бұл Windows-қа орындалатын файлдарға компиляцияланады. Толық бастапқы код ұсынылады; компилятор Oberon 2 тілінде жазылған. Java to Oberon компиляторы (JOB) Ресейдің Вологда университетінде жазылған. Ол Java кластық файлдар (байт-код) түрінде объектілік кодты шығарады. Кейбір JOB-қа тән, Java-мен үйлесімді кластар ұсынылады, бірақ олар Oberon сияқты компоненттік иерархияны қолданады. Optimizing Oberon 2 компиляторы бағдарлама жасау үшін GNU Compiler Collection (GCC) құралдар жинағын пайдалана отырып, C тіліне компиляцияланады. Oberon Script – Oberon тілін толық JavaScript тіліне аударатын компилятор. Компилятор JavaScript тілінде жазылған, сондықтан оны веб-беттерден Oberon тілінде жазылған скрипттерді өңдеу үшін шақыруға болады. XDS Modula2/Oberon2 – Ресейдің Новосибирск қаласындағы Excelsior LLC компаниясының әзірлеген жүйесі. Ол Intel Pentium процессорлары үшін оптимизациялық компиляторды немесе платформааралық бағдарламалық жасақтаманы әзірлеу үшін "C арқылы" аудармашыны қамтиды. Windows және Linux жүйелері үшін қолжетімді. Компилятор Oberon 2 тілінде жазылған және өзін-өзі компиляциялайды. Oberon Revival – Oberon 2 және Component Pascal (BlackBox Component Builder) бағдарламаларын Linux және Win32 жүйелеріне енгізу жобасы. BlackBox-тың Linux порты бұрын қолжетімді болған жоқ және ол бастапқыда тек Microsoft Windows жүйесінде жұмыс істеді. XOberon – PowerPC үшін Oberon 2 тілінде жазылған нақты уақыт опералық жүйесі. Портативті Oberon 2 компиляторы (OP2) Oberon жүйесін коммерциялық платформаларға көшіру үшін жасалған.
Кейко байт коды
Оберон-2 Кеико виртуалды машинасына бағытталған. Мысалы, басқа тілдердің компиляторлары сияқты (O коды, p коды т.б. қараңыз), Oxford Oberon 2 компиляторы алдымен байт-код интерпретаторымен немесе дереу компиляциялау арқылы орындалатын аралық байт-кодқа (Keiko bytecode) компиляциялайды.
the Oxford Oberon 2 compiler first compiles to an intermediate bytecode (Keiko bytecode) which can be interpreted with a byte code interpreter or use just in time compilation.