OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 11 Август, 2025 21:32

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




Начать новую тему Ответить на тему  [ Сообщений: 69 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 25 Май, 2007 09:46 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4727
Откуда: Россия, Орёл
Ivor писал(а):
Там есть одно большое расширение, которое достаточно сильно меняет язык - исключения.

:) :) :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 25 Май, 2007 09:49 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Ну ладно, не столь сильно язык, сколь технику программирования


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 26 Июль, 2007 13:33 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Перечитал тему и «много думал»...
Хочу высказать пару мыслей, никого конкретно не желая обидеть или задеть...

С одной стороны спрашивают: «зачем убрали перечисления»? С другой отвечают что-то про расширения. Первые сопоставляют описания просто констант и описания типов перечислений и говорят про индексы массивов... Вторые – показывают, как можно обёртки делать, «эмулирующие» перечисления...

Но я просто хочу остановиться и спокойно порассуждать.

Что есть тип перечисления? ЧТО мы описываем элементами перечисления в тех языках, которые позволяют это делать? И – при чём здесь множества и адресация элементов массивов?

Начну с последнего.
Вы не замечали, что практически все языки, предоставляющие возможность описывать перечисления, позволяют также назначать конкретные значения перечислителям? Например, как в Си:
Код:
enum AAA { One = -113, Two = 0, Three = -1000000, Four = 16, Five, Six, Seven = 0 };

Значит, идя от общего случая, совершенно не очевидно, что перечислители будут иметь возрастающие значения, и уж тем более – различаться строго на единицу! Можем ли мы, в этом случае, предъявлять претензии к оберонам в том, что вот, мол они, не позволяют нам использовать значения переменных типа перечисления в качестве индексов массивов, когда сами такие «удобства» являются всего лишь ограниченным частным случаем их использования? Более того, на мой взгляд, как раз отсутствие возможности явного задания значений перечислителей при описании перечисления в классическом паскале, - вот был настоящий недостаток! :о)
Отсюда же – и априорная несопоставимость и неравномочность операций pred-succ и inc-dec относительно перечислений и целых чисел. (Хотя, например, уже в Модуле-2 для перехода по значениям перечислителей служили процедуры INC и DEC)

Давайте сделаем «шаг назад» и внимательней рассмотрим перечисления...

Что они собой представляют?
Если хорошенько присмотреться, то можно увидеть, что перечисления – это довольно ранний, частный способ описания объектов литералами. В некотором роде, любое перечисление – есть описание допустимого множества объектов, в которых «идентификатор» («ключ») объектов и «значение» объектов – совпадают. То есть, главное и единственное свойство элементов перечисления – способность быть отличимыми друг от друга в рамках одного (ограниченного!) множества. Естественным следствием такой постановки задачи явилось решение – использовать в качестве «ключа» целые числа, просто как самое удобное и подходящее множество (находящееся в ЭВМ «всегда под руками»)...
Заметьте, что, изначально, перечисления именно и служили в роли «ярлыков» для, например, полей признаков в записях с вариантами... Способность же использовать значения перечислителей в качестве индексов массивов – вторичное следствие представления значения перечислителей целыми числами и выполнения условия «последовательной счётности» этих значений.

Естественно, что нужны некоторые операции для работы с перечислениями. Про succ-pred я уже упомянул. Нужно ещё сравнение – для анализа и выбора варианта действия с носителем поля типа перечисления. Для последней операции можно использовать «многочисленнорастянутый» IF, но это было бы слишком громоздко. Во многих языках? В том числе и оберонах, есть вещь лучше – CASE. Причём, в оберонах у него ещё и «глубокий сакральный» смысл :о), напрямую связанный с вопросом так называемого «расширения перечисления»!

Пример:

Предположим, у нас есть некий библиотечный модуль...
Код:
MODULE A;
...
CONST
    enumAAA_1* = 1;
    enumAAA_2* = 12;
    enumAAA_3* = 987654321;
...
END A.

И есть ещё одна библиотека, содержащая модуль BA, импортирующий модуль А из первой библиотеки...
Код:
MODULE BA;
IMPORT A;
TYPE
     AnyType = POINTER TO EXTENSIBLE RECORD ... END;
...
PROCEDURE (this: AnyType) AnalizeEnumAAAValue* ( enumAAAValue : INTEGER );
BEGIN
    ...
    CASE  enumAAAValue OF
    | enumAAA_1 : DoSomethingOnenumAAA_1;
    | enumAAA_2 : DoSomethingOnenumAAA_2;
    | enumAAA_3 : DoSomethingOnenumAAA_3;
    END;
    ...
END  AnalizeEnumAAAValue;
...
END BA.

Причём, исходники BA нам не доступны! То, что я написал в виде кода некоего модуля второй библиотеки - «раскрытие семантики», просто то, что нам известно об A и BA.

Какое-то время мы совершенно успешно пользуемся и первой, и второй библиотекой.

Потом автор модуля A добавляет в свой модуль дополнительную константу:
Код:
MODULE A;
...
CONST
    ...
    enumAAA_4* = -1;
...
END A.

Является ли это для нас каким-то неудобством, в случае сохранения значения старых enumAAA_* ? Нет! Мы просто допишем дополнительную реакцию на добавленные значения.
Код:
MODULE OurModule;
IMPORT A, BA;
TYPE AnyTypeInherited = POINTER TO RECORD ( AnyType )  ... END;
...
PROCEDURE (this: AnyTypeInherited) AnalizeEnumAAAValue* ( enumAAAValue : INTEGER );
BEGIN
    ...
    CASE  enumAAAValue OF
    | enumAAA_4 : DoSomethingOnenumAAA_4;
    | enumAAA_1, enumAAA_2, enumAAA_3 : AnalizeEnumAAAValue^(  enumAAAValue );
    ELSE (* !!!!!!!!!!!!!!!!!!!!!!! *)
    END;
    ...
END  AnalizeEnumAAAValue;
...
END OurModule.

Более того, я вижу дополнительные преимущества. Если бы у нас всё-таки была возможность объявлять в оберонах «расширяемые» перечисления, то наша система просто перестала бы компилироваться, так, как САМ ТИП перечисления в модуле A стал уже ДРУГИМ.
А так мы просто расширили «набор ярлыков», способных обрабатываться в нашей программе.
Кроме того, та самая обероновская вкусность здесь и проявляется. В месте, где стоят в комментариях многочисленные восклицательные знаки. По сути дела, способность CASE в обероне прекращать аварийно программу в случае несовпадения проверяемого значения с описанными в вариантах проверок и показывают нам на недоработку проекта. В других языках, не смотря на то, что есть чёткое определение типа перечисления, нерассмотрение всех возможных значений ни к чему такому не приводит, есть там ELSE, или нет его...
В принципе, здесь получаются «сами по себе» хорошие проектные решения. Сторонняя библиотека с модулем BA работала «в рамках» тех знаний, что предоставлялись ей модулем A на момент её описания. Если библиотека с модулем A написана грамотно и аккуратно (сохранение заявленных и опубликованных изначально интерфейсов и расширяемая запись AnyType или аналогичная экспортируемая процедура-не метод обработки значений «перечисления»), то мы, как раз и имеем расширяемую систему. Просто модуль BA так и функционирует во «вселенной» понятий, существовавшей на момент его написания (известные интерфейсы), а мы уже расширяем функциональность нашей системы, дополняя её способностью обрабатывать случаи, не известные модулю BA, БЕЗ ЕГО ПЕРЕКОМПИЛЯЦИИ.
Однако, может так случиться, автор второй библиотеки не предоставил в открытый доступ процедуры (метода) обработки «перечисления». И в этом случае – мы «не в накладе» - просто потому, что мы и так не знали, что такая обработка имела место, а значит и ничего переделывать или добавлять не придётся... :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Четверг, 26 Июль, 2007 19:27 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4727
Откуда: Россия, Орёл
В модуле BA идентификаторы имеют вид А.enumAAA_1 :)

А вообще говоря, после изменения мудуля A (изменение интерфейса модуля) модули могут оказаться не совместимыми (что-то у меня в практике подобное встречалось, убейте - не помню :oops: )...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Четверг, 26 Июль, 2007 21:05 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Борис Рюмшин писал(а):
...

Текст на "КП" имел чисто иллюстративный характер. Объяснялось моё виденье причин отказа от перечислений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Четверг, 26 Июль, 2007 21:16 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Wlad писал(а):
Объяснялось моё виденье причин отказа от перечислений.

Да, видимо, це так и було... :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пятница, 27 Июль, 2007 01:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Перечитал тему и «много думал»...


Перечисления - это типизированные константы, объединенные вместе. Из "объединенности" можно получить какие-то удобства (типа inc/dec/switch) и возможно еще больше недостатков, но намного принципиальнее факт типизированности. Если бы в обероне были типизированные константы (или их аналоги), то и претензий к отсутствию перечислений (лично у меня) не было.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Пятница, 27 Июль, 2007 09:53 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Это всё ясно...
В Обероне атомарные типы находятся строго на уровне математической типизации (тип = множество допустимых значений + набор операций), не ниже (техническая типизация, с низкоуровневым доступом и приведениями, как в С) и не выше (абстрактная атомарная типизация, с возможностью определения новых типов как спецификации содержательной роли данных, как в Ада). Это и хорошо, и плохо, но это именно так, и прыгнуть на уровень абстрактной атомарной типизации не так просто - для компонентного языка, стремящегося к тому же к компактности. Абстрактная типизация выполняется в Обероне только через RECORD...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Пятница, 27 Июль, 2007 10:16 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1438
Кстати, есть один хак, позволяющий эмулировать типизированные целые.
Код:
TYPE MyConst* = POINTER TO LIMITED RECORD [untagged] END;
VAR a-,b-,c-:MyConst;
...
BEGIN
a:=SYSTEM.VAL(MyConst,1);
b:=SYSTEM.VAL(MyConst,2);

и даже подтипы
Код:
TYPE
   Handle* = POINTER TO ABSTRACT RECORD [untagged] END;
   FileHandle* = POINTER TO LIMITED RECORD (Handle) END;
PROCEDURE CloseHandle (object: Handle);
PROCEDURE CreateFile(...):FileHandle;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Пятница, 27 Июль, 2007 12:58 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Перечисления - это типизированные константы, объединенные вместе.

Что конкретно даёт факт наличия типа?
Кстати? - о каком типе вы говорите? - о типе самих констант или о типе, вводимом описанием перечисления?
Vlad писал(а):
Из "объединенности" можно получить какие-то удобства (типа inc/dec/switch)

А какое удобство можно получить от inc/dec если перечисление подобно описанному мной? Тем более, что практически во всех компиляторах Си/Си++ есть флаг выражения констант enum-ов int-ами... Ну не будет у вас неявного отображения между ними – и как вы их в индексах массивах примените (при условии, что значения констант подчиняются требованию «последовательной инкрементальности»)?
Vlad писал(а):
Если бы в обероне были типизированные константы (или их аналоги), то и претензий к отсутствию перечислений (лично у меня) не было.

А – в чём претензии? То, что вам дозволено константы перечисления Яблоки складывать с константами перечислением Вишни? Или – то, что константы перечисления ВремяПолёта позволено умножать на константы перечисления Скорость? :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Пятница, 27 Июль, 2007 16:30 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Wlad писал(а):
А – в чём претензии? То, что вам дозволено константы перечисления Яблоки складывать с константами перечислением Вишни? Или – то, что константы перечисления ВремяПолёта позволено умножать на константы перечисления Скорость? :о)


А что, было бы хорошо, если бы каждому абстрактному типу (скорость, время, масса и т.п.) еще и сопоставлялась единица измерения, а компилятор проверял бы, чтобы килограммы не складывались с граммами или километрами, а километры дорог с километрами заборов. :D Разве не в этом вся прелесть типизации? Тип должен быть ближе к жизни, а проблемы разработчиков компиляторов не должны волновать программистов - ведь уже 21 век, и компиляция производится на достаточно мощных компьютерах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Пятница, 27 Июль, 2007 20:38 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Сергей Прохоренко писал(а):
...

Чё-т я не пойму, а что, определить соответствующие классы и методы (или утилиты классов) – вера не позволяет? :о)
Или очень хочеца, что бы именно алгебраическая запись была? Это – бзик такой?
Ну дык – вам не повезло... Как раз в КП это не реализовали, а вот в АО – есть... Тока я не разу не видел в реальных системах (акромя – только, как в книгах по Си++) многочисленное применение перекрытий привычных алгебраических операций... Даже в командах навороченных плюсистов... Наверное потому, что, как один из них признался, - «шо я – враг себе? – мозги свернуть и застрелиться, после введения в систему более трёх типов с такими перекрытыми операциями!»... :о)
Понимаете, такие игрушки хороши в качестве иллюстраций на игрушечных экзамплах в учебной литературе, но, в реальности, даже в Си-шарпе один мой знакомый чуть мозгой не двинулся, пока не УЗРЕЛ (НАКОНЕЦ!) «+=» при добавлении реакции на событие в контроле... Или – другой случай. Ещё один, не последних способностей, человек реализовал такую библиотеку для обработки данных встроенного GPS... А потом постоянно натыкался на то, что сам постоянно объявлял временные (и не только) переменные (долготы, широты, скорости, склонения, координаты в различных системах) через простые типы и, таки, – напарывался на ошибки в реализациях вычислений... Кроме того, может быть достаточно сложная цепочка неочевидных преобразований-приведений типов данных, при которых вообще не известно и не понятно, что будет вызвано вместо перекрытых оперций... :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Пятница, 27 Июль, 2007 21:44 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Владимир, продолжите свою мысль для конкретного образца - Ады, с субтипизацией и расширением для атомарных типов. "Как там" - это хорошо и плохо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Пятница, 27 Июль, 2007 22:13 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Илья Ермаков писал(а):
Владимир, продолжите свою мысль для конкретного образца - Ады, с субтипизацией и расширением для атомарных типов. "Как там" - это хорошо и плохо?

Как по мне – так – лучше не бывает! :о)
Потому, что на примере Адовского решения можно видеть «отделённость» способов достаточно широчайшего класса «просто счётных» задач, от того, что есть уже «несколько выше» (ООП). Объяснения и понятия type/subtype достаточно быстро доходят и применяются неспециалистами в программировании, а вот «тащить весь воз» ООП для втискивания в их мозги – ой-какая задача трудная! Эти люди СЧИТАЮТ на этом языке (фортран-подход). А не ПРОЕКТИРУЮТ. Пара примеров (с теми же типами для разных размерностей (совместимости) и подтипами для явного указания правил проверок на диапазоны значений) и люди концепцию типа/подтипа атомарных типов не только принимают, но и довольно урчат при этом! :о)
Здесь у Ады очень большое преимущество в «дозировке» и «уровневости» знаний, которые можно предоставлять обучаемому специалисту, в зависимости о его запросов и квалификации...
Хотя вот дальше – реализация ООП в Аде – на мой взгляд, это нечто сильно замутнёное в плане синтаксических конструкций! Но это - та же болезнь, что и у Си++: обеспечение совместимости с предками... :о( Хотя это, при всех её остальных плюсах, не столь важно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Почему убрали перечисления.
СообщениеДобавлено: Суббота, 28 Июль, 2007 00:36 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Trurl писал(а):
Кстати, есть один хак, позволяющий эмулировать типизированные целые.


На такой манер можно и без хаков - завести отдельный тип и экспортировать его экземпляры. Только громоздко все это...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Суббота, 28 Июль, 2007 03:23 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Vlad писал(а):
Перечисления - это типизированные константы, объединенные вместе.

Что конкретно даёт факт наличия типа?


На такой фундаментальный вопрос я не готов ответить :) Ибо мой ответ будет жалок на фоне того, что уже написали о типизации супербизоны программирования :)

Wlad писал(а):
Кстати? - о каком типе вы говорите? - о типе самих констант или о типе, вводимом описанием перечисления?


О типе, вводимом описанием перечисления.

Wlad писал(а):
Vlad писал(а):
Из "объединенности" можно получить какие-то удобства (типа inc/dec/switch)

А какое удобство можно получить от inc/dec если перечисление подобно описанному мной?


Итерирование по элементам перечисления.

Vlad писал(а):
Тем более, что практически во всех компиляторах Си/Си++ есть флаг выражения констант enum-ов int-ами...


Причем здесь подобные особенности реализации?

Vlad писал(а):
Ну не будет у вас неявного отображения между ними – и как вы их в индексах массивах примените (при условии, что значения констант подчиняются требованию «последовательной инкрементальности»)?


Зачем мне применять enum в качестве индексов массива? Если мне нужен типизированный индекс, то это будет не enum, а типизированный индекс (с операциями inc/dec, но не определяющий каких-либо констант).

Wlad писал(а):
Vlad писал(а):
Если бы в обероне были типизированные константы (или их аналоги), то и претензий к отсутствию перечислений (лично у меня) не было.

А – в чём претензии? То, что вам дозволено константы перечисления Яблоки складывать с константами перечислением Вишни?
Или – то, что константы перечисления ВремяПолёта позволено умножать на константы перечисления Скорость? :о)


Контроль типов в операциях это хорошо, но это уже следующий уровень. Претензия к тому, чтобы хотя бы не путать яблоки с вишней, и время со скоростью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Суббота, 28 Июль, 2007 19:10 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Сергей Прохоренко писал(а):
... а компилятор проверял бы, чтобы килограммы не складывались с граммами или километрами, а километры дорог с километрами заборов.


А как насчет умножаться или делиться? Километры на часы.

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


Проблемы разработчиков компиляторов вроде бы не имеют отношения к мощности компьютеров-то... вспомним Зоннон 8))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Суббота, 28 Июль, 2007 20:23 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Цитата:
info21 писал(а):
Сергей Прохоренко писал(а):
... а компилятор проверял бы, чтобы килограммы не складывались с граммами или километрами, а километры дорог с километрами заборов.


А как насчет умножаться или делиться? Километры на часы.


Никаких проблем. Если переменная Скорость имеет размерность км/ч, то ей можно присвоить результат деления переменной (или типизированной константы) Расстояние (в километрах) на переменную (или типизированную костанту) Время (в часах), но никак не результат деления Расстояние/Сила_тока, имеющий, например, размерность метр/ампер.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Суббота, 28 Июль, 2007 20:50 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Wlad писал(а):
Кстати? - о каком типе вы говорите? - о типе самих констант или о типе, вводимом описанием перечисления?
О типе, вводимом описанием перечисления.

Ну, и какой от него смысл при неполной поддержке операций с ним? Например, при отсутствии реакции на «неполный анализ» в switch?...
Vlad писал(а):
Wlad писал(а):
Vlad писал(а):
Из "объединенности" можно получить какие-то удобства (типа inc/dec/switch)
А какое удобство можно получить от inc/dec если перечисление подобно описанному мной?
Итерирование по элементам перечисления.

Исчо раз: а какой в этом смысл – если соседние описанные константы перечисления различны больше, чем на единицу???!!!
И, потом, я как-то не возьму в толк как без специальных функций (встроенных или в виде процедур или методов) приведения к целому типу вы намереваетесь использовать «значения» таких типов в алгебраических операциях? И – кстати – к чему приводить? - чем будет это значение? «позицией в описании»? «аналогичное представление в целом значении»? :о)
Vlad писал(а):
Vlad писал(а):
Тем более, что практически во всех компиляторах Си/Си++ есть флаг выражения констант enum-ов int-ами...
Причем здесь подобные особенности реализации?

При том, что без этого вы ваше удобство в виде «итерирования по элементам перечисления» ну никак не можете получить для использования в качестве индексов массивов.
По-хорошему, перечисление – есть явное полное описание элементов некоего множества. Ни о каком «числовом» выражении их значения, речи, в общем случае, не идёт. Элементы просто различаются и уникальны в рамках данного типа перечисления. А установкой флага treating enum as ints вы добавляете в это описание ненужную «зашумляющую» семантику. А потом с ней боритесь или ловите непонятные баги... :о)
Vlad писал(а):
Зачем мне применять enum в качестве индексов массива? Если мне нужен типизированный индекс, то это будет не enum, а типизированный индекс (с операциями inc/dec, но не определяющий каких-либо констант).

А, так вас не было среди тех, кто в вину оберонам ставил отсутствие такой возможности? - тогда – пардону просим!
Vlad писал(а):
Контроль типов в операциях это хорошо, но это уже следующий уровень. Претензия к тому, чтобы хотя бы не путать яблоки с вишней, и время со скоростью.

Ещё раз задаю вопрос: вам нужна в КП функциональность с полным контролем типов входных аргументов или не хватает переопределения операций для прямой алгебраической записи выражений с пользовательскими типами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Воскресенье, 29 Июль, 2007 10:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Сергей Прохоренко писал(а):
.......... В таком случае размерность можно уточнить (дорогокилометры и заборокилометры).


Можно, можно... вот компилятор (Зоннона?) и науточняет... откуда ему знать, что у меня время в обратных электрон-вольтах 8))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 69 ]  На страницу Пред.  1, 2, 3, 4  След.

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


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB