OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 13:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 11:45 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Код:
MODULE ОпечаткаПриНаследовании; 

IMPORT KernelLog;

TYPE Родитель = OBJECT
  PROCEDURE Печатай;
  BEGIN
    KernelLog.String("Родитель"); KernelLog.Ln
  END Печатай
END Родитель;
 
TYPE Дитя* = OBJECT (Родитель)
  PROCEDURE Печатаи*;
  BEGIN
    KernelLog.String("Дитя"); KernelLog.Ln
  END Печатаи
END Дитя;
 
VAR р : Родитель; д : Дитя;

PROCEDURE Жми*;
BEGIN
  NEW(д); р := д; р.Печатай
END Жми

END ОпечаткаПриНаследовании.Жми ~

Без ключевого слова override программист не защищён от опечаток при перекрытии унаследованных методов. Хорошо ли это? Не знаю, как это в других (или "настоящих") оберонах.


Последний раз редактировалось budden Воскресенье, 22 Ноябрь, 2020 12:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 12:34 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Я даже не буду читать такой код.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 13:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В КП для этого есть атрибут NEW у методов, вводящихся впервые.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 13:33 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Я предлагал Феликсу ввести модификатор { OVERRIDE }, но пока никаких изменений нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 13:42 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
budden писал(а):
Без ключевого слова override программист не защищён от опечаток при перекрытии унаследованных методов.
Напоролись?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 13:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Пока не напоролся, но должен, в связи с движком перевода кода на русский. Я разбил работу на модули, что выглядит весьма естественным. Но при этом одноимённость метода в предке и потомке обязательно нарушается - я ведь перевожу не все модули сразу, значит, я переведу потомка, а предок останется со старым именем, или наоборот. После этого всё прекрасно скомпилируется и не будет работать.

Ну и в целом неважно, напоролся ли лично я. Компилятор должен защищать от таких опечаток, это ещё важнее, чем статическая типизация. Если язык позиционируется как надёжный, то отсутствие в этой части защиты от опечаток для меня выглядит явным дефектом, просто я хотел сверить часы.

Похоже, что придётся вводить override. Вводить new не вижу большого смысла, потому что далеко не все методы прекрываются. Соответственно, из той идеи, что умолчанию желательно быть наиболее часто используемым вариантом, лучше override, чем new.

Видимо, я сделаю override обязательным для модулей с ключевыми словами на русском и таким образом будет обеспечена инкрементность и своевременность возникновения такой проверки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 18:00 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Хотя вводить модификатор нужно до перевода... :roll: То же касается и реализации такой идеи в обычной A2 - нужен спец. конвертер или огромная работа руками по добавлению модификатора везде, где он нужен.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2020 23:58 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Сергей, а вы хотите именно {OVERRIDE}, а не какое-нибудь "#" перед именем модуля? Я смотрю в код парсера и вижу:
Код:
IF Peek( Scanner.And ) THEN  (* constructor *)
   NextToken;
   isConstructor := TRUE
ELSIF Optional( Scanner.Not ) THEN  (* finalizer *)
   isFinalizer := TRUE
ELSIF Optional( Scanner.Minus ) THEN  (* inline *)
   isInline := TRUE;
ELSIF Optional( Scanner.LeftBrace) THEN
   modifiers := Flags();
   IF Optional( Scanner.Minus ) THEN  (* inline *)
      isInline := TRUE
   END;
END;

Т.е. ряд значков уже используется для изображения модификаторов. Почему бы не добавить ещё один вместо частого выписывания длинного слова?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 23 Ноябрь, 2020 20:46 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Я делал с { OVERRIDE } для китайских товарищей, но я хочу, чтобы это было в оригинале, потому что сейчас не понятно, переопределен метод или нет ( а так как все методы в оберонах виртуальные, это может привести к неприятным последствиям ).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 23 Ноябрь, 2020 23:33 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Надо еще флаг на случай, если переопределил не тот метод.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: ,
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 04:01 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Trurl писал(а):
Надо еще флаг на случай, если переопределил не тот метод.
: ))

В смысле, если переопределил не тот метод, но в итоге стало ещё лучше, чем ожидалось?
{ DO-NOT-FIX }, или в этом духе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 09:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl намекает, что полезно думать головой, а не просто заплатки ставить.
И что полезно учиться у предшественников, которые головой думать умеют и об этой конкретной проблеме уже подумали (Блэкбокс).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 10:01 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Откровенно говоря, подумали задолго до разработчиков ББ. Решение в ББ, на мой взгляд, плохо тем, что вместо того, чтобы помечать места изменения семантики ( яву это для человека, а не для машины ), разработчики выбрали минимизацию нажатий на кнопки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ,
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 10:28 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Александр Ильин писал(а):
В смысле, если переопределил не тот метод, но в итоге стало ещё лучше, чем ожидалось?

Например, если вместо SetX написал SetY. Тут бы помог флаг {OVERRIDE SetX}.
Вообще, много всяких полезных флагов можно придумать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 11:53 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Sergej Durmanov писал(а):
Я делал с { OVERRIDE } для китайских товарищей, но я хочу, чтобы это было в оригинале, потому что сейчас не понятно, переопределен метод или нет ( а так как все методы в оберонах виртуальные, это может привести к неприятным последствиям ).


Ну т.е. есть консенсус именно про ключевое слово, а не значок? Я уже начал делать #Метод, там, правда, какие-то баги в другом месте всплыли.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 12:07 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Мне без разницы - я всё равно пользуюсь только оригинальной A2.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 12:51 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Это понятно. С Феликсом вы договорились о форме?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 17:40 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Понял, чем плохо # - тем, что нельзя грепом найти все перекрытые методы. Значит, будет {OVERRIDE}/{перекрыта}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 20:04 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Вроде сделал в ЯОС OVERRIDE/перекрыта и технологию, чтобы плавно это внедрить - оно будет автоматически добавляться при переводе ключевых слов на русский язык. При этом защита от лишнего OVERRIDE/перекрыта работает для любого языка ключевых слов, а недостающий в нужном месте модификатор {перекрыта} вызовет предупреждение только в том случае, если ключевые слова - русские. Уже вставил три недостающих слова в ПошаговыйОтладчик.ярм, который частично перевёл буквально на днях.

А давно ли NEW появилось в ББ? Я смотрю, уже в 2001 было слово NEW в компонентном Паскале. Или в 2004? Уж в 2004 точно было.

https://web.archive.org/web/20040804100 ... CP-New.pdf

Хм, неужели в частных версиях A2 китайские товарищи наслаждались этой возможностью ещё раньше?

Что-то у меня не складываются в пазл Ваши слова, Сергей. A2 появилась я так и не понял когда, но дат раньше, чем 2004, я не нашёл.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Ноябрь, 2020 22:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Sergej Durmanov писал(а):
Откровенно говоря, подумали задолго до разработчиков ББ. Решение в ББ, на мой взгляд, плохо тем, что вместо того, чтобы помечать места изменения семантики ( яву это для человека, а не для машины ), разработчики выбрали минимизацию нажатий на кнопки.
Правильно, разработчики ББ учли уроки предшественников.

Отказ от минимизации нажатий может бомбануть в другом месте, заранее не очевидном.

У меня два достаточно глубоких каркасика, и проблем с решением ББ не возникает.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB