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

Запись в ячейку

Одна строка, три поля — и значение переживает и итерацию, и правку программы, и сам процессор

write — это read наоборот. Поля стоят в том же порядке, и первое из них теперь значит «что записать»:

write итераций cell1 0
тик 0
Чтение0
=
Операция1
=
Ввод2
Печать3
Печать4
Вывод печати5
Ждать6
@counter0number
итерацийnullnull

Счётчик здесь живёт не в переменной, а в памяти: итерация начинается с того, что программа достаёт прошлое значение, и кончается тем, что кладёт новое.

В этом примере — незачем: переменная справилась бы сама. Разница видна, когда программу трогают.

Что случилось Переменная Ячейка
прошла итерация помнит помнит
программу отредактировали обнулилась помнит
процессор снесли и поставили заново обнулилась помнит
смотрит другой процессор не видит видит

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

Адрес Что будет
2.9 запись в место 2: дробная часть отбрасывается
64 у ячейки ничего: строка выполнится, память не изменится
-1 то же самое — ничего

Запись затирает то, что лежало по адресу, целиком. Ни «добавить к тому, что было», ни «записать половину места» нельзя: чтобы увеличить число в памяти, его сначала читают.

read счёт cell1 0
op add счёт счёт 1
write счёт cell1 0

Три строки вместо одной — обычная цена памяти. Поэтому счётчик, который нужен только внутри итерации, держат в переменной, а в память кладут то, что должно её пережить.

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