Основные изменения кратко:
- Реализована поддержка многопоточности: директивы thread, fork, lock.
- Введён новый (и первый) модификатор типа: shared.
- Введён новый блок кода: bytecode {}.
- Введена новая директива include: можно включать файлы.
- Доработано взаимодействие со структурами.
- Удалёна операция REGR.
- Введена операция SHARE для общих переменных.
- Введена операция LOCK для ожидания завершения потоков.
- Настроен анализ покрытия кода, благодаря этому выявлено и исправлено множество ошибок.
- Настроена работа Doxygen. Пока задокументирован только один класс.
- Улучшена структура проекта, обрезаны лишние связи, выявленные построением графов Doxygen.
- Теперь у проекта новое название.
Многопоточность
Чтобы воспользоваться многопоточностью, необходимо описать поток следующим образом: thread: <номер потока> { <операции> }
. Номер потока должен быть от 1 до MAXTHREADS
. Затем вызвать поток с помощью функции fork(<номера через запятую>)
. Для ожидания главным потоком всех остальных можно использовать функцию lock()
. В потоках можно использовать только разделяемые переменные.
Разделяемые переменные
Понятие, которое имитирует поведение ссылок в C++. Это такая переменная, которая будет изменена в блоке, где вызвали функцию с передачей этой переменной в качестве параметра, после завершения этой функции.
Директивы bytecode
и include
Первой директивой можно открывать блоки для написания байт-кода, компилятор встроит такой код без изменений. Похожая возможность есть, например, в компиляторе gcc служебным словом __asm__
.
Вторая директива позволяет включать код из других файлов.
Структуры
Структуры были и до этого, но с этой версии теперь доступна передача их как параметров для функций. Сами функции теперь могут иметь структуры в качестве типа возвращаемого значения. Добавлена возможность арифметических действий над структурами, теперь можно упростить код такого вида:
A.x = B.x * 2 + C.x;
A.y = B.y * 2 + C.y;
A.z = B.z * 2 + C.z;
до одной строки:
A = B * 2 + C;
При этом в байт-коде второй вариант будет выглядеть так же, как и первый, так что это можно считать синтаксическим сахаром.