Принципы именования сущностей

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

Принципы именования сущностей

Сообщение БудДен » 07.05.21 01:05

Предлагается такое:
  • однородные сущности должны грепиться, но не обязательно базовый класс должен грепиться тем же запросом
  • стремимся к размеру не более 40 литер (чтобы хотя бы 3 имени влезало на строку, которая на современном мониторе имеет ширину порядка 120 литер)
  • поиск будет сделан со стеммингом, чтобы имя грепалось, даже если оно поставлено в словоформе.
  • допустимы знаки препинания: ¡¿˛ˉ«» - соответственно, изображают !?,-
  • если смысл - словосочетание, то склоняем
  • часто повторяемые куски можно сокращать, можно обрезать окончание (согласно стеммингу) или использовать аббревиатуры. При обрезании конца слова стараться, чтобы урезанное слово читалось без особой подготовки (сразу думаем о возможных неоднозначностях)
  • ЯП АО является чувствительным к регистру идентификаторов
  • идентификатор может быть словосочетанием. При его чтении он бьётся на слова, с помощью заглавных букв, знаков препинания и символа подчёркивания. Правила, как происходит этот разбиение, кажутся с начала интуитивно понятными, однако для цифр и аббревиатур эти правила весьма нетривиальны. Их необходимость, и сами правила описаны в комментариях в файле ЛексерДляПоискаВФайле.ярм, и там же есть код, который умеет их разбирать. Примеры можно найти в тестах для этого модуля (в конце).
  • параметры экспортируемых процедур должны быть с большой буквы. Причина - они часто совпадают с возможными будущими ключевыми словами
  • в остальных случаях, первую букву первого слова можно делать большой или маленькой для целей выражения. Например, иногда принято, что тип пишется с большой буквы (т.к. это имя собственное), а имя переменной, одноимённое типу - с маленькой.
  • у объявления сущности, видимой за пределами модуля (а лучше - и у локальной) должен быть доп. атрибут "полное название", в котором все сокращённые слова и аббревиатуры расшифрованы (надо добавить его в компилятор!)
При выборе переводов пытаемся пользоваться уже сложившейся культурой. Достижения культуры собираем в словаре www.semantic-dict.ru . Нужно понимать, что русскоязычных ЯП много, в них принимались разные решения, зачастую конфликтующие между собой. Приоритеты при выборе переводов для ЯОС менялись со временем. Изначально мы пытались придумать переводы, оптимальные для использования, т.е. точные и краткие, даже в тех случаях, когда они не соответствуют ныне принятой терминологии. Теперь мы пытаемся подделаться под КуМир. Это не идеальное решение, поскольку КуМир изначально планировался как маленький язык, а ЯОС - большая система. Однако таковы суровые реалии рынка.

Для перевода мы должны поискать (в порядке убывания приоритета), как это же понятие переведено в:
  • ЯОС
  • Школьная программа по любым предметам, где эта сущность может встретиться
  • КуМир
  • PascalABC
  • 1С:Предприятие
  • Excel/LibreOffice
  • Школьная сборка информатики-XXI
  • Глагол
В этой теме важен только ПОСТ, обсуждения не важны!
Последний раз редактировалось БудДен 18.03.22 13:39, всего редактировалось 9 раз.

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 09:18

Я вот думаю, не ошибся ли я здесь. Аббревиатуры почему-то мне попадаются редко, а вотСловаС_однобуквеннымиСоюзамиВ_середине - сплошь и рядом, поэтому текст буквально кишит подчёркиваниями. Поэтому возникает мысль, что нужно выделять подчёркиваниями аббревиатуры, а не заглавные буквы. Т.е. будет "ВотСловаСОднобуквеннымиСоюзамиВСередине", но при этом "СпутникИз_СССР". Всё это кажется прекрасным, проблема начинается в тот момент, когда идут две аббревиатуры подряд, слово начинается с аббревиатуры или является аббревиатурой, какое-нибудь ВИ. Что такое "ВИ"? Это "в и" или аббревиатура "ВИ"? Можно попробовать ввести такое правило:
  • аббревиатура должна с одной стороны быть отделена подчёркиванием
  • если слово состоит из одной аббревиатуры, то подчёркивание добавляется сзади
  • если перед аббревиатурой есть что-то ещё, то и перед ней ставится подчёркивание
  • каждое подчёркивание принадлежит только одной аббревиатуре.
Тогда ВИ превращается в ВИ_, а "ВИ СССР" - в ВИ_СССР_, поскольку первое подчёркивание уже занято. Притом СпутникВ_СССР, поскольку Из - не аббревиатура. Для однобуквенных слов неважно, аббревиатура ли это, поэтому они в любом случае не выделяются (хотя вроде ничто не мешает их выделять, если они именно аббревиатуры).

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 10:17

Мнение Microsoft : сокращения нужно переводить в нижний регистр, за исключением сокращений, состоящих из двух букв. Как при этом решить конфликты, не говорится. Например, что делать, если попадутся подряд однобуквенные слова и сокращения из двух букв? ADCAdapter - это "A DC Adapter" или "AD C adapter"? Возможно, в английском это не может случиться, т.к. у них вроде нет однобуквенных слов, кроме "а". В русском - по-другому: "в ЛА дыра" = "ВЛАДыра" = "ВЛ а дыра".


https://stackoverflow.com/questions/155 ... -camelcase

А вот их правила целиком

В общем, получается такой вариант для русского языка: все аббревиатуры пишутся так же, как и обычные слова, даже двухбуквенные.
Последний раз редактировалось БудДен 02.07.21 10:37, всего редактировалось 1 раз.

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 10:25

А вот ещё:

https://stackoverflow.com/questions/450 ... g-acronyms
Here's what i like, and this is for Java: classes start with upper-case, fields with lower case, and acronyms do not affect that. That leads to things that look like this,

UrlConnection urlConnection;
The problem is that if you try to apply a rule where you always upper case acronyms, or even the first letter of an acronym irrespective of it being a field or class name, you get strange things like,

URLConnection URLConnection; // huh?
In other words, the field starts with lower case rule contradicts with a hypothetical uppercase acronym rule. You can't apply them both.

Even the Java SDK has examples of both, within a single class name: HttpURLConnection. You'd think it would be either HTTPURLConnection or HttpUrlConnection
Исходя из этой свободы использования заглавной или строчной буквы для различения имени типа от имени переменной, получается, что надо писать СпутникИзСсср. И тогда вообще не нужны подчёркивания, и правило резко упрощается: заглавная буква = новое слово, неважно, аббревиатура или нет.

Остаётся неясным, зачем они оставляют аббревиатуры из двух букв? Ведь вроде бы там возникает ровно та же проблема.

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 10:28

https://habr.com/ru/post/113044/ - тут переведена статья, в которой дан единственный аргумент за использование подчёркиваний - константы в Си. Но нас это не касается.

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 14:24

Ого-го! И тут мы упираемся в то, что много слов уже набрано прописными, такие, как ORD, АДРЕС и НУЛЬ.
Последний раз редактировалось БудДен 02.07.21 14:30, всего редактировалось 1 раз.

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 14:30

Тогда похоже, что так:

* Ю>1 прописных подряд и за ними идёт подчёркивание - то это слово (аббревиатура)
* Ю>1 прописных подряд и за ними строчная - это Ю-1 однобуквенных и слово, начинающееся с последней буквы
* Ю>0 прописных подряд и за ними не буква и не цифра и не знак подчёркивания - тогда из прописных составляется слово. Но и так плохо, АК - это „АК“ = „Автомат Калашникова„" и в то же время - "„а к“ = „а иди ты к...“". Но если мы будем считать такую ситуацию несколькими однобуквенными, то НУЛЬ превратится в „н у л ь“. Опять мы в тупике...

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

Re: Принципы именования сущностей

Сообщение БудДен » 02.07.21 16:25

Вроде так должно сработать.

Знак подчёркивания заменяет пробел. Идентификатор "Послать НУЛЬ к", если НУЛЬ обязательно должен быть с большой буквы, тогда можно записать не как
ПослатьНульК и не как ПослатьНУЛЬК, а ПослатьНУЛЬ_к

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

Re: Принципы именования сущностей

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

МихалНик задал вопрос и я долго не мог понять, почему у меня не сделано, чтобы именовалось так:

ЭВМНеРаботает - т.е. идущие подряд несколько больших букв, а за ними строчная делятся так, что из всех
заглавных составляется слово, а последняя, перед строчной, уходит во второе слово, т.е. получается

"ЭВМ не работает"

У меня другое правило: в таких случаях ЭВМ рассыпается на буквы и получается

"Э В М не работает"

И вот наконец вспомнил, почему:

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

https://tvoygit.ru/budden/ja-o-s/media/ ... ВФайле.ярм

Вот цитата:

Код: Выделить всё

(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры2 'СлаваСССР' '2 2 ' ~ *) (* Слава СССР *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры2 'СССРЖив' '2 2 2 2 2 ' ~ *) (* С с с р Жив *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры2 'СССР_Жив' '2 5 2 ' ~ *) (* СССР Жив *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры3 'СССРж' '2 2 2 2 ' ~ *) (* С с с Рж *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры4 ' ИЙога ' '1 2 2 1 ' ~ *) (* И йога *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры5 'ИКНам' '2 2 2 ' ~ *) (* И к нам *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры5 'Опять2йка' '2 2 ' ~ *) (* Опять 2йка *)
(* ЛексерДляПоискаВФайле.Тест СловаИАббревиатуры5 'Опять25' '2 2 ' ~ *) (* Опять 25 *)

Monk
Сообщения: 11
Зарегистрирован: 10.10.18 16:41

Re: Принципы именования сущностей

Сообщение Monk » 07.03.23 06:49

У 1С так:
ВотСловаСОднобуквеннымиСоюзамиВСередине
ВотСловоСАббревиатурой_ЭВМ
ОрганизацияООО_СГМУП
В_ЛА_дыра
аббревиатура ВЛ
два слова А_Б


То есть, одна большая буква = слово. Если больше двух больших подряд или все большие, то аббревиатура. Если нужна аббревиатура из двух букв в слове или две большие = два однобуквенных слова, выделяем/разбиваем подчёркиванием.

Юрий
Сообщения: 35
Зарегистрирован: 11.12.18 17:08

Re: Принципы именования сущностей

Сообщение Юрий » 08.03.23 00:21

идентификатор может быть словосочетанием. При его чтении он бьётся на слова, с помощью заглавных букв, знаков препинания и символа подчёркивания. Правила, как происходит этот разбиение, кажутся с начала интуитивно понятными, однако для цифр и аббревиатур эти правила весьма нетривиальны. Их необходимость, и сами правила описаны в комментариях в файле ЛексерДляПоискаВФайле.ярм
И зачем такое насилие над русским языком? Не проще ли написать «лексер для поиска в файле»? Распознавание идентификаторов, состоящих нескольких слов, не так уж и сложно. Могу поделиться решением, если надо. Пробел — самый естественный разделитель слов.

Если хочется аббревиатур, я бы сделал так:

Код: Выделить всё

ОДИИНС = очень длинный идентификатор из нескольких слов
И после этого имеем аббревиатуру-синоним.

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

Re: Принципы именования сущностей

Сообщение БудДен » 08.03.23 02:07

Речь в теме идёт о принципах именования сущностей исключительно в ЯОС. Поскольку проект ЯОС заморожен,
то нет и предмета для переговоров.

Однако, то, что я сделал, было сделано исходя из следующего:
* для уже существующего ЯП, в котором пробел в идентификаторе не допускается
* исходя из опыта работы с языками, в которых пробел допускается.
* исходя из обдумывания последствий разрешения пробела

Хотите вставить пробел в идентификатор - будете ходить по граблям. Но делайте, конечно, что хотите, удачной прогулки. У вас даже есть попутчик для именно этой прогулки, его зовут Дмитрий Кузнецов, правда, похоже, что он оберонщик. Он, кстати, тоже, кажется, собирается делать свою виртуальную машину. Короче, даёшь каждому киберпатриоту по своей виртуальной машине!
Дмитрия Кузнецова можно найти в чате ЯОС.

Юрий
Сообщения: 35
Зарегистрирован: 11.12.18 17:08

Re: Принципы именования сущностей

Сообщение Юрий » 08.03.23 19:01

Хотите вставить пробел в идентификатор - будете ходить по граблям.
А в чём сложности, где Вы увидели грабли? Просто любопытно. Может, Вы уже где-то писали об этом и Вам лень повторять, тогда дайте ссылку.

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

Re: Принципы именования сущностей

Сообщение БудДен » 08.03.23 22:38

Не думаю, чтобы я об этом где-то писал. Но я не вижу выгоды для меня. Это знания, которые в какой-то степени мной выстраданы. Вы же всё равно не подключитесь к проекту ЯОС, а продолжите пилить свой велосипед. Да и проект ЯОС мне не особо уже нужен. Пусть это останется моим ноу-хау. Объединитесь хоть с кем-нибудь, найдите компромиссы с Евгением или с Дмитрием Кузнецовым, начните делать хотя бы велик-тандем. Тогда расскажу.

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

Re: Принципы именования сущностей

Сообщение БудДен » 08.03.23 22:41

Monk писал(а):
07.03.23 06:49
У 1С так:
ВотСловоСАббревиатурой_ЭВМ
ОрганизацияООО_СГМУП
В_ЛА_дыра
аббревиатура ВЛ
два слова А_Б

То есть, одна большая буква = слово. Если больше двух больших подряд или все большие, то аббревиатура. Если нужна аббревиатура из двух букв в слове или две большие = два однобуквенных слова, выделяем/разбиваем подчёркиванием.
Я об этом не знал. Если бы знал - постарался бы последовать этому соглашению. Соглашение Microsoft не помню по какой причине не подошло. Может быть и это бы не подошло, но скорее всего всё было бы норм. Главное требование тут, чтобы не нужен был словарь языка для токенизации, и чтобы не было неоднозначностей. Вроде это соблюдается, хотя я детально не проверял.

Юрий
Сообщения: 35
Зарегистрирован: 11.12.18 17:08

Re: Принципы именования сущностей

Сообщение Юрий » 08.03.23 23:04

Так и внесена ясность
1) чем плохи идентификаторы в пробелах
2) чем не устраивает явное задание аббревиатуры-синонима

Ладно, у меня лексический анализатор безошибочно разбирает многословные идентификаторы, меня это устраивает. Но должен отметить, я далеко не первый, у кого это работает. Ещё в 1960-х годах в СССР был такой язык ЯРМО: http://compiler.su/entuziasty-razrabotc ... kty.php#80

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

Re: Принципы именования сущностей

Сообщение БудДен » 09.03.23 09:33

Против синонимов ничего не имею в теории, хотя на практике не пробовал.

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

Re: Принципы именования сущностей

Сообщение БудДен » 09.03.23 09:45

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

Аватара пользователя
Лис [Вежливый]
Сообщения: 561
Зарегистрирован: 08.10.18 13:32

Re: Принципы именования сущностей

Сообщение Лис [Вежливый] » 15.03.23 05:30

Юрий писал(а):
08.03.23 23:04
язык ЯРМО
Оказывается, есть операционка "Феликс", написанная на нём.
Если исходить из того, что в языке ЯРМО всё записывается по-русски, то получается, что и
операционка эта написана на русском языке. То есть цели проекта БудДена давно достигнуты.
Нужно тупо поехать в ГПНТБ, узнать там, где взять исходники и
запустить в эмуляторе БЭСМ-6 на современном российском процессоре.
Шах и мат, осеписатели!

Ответить