Функциональная Потоковая Машина. Единая структура данных и программм

Функциональная Потоковая Машина. Единая структура данных и программм

Этой статьей начинается детализация концепций (проект) не фон-Неймановской модели сегодняшних ЭВМ, сформулированных в работе "Универсальная Функциональная Потоковая ЭВМ с параллельными вычислениями", определяемой здесь как раздел 1 (Введение). Эта модель ломает и принятые сегодня концепции алгоритмичеких языков, решая проблему создания универсальной цифровой ЭВМ с параллельными вычислениями. Автор (к.т.н. Патрикеев В.Л., ТФ 0642-937358) убежден, что вычислитель - робот (ЭВМ) не обязательно должен быть моделью нейронной сети человеческого мозга и его образа мышления. Потому предлагается простое решение, которое поначалу не просто понять в силу сложившихся традиций (пересмотр всего к 15.08-2013 г.).

Содержание

Ссылки на все разделы проекта:

1. Функциональная Потоковая Машина с параллельными вычислениями. Введение (http://tadviser.ru/a/121275) 2. Единая структура данных и программ (http://tadviser.ru/a/149691) 3. Функционирование ФПМ. Выражения языка програмирования (http://tadviser.ru/a/149691) 4. Потоки и их обработка в структуре выражения (http://tadviser.ru/a/150588) 5. Микропрограммирование функций (http://tadviser.ru/a/153069) 6. Программа, как управляемый поток выражений (http://tadviser.ru/a/153069) 7. Макроопределения пользовательских функций(http://tadviser.ru/a/157631)

2. Единая структура данных и программ

Для описания структуры данных, языка и машины используется метасимволика Бэкуса-Наура. Дополнительно в скобки >[] заключается часть описания, которую можно опускать. В скобки включается повторяемая (итерация) часть описания. Элементы структуры имеют свойства - последовательность символов, ограничиваемую с обеих сторон спецсимволом '%'. Предваряющий (префикс) свойство спецсимвол '

' отрицает наличие соответствующего свойства

2.1 . Синтаксис и коды структуры

Не обязательно задаваемое Имя-индекс элемента уникально в пределах слоя, куда элемент входит. В отсутствие элемента он является неопределенным (свойство %#%), возможно, с именем-индексом. Идентификатор состоит из латинских букв и цифр, причем первая из них обязательно буква. Атом это число, строка, дата, имя функции и др. (п.2.3)

Пример: Свойства '%

.,%' описывают структуру с отсутствующим атомом (

.), но присутствующим слоем (,).

2.2. Коды элементов данных

2.2.1. Коды элементов структуры

Эти коды определяются также логически и призваны ввести чуть более углубленное представление о конструкции элементов данных при их обработке. В определении кодов отсутствуют: - Сопровождающие в потоках элементы данных их свойства, включая определенные в п.2.1 и определяемые далее (список свойств) - имена-индексы элементов слоя, используемые для доступа к ним и физически в виде соответствующего списка указателей, сопровождающего этот слой

Код слоя размещается в блоке (БП) динамически распределяемой памяти (ДРП), допускающим (БП) прямой доступ к коду любого его элемента по целочисленному индексу – порядковому номеру (0, 1, 2,…) в слое:

Собственно наличие свойств '.' и ',' в списке свойств %.,% структуры определяется, соотвественно, наличием (определенностью) ссылок УКА (УКА<>0) и УКС (УКС<>0). В случае элемента - Атома (%.

,%) УКС не определен (УКС=0). В случае элемента слоя (%

2.2.2. Коды элементов потоков данных

Функции обрабатывают поступающие на их входы (от аргументов) элементы потоков со свойством '%;%' каждый или унарный (%

;%) – единственный элемент следующем виде: - R-значение (%@%) - копия элемента структуры (слоя), т.е. пара ссылок УКА и/или УКС (возможно, УКА=0 и УКС=0 - неопределенный элемент) - V-значение (%&) - пара: УКС и индекс: Имя-индекс или порядковый номер (0, 1, 2, …) R-значения (кода элемента) в слое (БП), указываемом ссылкой УКС. В сущности, V-значение - ссылка на размещение R-значения в ДРП. - Атом (\ эквивалентно %

@%), передаваемый с выхода аргумента (микро-ЭВМ) на вход функции (микро-ЭВМ) непосредственно своим значением (более удобная для обработки копия БП) без использования единой ДРП ФПМ

Указанные (в скобках) соответствующие типам элементов потока свойства могут обрабатываться функциями и примитивами, вместе с рассмотренными выше (п.2.2.1) и рассматриваемыми далее (п.2.3 и др.) свойствами элементов структуры и потоков, определяемыми автоматически в БП по УКА и УКС R-значения. В случае V-значения используются УКА и/или УКС R-значения, указываемого V-значением: V-значение наследует свойства (атома, слоя) R-значения, указываемого V-значением. ndsp; V-значение исключает отмеченную в [2] неопределенность и неоднозначность абсолютного большинства языков программирования в определении X в левой (куда записать) и правой (что сложить с 1) частях оператора присваивания: X := X + 1

2.3 . А т о м ы

Здесь и ниже в %…% приводятся описания типов (видов) атомов, к каждом из которых следующий за ‘%’ символ '.' определяет атом, а следующий за ним спецсимвол - тип атома. Определяющие тип атома символы '+', '.', ''', ':', '`' и '/' синтаксически начинают представление атома, что упрощает запоминание их смысла по свойству.

Внимание! Внутри формулы НЕ допускается использрвание обратного апострофа '`'

Параметр настройки отличается тем, что в отличие от примитива настройки его не сопровождает слой (%,(%) из аргументов. Примитив настройки имеет вид функции унарного примитва и не имеет выхода. Здесь имя-индекс задается явно как атом и необязательно совпадает с определением имени-индекса (п.2.1) некоторого элемента того же или другого слоя.. Набор функций (%.*% и %.$%), примитивов и параметров настройки (%._%) функций ФПМ фиксирован вместе с их именами, которые размещаются в статически определяемой памяти, позволяющей по их имени мгновенно вычислить ссылку УКА на это Имя. Прочие имена определяются пользователем и, как и другие атомы, размещаются в БП ДРП.

Часть свойств в виде спецсимволов (спецсимвол - свойство) мы определили выше, прочие определим позднее и каждое из последующих определяется кроме спецсимволов цифрой или символом латиницы. В любом случае предваряющий свойство спецсимвол '

' предшествует символу '.' (атом) то он отрицает:

  • вообще наличие атома, если справа от '.' не указываются дополнительные свойства атома
  • наличие атома вообще или с указанными далее свойствами атома

Примечание: Аналогично действие '

' на свойство ',' (слой) и следующие далее уточняющие свойства слоя.

Здесь свойства задаются явно атомом (его значением) в отличие от свойств, сопровождающих элементы структуры и потоков, включая содержащие атом <Свойства>. Перечень свойств в атоме <Свойства> может быть пустым. ‘Строка’ – по аналогии с Си заключается в кавычки и использует экран для отмены обычной трактовки спецсимволов в синтаксисе структуры данных. Формула _Calc – суть строка с последовательностью операторов (операций) калькулятора _Calc (р.5).

2.4. Свойства элементов данных

Здесь дополнительно укажем следующие свойства:

2.5 . Потоки данных и выражений

Говоря о потоках на входах и выходах функций, будем подразумевать фактическую реализацию потоков в СА (Структура Активаций) аналогичной структуры из микропроцессоров , р.1). Согласно п.2.2.2 поток состоит из атомов, R- и V-значений. Каждый элемент потока может обладать собственными свойствами, отличными от свойств других элементов потока. Поток индексов – суть поток из целочисленных атомов (%.9+") и/или имен-индексов (%.|%) и/или ссылок УКА (R-значения) на такие атомы. При необходимости использования функцией атома из R-значения по УКА автоматически извлекается атом. При обработке функцией R-значения, атома (по УКА) или слоя (по УКС) по V-значению потока автоматически извлекается R-значение - элемент слоя по УКС из V-значения с порядковым номером - индексом из V-значения. Наследование (см.выше) свойств R-значения от Атома по УКА и V-значения от R-значения позволяет избежать этих "извлечений" при необходимости обработки только свойств Обрабатываемый функцией $Eval (р.6) очередной элемент потока – Атом или определяемая R-значением (по ссылкам УКА и УКС) структура в ДРП идентифицируется функцией (синтаксис) как выражение согласно определениям следующего раздела (р.3). Сам же такой поток выражений определяется как программа.

2.6 . Пространство и подпространства

При запуcке функции $Eval до начала обработки ею потока выражений (аргумент) формируется ее собственное пространство - пустой слой. При первом обращении в обрабатываемом (исполняемом) ею выражении имени-индексу со свойством %.|1% формируется подпространство с указанным индексом как элемент слоя пространства:

Напомним (п.1.3), что обработка функцией $Eval очередного выражения потока cводится к развертке новой ветки СА – структуры из микро-ЭВМ, адекватной структуре этого выражения, подсоединяемой корнем к $Eval и выполняющей его вычисления. В этом выражении его члены обращаются к подпространствам (2-1) пространства функции $Eval по их именам. Согласно п.3.1.1 выражение (аргумент) из одного этого имени возвращает V-значение узла – подпространства в слое пространства. В отсутствие подпространства с таким именем согласно п.1.3(9) оно ищется в пространстве функции $Eval (активации), обрабатывающей выражение с исходной функцией $Eval и т.д. вверх по иерархии дерева из $Eval в СА.

2.7 . Функциональная Потоковая Машина. Ядро

При запуске ФПМ запускается фактически функция $Eval, обрабатывающая вводимые вручную (поток) выражения, являющаяся корнем СА с собственным (глобальным) пространством и удаляемая только при выключении ФПМ. При выключении ФПМ пространство этой $Eval сохраняется и при перезапуске восстанавливается.

3. Функционирование ФПМ. Выражения языка программирования

Выражение исполняется функцией $Eval согласно р.1 разворачивающей это выражение в соответствующую ему ту же структуру ветку (поддерево) СА (Структура Активаций функций) - структура из микро-ЭВМ, на которой организуется вычисления, формирование и обработка потоков данных. Ввиду идентичности структур выражения и СА будем говорить о формировании потоков на выходах (а) функций - поступлении их входы функции, аргументами которой функции (а) являются, понимая, конечно при этом физические входы и выходы соответствующих микро-ЭВМ на СА.

3.1. Унарное значение. Подпространство и литерал

Выражения ‘Подпространство’, ‘Подобласть’ и ‘литерал’ возвращают унарное (единственное) значение(%

;%) и которое можно использовать в функциях как поток из одного элемента. Унарное значение может кодироваться и передаваться от аргумента к функции (на ее вход) физически (СА) проще, чем поток (п.3.3).

Здесь "Имя-индекс" возвращает V-значение элемента подпространства или подобласти (п.2.6) ближайшей к корню дерева СА (р.1) функции $Eval, исполняющей выражение. Напомним, что в самом выражении может присутствовать (и не одна!) $Eval, исполняющая выражения, поступающие на ее вход. Именно об этой $Eval здесь и далее (выражение и потоки на нем) идет речь

Литерал (как выражение) возвращает ссылки (копии) на самое себя в выражении – R-значение (%@%). Возвращаемые литералами R-значения дополнительно приобретают свойства %.?% и/или %,?% защиты, лишь предупреждающие о возможной необходимости (определяемой и производимой самим пользователем посредством выражений языка!) блокировать изменение, соответственно, атома по УКА<>0 и/или слоя по УКС<>0 R-значения. Определяемое для слоя литерала (R-значения) свойство %,?% ('?') автоматически распространяется по всем уровням иерархии структуры литерала в виде пар свойств %.?% и %,?% для атомов и слоев. Собственно свойство '?' защиты включается в общий список свойств атома и/или слоя. При копировании R-значения (ссылок УКА и УКС) автоматически вместе с ним копируются и эти свойства, а также свойства, определяющие виды атомов, наличие атома и слоя и др. Свойства защиты могут быть установлены или удалены операциями _Calc

3.2. Вызов унарного примитива

Эти фактически следующие два с фиксироваными именами (имя-индексы) НЕ имеющие аргументов примитива, возвращающих унарное значение:

1) Lit(<Структура[ c %.,%]>) – расширение определения литерала: возвращает R-значение структуры (%.,%). Необходимость в таком дополнительном определении литерала возникает исключительно в случаях, когда <Структура> синтаксически является встроенным макроопределением, вызовом функции или примитива. В этом случае блокируется выполнение этой "Структуры" как выражения

2) Data() – возвращает элемент (Атом, R- или V-значение) потока данных со второго входа (п.3.2.4) функции $Eval (р.6), обрабатывающей выражение (элемент первого входа) с этим примитивом.

3.3. Вызов примитива настройки функции

Этот вызов имеет вид вызова функции (см. далее) и отличается тем, что НЕ имеет выхода, а служит исключительно для настройки функции (точнее, реализующей ее ветки СА), организации и перестройки обрабатываемых и формируемых функцией потоков данных в СА. Как правило, аргументы примитива настройки являются литералами (не вычисляются!). Положение вызовов примитивов настройки среди аргументов функции НЕ влияет на результаты ее работы и потому такие аргументы определяются как "прозрачные" и подробнее рассматриваются в р.4 и р.5

3.4. Вызов встроенной в ФПМ функции

Первыми последовательно слева направо вычисляются аргументы-параметры, определяемые их именами или позиционно (в слое аргументов) самой функцией. Если аргумент - параметр формирует поток, то в качестве унарного его значения (%

;%) принимается первый элемент потока, включая, возможно, признак завершения потока - элемент без свойств (%%). При этом остальные остальная часть потока прерывается вместе с формирующим ее выражением и с удалением соответствующей части ветки СА. К обработке параметров можно подключать средства калькулятора _Calс &nbps; После вычисления параметров параллельно запускаются и функционируют аргументы функции, формирующие потоки, которые обрабатываются функцией. Формируемые функцией результаты обработки параметров и/или входных потоков могут возвращаться функцией на синтаксически определяемый главный выход и дополнительные определяемые примитивом _Out (п.4.2) дополнительные выходы. Как и входны, так и выходные потоки функции можно параллельно обрабатывать подключением калькулятора _Calc

3.4.1. Параметры функции

Параметры различным образом определяются для конкретных встроенных функций (р.4). Вместе с тем существуют параметры, одинаковым образом используемые всеми или частью функций. Более того, в состав аргументов любой функции можно вводить дополнительные параметры, используемые вводимыми пользователем в дополнительных операциях калькулятора _Calc при обработке как тсамих параметров, так входных и выходных потоков функции и даже при реализации действий самой функции или их корректировке.

3.4.1.1. Стандартные Параметры функций

1) Struct:<аргумент функции>

  • объявляет аргумент функции обрабатываемой структурой. По умолчанию Struct, как правило, 1-й аргумент (функции $In, *Tree, п.4.3.3.1

и п.4.1.4). Даже в отсутствие определения функцией этого параметра им можно воспльзоваться для потокового входа функции, чтобы принять только первый элемент потока на этом входе

2) T_out:<количество мкс>

  • Если формирование очередного элемента выходного потока заняло менее указанной аргументом величины тайм-аута, то выдача

этого элемента на выход задерживается на разницу между ними – до величины тайм-аута. в отсутствие этого задаваемого параметра (по умолчанию) он принимается равным 0

3) Sum:<исходное значение>

  • При операциях вычисления итогов при обработке функцией входных потоков (п.3.5), этот параметр задает исходное значение

регистра "Сумматор". В отсутствие этого задаваемого параметра (по умолчанию) он принимается равным 0 или устанавливается содержанием функции, но всегда существует. Как и T_out этот параметр НЕ определяется позиционно в списке параметров функции (без имени). При использовании операций калькулятора _Calc в вычислениях функции, а также в обработке потоков на выходах функции (п.4.2.2 и п .4.2.3) фактически значение параметра Sum возможно после обработки аналогичными операциями (п.3.4.1.2) принимаеися в качестве исходного

3.4.1.2. Контроль и обработка параметров функций

Для этой цели необходимо включить в состав аргументоввключить определяющий эти операции примитив настройки:

1) Все это означает использование калькулятора _Calc. К началу выполнения операций ряда значение параметра (возможно принятого по умолчанию) помещается в регистр '!' и по их окончанию значение '!', возможно (не обязательно) скорректированное возвращается тому же параметру, если последней выполненной операцией НЕ является _Break, прекращающая выполонение операций ряда, как и функции в целом.

2) В ряде операций слева направо выполняются операции, у которых в случае _If требуется соответствие регистра '!', а в случае _if регистра '.' "условию", а точнее одному из формулируемым условием Свойств. И тогда выполняются последовательно указываемые вторым и следующими аргументами примитива _If (_if) операции, в том числе:

- _If(. ) и _if(. ) - формула с операциями _Calc - _Go - следующие операции ряда пропускаются (НЕ выполняются) - _Break - прервать (блокировать) выполнение функции (на выход функции выдается пустой поток).

3) Последняя операция в не пустом "ряду операций" может задаваться без условия - как "собственно операция", выполняемая безусловно в отсутствие выполняемых ранее операций _Go или _Break

4) _If(<условие>) или _if(<условие>) вызывает операцию _Break (по умолчанию) при НЕвыполнении условия: значение регистра '!' или '.' не отвечает ни одному из "Свойств" условия. Иначе выполняется операция _Go

5) <Имя параметра>:_If(<условие>) можно записать короче как <Имя параметра>:<условие>

6) "Свойства" условия задают отдельные или совместные требования к структуре как элементу потока (поток, унарное значение, атом, V или R-значение), атому и/или слою R-значения, включая отсутствие указываемого V-значением R-значения, атома или слоя у R-значения, заданного явно или неявно посредством указывающего его V-значения. Если V-значение НЕ указывает на конкретное R-значение, то считаются отсутствующими его атом и слой. Напомним, что для отсутствие перечисленных выше компонентов сттруктуры элемента используется код '

', как и для отсуствия свойств этих компонентов: элемента, атома и слоя R-значения (р.2)

7) Формула может изменить значение параметра (и/или его свойства), анализируемое и обрабатываемое следующими за формулой операциями ряда. Вторым, третьим и т.д аргументом операции (примитива) _If (_if) также может быть _If (_if). При наличии "Свойств" справа от операнда этот операнд до операции приводится к виду, определяемыми этими свойствами, однако сохраняя при этом исходный вид и свойства.

8) Операция может состоять из одного операнда1 (в отсутствие кода операции и операнда 2) и тогда результатом операции (регистр '.') становится Операнд1 после приведения его к требуемым Свойствам справа от него (если они заданы).

9) При переходе от выполнения одной формулы к другой содержимое регистров '!' и '.' сохраняются на момент завершения первой из них.

Напомним (п.2.1), что для отрицания свойств в их списке (условие) используется код '

В формулах могут использоваться параметры, функции, в том числе отсутствующие, выключая стандартные. В этом случае используются их исходные значения по умолчанию.

3.5. Встроенные макроопределения

Это макроопределения, явно не определяемые пользователем в подпространствах. В соотвествии с ними их макросы, как и в случае явного макроопределения пользовательских функций (п.3.6, р.7), подменяются функцией $Eval только в СА на выражения, не содержащие такие макросы (расширения) и потому имеющие более сложный для обозрения вид, например:

Встроенные макроопределения, сокращая число вложенных пар скобок (уровней иерархии структуры) выражения, делают его лаконичнее и выразительнее, отображая индексирование элементов иерархических структур способом, общепринятым в существующих языках программирования

3.6. Вызов пользовательской функции - макроопределение

Указанное именем подпространство содержит реализацию этого макроопределения пользовательской функции (р.7) в виде выражения, обрабатываемого функцией $Eval - расшифровки макроопределения (р.6). – При формировании соответствующей ветки СА функция $Eval неявно (без изменения исходного выражения) подменяет вызов пользовательской функции - макроса его расшифровкой: подмена производится исключительно в структуре СА! На пользовательские функции распространяются правила для встроенных функций, включая использование параметров функции, примитивов управления потоками (Out, _Chanal и дополнительные выходы с операциями). Отличие состоит в том, что параметры функции (их имена и назначение) теперь могут определяться макроопределением функции, составляемым самим пользователем

Примечание: Понятно, что имя пользовательской функции не может совпадать с фиксированными именами Lit и Data унарных примитивов (п.3.2)