> -- Драконограф писал(а):
> Тут недавно говорили про  тьюринг-полного языка... не знаю, насколько это точно про формальность (прежде всего - критерии математические или какие имеются в виду?).Математические критерии, конечно... Собственно, что мы имеем в основе?.. Два элемента:
1. Запись в память (присваивание значение некоторой области памяти, в частном случае, "вывод в порт");
2. Логические операции (операции над двоичными данными NOT, OR, XOR, AND).
Все остальные конструкции (операторы и операции) получаются программно-аппаратной комбинацией этих двух "перво-элементов". На определенные операции накладываются ограничения (исключают эти возможные операции из реализации).
Для примера, операция сложения (правильнее говорить: складывания) битов - это частный случай применения логических операций. Младший бит результата сложения двух бит образуется за счет применения операции XOR, старший бит образуется за счет применения операции AND к исходным битам.
## Код:
```
Младший бит:
0 xor 0 = 0; 0 xor 1 = 1; 1 xor 0 = 1; 1 xor 1 = 0;
Старший бит:
0 and 0 = 0; 0 and 1 = 0; 1 and 0 = 0; 1 and 1 = 1;
```
(понятно, что процессоры давно умеют выполнять сложение не по битам, но сути операции это не меняет). Прочие арифметические операции над целыми числами получаются аналогично. Однако количество возможных логических операций... бесконечно, для образования нового "уровня" типов/классов операций востребованы менее пяти комбинаций).
Операции сравнения (=, #, >, <, >=, <=), в свою очередь, являются частным случаем операции вычитания.
Аналогично, с операторами. Даже пресловутый GoTo - это всего лишь выполнение оператораприсваиванияуказателю команд нового значения, которое может быть "абсолютным" (новым) или "относительным": вычисленным на основе текущего значения (например, текущее значение + 20h).

Из чего следует, что задачей языка программирования является получение такого множества операторов и операций, которые бы позволяли эффективно решать задачи некоторой предметной области (полнота и непротиворечивость) и последующее проецирование, данного множества, на указанные выше простейшие операторы и операции (исполнимость). Когда эти задачи решены, то на следующем этапе формирования языка надо подумать о правилах/ограничениях построения композиций из языковых примитивов, и, конечно, об удобстве их использования разработчиками (структурное, модульное, объектно-ориентированное, функциональное программирование и пр. и пр.).

(Даже самое хитроумное архитектурное сооружение складывается из... простых кирпичей)