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/ |