Stone Bucket — программирование в духе стимпанка

Дата: 20.12.14
Автор:
1 комментарий
Цена: Free
Скачать


Я обожаю выискивать в AppStore приложения для юных гениев и возиться с ними — как с юными гениями, так и с приложениями. (: Моя целевая аудитория — это дети от 12–13 лет, а мои целевые интересы связаны прежде всего с точными науками. Сегодня я хочу предложить вашему вниманию расказ об очередном приложении для юных программистов.

Напомню для начала, что некоторое время тому назад я писал об эмуляторе машины Тьюринга. Сегодня будет нечто подобное. Встречаем — регистровая машина. Концепция была придумана в конце 1940-х годов для тех же целей — в интересах теоретических исследований алгоритмов. В наши дни встречается повсеместно, как элементарное подмножество возможностей микропроцессоров, и программист на ассемблере моментально увидит кучу всего знакомого. Хотя, повторюсь ещё раз, всё абсолютно доступно для детей, и не то что от двенадцати, а уже лет от десяти.

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

Всего возможно два типа правил:

  • положи орех из кучи в корзину такую-то, после этого смотри правило такое-то.
  • убери орех из корзины такой-то в кучу, после чего смотри правило такое-то; если же эта корзина пуста, то смотри правило такое-то.

Можно также уточнить обезьяне задачу, чтобы в некоторых случаях вместо „смотри правило такое-то“ она прекращала работу совсем.

Теперь назовём корзины регистрами, обезьяну — процессором, количество орехов в корзине — содержимым регистра (очевидно, оно является целым неотрицательным числом), а набор правил — программой. Можно ещё назвать операцию „положить орех в корзину“ инкрементом регистра, а операцию „убрать орех из корзины“ — декрементом регистра. Вуаля, вот вам и регистровая машина.

Разработчик приложения под названием „Stone Bucket“ воспользовался несколько другой визуальной концепцией, более в духе стимпанка, но суть от этого никак не изменилась. Творение его абсолютно бесплатно, выглядит красиво и впечатляюще… вот и давайте его рассмотрим.

Stone-Bucket 1

Вместо неглупой обезьяны здесь манипулятор с гидравлическим приводом и гравилучом, вместо орехов какие-то металлические шарики техногенного вида. Корзины можно так и называть корзинами, суть от этого не меняется; всего их четыре штуки и обозначаются они для удобства буквами A,B,C,D. Но я, с вашего позволения, буду говорить об этих буквах, как об именах регистров. Программа изображается простым набором условных обозначений. На приведённом выше рисунке она состоит из двух правил, вот они крупным планом:

IMG_0051

Правило 1 буквально означает: „убери один шарик из регистра А и переходи к правилу 2; если же регистр пуст, то остановись“. Правило 2 говорит: „положи шарик в регистр В и переходи к правилу 1“. Нетрудно понять, что по окончании работы регистр А будет пуст, а к содержимому регистра В добавится столько орехов, сколько изначально содержалось в А. Если же В был пуст, то произойдёт перенос содержимого из регистра А в регистр В. Это можно коротко обозначить следующим образом:

(A,B,?,?) -> (0,A+B,?,?)

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

Для написания и понимания таких программ нужно знать ровно три английских слова: „go“ — „иди“, „empty“ — „пусто“, „stop“ — „стоп“. Суть действия — положить или убрать — изображается стрелочкой (и, для наглядности, цветом правила).

В правом нижнем углу находится пульт управления всем этим безобразием:

IMG_0052

Его правая колонка отвечает за редактирование и исполнение программы:

  • RUN — запустить программу;
  • NEW CMD — добавить правило в программу;
  • DEL CMD — уничтожить правило из программы;
  • движок регулирует скорость работы манипулятора (то есть, фактически, скорость мультипликации на экране).

Редактированию тоже присуща некоторая стимпанковость. (: Правило всегда добавляется в самый конец, и уничтожается тоже из самого конца, так что если вам надо из середины — как хотите, так и обходитесь. (: Впрочем, может это и к лучшему, ибо стимулирует сначала подумать и прикинуть программу на бумажке. Ну и в любом случае, объёмы здесь небольшие, так что проблем не вызовет. Что же касается уже существующих правил, то они изменяются очень просто: тыкание пальцем на том или ином элементе циклически меняет его значения в допустимом диапазоне. В силу небольших объёмов это опять-таки достаточно удобно.

На экране помещается до шести правил программы. Если добавить ещё, то перспектива начнёт изменяться, открывая новый вид на лабораторию, в которой всё и происходит:

Stone-Bucket 2

Но больше десяти правил использовать практически нереально. Во-первых, изменение перспективы замедляет мультипликацию; во-вторых, будет слишком мелко и элементы начнут наезжать друг на друга. Но и десять правил программы — это немало, как мы увидим позже.

А пока вернёмся к панели управления, точнее, к её левой части. Там есть кнопка HELP, для вас практически бесполезная — в этой статье вы найдёте намного больше информации, причём на русском языке. (: Но вот кнопка RESET очень даже полезна! Нажать её — и манипулятор быстренько приведёт все регистры к такому состоянию, которое показано рядом с кнопкой. Удобно для задания начальных данных перед выполнением программы… а заодно и для прерывания зациклившихся программ. (: Для каждого регистра можно задать значение инициализации из диапазона 0–5, изменение происходит при тыкании пальцем имени регистра.

Теория гласит, что подобная регистровая машина с бесконечным числом регистров является алгоритмически полной системой — то есть на ней может быть реализована программа для любой вычислимой функции. В нашем случае регистров всего четыре, и это значительно ограничивает возможности… да ещё практическое ограничение на десяток правил программы…

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

  • Копирование регистра. (A,0,0,?) -> (A,A,0,?).
  • Обмен регистров (А,В,0,?) -> (В,А,0,?).
  • Сложение с сохранением. (A,B,0,0) -> (A,B,A+B,0).
  • Вычитание с сохранением. (A,B,0,0) -> (A,B,A-B,0). Подразумевается, конечно, что A>=B.
  • Деление на три части. (A,0,0,0) -> (0,A/3,A/3,A/3). Если деление нацело невозможно, то в каждом из трёх регистров величина А/3 может быть округлена в любую сторону, но сумма регистров В+С+D должна быть равна исходному значению А.
  • Умножение. (A,B,0,0) -> (A,0,AB,0).
  • Деление нацело (A,B,0,0) -> (*,*,A/B,*). Подразумевается, что 0<В. Регистр С должен содержать целую часть частного А/В. В прочих регистрах можно оставить что угодно.
  • Из трёх регистров А,В,С два содержат нули, а один единицу. Переписать в этот ненулевой регистр содержимое регистра D, обнулив последний.
  • Косвенный инкремент/декремент. Будем называть регистр D индексным, а регистры А,В,С — нулевым, первым и вторым регистрами данных соответственно. В индексном регистре содержится одно из трёх чисел 0,1,2. Увеличить/уменьшить на единицу значение соответствующего регистра данных. Индексный регистр должен сохранить начальное значение.

Как видно, даже этого достаточно для реализации целочисленной арифметики! Если бы в нашем распоряжении было восемь регистров вместо четырёх, мы могли бы уже работать с положительными рациональными числами; десяток регистров позволил бы оперировать ещё и отрицательными числами…

Кстати, обратите внимание на последнее упражнение. Это уже очень серьёзная штука — именно подобным образом реализуется работа с массивами на низком уровне.

В общем, есть чем озадачивать юных гениев. (:

Михаил Баландин специально для ipadstory.ru

Цена: Free
Скачать

Тип программы: , , (все программы по категориям для iPad)
Размер приложения в App Store: 41.6 Мб
Язык приложения: Английский
Разработчик/Издатель: Sebastien Siva
Минимальная версия iOS: 5.0

1 звезда2 звезды3 звезды4 звезды5 звёзд (Ещё никто не присваивал рейтинг статье. Будьте первым!)
Загрузка...


1 комментарий к записи: “Stone Bucket — программирование в духе стимпанка”

  1. Лиза+Смайлик:

    WHAT?

Оставить комментарий