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

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

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

Сообщение БудДен » 25.04.21 15:15

Совсем уж барахтаюсь в этом.

ТипЧислаЦелого или ТипЧислоЦелое или ТипЦелое?

"Значение,ИзвестноеВоВремяКомпиляцииТипаЧислаЦелого" или

"Значение,ИзвестноеВоВремяКомпиляцииЧислаЦелого" или

"Значение,ИзвестноеВоВремяКомпиляции,ТипаЧислоЦелое"?

"Значение перечисления" или "значение типа перечисления" или "значение типа перечислимого"?

"ЗначенияТипаНуль" или "ЗначениеТипаНуля"? (* имеется в виду нулевой указатель, который обозначается как НУЛЬ *)

Кому это покажется слишком простым, вот: "Посети значение, известное во время компиляции, перечислимого типа"

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

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

Сообщение БудДен » 25.04.21 15:20

Но ведь и это ещё фигня. Потому что на самом деле тут есть оттенки смысла. Выражение типа строка может иметь разный строковой тип, поэтому это не просто "выражение типа строка", а "выражение одного из строковых типов", т.е. "выражение строкового типа". И плюс к тому, "значение строкового типа" может быть строковым литералом, а может и не быть строковым литералом. Сам строковый литерал для единообразия должен называться "литерал строкового типа". Но я пытался ставить слово "тип" после слова "литерал", поэтому строковый литерал должен называться "литерал типа строкового". Ад.

Примерно то же и с числами. Целочисленный тип - это один из потенциально бесконечного множества целочисленных типов, включая цел32, бцел64 и т.п. Притом это тип чего-то. Т.е. вообще любой тип - это не "тип целое" и не "тип целый", а "тип целых" или уж "тип целого".

Короче говоря, есть серьёзные неоднозначности с тем, в какой форме должны участвовать названия типов. Получается, что в речи мы производим значительные сокращения для разговорных форм и "один из типов, обозначающих целые числа" превращается в "целый тип", а то и просто в "целое". Но в компиляторе нужно применять более полные формы. При том там будет не просто тип, а "определение типа" или "обращение к типу".
Последний раз редактировалось БудДен 25.04.21 15:49, всего редактировалось 1 раз.

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

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

Сообщение MihalNik » 25.04.21 15:42

БудДен писал(а):
25.04.21 15:15
ТипЧислаЦелого или ТипЧислоЦелое или ТипЦелое?
Вы где это слышали?
Можно сказать, что переменная целочисленного типа или типа целое число.
Ставить прилагательное после существительного ни один вменяемый человек в письменной речи не будет. Потому что это бурный поток необработанных мыслей.

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

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

Сообщение БудДен » 25.04.21 16:00

Давайте без резких высказываний про вменяемость. Сначала подумайте, а потом уже пишите так категорично. Иначе глупо получается.

В различных номенкулатурах сплошь и рядом ставится существительное перед прилагательным. Примеры:

https://efsol.ru/manuals/naming-template.html - "Шоколад (Milka/С клубникой со сливками/300г.)"

https://himreactiv.ru/catalog/ - "Среды питательные", "бумага индикаторная" и проч.

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

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

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

Сообщение БудДен » 25.04.21 16:07

P.S. а программирование - это всё же не совсем речь. В том-то и проблема, чтобы найти баланс между неточной, но короткой речью и чётким, но громоздким формальным языком. Притом кажется более правильным сначала сделать перекос в сторону формального языка, а уже потом пытаться срезать углы. Но получается так монструозно и столько нюансов, что не получается пока выработать этот формальный язык.

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

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

Сообщение MihalNik » 25.04.21 16:17

БудДен писал(а):
25.04.21 16:00
Давайте без резких высказываний про вменяемость. Сначала подумайте, а потом уже пишите так категорично. Иначе глупо получается.

В различных номенкулатурах сплошь и рядом ставится существительное перед прилагательным. Примеры:

https://efsol.ru/manuals/naming-template.html - "Шоколад (Milka/С клубникой со сливками/300г.)"

https://himreactiv.ru/catalog/ - "Среды питательные", "бумага индикаторная" и проч.

И ещё один пример: птичка называется "зяблик обыкновенный", а не "обыкновенный зяблик". Имя большую номенкулатуру, поневоле приходится всё именовать систематически. В лисокомпиляторе уж не меньше полусотни видов узлов синт. дерева. Если терминология будет нечёткой, то с ней будет трудно работать.
В языке номенклатуры не составляют сложных языковых конструкций. Потому что это просто словесные идентификаторы.
Там единственная задача - быстрого зрительного поиска сужением. Поэтому вначале зяблик или комар, а потом - какие они бывают.

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

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

Сообщение БудДен » 25.04.21 18:06

Необязательно зрительного, грепом тоже можно пользоваться, и, главное, фильтровать. При фиксированном порядке слов фильтровать по подстроке получится, при нефиксированном - не получится. Но согласен, у нас не задача про номенкулатуру, а номенкулатура плюс сверху шаблонные фразы про неё.

Вот примеры смыслов и их названий в лисокомпиляторе:
"один из типов целых чисел" (нет названия), "обращение к конкретному типу целых чисел в исходнике" (IntegerType), "значение, известное во время компиляции, тип которого является одним из типов целых чисел" (IntegerValue), "посетитель заходит в значение, известное во время компиляции, тип которого является одним из типов целых чисел" (VisitIntegerValue). Из опыта я скажу, что при чтении кода весьма непонятно, что значит IntegerValue или IntegerType (там, конечно, прежде всего паршивые комментарии). Я с этим всем разобрался, но это заняло время. Проходит неделя или попадается какой-то сложный контекст - может вылететь из головы и начинается буксовка мысли.

Как называть всё вышеперечисленное?

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

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

Сообщение MihalNik » 26.04.21 00:00

БудДен писал(а):
25.04.21 18:06
Необязательно зрительного, грепом тоже можно пользоваться, и, главное, фильтровать. При фиксированном порядке слов фильтровать по подстроке получится, при нефиксированном - не получится. Но согласен, у нас не задача про номенкулатуру, а номенкулатура плюс сверху шаблонные фразы про неё.

Вот примеры смыслов и их названий в лисокомпиляторе:
"один из типов целых чисел" (нет названия), "обращение к конкретному типу целых чисел в исходнике" (IntegerType), "значение, известное во время компиляции, тип которого является одним из типов целых чисел" (IntegerValue), "посетитель заходит в значение, известное во время компиляции, тип которого является одним из типов целых чисел" (VisitIntegerValue). Из опыта я скажу, что при чтении кода весьма непонятно, что значит IntegerValue или IntegerType (там, конечно, прежде всего паршивые комментарии). Я с этим всем разобрался, но это заняло время.
"Один из типов целых чисел" - это ЦелочисленныйТип или ТипаЦелогоЧисла
"обращение к конкретному типу целых чисел в исходнике" - непонятно что значит. Предписание (назначение) типа переменной?
Или уточнение целочисленного типа?
"значение, известное во время компиляции, тип которого является одним из типов целых чисел" (IntegerValue) - речь про целочисленную константу? Или предустановленную переменную?
"посетитель заходит в значение, известное во время компиляции, тип которого является одним из типов целых чисел" (VisitIntegerValue)
- опять не ясно что значит зайти в значение. Получить его? Если нет - то важен не факт, а кто/зачем.
Клиент посещает парикмахера - это одно. СЭС - другое. Налоговая - третья. Курьер по доставке еды - четвертое. В контексте это может быть понятно, а вот так вырвано из него - нет.
Слова "обращение/посещение" не передают никакого смысла, кроме действия с объектом (т.е. его метода в терминах ООП), очевидного из сигнатуры вызова, где он передается. Т.е. ровно тоже самое, что и "процедура".
БудДен писал(а):
25.04.21 18:06
Проходит неделя или попадается какой-то сложный контекст - может вылететь из головы и начинается буксовка мысли.
Это говорит о неудачности соответствующих названий, потому что они теряют какую-то часть сведений о функции именуемой сущности.
Поэтому надо подробно передавать полезную часть сведений, а не раздувать КЭП.
Например, если в Обероне запись "А(Б)" всегда означает процедуру/функцию "А" с параметром "Б", то синонимы слов "процедура" и "параметр" применительно к "А" и "Б" соответственно будут избыточны и равносильны "ПроцедураА_сПараметром(Б)".
БудДен писал(а):
25.04.21 18:06
Необязательно зрительного, грепом тоже можно пользоваться, и, главное, фильтровать. При фиксированном порядке слов фильтровать по подстроке получится, при нефиксированном - не получится.
Электронному поиску (современному) как раз все равно какой порядок слов. А номенклатурщики никогда грепом не пользовались, всегда работали с таблицами, фильтруя типизированные данные.

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

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

Сообщение БудДен » 26.04.21 11:53

"обращение к конкретному типу целых чисел в исходнике" - непонятно что значит. Предписание (назначение) типа переменной?
Или уточнение целочисленного типа?
Я отдельную тему про это заводил, там объяснено: http://вече.программирование-по-русски. ... ?f=6&t=415 . То, что Вы не понимаете - показывает, что без погружения в контекст и такое многословное объяснение непонятно.
"значение, известное во время компиляции, тип которого является одним из типов целых чисел" (IntegerValue) - речь про целочисленную константу? Или предустановленную переменную?
Речь про то, что нечто имеет значение 4, и мы знаем это (знаем само значение 4) уже во время компиляции. Константа ли это, литерал ли, или результат какого-нибудь SIZEOF(int), или результат TRUNC(4.4), вычисленный во время компиляции - об этом не говорится.
ТипаЦелогоЧисла
Почему "Типа"? Это в родительном падеже?
опять не ясно что значит зайти в значение. Получить его? Если нет - то важен не факт, а кто/зачем.
Это шаблон посетитель, мы уже обсуждали. Примеры посетителей - это смыслоуловитель, генератор объектного кода, генератор документации, переводчик, генератор форматированного исходника из дерева. Кто заходит - ясно по типу посетителя в точке применения или по тому, чей метод мы сейчас читаем. Зачем заходит - для выполнения своей задачи. А вот куда заходит - нужно выписать, потому что нельзя написать просто "зайти", нужно обязательно написать - куда, потому что иначе нельзя выразить двойную диспетчеризацию в том ООП, к-рое есть в АО. Ссылку на статью про шаблон посетитель я уже давал. Почитайте ещё раз, если непонятно, только не надо осуждать этот шаблон. Мне самому он не нравится, но у меня нет ресурсов прямо сейчас впилить в АО двойную диспетчеризацию и перепахать весь компилятор. Формат моей работы состоит в том, что я перевожу существующий код. Хорош он или плох - он решает свои задачи.
Слова "обращение/посещение" не передают никакого смысла, кроме действия с объектом (т.е. его метода в терминах ООП), очевидного из сигнатуры вызова, где он передается.
В том и дело, что не очевидно.
Это говорит о неудачности соответствующих названий
Да. Код я не меняю, а названия стараюсь улучшить, чтобы следующие читатели не мучались так же, как я. Хотя есть конечно другой вариант - перевести названия буквально, а к каждому объекту написать подробный комментарий. Третий вариант - завести тонну аббревиатур и пусть читатель перед чтением выпишет их (штук 10-20) на бумажку, которую прилепит на стенку рядом с монитором. Я, кстати, склоняюсь к тому, что это единственный возможный вариант. Можно ещё увеличить длину идентификатора (в компиляторе есть ограничение, я его уже увеличивал раза два, технически проблемы нет). Но когда идентификатор в ширину не помещается на экране и требует переноса на другую строку - это уже явный перебор. А к тому идёт.
Электронному поиску (современному) как раз все равно какой порядок слов.
Вы где-нибудь видели поиск в ИСР, позволяющий искать ВотТакиеСлова с помощью поиска по отдельным словам в любом порядке? Я сам никогда не пользовался ни в одной среде разработки таким поиском, никогда не видел ни одного человека, который бы им пользовался и даже про него никогда нигде не читал. Мне никогда не приходилось писать регулярное выражение, которое бы так искало. Т.е. это может быть какой-то теоретически возможный поиск, но не то, чем пользуются реальные люди. Возможно, я, конечно мало видел людей и программы, но было бы неплохо разубедить меня ссылкой.

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

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

Сообщение MihalNik » 26.04.21 13:11

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

БудДен
Сообщения: 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

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

Ответить