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

Переводим термины и придумываем новые, в т.ч. для ЯОС
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 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
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

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

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

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

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

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

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

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

БудДен
Сообщения: 2839
Зарегистрирован: 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
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MihalNik
Сообщения: 244
Зарегистрирован: 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 не умеет поиск по рег. грамматикам, даже не верится. Может проще другой какой-то редактор под свои нужды выбрать?

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

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

Сообщение БудДен » 26.04.21 20:58

Я человек тёмный, не знаю, что такое регулярные грамматики. Это имеются в виду регулярные выражения? Их оно умеет, но я их вообще не люблю, дичь какая-то. Вроде язык программирования, но в нём нет никаких способов повторного использования кода, кроме копирования и вставки. Невозможно создать библиотеку рег.выражений. Удивительно, почему миллионы программистов принимают эти выражения за данность и не видят фатальных изъянов этой технологии. Возможно, оно ещё что-то умеет, для него можно писать плагины с большими возможностями, но стратегия разработки ЯОС состоит в стремлении к самодостаточности. Среда разработки в ЯОС на три головы выше любой другой для работы с кодом АО, т.к. она интегрирована в систему и хорошо понимает язык. Нужно эту среду развивать, а не стороннюю.
Последний раз редактировалось БудДен 26.04.21 21:01, всего редактировалось 1 раз.

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

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

Сообщение БудДен » 26.04.21 20:59

> Ну если надо прямо под ЯОС - лексер + поиск нужных подстрок в каждой лексеме.

Да, поиск на базе лексера - это хорошая отправная точка. Но его нет. Поиск на базе парсера - это тоже хорошо, как важное дополнение. И у меня даже есть зачатки его - ведь движок перевода (который заодно и рефакторинг "переименуй идентификатор") требует как раз решения задачи "найди все ссылки на данное имя". Но это дополнение, а поиск текста - это совершенно необходимый инструмент, без которого вообще нельзя работать. Так вот с внедрением словоформ русского языка этот поиск отваливается.

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

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

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

БудДен писал(а):
26.04.21 20:59
И у меня даже есть зачатки его - ведь движок перевода (который заодно и рефакторинг "переименуй идентификатор") требует как раз решения задачи "найди все ссылки на данное имя".
Так отличие только в том, что вместо равенства строк проверяется вхождение нескольких подстрок и как раз без учета порядка следования даже проще (для учета порядка нужно обрывать), при поиске в одной и той же возможны наложения, но вряд ли это будет сколько-нибудь частой проблемой, скорее всего решит 99% задач. А если надо 100% точность, все равно получится подобие регулярок. Уж поиск-то подстроки в строке есть? Проблема может быть если оно слишком медленно работает. Если даже такой функции нет - надо переписать готовую и отлаженную с делфи/фрипаскаля на Оберон. Там, может, пара-тройка десятков строк.

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

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

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

Нужно именно отбрасывание окончаний, чтобы ПутьВоВремени при поиске по словоформам Пут~Врем~ не подхыватывал слово ПутешественникВоВремени

Независимость от порядка слов должна быть всё же опцией.

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

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

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

БудДен писал(а):
26.04.21 23:12
Нужно именно отбрасывание окончаний, чтобы ПутьВоВремени при поиске по словоформам Пут~Врем~ не подхыватывал слово ПутешественникВоВремени

Независимость от порядка слов должна быть всё же опцией.
Тогда см. Джеффри Фридл "Регулярные выражения" - классика жанра.
Вам нужно либо описать универсальное окончание, либо разрешить пропуск нескольких букв. Второе сильно быстрее и проще, т.к. вероятность/частота ложных совпадений будет крайне мала.

С поиском подстроки в ЯОС тоже самое - последовательно за найденным предыдущим фрагментом с проверкой, что расстояние не превышает порога. Можно передавать в функцию поиска пороги для каждого слова, если возможны сокращения сильнее, чем на окончания.

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

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

Сообщение БудДен » 27.04.21 01:16

Павиа писал - лемматизация и стемминг - как-то так:

https://github.com/ermakovpetr/stemka

Т.е. конечное количество возможных окончаний для любой основы. Можно даже забить фиксированный словарь и пополнять его по мере надобности (сделав частью исходника).

Ответить