Объектно-ориентированный продвинутый векторный транслятор — язык программирования с поддержкой AVX-512

Обозреватель кода
Обозреватель кода
Тип Языки программирования, генераторы кода
Написан на ПВТ-ОО, Lazarus IDE, flat assembler
Операционные системы Windows 8/10, WINE64
Системные требования AVX, AVX2, AVX-512
Языки оболочки Русский
Первый выпуск 8 сентября 2021
Последняя версия 0.4.1
Дата последней версии 19 августа 2024
Читаемые форматы данных исходный код ПВТ-ОО .avt, папка проекта ПВТ-ОО
Создаваемые форматы данных исходный код fasm .asm, .inc
Лицензия GNU GPL 3, GNU LGPL 3

Объектно-ориентированный продвинутый векторный транслятор (сокращённо: ПВТ-ОО) — язык программирования высокого уровня с поддержкой объектно-ориентированного стиля, векторных типов данных и операций с использованием набора инструкций AVX-512. Поддерживает работу как с комплексными числами, кватернионами и октонионами, так и с произвольными векторными величинами длиной 2, 4 и 8 элементов. Работа с векторными типами данных реализована на уровне языковых конструкций и встроенных функций. Скалярные типы данных так же поддерживаются.

ПВТ-ОО является результатом дальнейшего развития своего предшественника. Компилятор ПВТ-ОО, как и свой предшественник, создаёт исходный код на языке flat assembler. Часть кода может быть написана непосредственно на ассемблере, в том числе и с использованием макросного движка flat assembler. ПВТ-ОО использует более простой синтаксис записи выражений, чем свой предшественник: из него удалены лишние операции, а названия векторных типов были унифицированы.

Вам так же понадобится flat assembler для компиляции сгенерированного исходного кода.

Важное замечание по версии 0.6: компилятор данной версии написан на самом себе и может долго компилировать проекты. Кроме того, обозреватель кода был удалён из данной версии. Это временное состояние проекта, однако оно было небходимо для разработки языка программирования. Следующая версия, если она выйдет, снова будет написана на Lazarus IDE.

Важно: компилятор находится на стадии альфа, что означает отсутствие некоторых возможностей, заложенных в концепцию языка программирования. Тем не менее, возможность создания исполняемых файлов имеется. Мы сейчас работаем над тем, чтобы данный компилятор стал пригоден для разработки приложений.

Загрузки

Поддержать

Загрузить Объектно-ориентированный продвинутый векторный транслятор версии 0.6 (загрузок: 0)

Загрузить Объектно-ориентированный продвинутый векторный транслятор версии 0.4.1 (загрузок: 6)

Все версии

Контрольные суммы

Исходный код

Что нового в последнем выпуске

Все изменения помещены в текстовый файл CHANGELOG. Здесь перечислены только значимые изменения.

Компилятор:

Язык программирования:

Среда исполнения:

Что можно написать на ПВТ-ОО?

ПВТ-ОО является специализированным языком программирования: с его помощью можно создавать приложения произвольного формата, а в будущем планируется возможность написания ядер операционных систем.

На данный момент поддерживается возможность создания консольных приложений под ОС 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. (Обозреватель кода доступен в версии 0.4.1 и не совместим с версией 0.6.) Компилятор создаёт в заданной папке проекта папку dst и помещает в неё исходный код на языке flat assembler. Обозреватель кода, как правило, используется во время написания исходного кода для поиска и просмотра классов, методов и других элементов объектно-ориентированной программы.