Интернет магазин китайских планшетных компьютеров |
||
Компьютеры - Оберон (язык программирования) - История языка30 марта 2011Оглавление: 1. Оберон (язык программирования) 2. История языка 3. Концепции программирования 4. Влияние Оберона на другие языки 5. Языки семейства Oberon 6. Интересные факты Основой для Оберона послужил язык Модула-2, выросший из Паскаля,. Целью проекта Никлауса Вирта и Юрга Гуткнехта в 1986-89 гг. было создание с нуля обозримой и надежной операционной системы для однопользовательской рабочей станции. Для реализации этого проекта в 1988 году Никлаусом Виртом был спроектирован язык программирования высокого уровня общего назначения, также названный Оберон. В 1989 году в Швейцарской высшей технической школе Цюриха была выпущена первая реализация Оберона для процессоров семейства NS32000. Он был создан в качестве компонента операционной среды Оберон. Этот компилятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим объёмом около 4000 строк и сам себя компилирует за 15 секунд на компьютере с процессором NS32532. Язык ОберонНововведения
Никлаус Вирт Язык сохранил основные черты синтаксиса Модулы и был объектным расширением. Это позволило отказаться от механизма вариантных записей Модулы, являющихся отступлением от первоначальной строгой статической типизации, что дало возможность ввести механизм автоматического управления памятью сборку мусора: из языка исключена возможность освобождения динамически выделенной памяти с помощью особого оператора, а вместо него сама среда исполнения содержит модуль, возвращающий неиспользуемую память системе. Автоматическое управление памятью является средством повышения надёжности программ с динамическими структурами данных, так как исключает человеческие ошибки, свойственные, например, таким языкам, как С/C++. Упрощение синтаксисаЧтобы добиться максимальной надёжности и производительности трансляции, было предпринято значительное упрощение языка за счёт его отказа от средств, которые были сочтены ненужными, либо усложняли компилятор без достаточного оправдания с точки зрения производительности, либо были достаточно сложны, чтобы быть отправленными во внешние библиотеки, либо плохо совмещались с механизмами модульности и автоматического управления памятью: записи с вариантами, перечислимые типы, типы-диапазоны, множества общего вида, беззнаковый целый тип, локальные модули, модули определений, списки экспорта, оператор for, прежний вариант оператора with, специальный синтаксис определения главной программы. Рудиментарные средства поддержки параллельного программирования, имевшиеся в Модуле-2, не вошли в язык, так как он обслуживал однопользовательскую операционную систему. В целях упрощения отказались от обработки исключений. Было упрощено описание массивов, ограничено использование указателей указатели могут существовать только на записи и массивы, в списках импорта указывается только импортируемый модуль, а при использовании импортированных имён требуется обязательная квалификация. В статье «От Модулы к Оберону» Вирт подробно прокомментировал причины удаления каждого из элементов. Из соображений «достаточного минимума» в язык не были включены в качестве явного синтаксического понятия методы, так как этот механизм в самом общем виде легко смоделировать, создавая в объектах поля процедурного типа и присваивая им процедуры, соответствующие методам. Таким образом, в Обероне минимальными средствами поддерживается объектно-ориентированное программирование для упрощения процесса трансляции кода и ускорения этого процесса. Благодаря внесённым изменениям, Оберон стал синтаксически проще. Описание его синтаксиса поместилось на одной странице, полное описание языка занимает около 20 страниц, что вдвое меньше, чем описание Модулы-2. Оберон является если не минимальным, то, во всяком случае, одним из самых малых по объёму универсальных языков программирования высокого уровня. Синтаксис в РБНФСинтаксис «Оберона-2» отличается компактностью. Он определён в следующих 33 предложениях РБНФ: Модуль = MODULE идент ";" ПослОбъявл END идент ".". СписокИмпорта = IMPORT идент {"," идент} ";". ПослОбъявл = { CONST {ОбъявлКонст ";" } | TYPE {ОбъявлТипа ";" } | VAR {ОбъявлПерем ";" }} {ОбъявлПроц ";" | ОпережающееОбъяв";"}. ОбъявлКонст = ИдентОпр "=" КонстВыраж. ОбъявлТипа = ИдентОпр "=" Тип. ОбъявлПерем = СписокИдент ":" Тип. ОбъявлПроц = PROCEDURE ИдентОпр ";" ПослОбъявл END идент. ОпережающееОбъяв = PROCEDURE "^" ИдентОпр . ФормальныеПарам = "" . СекцияФП = идент {"," идент} ":" Тип. Приемник = "". Тип = УточнИдент | ARRAY OF Тип | RECORD СписокПолей {";" СписокПолей} END | POINTER TO Тип | PROCEDURE . СписокПолей = . ПослОператоров = Оператор {";" Оператор}. Оператор = [ Обозначение ":=" Выраж | Обозначение | IF Выраж THEN ПослОператоров {ELSIF Выраж THEN ПослОператоров} END | CASE Выраж OF Вариант {"|" Вариант} END | WHILE Выраж DO ПослОператоров END | REPEAT ПослОператоров UNTIL Выраж | FOR идент ":=" Выраж TO Выраж DO ПослОператоров END | LOOP ПослОператоров END | WITH Охрана DO ПослОператоров {"|" Охрана DO ПослОператоров} END | EXIT | RETURN ]. Вариант = . МеткиВарианта = КонстВыраж . Охрана = УточнИдент ":" УточнИдент. КонстВыраж = Выраж. Выраж = ПростоеВыраж . ПростоеВыраж = Слагаемое {ОперСлож Слагаемое}. Слагаемое = Множитель {ОперУмн Множитель}. Множитель = Обозначение | число | символ | строка | NIL | Множество | "" | " ~ " Множитель. Множество = "{" "}". Элемент = Выраж . Отношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS. ОперСлож = "+" | "-" | OR. ОперУмн = "*" | "/" | DIV | MOD | "&". Обозначение = УточнИдент {"." идент | "" | "^" | ""}. СписокВыраж = Выраж {"," Выраж}. СписокИдент = ИдентОпр {"," ИдентОпр}. УточнИдент = идент. ИдентОпр = идент . Основные элементыПрограмма на Обероне представляет собой набор модулей. В общем виде модуль имеет вид: MODULE Имя; IMPORT СписокИмпорта; Определения; BEGIN Операторы END Имя. Список импорта определяет, из каких модулей будут импортированы внешние имена. Определения включают определения типов, процедур, функций, переменных, констант. При этом определения имён, отмеченных звёздочкой, экспортируютя данным модулем, то есть будут видны другим модулям, импортирующим данный. В Обероне-2 допустимо также помечать имена знаком минус, в этом случае они экспортируются в режиме «только для чтения». Тело модуля исполняется при его загрузке. В Компонентном Паскале внутри тела модуля появилась возможность добавить секцию BEGIN Операторы CLOSE Операторы END Имя. Здесь операторы, расположенные между Создаваемые программистом типы данных ограничены следующим набором: типы-массивы Синтаксис внутренней части программы достаточно традиционен и прост. Язык поддерживает традиционный набор конструкций: условный оператор Парадигма объектно-ориентированного программирования поддерживается механизмом расширения записей. По сути, каждый тип запись это описание класса, а поля записи это данные-члены класса. В исходном Обероне методов нет вообще. Механизм методов может быть использован путём объявления в записи полей процедурного типа, которым при создании экземпляра класса присваиваются конкретные процедуры. Вызов таких процедур производится традиционным способом обращения к полю записи, по умолчанию процедура не знает об экземпляре класса, для которого она была вызвана, и если такие сведения ей необходимы, ссылка на экземпляр должна быть передана явно. Отсутствие явно описываемых методов было одним из качеств исходного Оберона, вызвавшего критику привыкших к традиционным гибридным языкам программистов. С другой стороны, предлагаемый Обероном механизм позволяет реализовать всё, что реализуемо традиционными средствами языков с методами, и даже более того в Обероне каждый экземпляр класса может иметь собственный вариант метода, тогда как при описании методов как части класса все экземпляры работают с одним вариантом метода. В Обероне-2 методы были всё-таки введены. Методы описываются отдельно от типа запись, с указанием типа, с которым они связаны. Новый тип запись может быть объявлен как расширение существующего. В этом случае тип, который расширяется, указывается в описании записи в скобках после ключевого слова Просмотров: 5528
|