Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 16 июн 2025, 08:07

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Простые типы
СообщениеДобавлено: 20 сен 2017, 16:32 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Как объявить в КП тип вроде этого:
Код: "OBERON"
  1. TYPE фигура = (прямоугольник, квадрат, эллипс, круг);


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 20 сен 2017, 18:02 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Цитата:
Почему из Оберона исключены перечисления?

Перечисление (enumeration) -- довольно удобный тип, введенный в языке Паскаль (1970) и сохраненный в Modula-2 (1979). Тем не менее, в Обероне он исключен.

Причин несколько: во-первых, при введении в Обероне нового механизма расширения типов выясняется, что этот тип становится особым -- его нельзя расширять. Кроме того, поскольку тип перечисление определяется совокупностью идентификаторов констант, то при экспорте требуется передавать все значения (хотя наличие спецификаторов экспорта позволяет экспортировать значения на выбор). Это ввело бы ненужную путаницу. Вирт принял решение отказаться от перечислений, считая, что вполне достаточно в случае острой необходимости имитировать такой тип набором констант.

Тип перечисление -- слишком простое средство, чтобы оно могло выйти из-под контроля. Однако, оно не позволяет распространять расширяемость за пределы модуля. И либо нужно ввести средство для расширения типа перечисление, либо же от типа перечисление надобно отказаться. Причина, по которой мы выбрали второй путь -- путь радикального решения -- кроется в том, что во все возрастающем числе программ непродуманное использование перечислений (и диапазонов) ведет к демографическому взрыву среди типов, что, в свою очередь, ведет не к ясности программ, а к их многословию. В связи с использованием экспорта и импорта перечисления приводят к исключению из правил, и согласно ему импорт идентификатора типа также приводит к автоматическому импорту всех связанных с типом идентификаторов констант. Это исключение нарушает концептуальную простоту и создает для реализаторов языка неприятные проблемы.

Niklaus Wirth. From Modula to Oberon (1988)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 21 сен 2017, 17:59 
Не в сети

Сообщения: 108
Zorko писал(а):
Цитата:
Почему из Оберона исключены перечисления?
Niklaus Wirth. From Modula to Oberon (1988)

А что такого плохого в "демографическом взрыве среди типов" и почему это не ведет "к ясности программ"? По-моему опыту все ровно наоборот: детальная типизация повышает ясность программ и позволяет компилятору меня поправлять.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 21 сен 2017, 21:17 
Не в сети

Сообщения: 3
будете спорить с создателем языка? В конце концов и транслятор со сборки дотнета в з80 можно написать (с тучей оговорок и подгонок, с нуля ллвм как бы не проще окажется)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 22 сен 2017, 14:13 
Не в сети

Сообщения: 146
Len писал(а):
Как объявить в КП тип вроде этого:
Код: "OBERON"
  1. TYPE фигура = (прямоугольник, квадрат, эллипс, круг);

Например, так.
Код: "OBERON"
  1.  
  2. TYPE
  3. фигура = RECORD END;
  4. прямоугольник = RECORD(фигура) END;
  5. квадрат = RECORD(фигура) END;
  6. эллипс = RECORD(фигура) END;
  7. круг = RECORD(фигура) END;
  8. ..
  9. IF ф IS круг THEN
  10.  

С учётом того, что, скорее всего, перечисление Вам нужно не само по себе, а с некоторым кодом, то вполне возможно, что нужно именно что-то вроде этого.
Также на примере видна проблема классических перечислений. Фигуры не исчерпываются перечисленными, и если в другом модуле захочется расширить список, то сделать это будет проблематичным без изменения 1-го модуля.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 22 сен 2017, 15:21 
Не в сети

Сообщения: 108
Wingtiger писал(а):
будете спорить с создателем языка?


А что, есть некое неписанное правило не спорить с создателями языка?

Wingtiger писал(а):
В конце концов и транслятор со сборки дотнета в з80 можно написать (с тучей оговорок и подгонок, с нуля ллвм как бы не проще окажется)


Не понял к чему это...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 22 сен 2017, 21:01 
Не в сети

Сообщения: 3
vlad писал(а):
А что, есть некое неписанное правило не спорить с создателями языка?
не нравится - не используй, есть множество других языков.

vlad писал(а):
Wingtiger писал(а):
В конце концов и транслятор со сборки дотнета в з80 можно написать (с тучей оговорок и подгонок, с нуля ллвм как бы не проще окажется)
Не понял к чему это...
сделать можно что угодно, но нужно ли?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 23 сен 2017, 05:00 
Не в сети

Сообщения: 108
Wingtiger писал(а):
не нравится - не используй, есть множество других языков.


Ну вот и поговорили...

Wingtiger писал(а):
сделать можно что угодно, но нужно ли?


Применительно к перечислениям есть хороший пример Джавы. Там тоже твердили мантру про "ненужность" и придумывали всякие теоретические обоснования, а IDE в один клик генерили болванки для труЪ ООП перечислений (каждое значение - объект). Пока C# на пятки не стал наступать, в котором все было и отлично работало, потому что он "как Джава, только лучше". После чего мантры выкинули, а перечисления успешно добавили в язык :)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Простые типы
СообщениеДобавлено: 23 сен 2017, 13:57 
Не в сети

Сообщения: 3
а вы применение языков не путаете?


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club