Skip to content

"Барбарис"

Latest
Compare
Choose a tag to compare
@ediah ediah released this 10 Jun 00:49

Основные изменения кратко:

  • Реализована поддержка многопоточности: директивы 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;

При этом в байт-коде второй вариант будет выглядеть так же, как и первый, так что это можно считать синтаксическим сахаром.