Введение. Постановка задачи.
    Вначале описания дадим общую характеристику  языка и поговорим  о
его преемственности с другими системами программирования.

    Обычно новый язык создавался с целью привнести в процесс програм-
мирования новую идеологию. Hапример, Lisp - вводил  списковую органи-
зацию данных и программ. С++ -  создавался  для  оформления идеологии
объектно-ориентированного программирования. Так и KLisp первоначально
задумывался как Система Управления Базой Данных  нового типа основан-
ной на принципах трехмерной канальной логики связывания данных. Одна-
ко, впоследствии, стало ясно, что его возможности значительно шире, и
его  вполне можно рассматривать как  язык системного программирования
поскольку он позволяет изменить существующую идеологию обработки дан-
ных и управления компьютером.

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

    Появилась идея разработать набор команд, которые мог бы выполнять
процессор нового поколения и, для начала, смоделировать работу  этого
процессора существующими средствами. Это должен был обеспечить особым
образом организованный интерпретатор команд нового языка программиро-
вания, который бы взял на  себя  роль  ассемблерного посредника между
исполнительной средой и процессором. Другими словами, следует создать
сравнительно небольшой, несколько   десятков  килобайт,  ассемблерный
блок, который будет выполнять определенный набор элементарных  опера-
торов. Hа этом использование ассемблера заканчивается,  а все функции
по организации и обработке данных возлагаются на некий  процессороне-
независимый исполняемый код, который определяется и создается  другим
языком. Задачей моделирования такого процессора на первом этапе,  яв-
ляется определение необходимого и  достаточного  набора  ассемблерных
операторов и разработка  универсального  языка  программирования  для
объединения этих операторов.

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

    1   - предоставить гибкий механизм объединения любых операторов в
исполняемый код,  дать  возможность пользователю изменять и дополнять
функции операторов и встраивать исполнительную среду языка  в  другие
программные комплексы.
    2   - эффективно работать со  сложноструктурированными  конструк-
циями данных и максимально упростить доступ к ним для обработки.
    3   - обеспечивать параллельное выполнение нескольких программных
процессов и их взаимодействие между собой.
    4   - иметь возможность самотрансляции, то есть перевод  исходных
текстов программ в исполняемый код без привлечение других средств.



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

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

    Вторым   источником   функциональной   идеологии  KLisp  послужил
язык Си. Из него заимствовано:
      - Принципы организации структур данных;
      - Идея доступа к данным через указатели.
Но на этом сходство  заканчивается,  остаются  только  принципиальные
различия.

    Данная  система  полностью  написана  с   использованием   метода
объектно-ориентированного программирования и  наглядно  демонстрирует
все преимущества такого способа написания программ.По существу, KLisp
можно   рассматривать   как  библиотеку  С++, поскольку все операторы
являются подпрограммами,  написанными на этом языке. Но  подпрограммы
эти объединяются в исполняемый  код  принципиально новым способом.

    Сам интерпретатор KLisp также  оформлен  в  виде  класса С++, это
позволяет встраивать его в другие программы, изменять функции  опера-
торов, параметры  исполнительной  среды, сделать  ее многозадачной  и
даже многотерминальной.

    KLisp следует отнести к классу косвенных интерпретаторов.Исходные
тексты программ транслируются перед использованием в набор внутренних
команд интерпретатора, независимых от  команд  физического процессора
компьютера. Такой подход имеет ряд  преимуществ по сравнению с прямой
интерпретацией:

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

    Транслятор KLisp на 100% написан на KLisp, однако  работает очень
быстро и имеет компактные размеры, что наглядно демонстрирует преиму-
щества канальной логики при анализе данных.

    Желаем Вам приятного знакомства с новой средой программирования.