Объектно-ориентированный продвинутый векторный транслятор — язык программирования с поддержкой AVX-512
![]() |
|
| Тип | Языки программирования, генераторы кода |
| Написан на | ПВТ-ОО, Lazarus IDE, flat assembler |
| Операционные системы | Windows 8/10/11, WINE64 |
| Системные требования | AVX, AVX2, AVX-512 |
| Языки оболочки | Русский |
| Первый выпуск | 8 сентября 2021 |
| Последняя версия | 0.7 |
| Дата последней версии | 23 сентября 2026 |
| Читаемые форматы данных | исходный код ПВТ-ОО .avt, папка проекта ПВТ-ОО |
| Создаваемые форматы данных | исходный код fasm .asm, .inc |
| Лицензия | GNU GPL 3, GNU LGPL 3 |
Объектно-ориентированный продвинутый векторный транслятор (сокращённо: ПВТ-ОО) — язык программирования высокого уровня с поддержкой объектно-ориентированного стиля, векторных типов данных и операций с использованием набора инструкций AVX-512. Поддерживает работу как с комплексными числами, кватернионами и октонионами, так и с произвольными векторными величинами длиной 2, 4 и 8 элементов. Работа с векторными типами данных реализована на уровне языковых конструкций и встроенных функций. Скалярные типы данных так же поддерживаются.
ПВТ-ОО является результатом дальнейшего развития своего предшественника. Компилятор ПВТ-ОО, как и свой предшественник, создаёт исходный код на языке flat assembler. Часть кода может быть написана непосредственно на ассемблере, в том числе и с использованием макросного движка flat assembler. ПВТ-ОО использует более простой синтаксис записи выражений, чем свой предшественник: из него удалены лишние операции, а названия векторных типов были унифицированы.
Вам так же понадобится flat assembler для компиляции сгенерированного исходного кода.
Примечание к версии 0.7: архив данной версии содержит два компилятора: написанный на Lazarus IDE и написанный на ПВТ-ОО. Обозреватель кода был возвращён в архив и поддерживает все новые возможности компилятора. Библиотека среды исполнения была переработана, поэтому при переносе кода со старой версии библиотеки вам, возможно, придётся вносить изменения в свой код.
Важно: компилятор находится на стадии альфа, что означает отсутствие некоторых возможностей, заложенных в концепцию языка программирования. Тем не менее, возможность создания исполняемых файлов имеется. Мы сейчас работаем над тем, чтобы данный компилятор стал пригоден для разработки приложений.
Загрузки
Загрузить Объектно-ориентированный продвинутый векторный транслятор версии 0.7 (загрузок: 4)
Что нового в последнем выпуске
Все изменения помещены в текстовый файл CHANGELOG. Здесь перечислены только значимые изменения.
Компилятор:
- Компилятор теперь разработан в среде Lazarus IDE и представлен исполняемым модулем
avtc.exe. Компилятор, разработанный на ПВТ-ОО, по-прежнему включён в архив и представлен исполняемым модулемavtc-sh.exe. - Расширены возможности формата
classpath: теперь разрешены хвостовые пробелы и комментарии от точки с запятой до конца строки. - Код компилятора, разработанного на ПВТ-ОО, изменён в соответствии с изменившимися библиотеками среды исполнения.
- Видимость типов и пакетов теперь проверяется в коде методов и операторов. Больше не получится объявить локальную переменную, тип которой невидим из текущего контекста, или использовать ключевые слова
classиpackageдля получения объектных ссылок на невидимые типы и пакеты. - Выражения вида
x.operator -()теперь корректно распознаются как унарный оператор. Исправлено для всех четырёх операторов, которые могут быть как унарными, так и бинарными:+,-,++++и----. - Исправлено зацикливание при проверке на рекурсивный вызов конструкторов.
- Удалена возможность генерации 32-битного кода. В файлах
classpathпараметрpointer-sizeтеперь игнорируется.
Среда исполнения:
- Добавлен пакет
platform.independent.osservices, содержащий основные сервисы операционных систем. - Методы и операторы некоторых классов изменены так, чтобы арифметические операторы (например,
+или>=) были только у классов, чьи объекты являются неизменяемыми. Например, классavt.lang.Stringимеет оператор+, а классavt.lang.StringBuilderимеет методappend. - Реализация сервиса
avt.lang.Cloneableбыла удалена из протоколов в пакетеavt.lang.array. - Методы
clone()массивов теперь клонируют ёмкость и скрытую часть массива. - Класс
avt.io.ByteArrayStreamтеперь переименован вByteArrayBidirectStreamи переработан. - В протоколе
avt.io.extension.MarkExtensionизменено объявление методаmarkнаpublic void mark() throws avt.io.IOExceptionи изменены все его реализации. - Протокол
platform.independent.filesystem.FileSystemпереработан, добавлено свойствоcurrentDirectory. - Класс
platform.independent.filesystem.ReadOnlyFileSystemExceptionтеперь унаследован от классаplatform.independent.filesystem.FileSystemException. - В классе
avtx.application.ConsoleAppоставлены только конструктор и методint main(avt.lang.String[]), остальные методы и свойства удалены. - Исправлены выявленные ошибки и недочёты.
Архив:
- Обозреватель кода возвращён в архив и поддерживает все новые возможности компилятора и языка программирования. Представлен исполняемым модулем
avtb.exe. - Добавлена динамически подключаемая библиотека
avo, представленная исполняемым модулемavo.dll. Есть возможность компиляции исполняемого модуляlibavo.so.
Что можно написать на ПВТ-ОО?
ПВТ-ОО является специализированным языком программирования: с его помощью можно создавать приложения произвольного формата, а в будущем планируется возможность написания ядер операционных систем.
На данный момент поддерживается возможность создания консольных приложений под ОС Windows. В будущем планируется поддержка большего количества операционных систем и возможности создания графических приложений.
Важно: ПВТ-ОО НЕ предназначен для создания динамически подключаемых библиотек и программ для устройств.
Примеры кода
Пример вывода текста на консоль:
Исходный код
/* Пример вывода текста на консоль */
package ru.malik.elaborarer.avtoo.examples.hello;
import avtx.application.*;
public class HelloApp(ConsoleApp)
{
public () { }
public int main(String[] arguments) {
System.out.println("Приветствую! Ваш процессор поддерживает AVX-512!");
return 0;
}
}
Вывод программы
Приветствую! Ваш процессор поддерживает AVX-512!
Пример поворота вектора вокруг оси:
Исходный код
/* Пример поворота вектора вокруг оси */
package ru.malik.elaborarer.avtoo.examples.rotation;
import avt.io.*;
import avtx.application.*;
public class RotationApp(ConsoleApp, Math)
{
public () { }
public int main(String[] arguments) {
PrintStream output = System.out;
double4 axis = new byte4 { 0, 1, 1, 1 };
output.print("Пусть у нас есть ось вращения a = ");
output.print(axis);
output.print(", которая имеет нормализованный вид: norm(a) = ");
output.println(axis /= (double) abs(axis));
double4 vrot = rotq(PI * 2 / 3, axis);
double4 vec1 = new byte4 { 0, 1, 0, 0 };
output.print("Повернём вектор v1 = ");
output.print(vec1);
output.print(" на 120 градусов вокруг a, получим вектор v2 = ");
output.println(vrot * vec1 / vrot);
double4 vec2 = new byte4 { 0, 0, 1, 0 };
output.print("Повернём вектор v2 = ");
output.print(vec2);
output.print(" на 120 градусов вокруг a, получим вектор v3 = ");
output.println(vrot * vec2 / vrot);
vrot = rotq(PI / 3, axis);
output.print("Повернём вектор v1 = ");
output.print(vec1);
output.print(" на 60 градусов вокруг a, получим вектор v4 = ");
output.println(vrot * vec1 / vrot);
return 0;
}
}
helper RotationAppVectorPrintStream: PrintStream
{
public void print(double4 vector) {
printf("{ %0#1.3%, %1#1.3%, %2#1.3% }", new Object[] { new Double(vector[1]), new Double(vector[2]), new Double(vector[3]) });
}
public void println(double4 vector) {
printlnf("{ %0#1.3%, %1#1.3%, %2#1.3% }", new Object[] { new Double(vector[1]), new Double(vector[2]), new Double(vector[3]) });
}
}
Вывод программы
Пусть у нас есть ось вращения a = { 1.0, 1.0, 1.0 }, которая имеет нормализованный вид: norm(a) = { 0.577, 0.577, 0.577 }
Повернём вектор v1 = { 1.0, 0.0, 0.0 } на 120 градусов вокруг a, получим вектор v2 = { 0.0, 1.0, 0.0 }
Повернём вектор v2 = { 0.0, 1.0, 0.0 } на 120 градусов вокруг a, получим вектор v3 = { 0.0, 0.0, 1.0 }
Повернём вектор v1 = { 1.0, 0.0, 0.0 } на 60 градусов вокруг a, получим вектор v4 = { 0.667, 0.667, -0.333 }Кроме того, последний пример показывает использование помощника, расширяющего функционал класса avt.io.PrintStream, чтобы он мог выводить векторную часть кватерниона типа double4. Оригинальный класс не имеет методов вывода векторных типов данных (см. исходный код).
Технические детали
Внутренне ПВТ-ОО состоит из консольного компилятора avtc.exe и графического обозревателя кода avtb.exe. Компилятор создаёт в заданной папке проекта папку dst и помещает в неё исходный код на языке flat assembler. Обозреватель кода, как правило, используется во время написания исходного кода для поиска и просмотра классов, методов и других элементов объектно-ориентированной программы.
