spamsink: (Default)
[personal profile] spamsink
Если бы я знал ответ на более или менее ретрокомпьютерный вопрос, который хочу задать, из него могла бы получиться неплохая задачка для олимпиад по лингвистике. А пока это только вопрос в воздух.



Имеется двоичный код (считай, "черный ящик"), реализующий функциональность хранилища данных, позволяющий работать с массивами пар "ключ-данные", хранящихся на внешних устройствах, адресуемых по "логический номер устройства-номер блока"

Известен неполный интерфейс к нему (мелкие детали опущены):

  • создать новый каталог верхнего уровня, задавая Номер Устройства/Начальный Номер Блока/Число Блоков для каталога
  • создать в каталоге верхнего уровня массив, задавая имя массива и НУ/ННБ/ЧБ, где массив будет храниться
  • открыть массив по имени, он становится текущим
  • занести в текущий массив запись "ключ-данные" (если запись с таким ключом уже есть, возвращается ошибка)
  • считать из текущего массива данные по ключу
  • удалить из текущего массива запись по ключу
  • модифицировать новыми данными в текущем массиве запись по ключу (если записи с таким ключом не было, выполняется как "занести")


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

  • создать каталог: 10-21
  • создать массив: 31-11-15-21-26-11-14-12-10-21
  • открыть массив: 31-11-14-12-25
  • занести запись: 11-15-21-26 (в случае ошибки отрабатывает только 11-15)
  • считать данные: 11-14-22
  • удалить запись: 11-14-23-27
  • модифицировать: 11-15-00-21-26-40 (подаётся на вход и выполняется, если такой записи не было); если была, то вместо этого выполняется 11-15-20


Предлагается, используя навыки логического мышления, вывести из этого смысл и назначение использованных микрокоманд, насколько это возможно. У меня есть несколько идей, но полной ясности я не достиг.

Date: 2022-02-06 09:42 am (UTC)
From: [personal profile] sassa_nf
how do you know all these have distinct functions manipulating high level abstractions like catalogue or array?

what if 11 is "push r0 onto operand stack"

what I find "inconsistent" in your description, is:

> создать массив: 31-11-15-21-26-11-14-12-10-21
> занести запись: 11-15-21-26

From the second line we conclude 11-15-21-26 refers to "key" and "value" to store somewhere. But there is no apparent "value" to store in 31-11-15-21-26, if we choose 31 to only be "cd /".

If we assume that the creation of array is the remainder of the clause, "11-14-12" followed by "создать каталог" "10-21" (which possibly means arrays are associative), then "11-14-12" seems to be a read-only part of the statement, as it is also used in "открыть массив", where we don't expect any modification operations.

> подаётся на вход и выполняется, если такой записи не было

it is unclear why in this case it would be different from "занести запись", of which we see "11-15" and "21-26". So one would expect "00" to be a "conditional", but it would need executing, wouldn't it, whereas you say "11-15-20" gets executed.

Date: 2022-02-06 09:46 am (UTC)
From: [personal profile] sassa_nf
for example, one might say "11-15" is "create a slot for a key", and "11-14" is "locate the slot for a key", but "модифицировать" shouldn't need to create it, if it exists - and yet, you say "11-15" is executed in both cases, when the entry exists and when it doesn't exist.
Page generated Jul. 13th, 2025 05:18 am
Powered by Dreamwidth Studios