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

End

Начать итерацию заново — и, вопреки ожиданиям, не отдать при этом тик

У end нет полей. Он делает ровно одно: кладёт в @counter число строк программы. Это за краем, а номер за краем счётчик обнуляет — программа начинается с первой строки.

тик 0
Операция0
=
Конец1
Операция2
=
@counter0number
итерацийnullnull
послеnullnull

Нажмите «шаг» четыре раза: итераций станет двойкой, а после останется пустым. Строка ниже end недостижима — до неё выполнение не доходит никогда.

Это первое, что стоит понять: end не нужен для того, чтобы программа повторялась. Она и так начинается заново, когда кончаются строки.

end нужен, когда итерацию надо оборвать раньше: выйти из ветки, не выполнив всё, что написано ниже.

jump 4 greaterThanEq запас 100
set мало 1
end
set мало 0

Без третьей строки обе ветки выполнились бы подряд. Про это — урок «Условие и ветвление».

Здесь и живёт неожиданность. wait отдаёт остаток тика, а end — нет: он только двигает счётчик. Если у процессора остались инструкции в запасе, он тут же пойдёт по программе заново, в том же тике.

Одна и та же программа из одной полезной строки на гиперпроцессоре, 60 тиков:

Хвост Итераций за секунду
ничего 1475
end 738
wait 0 59

end вдвое медленнее пустого хвоста ровно потому, что сам считается инструкцией: итерация стала из одной строки двумя. Никакой паузы он не даёт.

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