Автор Тема: Oberon rev. 2015 (февраль)  (Прочитано 30375 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon rev. 2015 (февраль)
« Ответ #45 : Март 16, 2015, 10:47:37 am »
Ну как бэ очевидно, что список идентификаторов имеет мало смысла.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #46 : Март 16, 2015, 06:34:06 pm »
Зачем в примере переменные p0, p1, p2?
Очевидно, что это пример - часть программы, в которой опущено созданий переменных разных типов, значения который в дальнейшем и присваиваются p.
Т.е., опущено, например
NEW(p0); NEW(p1); NEW(p2);затем идет код, в котором переменной p приcваиваются нужные значения
TYPE R = RECORD a: INTEGER END ;
 R0 = RECORD (R) b: INTEGER END ;
 R1 = RECORD (R) b: REAL END ;
 R2 = RECORD (R) b: SET END ;
 P = POINTER TO R;
 P0 = POINTER TO R0;
 P1 = POINTER TO R1;
 P2 = POINTER TO R2;

VAR p: P; p0: P0; p1: P1; p2: P2;
...
IF a THEN
  p:= p0;
ELSIF b THEN
  p:= p1
...
END;

CASE p OF
 P0: p0.b := 10 |
 P1: p1.b := 2.5 |
 P2: p2.b := {0, 2}
END
а p0.b := 10
p1.b := 2.5
...
чтобы не производить приведение типа p к производному типу

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon rev. 2015 (февраль)
« Ответ #47 : Март 16, 2015, 09:46:26 pm »

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #48 : Март 17, 2015, 03:24:10 pm »
Ну как бэ очевидно, что список идентификаторов имеет мало смысла.
Почему мало смысла? Смысл имеют их значения, взятые как изолировано, так и в качестве границ интервалов значений. В предыдущей версии от 16.06.2014, что была еще без CASE как WITH, так и было:
Цитата: Oberon07.Report.pdf 16 июня 2014 г., 05:01:04 aka Revision 10.03.2014-II
CaseLabelList =  LabelRange {"," LabelRange}.
label  =  integer | string | ident.
Следует учесть, что варианты выбора CASE статические и определены во время компиляции (иначе зачем нужен оператор CASE когда есть IF-THEN?), то есть ident - это был идентификатор константы.

По смылу label вполне можно было определить как константное выражение (ConstExpression), раньше так и было:
Цитата: report_oberon.pdf aka Revision 1.10.90
CaseLabels  =  ConstExpression [".." ConstExpression].
Но для простоты исходного кода Вирт оставил только integer, string и ident.

dizer

  • Jr. Member
  • **
  • Сообщений: 80
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #49 : Март 17, 2015, 03:47:06 pm »
Но для простоты исходного кода Вирт оставил только integer, string и ident.
Едва ли (хотя, конечно, он фан простоты) - скорее всего, для его задач это не актуально - типичный DSL (нужно будет - через год добавит :) )

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon rev. 2015 (февраль)
« Ответ #50 : Март 17, 2015, 04:21:40 pm »
Почему мало смысла?
Придумайте пример реального кода где это нужно и поймете.

ps Тут запостить код незабудьте

dizer

  • Jr. Member
  • **
  • Сообщений: 80
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #51 : Март 17, 2015, 05:30:58 pm »

Придумайте пример реального кода где это нужно и поймете.


There are more things in heaven and earth," Борис ", than are dreamt of in your philosophy."-  лично я , чем больше живу, тем больше в этом убеждаюсь (да я специально не привел перевод - зацените красоту оригинала применительно к топику).  :)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #52 : Март 18, 2015, 06:04:33 am »
Портабельность приложений написанных на Обероне становится довольно условной.
Это почему?

Потому, что ты не можешь сказать компилятору что ты хочешь, и при этом не можешь его спросить что он может.
Всё-же, у тебя несколько специфическое понятие о портабельности.
Ведь есть в плюсцах тип size_t, который не привязан к разрядности, а кпак и INTEGER в Обероне определяется конкретной аппаратной платформой, только никто из плюсовых поклонников, отчего-то, не считает, что это снижает портабельность C++, скорее наоборот.
В Обероне07 тип INTEGER несёт ту же нагрузку, что и size_t, и как-раз и обеспечивает портируемость.
INTEGER всегда соотвествует целому типу оптимального для данной платформы размером.
Если тебе нужна специфика в разрядах, значит тебе требуется реализовать поддержку нужной тебе разрядности отдельно, в виде библиотеки, пространства SYSTEM или даэе глобального пространства.
Но, как и в случае с C++ такой код и не будет портабелен.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon rev. 2015 (февраль)
« Ответ #53 : Март 19, 2015, 07:58:20 pm »
vlad: спешл фо ю:
CASE p OF
 P0: p.b := 10 |
 P1: p.b := 2.5 |
 P2: p.b := {0, 2}
END
http://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon rev. 2015 (февраль)
« Ответ #54 : Март 25, 2015, 09:05:00 am »
ddn:
Можете скинуть все версии репорта?

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #55 : Март 30, 2015, 03:05:06 pm »
ddn:
Можете скинуть все версии репорта?
Я бы выложил (500K), да не знаю куда. Работающих файлопомоек больше не существует.


« Последнее редактирование: Март 30, 2015, 03:08:45 pm от ddn »

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #56 : Март 30, 2015, 03:10:47 pm »
Хотя попробую прямо в сообщение. Незнаю сколько он будет храниться.

ddn

  • Jr. Member
  • **
  • Сообщений: 59
    • Просмотр профиля
Re: Oberon rev. 2015 (февраль)
« Ответ #57 : Март 30, 2015, 03:21:24 pm »
Oberon07.Report.doc [25.07.2012] скачал не я, взял из архива какого-то оберонщика.