Ещё раз о типах и значениях

Переводим термины и придумываем новые, в т.ч. для ЯОС
БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 16:10

Но слово посетить - его никак не отражает. Оно просто читается как переход и это невозможно изменить никакими статьями.
Если вы пропускаете слово, которому разработчик кода придал смысл, то это, в общем-то, Ваша субъективная проблема. Соглашение об именах для данного шаблона подразумевает, что слово visit присутствует в названии метода. Во всяком случае, в ряде примеров это так. Есть примеры, где слово "посети" пропущено, но это уже сокращение (в данном случае, до нуля букв).
Попытка привязать специфический смысл слову, по виду которого нельзя догадаться о том, что ему приписан специфический смысл - плохая затея... "ШП"
Опять же, это осуждение самого шаблона и его соглашения об именах. Если его "улучшить", то оно станет непонятно вообще никому, а так оно понятно тем, кто знаком с шаблоном "посетитель". Вам шаблон не нравится, возможно, но это не повод делать код непонятным для всех остальных, всё же шаблоны проектирования сегодня большинство знает (я к этому большинству, кстати, не отношусь). В качестве примера, я улучшил SET, который есть набор бит, и назвал его BYTE, потому что он в лиспе так называется - там есть, скажем, байт из 32 бит, и по набору операций он похож на обероновское "SET". Тем самым я освободил слово "множество" для других реализаций множества. Но это было время назад, а теперь я вернулся к этому коду и сам ничего не понял. С трудом вспомнил, откуда взялся этот "байт из 32 бит". Понятно, что меня поднимут насмех с таким переводом, хотя на самом деле это просто невежественные люди. Теперь вот не знаю, что делать дальше, вероятно, придётся переименовать SET во что-то иное. То же случится и с посетителем, если я вдруг послушаю Вас и измению соглашение об именах. В английском слово visit тоже является общим, а не специфическим. Можно попробовать улучшить шаблон, конечно, но я не видел в исходниках ЯОС оно за пределами данных визиторов встречается крайне редко, так что проблемы перепутать его с чем-то на практике нет.
Вот если Вы напишите "ШП" - тогда будет видно, что смысл специфический. Только не забудьте составить список аббревиатур со ссылками на статьи.
. Посмотрим, может быть, потому что Посети - это много букв.
Я вообще крайне редко пользуюсь текстовым поиском в ИСР, потому что он кривой относительно ЯП, который требует древовидный разбор.
Хорошо, если у Вас есть такой инструмент. Но в ЯОС его нет пока что, когда будет - неизвестно, а значит, и рассчитывать на его присутствие при назначении имён нельзя. Впилите в ЯОС такой же? Сроки и цена вопроса?
Потому что это вариант для сочетания с другим существительным, которое в русском языке требует падежа или предлога.
Понял.
БудДен писал(а):
26.04.21 11:53
Речь про то, что нечто имеет значение 4, и мы знаем это (знаем само значение 4) уже во время компиляции. Константа ли это, литерал ли, или результат какого-нибудь SIZEOF(int), или результат TRUNC(4.4), вычисленный во время компиляции - об этом не говорится.
Это и есть константы ("неизменные"). А спрашивалось, может ли изменяться впоследствии.
А как тогда назвать константу, которая введена словом const? В системе типов компилятора это другая сущность, значит, ей нужно отдельное название.

MihalNik
Сообщения: 226
Зарегистрирован: 05.11.18 11:02

Re: Ещё раз о типах и значениях

Сообщение MihalNik » 26.04.21 16:55

БудДен писал(а):
26.04.21 16:10
А как тогда назвать константу, которая введена словом const?
Именованной.
БудДен писал(а):
26.04.21 16:10
Хорошо, если у Вас есть такой инструмент. Но в ЯОС его нет пока что, когда будет - неизвестно, а значит, и рассчитывать на его присутствие при назначении имён нельзя. Впилите в ЯОС такой же?
Еще один парсер впилить что ли надо?

БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 17:08

Ну как, поиск это целый отдельный проект из многих частей и не лишённый проблем. Ключевая проблема - нет гарантии, что во время поиска существует валидное синтаксическое дерево, т.к. файл может быть в процессе правок. Если есть желание - давайте в отдельной теме обсудим. Для начала я думаю было бы более разумно сделать поиск слов с лемматизацией (Павиа где-то упоминал, поиск по всем словоформам при простом анализе слова, без словаря). Т.е. чтобы находилось Посет~Тип~Цел~Числ - со словоформами, а не просто рег выр ".*", да ещё и в любом порядке.
Последний раз редактировалось БудДен 26.04.21 17:13, всего редактировалось 2 раза.

БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 17:12

MihalNik писал(а):
26.04.21 16:55
БудДен писал(а):
26.04.21 16:10
А как тогда назвать константу, которая введена словом const?
Именованной.
Ну можно попробовать, только будет ли это понятно вне контекста? Чел ведь может, читая код, увидеть слово "константа" и посчитать, что это "объявленная константа", и прийти к неверным выводам. Авторы компилятора ведь чем-то руководствовались, когда назвали это Value (одна из версий, что они плохо подумали, но они не могли всегда только плохо думать - они бы тогда не смогли завершить создание компилятора). Constant там тоже есть, т.е. ConstantExpression, ConstantDeclaration и возможно ещё что-то. Т.е. в компиляторе отличаются (и должны отличаться): элемент синтаксического дерева, определяющий константу; элемент, обращающийся к константе (например, чтобы присвоить её чему-то); сам факт существования константы (запись в таблице символов); значение этой константы. Вы берёте одно слово, допустим, одно из названий Вы так закроете. Но нужно не одно название, а полный набор, причём так, чтобы хотя бы опытный человек мог сразу по названию типа сказатЬ, что это. И желательно, чтобы и новичка эти названия не сбивали с толку. Далее, это вообще не обязательно константа, а может быть какой-нибудь результат выражения "а-а", просто умный компилятор вывел, что всегда получается одно и то же. Дальше, если учесть, что в АО уже есть ключевое слово const для параметров, которое на самом деле означает readonly, то ещё один смысл сюда накладывается.

MihalNik
Сообщения: 226
Зарегистрирован: 05.11.18 11:02

Re: Ещё раз о типах и значениях

Сообщение MihalNik » 26.04.21 17:30

БудДен писал(а):
26.04.21 17:08
чтобы находилось Посет~Тип~Цел~Числ - со словоформами, а не просто рег выр ".*", да ещё и в любом порядке.
Я не постесняюсь спросить, зачем это в принципе надо. То что внутри лексем - парсера не требует и компилятором никак не зарегулировано. Есть языки где по-другому, но не Оберон.

БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 18:31

Это не требует парсера. Это поиск всех ссылок на имя, вне зависимости от словоформ. Например, мы в одном месте назвали "ТипЦелогоЧисла", а в другом - "КонстантаТипаЦелогоЧисла". Вопрос - как найти все места, где упомянут "ТипЦелогоЧисла"?

MihalNik
Сообщения: 226
Зарегистрирован: 05.11.18 11:02

Re: Ещё раз о типах и значениях

Сообщение MihalNik » 26.04.21 19:06

БудДен писал(а):
26.04.21 18:31
Это не требует парсера. Это поиск всех ссылок на имя, вне зависимости от словоформ. Например, мы в одном месте назвали "ТипЦелогоЧисла", а в другом - "КонстантаТипаЦелогоЧисла". Вопрос - как найти все места, где упомянут "ТипЦелогоЧисла"?
Если есть тип (или множество типов) и требуется найти все определения сущностей данного типа - это парсер.
Если требуется найти все упоминания конкретной именованной сущности - это парсер.
Никакие задачи на уровне, воспринимаемом компилятором, не требуют поиска внутри лексем.

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

БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 19:28

Парсер имеет следующие недостатки:
  • не парсит некорректный текст, т.е. им нельзя воспользоваться в произвольный момент во время редактирования
  • полный поиск требует, чтобы и файл проекта был корректным, т.е. если у нас тип упоминается в файлах тестов, которые не входят в проект, то он ничего не найдёт
  • не найдёт имя внутри строкового литерала (оно часто встречается там, в т.ч. и в компиляторе, и есть вызов команд по имени, и это обычно очень важная часть для понимания системы)
  • не найдёт имя в куске кода, который закомментирован или отключен препроцессором
  • время полного поиска сопоставимо со временем компиляции всей системы (порядка двух минут), или нужны изощрённые алгоритмы оптимизации и кеширования
  • не найдёт имя в настроечных файлах
  • не найдёт имя в отдельных файлах документации
  • во многих случаях типа не существует, например, для многих наборов констант нет перечислимых типов, а есть просто наборы имён, хорошо, если в них есть общая подстрока, а обычно и этого нет. Здесь, правда и поиск по тексту не поможет.
Поэтому поиск по словоформам в любом случае нужен.
Ещё раз прошу - перед тем, как кидаться категоричными высказываниями типа "ваш алгоритм некорректен", сначала немного подумать :) Понятно, что поиск по тексту без дисциплины именования не работает.
Последний раз редактировалось БудДен 26.04.21 19:34, всего редактировалось 2 раза.

БудДен
Сообщения: 1841
Зарегистрирован: 07.10.18 14:01

Re: Ещё раз о типах и значениях

Сообщение БудДен » 26.04.21 19:30

Выкинуть букву/окончание и перебрать несколько вариантов - это же нехитрая регулярная грамматика, которую умеет куча инструментов.
Да, но в ЯОС/A2 не только этого нет. Там даже нет нормального поиска по файлам, чтобы можно было открыть находку в среде разработке - для таких задач я сейчас пользуюсь VS Code, это неудобно, и поиска по словоформам в VS Code нет. Т.е. сделать надо, задача относительно простая и существенно повысит производительность труда. Если будет поиск в произвольном порядке - можно будет рассматривать Ваше предложение о том, чтобы использовать более естественный порядок слов в составных именах. Пока что, ввиду убогости поиска, даже те имена, которые я придумываю, уже выводят ситуацию из-под контроля, т.к. нет способа потом найти напридуманное.

MihalNik
Сообщения: 226
Зарегистрирован: 05.11.18 11:02

Re: Ещё раз о типах и значениях

Сообщение MihalNik » 26.04.21 19:41

БудДен писал(а):
26.04.21 19:30
Выкинуть букву/окончание и перебрать несколько вариантов - это же нехитрая регулярная грамматика, которую умеет куча инструментов.
Да, но в ЯОС/A2 не только этого нет. Там даже нет нормального поиска по файлам, чтобы можно было открыть находку в среде разработке - для таких задач я сейчас пользуюсь VS Code, это неудобно, и поиска по словоформам в VS Code нет. Т.е. сделать надо, задача относительно простая и существенно повысит производительность труда. Если будет поиск в произвольном порядке - можно будет рассматривать Ваше предложение о том, чтобы использовать более естественный порядок слов в составных именах. Пока что, ввиду убогости поиска, даже те имена, которые я придумываю, уже выводят ситуацию из-под контроля, т.к. нет способа потом найти напридуманное.
Так там же вроде текстовые файлы, которые можно обрабатывать под любой ОС.
Ну если надо прямо под ЯОС - лексер + поиск нужных подстрок в каждой лексеме.
Только без парсера будет дублирование одной и той же сущности для всех ее вхождений вперемешку с другими. Хотя можно ограничиться разделами деклараций TYPE,VAR,CONST и от каждой PROCEDURE|FUNCTION до BEGIN, т.е. исключить области от каждого BEGIN до одной из этих деклараций.

Как-то удивительно, что vs не умеет поиск по рег. грамматикам, даже не верится. Может проще другой какой-то редактор под свои нужды выбрать?

Ответить