Мы добились этого при помощи хитрого механизма, и я не буду пытаться объяснить принцип его работы здесь. Это была схема ошибочного перенаправления, в которой мы заменяли новые комбинации битов на старые как раз в тот момент, когда они находились за пределами обращения к ним центрального процессора. Этот трюк должен выполняться идеально, поскольку множество битов нужно переключить должным образом в нужный момент, чтобы машина не вышла из строя. (Чтобы компьютер не вышел из строя, на уровне битов все должно быть идеально.)
Мы с самого начала шли на этот героический поступок, потому что это был единственный способ добиться высокой производительности в течение короткого времени от медленных компьютеров того времени. Прибегая к этому механизму, мы могли заставить код работать быстрее.
Сначала возможность изменить виртуальный мир, находясь внутри него, была лишь приятным побочным эффектом.
Редактор и преобразование
Компоненты, составляющие фенотропную архитектуру, называются редакторами. Специалистам в области информатики, привыкшим к традиционным видам архитектуры, будет вначале немного сложно привыкнуть к этой концепции.
Основное различие между опытом фенотропного программирования и нынешней, привычной вариативностью состоит в том, что человеку, который занимается фенотропным программированием, не приходится снова и снова наблюдать один и тот же формат исходного кода.
Сейчас любой код, на каком бы то ни было языке программирования, выглядит одинаково. В нем установлены бесконечные повторения «ЕСЛИ, ТО, ПОВТОРИТЬ» и любых других слов и символов.
В фенотропной системе существуют разные алгоритмы взаимодействия с пользователем, а также разные виды программ.
Эти конструкции, которые вы воспринимаете и которыми управляете во время фенотропного программирования, называются редакторами. Редактор может выглядеть как изображения на экране компьютера или как виртуальные объекты в виртуальном мире.
Редактор – это преобразование между средством взаимодействия интерфейса с пользователем и комбинациями битов.
Если вы редактируете биты программы, пока она запущена, это означает, что используемый вами редактор должен быть в состоянии интерпретировать и представлять биты для вас таким образом, чтобы вы могли понять, как их изменить. Должен существовать не один способ это сделать. Разные редакторы должны указывать на одну и ту же комбинацию битов, одну и ту же программу, и разными способами представлять ее программисту.
Поскольку фенотропное программирование основано на преобразовании между уровнем человеческого ощущения и уровнем битов, программисты меньше привязаны к тем или иным абстракциям. Один редактор может преобразовать несколько битов, которые работают в качестве запущенной программы, таким образом, что они выглядят как лабиринт, а другой редактор может преобразовать эти же самые биты так, чтобы они выглядели как генеалогическое древо.
Каждый традиционный язык программирования на основе исходного кода жестко привязан к своим абстракциям, таким как функции Фортрана, списки LISP или объекты Smalltalk. Все эти примеры относятся к тому времени, когда я сам учился программированию. Вам не обязательно знать, что это были за языки. Смысл в том, что все это концепции, которые позволяли построить мост между намерением человека и переключающимися битами внутри компьютера, и каждый из них блистал в одних обстоятельствах и крайне бледно выглядел в других.
Фенотропное программирование – это подход, поддерживающий разные концепции подобного толка в разное время, но в пределах одного устройства. Абстракции можно смешивать и совмещать, чтобы они удовлетворяли потребностям, возникшим в тот или иной момент.
Вариативность
Это не значит, что абстракции морально устареют.
Представьте себе, что вы живете в будущем, где к программированию виртуальной реальности используется тот подход, который я и мои друзья изучали много лет назад, то есть фенотропный. В этом случае станет возможно выполнить различные действия, вследствие чего биты, которыми эти действия управляют, изменятся, и виртуальный мир, в котором вы находитесь, начнет функционировать иначе.