OberonCore
https://forum.oberoncore.ru/

Разрешить произвольный порядок объявлений в модуле?
https://forum.oberoncore.ru/viewtopic.php?f=29&t=5963
Страница 1 из 2

Автор:  Илья Ермаков [ Среда, 30 Ноябрь, 2016 18:06 ]
Заголовок сообщения:  Разрешить произвольный порядок объявлений в модуле?

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

Оминки, кстати, ещё поощрили это, введя соглашение о том, что сначала все константы, потом типы, потом переменные...

Но, возможно, хорошо было бы иметь возможность и с процедурами чередовать объявления?

Допустим, оставив требование однопроходности (т.е. используемая переменная, тип, должны быть до использующей процедуры).

Засовывать методы в RECORD ... END в стиле Active Oberon считаю ненужным модничаньем.

А вот просто иметь возможность держать полное определение абстракции одним блоком - хорошо бы.

(Конечно, семантический редактор снял бы это противоречие влёгкую :) Но мы пока живём с текстовыми исходниками...)

Автор:  Comdiv [ Среда, 30 Ноябрь, 2016 18:52 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

А при чём тут Ominc, если так было ещё в Паскале, за что ему попадало от Брайана Кернигана в статье о нелюбви к Паскалю?
Лично мне нравится такой порядок и я его придерживаюсь в любом языке, порядка так, что-ли, больше, но с точки зрения компромисса с другими людьми тоже посещали мысли о целесообразности запрета смешивать объявления.

Автор:  Илья Ермаков [ Среда, 30 Ноябрь, 2016 19:13 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Не-не, я про Оминк упомянул то, что они в ББ в Соглашениях об оформлении кода не рекомендовали даже CONST-TYPE-VAR перемешивать.
Ну, например, разумно объявлять константы перечислений рядом с типом или переменной, для которой они заводятся.
А у них оно всё одной секцией CONST.

Автор:  Comdiv [ Среда, 30 Ноябрь, 2016 19:43 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

То есть, в КП это возможно, но не рекомендуется? Просто в Паскале такой возможности вообще не было.
Нет её и в Обероне:
Код:
DeclarationSequence = [CONST {ConstDeclaration ";"}]
[TYPE {TypeDeclaration ";"}]
[VAR {VariableDeclaration ";"}]
{ProcedureDeclaration ";"}.

Автор:  Comdiv [ Среда, 30 Ноябрь, 2016 19:48 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

А вот в Обероне 90-го такая возможность была, я не знал:
Код:
DeclarationSequence  =  {
 CONST {ConstantDeclaration ";"} |
 TYPE {TypeDeclaration ";"} |
 VAR {VariableDeclaration ";"}
}
{ProcedureDeclaration ";" | ForwardDeclaration ";"}

Автор:  prospero78 [ Среда, 30 Ноябрь, 2016 20:28 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

А как по мне, так порядок константы-типы-переменные-процедуры надо оставить. Это часть структуры. А структура облегчает контроль. Это методически верно.

Автор:  Oleg N. Cher [ Среда, 30 Ноябрь, 2016 22:30 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

prospero78 писал(а):
А как по мне, так порядок константы-типы-переменные-процедуры надо оставить.
Т.е. чтобы нельзя было объявлять константы, вычисляемые из размера типов?

Код:
TYPE
  Rec = RECORD a, b: REAL END;
CONST
  RecSize2 = 2*SIZE(Rec);

Это в Дельфи можно объявлять типы-диапазоны на основе констант, в Обероне же более логичен такой порядок: типы-константы-переменные-процедуры.

Автор:  Александр Ильин [ Среда, 30 Ноябрь, 2016 22:50 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Oleg N. Cher писал(а):
Это в Дельфи можно объявлять типы-диапазоны на основе констант, в Обероне же более логичен такой порядок: типы-константы-переменные-процедуры.
Код:
CONST MaxNum = 15;
TYPE Elements: ARRAY MaxNum OF INTEGER;

Автор:  Trurl [ Среда, 30 Ноябрь, 2016 23:40 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Делал я такое. И обсуждали когда-то, только найти не получилось.
Программы удобнее и понятнее получаются, но больше ни у кого не компилируются :( .

Автор:  Kemet [ Четверг, 01 Декабрь, 2016 07:30 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

В Активном Обероне произвольный порядок секций, и это бывает полезно, да.
Хотя для записей и объектов это не так уж актуально - методы описываются внути тела записи/объекта.
Так же я надеюсь, что допилят экспорт типов и констант из записей и объектов. И тогда вообще начнется совсем другая жизнь. Ибо порядок секций вообще будет играть незначительную роль

Автор:  Trurl [ Четверг, 01 Декабрь, 2016 08:30 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Илья Ермаков писал(а):
А вот просто иметь возможность держать полное определение абстракции одним блоком - хорошо бы.

Особенно очевидным это становится, если посмотреть на WinApi.

Автор:  prospero78 [ Четверг, 01 Декабрь, 2016 09:57 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

К вопросу о невозможности вычисления констант))

Код:
   (* операторы *)
    _опПлюс* = _lexWHILE + 1;
    _опМинус* = _опПлюс + 1;
    _опУмнож* = _опМинус + 1;
    _опДел* = _опУмнож + 1;
    _опИнверс* = _опДел + 1;
    _опКомерцИ* = _опИнверс + 1;
    _опЗпт* = _опКомерцИ + 1;
    _опТчкЗпт* = _опЗпт + 1;
    _опВерт* = _опТчкЗпт + 1;
    _lexLRound* = _опВерт + 1;


Что касается вычисления констант из размера типов, то здесь, имхо, методически не верный подход. Это КОНСТАНТЫ))) И всё-таки, их можно вычислить, если сначала описать тип, а только затем такой модуль импортировать в модуль констант. Самый грамотный вариант -- определить размер типа через соответствующий тип, и получать как поле "только на чтение".

Автор:  Kemet [ Пятница, 02 Декабрь, 2016 04:16 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

prospero78 писал(а):
Самый грамотный вариант -- определить размер типа через соответствующий тип, и получать как поле "только на чтение".

Самый грамотный вариант - воспользоваться чем-товроде sizeof( mytype )

Автор:  prospero78 [ Пятница, 02 Декабрь, 2016 11:59 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Цитата:
Самый грамотный вариант - воспользоваться чем-то вроде sizeof( mytype )

Кемет, видимо, ты не заметил. Я великодушно ещё раз приведу своё мнение по поводу констант.
Методически не верно определять КОНСТАНТЫ через ВЫЧИСЛЕНИЯ))

Автор:  Илья Ермаков [ Пятница, 02 Декабрь, 2016 13:21 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Не согласен.
Смысл константы в программировании - это значение, известное на этапе компиляции. В том числе вычисленное.

Автор:  prospero78 [ Пятница, 02 Декабрь, 2016 13:40 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Илья, я же не утверждаю "Запретить и не пущать". Более того, даже если бы я такое написал, правило оно на то и существует, чтобы его нарушать))
Я высказал своё мнение, только по методике работы с константами, а не практической рализации теоретических методов)))

Автор:  Александр Ильин [ Пятница, 02 Декабрь, 2016 14:44 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

prospero78 писал(а):
Методически не верно определять КОНСТАНТЫ через ВЫЧИСЛЕНИЯ))

Какой из следующих вариантов методически верен?
Код:
CONST
   SecondsInMinute = 60;
   MinutesInHour = 60;
   HoursInDay = 24;
   SecondsInHour = SecondsInMinute * MinutesInHour;
   SecondsInDay = SecondsInHour * HoursInDay;
Код:
CONST
   SecondsInMinute = 60;
   MinutesInHour = 60;
   HoursInDay = 24;
   SecondsInHour = 3600;
   SecondsInDay = 86200;

Автор:  prospero78 [ Пятница, 02 Декабрь, 2016 15:01 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

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

Автор:  Александр Ильин [ Пятница, 02 Декабрь, 2016 15:44 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

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

Автор:  Comdiv [ Пятница, 02 Декабрь, 2016 15:48 ]
Заголовок сообщения:  Re: Разрешить произвольный порядок объявлений в модуле?

Код:
CONST
   SecondsInMinute = 60;
   MinutesInHour = 60;
   HoursInDay = 24;
   SecondsInHour = SecondsInMinute * MinutesInHour;
   SecondsInDay = SecondsInMinute * HoursInDay;

Вообще невозможна?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/