«Если бы ум был способен выражать идеи так, «как он их воспринимает», то, без всякого сомнения, он «выражал бы их все сразу». Но это совершенно невозможно, так как если «мысль — простое действие», то «ее высказывание — последовательное действие». В этом состоит специфика языка, отличающая его и от представления (представлением которого он, однако, в свою очередь является), и от знаков (к которым он принадлежит на равных правах). Язык не противостоит мышлению как внешнее — внутреннему или как экспрессия — рефлексии. Ои не противостоит другим знакам — жестам, пантомимам, переводам, изображениям, эмблемам, как произвольное или коллективное — естественному или единичному. Но он противостоит им всем как последовательное — одновременному. По отношению к мышлению и знакам он то же самое, что и алгебра по отношению к геометрии: одновременное сравнение частей (или величии) он заменяет таким порядком, степени которого должны быть пройдены последовательно, одна за другой. Именно в этом строгом смысле язык оказывается анализом мысли: не простым расчленением, но основополагающим утверждением порядка в пространстве».[103]
Таким образом, в представлении разума текст возникает как динамический параллельный процесс, определяющий активности и взаимодействия одновременных алгоритмических структур, и выражается интерпретацией такого представления в виде линейной последовательности символов.
Для того чтобы уметь автоматически генерировать тексты, необходимо прежде всего описать взаимодействующую модель мира, затем научиться строить последовательную интерпретацию модели на уровнях отдельных фрагментов и предложений (рис. 14).
Язык появился как особое отражение параллельной реальности. Компьютеры исторически возникали в обратном порядке. Сначала осваивались последовательные ЭВМ, затем начался активный переход к параллельным вычислительным комплексам. Поэтому программисты сначала обжились в мире последовательных языков программирования, а сейчас перешли к параллельным языкам.
Рис. 14. Модель языка
В любом литературном произведении выделяются герои, объединяемые между собой сильными ассоциативными связями. Например, в романе Л. Н. Толстого «Анна Каренина» Анна связана с Вронским, Кити с Левиным, в «Мастере и Маргарите» М. А. Булгакова Мастер связан с Маргаритой, Иешуа с Пилатом, Во- ланд со своей темной веселой компанией. Такое неразрывное объединение объектов в одну действующую структурную единицу в программировании называется процедурой или процессом. В случае параллельного программирования, когда разрешаются одновременные действия разных объектов, обычно говорят о процессах. Так как литературное произведение описывает фрагмент реальности с возможными одновременными событиями, то, следуя устоявшейся в программировании традиции, мы тоже будем рассматривать в литературных текстах процессы. Итак, Анна Каренина и Вронский, Кити и Левин, Мастер и Маргарита, Иешуа и Пилат, Воланд и компания представляют собой отдельные замкнутые главные процессы. Процессы взаимодействуют между собой, изменяя значения собственных параметров. В свою очередь, каждая единица такого процесса также может содержать подчиненные взаимодействующие процессы. Так, у Маргариты есть домработница Наташа, тоже участвующая в событиях, у Пилата — воины, начальник тайной службы, Иешуа имеет ученика Левия Матвея и оказался в одной компании с двумя разбойниками. Все они могут в определенной степени существовать и действовать самостоятельно. Неделимый элементарный процесс — это структурная единица текста с элементами собственного независимого развития, но уже без таковых подчиненных объектов. Нос майора Ковалева из повести Н. В. Гоголя образует главный процесс, нос Буратино — просто константа, входящая в процесс «Буратино».
Состояния героев внутри процессов описываются глобальными и локальными переменными. Значения глобальных переменных, известных другим процессам, могут изменяться в моменты взаимодействия процессов, значения локальных изменяются только внутри процесса, которому они принадлежат.
В настоящее время программисты заняты активными поисками выразительных, удобных языковых средств для описания параллельных взаимодействующих процессов. Такие языки уже существуют и реализованы на параллельных ЭВМ. В США по заказу министерства обороны разработан язык АДА, по-видимому, сдающий свои позиции, в Европе доминирует язык ОККАМ, созданный английской фирмой INMOS для транспьютерных систем. ОККАМУ, кажется, сопутствует звезда удачи. Автор этой книги участвует в разработке ПАРУС-технологии программирования (ПАРУС расшифровывается как Параллельные Асинхронные Рекурсивные Управляемые Системы). ПАРУС-системы программирования дают возможность расширять любые языки развитыми средствами параллельного взаимодействия и рекурсивного подчинения объектов друг другу. ПАРУС удачно описывает процессы лингвистической обработки информации. ОККАМ вписывается в ПАРУС как частный, но реализованный практически на транспьютерах случай.