Светлый фон

Девочка театрально вздохнула:

– Как найти нужный элемент в памяти? То есть, какова должна быть форма адресации, чтобы поиск заканчивался в разумный срок? И какой срок считать разумным? Структура хранения для быстрого поиска? Особенно, если средняя задача сто мегабайт чистых, не считая разметочной информации?

Папа, слушающий краем уха, вздрогнул и мало не уронил с вилки рыбку. Мама безнадежно развела руки: такая вот выросла. Не запихивать же обратно!

Снежана улыбнулась родителям еще милее, повернулась к собеседнику:

– Что делать, если команда или данные не найдены? Вы же знаете, основная ошибка виндовс – вылет за пределы отведенного сегмента. Кроме того, необходимо дать пользователю языка возможность включить и выключить кусок структуры данных на горячую. Иначе никакой сети, никакого распараллеливания.

Дядя Витя икнул. Дядя Витя мигнул. Дядя Витя поднял обе руки к галстуку и зачем-то подергал его вниз:

– И как… Вы решаете?

– Для начала, Шарк предложил переформулировать задачу. Чтобы проблемная область не сплошая масса данных, а некоторая упорядоченная иерархия объектов, типа BSP/PVS-структур в 3D-шутерах. Такие иерархии понятий символьные языки обрабатывают лучше. Ошибиться в связном дереве труднее, чем в сырой массе цифр.

– А что за символьные языки?

– Делим все данные на две группы. Символьные и числовые. Символом назовем последовательность знаков, представляющую что-то из моделируемого мира. Тогда число – символ, представляющий самого себя. Новые процессоры все числовые. Символьных сейчас нет. Шарк рассказывал, последние попытки делали финны, лисп-машины, еще при живом СССР. Соответственно, и языки сейчас ориентированы на числодробилку. Однако, поскольку множество символов включает в себя числа, как подмножество, то символьные процессоры, в теории, могут лучше работать с числами, чем числовые процессоры с символами. Соответственно, символьный язык – ассемблер для символьного процессора. Или эмулятора, это понятно.

– Хм… Некая логика есть. А что дальше?

– А дальше в машинной памяти создается одинаково древовидная структура объектов, ссылающихся друг на друга. Сегодня вовсе неважно, на каком исходном языке писали программу. На момент исполнения процессор видит в памяти одну и ту же древовидную структуру: поля данных, переплетенные взаимными ссылками. Так вот, – Снежана опять улыбнулась, – “class” в том вашем С++, с его свойствами, и будет примерным описанием символа, как некоего понятия предметной области. Следовательно, любая программа – компилятор. В смысле, переводчик с языка предметной области на язык процессора.