Перейти к содержимому

Ячейка памяти

Память процессора умирает вместе с правкой программы. Ячейка помнит — и достают из неё по номеру места

простоНужно знать: Связи и getlink, Пустота: null

Переменные процессора — его личное дело: другой процессор их не видит, а при правке программы они обнуляются. Общая и долгая память живёт на карте отдельным блоком: ячейка памяти и блок памяти. read достаёт из неё значение по номеру места.

тик 0
Чтение0
=
Чтение1
=
Чтение2
=
Печать3
Печать4
Печать5
Печать6
Вывод печати7
@counter0number
запасnullnull
расходnullnull
пределnullnull

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

Строка читается как «переменная = откуда адрес»

Заголовок раздела «Строка читается как «переменная = откуда адрес»»
Поле Что в нём
первое куда положить прочитанное
второе откуда читаем — здесь это ячейка или блок памяти, но бывает и другое
третье адрес: номер места, считая с нуля
read запас cell1 0

Мест в ячейке 64, в блоке памяти 512. Спрашивать об этом саму память умеет sensor:

sensor мест cell1 @memoryCapacity

Адрес усекается, а за границей лежит пустота

Заголовок раздела «Адрес усекается, а за границей лежит пустота»
тик 0
Чтение0
=
Чтение1
=
Чтение2
=
Чтение3
=
Информация4
=
у
@counter0number
дробныйnullnull
пустоеnullnull
заГраницейnullnull
отрицательныйnullnull
местnullnull

Здесь видно оба правила сразу:

  • read дробный cell1 1.9 достаёт место 1, а не 2: дробная часть адреса отбрасывается, а не округляется. 1.9 и 1.0 — один и тот же адрес;
  • read заГраницей cell1 64 даёт null. Мест 64, они с нуля до 63, и шестьдесят четвёртого нет — но ошибки тоже нет: переменной просто присваивается пустота. Отрицательный адрес — то же самое;
  • read пустое cell1 7 даёт 0: место есть, оно внутри ячейки, и в нём лежит ноль.

Перебор всей памяти — обычное дело, и границу для него лучше спрашивать, а не вписывать числом:

sensor мест cell1 @memoryCapacity
set адрес 0
read значение cell1 адрес
op add сумма сумма значение
op add адрес адрес 1
jump 2 lessThan адрес мест

С числом 64 вместо мест программа сломается молча в тот день, когда ячейку заменят на блок памяти: она пройдёт первые 64 места из 512 и решит, что остальное пусто.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.