GoAIL/Doe (Universal Century)

**GoAIL/Doe** *(допускается написание как goail/doe, gaildoe - "Graphic of Artificial Intelligence/Do everything", "Графический Интерфейс Языка Искусственного Интеллекта/Делай всё")* - выдуманный язык программирования высокого уровня динамического типа для мейнфреймов и бытовых ПК/нейролинков.

## Основные понятия

### Постулаты языка GoAIL/Doe

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

### Пример кода

Эта программа просто перемножает числа друг на друга, выводя конечное число на экран, и если x будет меньше нуля, то программа завершится; иначе программа начинается с начала.

```
!! пример программы. После двух восклицательных знаков идёт комментарий к коду, он не исполняется.
HEAD (txt; img) !!начало программы, запрашиваются библиотеки txt и img
    in (a) !!дождаться ввода значения
    mul (a; b:9) x !!суммировать значение a и b (присвоив b 9), результат записать в x
    show (x) !! вывести значение x на экран
        if x<0 END !!если верно - выход из программы (END)
        else LOOP !!иначе - возврат к началу программы (HEAD)
END !!окончание программы и выход обратно в интерпретатор
```

## Общая справка

### Библиотеки

Библиотеки - подключаемые словари команд. Могут содержать в себе не только команды, но и константы, функции, массивы и абстрактные модели.

Использование: достаточно лишь упомянуть в заголовке в скобках библиотеку. При упоминании они отделяются точкой с запятой.

### Команды

Команды делятся на подключаемые, исходные и интерпретируемые.

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

Возможно использование всех трёх типов одновременно.

### Значения

Значение - особые элементы кода со своими состояниями. Объявляются или просто их указанием в коде, или указанием их непосредственно в командах.

Их можно обозначить буквой или словом и присвоить им значение при помощи знака ":" (слева переменная, справа значение). Нельзя использовать одно и то же имя для значений, которые вы не хотите смешивать.

Значения могут быть двух типов: постоянные и переменные. В первом случае при объявлении переменной мы дописываем к значению символ ' (пример - sum (a:9'; b:54') var).

При присвоении значения переменной автоматически присваивается её тип. Доступны следующие типы:

Формат mix стоит особняком, даруя переменной свойство квантовой частицы (хранение нескольких значений одновременно). Это крайне полезно для описания какой-либо абстрактной модели, но на медленных машинах mix-переменные могут значительно снижать производительность.

### Стили кода

Стиль тесно взаимосвязан с опытом пользователя и спектром используемых команд.

* FAST-стиль. Использование только неформального кода, по сути являющимся самым неоптимальным способом программирования.
* REGULAR-стиль. Используют в основном, достаточно опытные пользователи - оптимизированный код, разбавленный комментариями и некоторым количеством неформального кода.
* PRO-стиль. Используется профессионалами. Весь код зачастую состоит из сокращенных инструкций, степень его оптимизации - высокая.

## Оценка

### Общее

Goail/Doe требователен к качеству кода, поэтому новичкам зачастую трудно писать на нем. Также, он работает медленнее, чем языки со статическими типами переменных, так как интерпретатору приходится затрачивать время на определение типа значений.

Стиль с объявлением переменной и её значения во время инструкции крайне компактен и быстр в исполнении, но при такой записи легко сделать ошибку.