Автор Тема: Сириус - обероноподобный язык и компилятор  (Прочитано 76333 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #150 : Декабрь 18, 2012, 12:41:11 pm »
Насколько вообще востребованы у вас в софте расширяемые перечисления?

Вообще востребовано. Не часто, конечно, но если надо, то без этой фичи очень грустно. Особенно когда уже есть гора существующего кода, а расширять надо.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #151 : Декабрь 18, 2012, 12:47:00 pm »
Кстати, раз уж пошли диапазоны и перечисления, то навернео будут и диапазоны перечислений?
Думал об этом, но усложнять компилятор пока не хочется, может быть в дальнейшем.
Так как целые числа можно представить как перечисление, то логично что диапазоны целых чисел будут диапазонами перечисления INTEGER:

TYPE X = RANGE 1..9;

Days = ENUM
  Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
END;

TYPE WorkDays = RANGE Monday..Friday;
Элементы перечисления должны быть квалифицированы именем типа
Т.е. нельзя использовать просто Monday, нужно Days.Monday

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

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

lowerchars = RANGE OF CHAR 'a'..'z';
smallnum = RANGE OF SMALLINT 1..9;
longnum  = RANGE OF LONGINT   1..9;
или как-то
longnum = RANGE 1..9 OF LONGINT;
или
longnum = LONGINT RANGE 1..9;

TYPE WorkDays = Days RANGE Monday..Friday; (* здесь квалификатор определяющий принадлежность элементов стоит перед range *)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #152 : Декабрь 18, 2012, 12:54:24 pm »
Можно, конечно, несколько расширить и создавать типизированные перечисления, например
Хрень какая-то получилась. Уже переклинило )))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #153 : Декабрь 18, 2012, 01:04:02 pm »
Можно, конечно, несколько расширить и создавать типизированные перечисления, например
Хрень какая-то получилась. Уже переклинило )))
Почему? Вполне нормально, в Аде примерно так и сделано...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #154 : Декабрь 18, 2012, 01:37:52 pm »
Почему? Вполне нормально, в Аде примерно так и сделано...
ну так это диапазоны, а я начал про перечисления )) а потом переклинило
думаю, ограничимся расширяемыми перечислениями
и типизированными диапазонами
не стоит городить вторую Аду

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #155 : Декабрь 18, 2012, 01:41:50 pm »
lowerchars:char = 'a'..'z';
longnum:longint = 1..9;
:LIKE:

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #156 : Декабрь 18, 2012, 01:49:58 pm »
Ох, не зря Вирт выкинул перечисления. Проблем с ними до хрена.

Если не хотите повторять Аду, можете повторить C# ;)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #157 : Декабрь 18, 2012, 02:15:27 pm »
lowerchars:char = 'a'..'z';
longnum:longint = 1..9;
:LIKE:
это больше на инициализацию похожк

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #158 : Декабрь 18, 2012, 02:20:08 pm »
Ох, не зря Вирт выкинул перечисления. Проблем с ними до хрена.

Если не хотите повторять Аду, можете повторить C# ;)
Перечисления в Сириусе есть изначально, особых проблем не видно - это же просто константы

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #159 : Декабрь 18, 2012, 03:11:27 pm »
В Сириусе перечисления можно описать несколькими способами:
1) Days = ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday );
2) Days = ENUM ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday );

В Активном Обероне перечисления описываются таким образом:
Days = ENUM
  Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
END;
BEGIN и END объединяют несколько сущностей, которые изначально независимы. Например, несколько операций присваивания или вызов нескольких процедур. В случае с перечислением необходимость в BEGIN и END нет, потому что элементы не могут быть независимы. Они привязаны друг к другу семантически (их значения последовательны, их порядок имеет значение) и синтаксически (разделитель "запятая" довольно специфичен, и если в конце объявления забыть точку с запятой, то компилятор точно определит ошибку).

На перечисление можно посмотреть как на своеобразный константный массив и инициализировать его аналогично.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #160 : Декабрь 18, 2012, 03:12:09 pm »
А зачем нужен диапазонный тип?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #161 : Декабрь 18, 2012, 03:16:33 pm »
В Сириусе перечисления можно описать несколькими способами:
1) Days = ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday );
2) Days = ENUM ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday );

В Активном Обероне перечисления описываются таким образом:
Days = ENUM
  Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
END;
BEGIN и END объединяют несколько сущностей, которые изначально независимы. Например, несколько операций присваивания или вызов нескольких процедур. В случае с перечислением необходимость в BEGIN и END нет, потому что элементы не могут быть независимы. Они привязаны друг к другу семантически (их значения последовательны, их порядок имеет значение) и синтаксически (разделитель "запятая" довольно специфичен, и если в конце объявления забыть точку с запятой, то компилятор точно определит ошибку).
Следуя этой логике необходимо также отказаться от синтаксиса RECORD ... END, ибо содержимое там не является независимым (порядок полей имеет значение).
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #162 : Декабрь 18, 2012, 03:19:04 pm »
Но объявления - сущности независимые, и скобки их группируют.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #163 : Декабрь 18, 2012, 03:23:34 pm »
Но объявления - сущности независимые, и скобки их группируют.
Так и в случае перечислений объявления в сущности независимые, либо со слабой зависимостью :-) Никогда вот таких enum'ов не видел?
enum
{
    kAudioFormatLinearPCM               = 'lpcm',
    kAudioFormatAC3                     = 'ac-3',
    kAudioFormat60958AC3                = 'cac3',
    kAudioFormatAppleIMA4               = 'ima4',
    kAudioFormatMPEG4AAC                = 'aac ',
    kAudioFormatMPEG4CELP               = 'celp',
    kAudioFormatMPEG4HVXC               = 'hvxc',
    kAudioFormatMPEG4TwinVQ             = 'twvq',
    kAudioFormatMACE3                   = 'MAC3',
    kAudioFormatMACE6                   = 'MAC6',
    kAudioFormatULaw                    = 'ulaw',
    kAudioFormatALaw                    = 'alaw',
    kAudioFormatQDesign                 = 'QDMC',
    kAudioFormatQDesign2                = 'QDM2',
    kAudioFormatQUALCOMM                = 'Qclp',
    kAudioFormatMPEGLayer1              = '.mp1',
    kAudioFormatMPEGLayer2              = '.mp2',
    kAudioFormatMPEGLayer3              = '.mp3',
    kAudioFormatTimeCode                = 'time',
    kAudioFormatMIDIStream              = 'midi',
    kAudioFormatParameterValueStream    = 'apvs',
    kAudioFormatAppleLossless           = 'alac',
    kAudioFormatMPEG4AAC_HE             = 'aach',
    kAudioFormatMPEG4AAC_LD             = 'aacl',
    kAudioFormatMPEG4AAC_ELD            = 'aace',
    kAudioFormatMPEG4AAC_ELD_SBR        = 'aacf',
    kAudioFormatMPEG4AAC_ELD_V2         = 'aacg',   
    kAudioFormatMPEG4AAC_HE_V2          = 'aacp',
    kAudioFormatMPEG4AAC_Spatial        = 'aacs',
    kAudioFormatAMR                     = 'samr',
    kAudioFormatAudible                 = 'AUDB',
    kAudioFormatiLBC                    = 'ilbc',
    kAudioFormatDVIIntelIMA             = 0x6D730011,
    kAudioFormatMicrosoftGSM            = 0x6D730031,
    kAudioFormatAES3                    = 'aes3'
};
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #164 : Декабрь 18, 2012, 03:37:04 pm »
Видел. Со свистелками и перделками.
Перечисление изначально выглядело так: "первым идёт икс, вторым - игрек, третьим...". То есть, грубо говоря - нумерованный список. А вот такие перечисления - обыкновенные (хеш-?)таблицы. Если в изначальном примере Kemet-а дни недели расположить в алфавитном порядке, а потом из базы достать среду (которая там хранится в виде числа, соответствующего порядку в неделе), то получится ерунда.