↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Временно не работает,
как войти читайте здесь!
Asteroid Онлайн
12 января в 00:19
Aa Aa
#размышления #теория_магии #много_букф
... и програмирование магии
Первая часть: https://fanfics.me/message750029

Итак. Теперь посмотрим, какую магию можно программировать.
Программирование - это в широком смысле слова создание из простых элементов последовательности действий. Или более сложное, но полное описание- создание закономерности поведения системы.
Чтобы программировать магию, нам нужно соблюдение нескольких условий:
1. Детерминированность - предсказуемость и повторяемость результата. Если у нас каждый раз слово огня вызывает огонь разного размера, то ни о каком программировании речи и быть не может.
2. Наличие языка и чёткого синтаксиса. Если магия строится на образах и намеренье, то тоже никакого программирования.
3. Наличие памяти у исполняющей среды. Если нам некуда записать программу, то опять-таки никакого программирования - у нас просто будут слова силы, которые моментально срабатывают после произношения. Например, в одной истории есть магия, где сказав слово "Огонь" ты моментально вызываешь огонь. Там можно добавить к нему модификаторы типа "большой/малый", но это не делает такую магию программируемой.
4. Наличие метамагии. Определенная часть магии должна быть посвящена управлению и изменению другой магии.
Например, в предыдущем примере кроме слов "большой/малый" нужны слова граница, дальность и т.д. И тогда слово "огонь" превращается в кнопку пуск для заклинания "задаю круг диаметром 20 метров на расстоянии 30 метров, при попадании живого в круг, наполни его большим огнём". И у нас по сути главные слова задают "стихию" заклинания, а второстепенные задают программу.

Теперь небольшой оксюморон: если мы берём "физичную" магию рун/глифов (вариант С), то руны становятся аналогом транзисторов и конденсаторов, и такие руны нельзя программировать. Здесь у нас вместо маго-программистов появляются маго-конструкторы-схемотехники. А вот божественные руны с концептуальным эффектом прекрасно программируются.

Если у нас есть только 4 базовых условия, то это, скажем так, маги программирующие на ассемблере.
Поясню: у нас доступны только базовые функции и простая метамагия. Каждый раз маг должен полностью зачитать код программы. На поле боя такие маги - это стеклянные пушки, которых надо защищать, в общем - артиллерия.

Всё разительно изменяется, если мы вводим создание пользовательских процедур: маги могут записать заранее программу, чтобы потом вызвать её одним кодовым словом.
Тут опять-таки возможны разные варианты, от магов ДнД, которые записывают в память несколько экземпляров программы в день, до магов ГП, которые могут кастовать сколько хотят.
Понятное дело, что как только мы вводим пользовательские процедуры, так сразу же хочется сделать и долговременное хранение библиотек таких процедур. Чтобы не повторять их код каждый раз, а вызывать уже готовые. Тут опять-таки множество вариантов исполнения: от личных гримуаров, до ноосферы как в моём хедканоне в ГП.
Естественно, наиболее развита будет магия в мире, где пользовательская процедура может вызывать другие пользовательские процедуры, то есть - программа в составе которой есть другие программы. Тогда мы можем говорить о полноценном процедурном программировании. В нашем мире это уже нечто устаревшее, но в подавляющем большинстве историй это был бы офигеть какой прорыв в развитии.

Если память среды позволяет поддерживать своё внутреннее состояние. То возможно более сложное объектно-ориентированное программирование. Если в процедурном программировании маг сам кастовал заклинание, то теперь маг создаёт обьект, который его кастует.
Ключевое отличие в наличии внутренней памяти обьекта. Если процедурное заклинание - это просто что-то, чем маг выстрелил и забыл, то обьект обычно существует неопределённое количество времени в ожидании действия, и кроме своего метода, которое и есть заклинание, также имеет внутреннее состояние. Поэтому обьект может многократно применять метод, при этом помня историю и приспосабливаясь, либо срабатывая по разному в зависимости от взаимодействия с другими обьектами. И т.д. Охранные чары с паролем - это тоже оно.
Есть и другие отличия: наследуемость и полиморфизм, но давайте не будем о сложном. Это не все программисты-то понимают. )))
И да, обьект похож на что-то, что должно быть артефактом. Но это не обязательно так. Например, шар молний, который летит над полем боя, и атакует разрядами только врагов - это проще программировать как обьект.

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

Отдельно хотел бы пройтись по големам.
Если голем - это не конструкция, в которую засадили управляющий дух, то это должна быть агентская система на уровне сложности нынешних нейросетей. Ерунда, когда "вот тебе заклинание огненного шара, а вот заклинание голема" - это именно что ерунда. Алгоритмическая сложность подобного просто зашкаливает.
Если хотите посмеяться - посмотрите как ходили роботы до создания нейросетей, очень смешно. И ведь даже такую простую задачу как ходьба толком решить не могли.

И ещё кое-что: баги.
Баги неизбежны. Мало кто пишет программу с первого раза без багов. Но если в нашем мире большинство багов отловит компилятор, а оставшиеся просто вызовут ошибки в поведении или в крайнем случае крах программы, то в мире магии баг - это смертельно опасно.
Поэтому неофитов будут заставлять заучивать стандартные заклинания. Поэтому у неофитов будет очень мало опыта нахождения багов. Этот замкнутый круг приводит к тому, что разработкой новых заклинаний занимаются либо храбрые, либо безумные. Ну, либо очень богатые, которые могут позволить себе особо защищенные лаборатории и деньги для найма храбрых безумцев в качестве тестировщиков.

Ваши мысли?
12 января в 00:19
6 комментариев
Вспомнились печати, которые в некоторых анимэшках напоминали этакий рунный вариант антикитерского механизма.
Вообще, вариация псевдо-механических магических конструктов...
Asteroid Онлайн
Marlagram
Вообще, вариация псевдо-механических магических конструктов...
Чистая инженерия.
Asteroid Онлайн
Заменил "функциональное" на "процедурное", потому что это была терминологическая ошибка.
Asteroid
Заменил "функциональное" на "процедурное", потому что это была терминологическая ошибка.
В чем разница?
Asteroid Онлайн
Elven Kingdoms
В том что есть функциональное, и оно будет в следующем посту на тему.
Вообще баги в реальной жизни запросто могут быть смертельно опасны. Или хотя бы приводить к большим расходам. Когда вы программируете не "хелло ворлд" и не игрушку-танчики, и не текстовый редактор - хотя тут тоже, можно слегка ошибиться и, например, удалить все файлы пользователя, функцией рекурсивного удаления на "не том" каталоге.

А можно, например, в промышленном программировании ошибиться и тупо сломать железо, которым управляешь. Я такое видел: опытные и разумные люди, подключили управляющий контроллер к приводу шлагбаума, и слегка ошиблись: он не перестал вращаться, открывшись полностью. И раздолбал редуктор в хлам.
А уж если вы управляете, допустим, реактором - химическим или атомным... тут цена ошибки очень, очень большая.
ПОИСК
ФАНФИКОВ













Закрыть
Закрыть
Закрыть