Автор Тема: [Oberon-07/11] Импорт типов.  (Прочитано 4807 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
[Oberon-07/11] Импорт типов.
« : Октябрь 23, 2013, 11:37:49 pm »
Только что напоролся на один нюанс, который раньше замечен не был. Вот такой код, с точки зрения грамматики Oberon'a не валиден оказывается:

MODULE B;
IMPORT A;
TYPE
 Boo = A.Foo;
END B.

Конкретно не валидно вот это:
Boo = A.Foo
Справа тут может быть только StructType:
StrucType = ArrayType | RecordType | PointerType | ProcedureType.
ArrayType = ARRAY length {"," length} OF type.
RecordType = RECORD ["(" BaseType ")"] [FieldListSequence] END.
PointerType = POINTER TO type.
ProcedureType = PROCEDURE [FormalParameters].

Ибо:
TypeDeclaration = identdef "=" StrucType.

DeclarationSequence = [CONST {ConstDeclaration ";"}]
[TYPE {TypeDeclaration ";"}]
[VAR {VariableDeclaration ";"}]
{ProcedureDeclaration ";"}.

И никак не может быть qualident:
qualident = [ident "."] ident

Вот такие пироги.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #1 : Октябрь 23, 2013, 11:41:27 pm »
Да, замечу, что ранее в Обероне это было:

TypeDeclaration = identdef "=" type.
type = qualident | ArrayType | RecordType | PointerType | ProcedureType.

То есть qualident допускался. Таким образом это было удалено намерянно.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #2 : Октябрь 24, 2013, 05:53:28 am »
Ну, всё ближе и ближе к ассемблеру.
Интересно, если Вирт и дальше будет обновлять рапорты о языке, что ещё он оттуда удалит?
to iterate is human, to recurse, divine

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #3 : Октябрь 24, 2013, 05:58:49 am »
Только что напоролся на один нюанс, который раньше замечен не был. Вот такой код, с точки зрения грамматики Oberon'a не валиден оказывается:
MODULE B;
IMPORT A;
TYPE
 Boo = A.Foo;
END B.

Ну значит придётся делать типа того:
MODULE B;
IMPORT A;
TYPE
 Boo = RECORD
   foo: A.Foo
 END;
END B.

А о реэкспорте типов придётся забыть. Да и нужен ли он? Вот в хаскелле с его иерархическими модулями реэкспорт полезен, да, а в Обероне зачем?
to iterate is human, to recurse, divine

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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon-07/11] Импорт типов.
« Ответ #4 : Октябрь 24, 2013, 07:35:47 am »
А никому в голову не приходило, что это может быть банальная невнимательность? Ну все эти странности в репорте.
Старый человек уже...
Тут очень полезно было бы посмотреть в авторскую реализацию компилятора.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #5 : Октябрь 24, 2013, 08:37:06 am »
А никому в голову не приходило, что это может быть банальная невнимательность? Ну все эти странности в репорте.
Старый человек уже...

Это намёк на то, что не стоит искать злого умысла там, где имеет место простая глупость? )))
Слишком простое объяснение всё же ))
to iterate is human, to recurse, divine

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

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #6 : Октябрь 24, 2013, 08:51:56 am »
Слишком простое объяснение всё же ))
Но мнительность тоже до добра не доводит :) . Всегда во всем подозревать то, чего нет. Думать, что думает другой человек, неблагодарное занятие, если уж даже "мысль высказанная есть ложь". В реальности с такой же вероятностью может оказаться так, как сказал ilovb , как и все прочее :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #7 : Октябрь 24, 2013, 09:00:16 am »
А никому в голову не приходило, что это может быть банальная невнимательность? Ну все эти странности в репорте.
Старый человек уже...
Тут очень полезно было бы посмотреть в авторскую реализацию компилятора.
Приходило, но слишком уж эти изменения хорошо вписываются в общую концепцию изменений - Вирт окончательно выпилил в секции TYPE алиасы типов. Для примитивных типов выпилил, и для структурных, как видим, на уровне грамматики выпилил. Отныне в секции TYPE у нас ТОЛЬКО объявление новых типов.

Собственно да, теперь не возможно и такое:
TYPE
   Foo = RECORD END;
   Bar = Foo;
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Импорт типов.
« Ответ #8 : Октябрь 24, 2013, 04:17:49 pm »
Приходило, но слишком уж эти изменения хорошо вписываются в общую концепцию изменений - Вирт окончательно выпилил в секции TYPE алиасы типов.

Да, это не похоже на банальную описку. Видимо Вирт в очередной раз подошел к своему компилятору с вопросом "чего бы еще отрезать" и увидел, что алиасы используются относительно редко. Ну и выпилил. Какой-то глубокий смысл тут искать бесполезно.

С точки зрения реализации компилятора (моей) для поддержки алиасов вообще ничего не нужно (несколько строк). Более менее интересно оно только с точки зрения пользовательской диагностики (как именовать такой тип при выводе ошибок).