ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Некоторые требования к виртуальным машинам


Некоторые требования к виртуальным машинам

Сообщений 1 страница 30 из 48

1

Лис написал(а):

Вирутальная машина есть в составе КуМир. Кириллический язык тоже. Надо посмотреть, как у них справка отображается.

Отредактировано Лис (Сегодня 13:42:51)

Спинным мозгом чую, что виртуальная машина у них ни разу не кириллическая.)

Отредактировано Евгений (2022-06-13 18:35:42)

0

2

Евгений написал(а):

Спинным мозгом чую, что виртуальная машина у них ни разу не киррилическая.

Тоже так думаю. Хотя там команды АЛУ - двоичные числа, так что, наверное можно их описать на русском языке.

По-хорошему, надо написать:
1) отдельную новую виртуальную машину (я тут уже писал, про машину Поста)
2) язык программирования поверх неё
3) графическую библиотеку и библиотеку ввода-вывода
4) ИДЕ (если так хочется), поверх тех библиотек и языка
5) даже без ИДЕ можно писать web-сервер для движка сайта под нужды сообщества (и это будет проще, чем работа с графикой)

Да, много всего, да, надо иметь инфраструктуру, как у творецкий-дом.рф в планах.

Но в принципе это всё делаемо. А чтобы оно делалось, есть проверенные рецепты - формировать формальные роли и команды, как это делает Apache Software Foundation (это тоже на этом форуме обсуждалось)

Отредактировано Лис (2022-06-13 17:41:18)

0

3

Как интересно закрутилась спираль обсуждения... Ну, давайте следующий виток, пока веб-сервер ждёт своей очереди, попробуем прорисовать очертания ВМ и языка. Есть какие-то наработки, которые можно взять за основу или с чистого листа? ЯП и виртуальную машину стоит сразу разрабатывать в связке или допустимо разграничить эти задачи?

0

4

Евгений написал(а):

Есть какие-то наработки, которые можно взять за основу или с чистого листа?

По-хорошему нужно брать КуМир и его ВМ. Чтобы не было NIH-синдрома. И вот когда/если выявятся их недостатки и наши улучшения не примут, вот тогда...

Евгений написал(а):

ЯП и виртуальную машину стоит сразу разрабатывать в связке или допустимо разграничить эти задачи?

В принципе, это независимые параллельные проекты, требующие разных скиллов. Сопрягаются они через формальную спецификацию ВМ.

Но можно и совсем с нуля всё писа́ть если есть понимание того, как, зачем, и почему так будет лучше.
Компилятор Павиа (с языком ПОП) тоже ничем не плох.

Отредактировано Лис (2022-06-13 20:10:43)

0

5

Лис написал(а):

По-хорошему нужно брать КуМир и его ВМ.

Есть возможность получить от разработчиков какую-то документацию по их ВМ? Было бы быстрее, чем изучать исходники.

0

6

Евгений написал(а):

Есть возможность получить от разработчиков какую-то документацию по их ВМ?

Не знаю, у меня нет контактов, но можно в багтрекере проекта открыть запросы на написание документации.
Ещё емейлы есть в репозитории с исходниками (очень вероятно), и им можно написать письма.

0

7

[html]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="GENERATOR" content="LyX 2.3.6.1" />
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Спецификация байткода Кумир</title>
<style type='text/css'>
/* Layout-provided Styles */
dfn.lyxnoun {
  font-variant: small-caps;
}
h1.title {
font-family: sans-serif;
font-weight: bold;
font-size: x-large;
margin-bottom: 1ex;
text-align: center;

}
div.abstract {
font-size: small;
margin-top: 0.7ex;
margin-bottom: 0.7ex;
margin-left: 3ex;
margin-right: 3ex;
text-align: left;

}

div.abstract {
margin: 4ex;
}
div.abstract_item {
font-size: small;
padding-top: 1ex;
}
div.abstract_label {
font-weight: bold;
}
h2.section {
font-family: sans-serif;
font-weight: bold;
font-size: x-large;
margin-top: 1.3ex;
margin-bottom: 0.7ex;
text-align: left;

}
div.standard {
text-indent: 2em;
margin-bottom: 2ex;
}
ul.itemize {
margin-top: 0.7ex;
margin-bottom: 0.7ex;
margin-left: 3ex;
text-align: left;

}

</style>
</head>
<body dir="auto">
<h1 class="title" id='magicparlabel-1'>Спецификация байткода Кумир</h1>

<div class="abstract" id='magicparlabel-2'><div class="abstract_item">Кумир имеет два режима выполнения: <em>быстрый</em> - используя машинный код, полученный компилятором gcc из промежуточного C99-кода, и <em>стандартный</em> - используя интерпретатор байт-кода. Данный документ описывает используемый байт-код.</div>
</div>
<h2 class="section" id='magicparlabel-3'><span class="section_label">1</span> Основные положения. Структура программы интерпретатора</h2>
<div class="standard" id='magicparlabel-4'>Программа интерпретатора состоит из:</div>

<ul class="itemize" id='magicparlabel-5'><li class="itemize_item">таблицы констант;</li>
<li class="itemize_item">таблиц глобальных переменных;</li>
<li class="itemize_item">таблиц локальных переменных;</li>
<li class="itemize_item">таблицы используемых внешних функций;</li>
<li class="itemize_item">программного кода, являющегося набором <em>инструкций</em> для каждого отдельно Кумир-алгоритма.</li>
</ul>
<div class="standard" id='magicparlabel-10'>В программе данные элементы описываются в произвольном порядке. Каждый элемент определяется <em>заголовком</em>, данными и, при необходимости – размером элемента в программе.</div>

<div class="standard" id='magicparlabel-11'>Программа может иметь как бинарное, так и текстовое представление. Эти представления эквивалентны, для их преобразования предназначена утилита <dfn class='lyxnoun'>kumir2-as</dfn>, входящая в поставку Кумир, которая преобразует текстовое представление в бинарное и наоборот.</div>

<div class="standard" id='magicparlabel-12'>Формальное описание бинарного и текстового представления кода будет приведено в приложениях.</div>

<div class="standard" id='magicparlabel-13'>Для чтения и записи байткода как в текстовом, так и в бинарном виде предназначена библиотека <dfn class='lyxnoun'>Bytecode</dfn>, входящая в поставку Кумир, которая реализует чтение и запись структуры <dfn class='lyxnoun'>Bytecode::Data</dfn> (описана в <span style='font-family:monospace;'>data.h</span>), используя в качестве источников ввода-вывода потоки <dfn class='lyxnoun'>QDataStream</dfn> и <dfn class='lyxnoun'>QTextStream</dfn>.</div>
<h2 class="section" id='magicparlabel-14'><span class="section_label">2</span> Элемент программы</h2>
<div class="standard" id='magicparlabel-15'>Под элементом программы понимаются:</div>

<ul class="itemize" id='magicparlabel-16'><li class="itemize_item">константа (строковое представление – &bdquo;.constant&rdquo;, бинарное - <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>03</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">локальная переменная (&bdquo;.local&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>01</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">глобальная переменная (&bdquo;.global&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>02</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">ссылка на внешний алгоритм (&bdquo;.extern&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>05</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">кумир-алгоритм (&bdquo;.function&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>04</mn>
  </mrow>
</mrow></math>) и его три частных случая:</li>
<li class="itemize_item">– главный алгоритм (&bdquo;.main&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>07</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">– программа до первого алгоритма (&bdquo;.init&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>06</mn>
  </mrow>
</mrow></math>);</li>
<li class="itemize_item">– тестирующий алгоритм (&bdquo;.testing&rdquo;, <math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mrow><mn>0</mn><mi>x</mi><mn>08</mn>
  </mrow>
</mrow></math>).</li>
</ul>
<div class="standard" id='magicparlabel-24'>Элемент программы - это структура <dfn class='lyxnoun'>Bytecode::TableElem</dfn>, которая состоит из:</div>

<ul class="itemize" id='magicparlabel-25'><li class="itemize_item">типа элемента;</li>
<li class="itemize_item">для констант, локальных переменных и глобальных переменных – базового типа переменной, размерности массива и параметра аргумента (арг, аргрез, рез или простая переменная);</li>
<li class="itemize_item">для переменных, алгоритмов и ссылок на внешние алгоритмы – номера модуля (исполнителя) – целое число от 0 до 255;</li>
<li class="itemize_item">для локальных переменных и алгоритмов – уникального номера алгоритма – целое число от 0 до 65535;</li>
<li class="itemize_item">для констант, переменных, алгоримов и ссылок на внешние алгоритмы – уникальный номер id – целое число от 0 до 65535;</li>
<li class="itemize_item">для переменных, алгоритмов и ссылок на внешние алгоритмы – имя переменной или алгоритма – Unicode-строка;</li>
<li class="itemize_item">для ссылок на внешние алгоритмы – имя модуля (plugin'а), реализующего данный модуль – ASCII-строка;</li>
<li class="itemize_item">для кумир-алгоритмов (включая его частные случаи) – список <em>инструкций</em>.</li>
</ul>
<h2 class="section" id='magicparlabel-33'><span class="section_label">3</span> Инструкции</h2>
<div class="standard" id='magicparlabel-34'>Инструкции интерпретатора имеют фиксированный размер 32 бита.</div>

<ul class="itemize" id='magicparlabel-35'><li class="itemize_item">Первый байт определяет тип инструкции.</li>
<li class="itemize_item">Второй байт является контекстно-зависимым и может определять:
<br />

<ul class="itemize" id='magicparlabel-37'><li class="itemize_item">номер модуля;</li>
<li class="itemize_item">таблицу для выбора значений (локальная, глобальная или константа);</li>
<li class="itemize_item">номер регистра (ячейки памяти выполнителя).</li>
</ul>
</li><li class="itemize_item">Последние два байта определяют контекстно-зависимый аргумент команды.</li>
</ul>
<div class="standard" id='magicparlabel-41'>Описание инструкций приведено в приложении <span style='font-family:monospace;'>instructions.xls</span>.</div>
</body>
</html>
[/html]

0

8

Код:
Тип инструкции  Hex-код  Второй байт       Аргумент       Изменение стека значений  Описание
      NOP        0x00                                                               Ничего не делает
     CALL        0x0A    Номер модуля  Номер алгоритма            "-N-1+R"          Берет из стека число аргументов N, затем N значений в порядке следования аргумент
     INIT        0x0C   Таблица перем. Номер переменной              0              Устанавливает флаг для переменной "не определена"
    SETARR       0x0D   Таблица перем. Номер переменной            "-2*D"           Устанавливает границы D-мерного массива, если он еще не определен, либо изменяет
     STORE       0x0E   Таблица перем. Номер переменной              0              Сохраняет значение из стека в переменной. Если переменная является массивом, то с
   STOREARR      0x0F   Таблица перем. Номер переменной             "-D"            Сохраняет значение из стека в элементе D-мерного массива. Индексы массива берутся
     LOAD        0x10   Таблица перем. Номер переменной             "+1"            Кладет в стек значение переменной. Если переменная является массивом, то сохраняе
    LOADARR      0x11   Таблица перем. Номер переменной            "-D+1"           Кладет в стек значение элемента D-мерного массива. Индексы массива берутся из сте
    SETMON       0x12
   UNSETMON      0x13
     JUMP        0x14                  Номер инструкции              0              Выполняет безусловный переход к соответствующему номеру инструкции в текущем алго
      JNZ        0x15   Номер регистра Номер инструкции              0              Выполняет переход к соответствующему номеру инструкции в текущем алгоритме, если
      JZ         0x16   Номер регистра Номер инструкции              0              Выполняет переход к соответствующему номеру инструкции в текущем алгоритме, если
      POP        0x18   Номер регистра                               -1             Кладет значение из стека в соотвествующий регистр
     PUSH        0x19   Номер регистра                              "+1"            Кладет значение соответствующего регистра в стек значений
      RET        0x1B                                                0              Выполняет возврат из текущей выполняемой функции
     PAUSE       0x1D
     ERROR       0x1E   Таблица перем. Номер переменной              0              Выполняет аварийное завершение программы с текстом ошибки из соотвествующей литер
     LINE        0x1F                    Номер строки                0              Указывает отладчику на номер текущей строки программы
      REF        0x20   Таблица перем. Номер переменной             "+1"            Кладет в стек явную ссылку на указанную переменную. Используется при передаче рез
    REFARR       0x21   Таблица перем. Номер переменной           "-2*D+1"          Кладет в стек явную ссылку на элемент D-мерного массива. Индексы массива берутся
    SHOWREG      0x22   Номер регистра                               0              Выводит на поля значение указанного регистра
   CLEARMARG     0x23                    Номер строки                0              Очищает поля от текущей строки (включительно), до указанной (включительно).
      SUM        0xF1                                               "-1"            Берет из стека два последних элемента и кладет обратно их сумму.
      SUB        0xF2                                               "-1"            Берет из стека два последних элемента и кладет обратно разность предпоследнего эл
      MUL        0xF3                                               "-1"            Берет из стека два последних элемента и кладет обратно их произведение.
      DIV        0xF4                                               "-1"            Берет из стека два последних элемента и кладет обратно частное от деления предпос
      POW        0xF5                                               "-1"            Берет из стека два последних элемента и кладет обратно предпоследний элемент в ст
      NEG        0xF6                                                0              Берет из стека элемент и кладет обратно его противоположное значение.
      AND        0xF7                                               "-1"            Берет из стека два последних элемента и возвращает их логическое произведение.
      OR         0xF8                                               "-1"            Берет из стека два последних элемента и возвращает их логическую сумму.
      EQ         0xF9                                               "-1"            Берет из стека два последних элемента и возвращает "истина", если они равны.
      NEQ        0xFA                                               "-1"            Берет из стека два последних элемента и возвращает "ложь", если они равны.
      LS         0xFB                                               "-1"            Берет из стека два последних элемента и возвращает "истина", если предпоследний э
      GT         0xFC                                               "-1"            Берет из стека два последних элемента и возвращает "истина", если предпоследний э
      LEQ        0xFD                                               "-1"            Берет из стека два последних элемента и возвращает "истина", если предпоследний э
      GEQ        0xFE                                               "-1"            Берет из стека два последних элемента и возвращает "истина", если предпоследний э

0

9

байткод КуМир-а

Уткин хотел синус, синуса не вижу.

Отредактировано Лис (2022-06-13 22:35:32)

0

10

Придётся синус выносить в библиотеку)

0

11

Лис написал(а):

По-хорошему нужно брать КуМир и его ВМ.

Этот вариант отклоняем, как неперспективный?

0

12

Евгений написал(а):

Этот вариант отклоняем, как неперспективный?

Творчески перерабатываем с учётом выявленных недостатков:
1) не умеет в многокомпонентность (многоядерность, многосокетность, разнопроцессорность)
2) не знает, что память бывает разной скорости по отношению к вычислительному узлу
3) не позволяет подключать внешние виртуальные устройства
4) не содержит синусов

Обязательно надо будет написать что добавили, как, и зачем,
чтобы был обучающий материал для перехода от машины КуМира к новой (название ещё надо придумать).

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

Я бы ещё обратил внимание, что надо разделить спецификацию на две:
- описание самой машины
- описание бинарного формата загружаемого файла

В КуМире это всё в одну кучу смешано, а это в принципе два разных дела.

Отредактировано Лис (2022-06-14 18:40:59)

0

13

Лис написал(а):

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

Предлагаю, до появления лидера, дежурным по виртуальной машине назначить Лиса, поскольку он нас втравил в этот блуд. ;) А для начала надо подумать, как "выковырнуть" машину в отдельный проект и как на ней провести тест-драйв.

0

14

Евгений написал(а):

назначить Лиса

Лидера нельзя назначить, он должен взяться за дело сам. Иначе не сработает.
Лис, вот уже 7 лет ничего не делает, как справедливо отмечает БудДен.

Лис же считает, что его роль - вести форум, на котором можно высказаться с меньшим риском забана, чем на прочих форумах. Это потому что на всех остальных форумах Лиса забанили. И БудДен бы забанил, только теперь смысла нет, Лис ИЗА-ЗА ЭТОГО писать не перестанет (я скорее перестану писать просто так, потому что нет идей. Новая линька, вон, никак не подходит).

Отредактировано Лис (2022-06-14 21:15:32)

0

15

Лис так заразительно ленится, что всё окружающие подпадают под это пагубное влияние) Лису стоит проявлять свою лень тоньше... изощрённее... Может именно тогда она (лень) станет двигателем прогресса на этом форуме.

0

16

Для сборки КуМира нужен QT, скачивание которого с официального сайта для российских IP закрыто. Не то чтобы это непреодолимо, но вообще-то  за такое  "морды надо арбузом разбивать"...

0

17

Евгений написал(а):

Для сборки КуМира нужен QT

Печально, тогда можно попробовать реализовать с нуля на голом русифицировнном Си, придерживаясь спецификации.

Отредактировано Лис (2022-06-14 23:21:17)

0

18

Может отсюда что-то можно взять...

0

19

Евгений написал(а):

Может отсюда что-то можно взять...

Спецификация важнее реализации. По ней сразу видно что есть, а чего нет.
Есть ли синус в этой "отсюда"?

0

20

Лис написал(а):

Есть ли синус в этой "отсюда"?

Понятия не имею. Вот кусочек кода

Код:
    // - Доступные операции
    enum Operations : uint8_t
    {
        stop = 0,       // - Остановка работы процессора
        // - Мне достаточно иметь один mov,
        // - Так как в структуре команды присутствует dd - Формат операнда
        move = 1,       // - Пересылка данных*

        // - Целочиленная арифметика
        iAdd = 2,       // - Сложение целых чисел
        iSub = 3,       // - Вычитание целых чисел
        iMul = 4,       // - Умножение целых чисел
        iDiv = 5,       // - Деление целых чисел
        iMod = 6,       // - Остаток от деления
        iInc = 7,       // - Инкремент
        iDec = 8,       // - Декремент
        iAnd = 9,       // - Логическое И
        iOr = 10,       // - Логическое ИЛИ
        iNot = 11,      // - Логическое НЕ

        // - Вещественная арифметика
        rAdd = 12,      // - Сложение вещественных чисел
        rSub = 13,      // - Вычитание вещественных чисел
        rMul = 14,      // - Умножение вещественных чисел
        rDiv = 15,      // - Деление вещественных чисел

        // - Команды ввода/вывода
        input = 16,     // - Ввод чисел
        output = 17,    // - Вывод чисел

        // - Переходы
        jmp = 20,       // - Прямой безусловный переход
        jzf = 21,       // - Jump in ZF = 1
        jnzf = 22,      // - Jump in ZF = 0
        jsf = 23,       // - Jump in SF = 1
        jnsf = 24,      // - Jump in SF = 0

        // - Работа с подпрограммой
        call = 25,      // - Вызов подпрограммы
        ret = 26,       // - Возврат из подпрограммы
    };

0

21

Посмотрел исходники - синуса там нет.

Она хороша тем, что маленькая, ОДНАКО, у нас есть дополнительные цели - умение работать с сетевыми картами так или иначе, умение обратывать веб-нагрузку параллельно (очень желательно).

Человек остановился потому что у него целей было мало.

А так-то годах в 60-х были книжки (учебники) про разные виртуальные машины, одноадресные, со стеком и т.д.
Я только названий не помню.

UPD:
И ещё желательно классы не использовать. Потому что потом придётся переписывать на более простом языке для повышения кирилличности.

Отредактировано Лис (2022-06-14 23:41:13)

0

22

Что-то типа такого:
https://www.computer-museum.ru/histussr/12-3.htm

0

23

Лис написал(а):

можно попробовать реализовать с нуля на голом русифицированном Си, придерживаясь спецификации.

ОК, Си, значит Си. Только учтите, что у меня образование ни грамма не айтишное. Поэтому со скидкой на некоторую туповатость и с подсказками)

0

24

Евгений написал(а):

ЯП и виртуальную машину стоит сразу разрабатывать в связке или допустимо разграничить эти задачи?

Машина и ее непосредственный язык неразрывны, хотя язык можно усложнять. Например, у Павла Чернова исходники на языке mash транслируются в ассемблер специальной ВМ.
В документации ей посвящено несколько страниц.

Евгений написал(а):

Придётся синус выносить в библиотеку)

Ему там и место.

Отредактировано MihalNik (2022-06-15 10:49:56)

0

25

MihalNik написал(а):

Машина и ее непосредственный язык неразрывны, хотя язык можно усложнять.

Отредактировано MihalNik (Сегодня 10:49:56)

Имелся в виду язык высокого уровня, а не команды ВМ, которые можно назвать входным языком машины.

0

26

Евгений написал(а):

Имелся в виду язык высокого уровня, а не команды ВМ, которые можно назвать входным языком машины.

Так и уровень ВМ может быть тоже разный. В Лиспе вон все на списках построено.
В языке может быть цикл for, а в ВМ можно сопоставлять ему хоть for, хоть while, хоть условный переход.
Любому ЯВУ соответствует некоторая абстрактная ВМ, даже если она не реализована.
Обычно с целью упрощения делают ВМ пониже уровнем, достаточным лишь для отвязки от железа.
С другой стороны, ВМ может быть лишена и части низкоуровневых возможностей. Или они частично добавляются позже, как в Java.

Отредактировано MihalNik (2022-06-15 13:34:34)

0

27

Сильно ли влияет ли уровень ВМ на быстродействие? И что важнее: скорость исполнения или совокупный показатель, объединяющий скорость трансляции и скорость исполнения?

0

28

Евгений написал(а):

Сильно ли влияет ли уровень ВМ на быстродействие? И что важнее: скорость исполнения или совокупный показатель, объединяющий скорость трансляции и скорость исполнения?

Я бы сказал, что в первую очередь важно соответствие ВМ целям проекта.
Для того, чтобы выполнить в ней компилятор подойдёт ВМ попроще (даже проще чем mash), как раз та с github наверное будет в самый раз.

Для многопоточного web-сервера хороша ВМ от mash (потому что там есть потоки)

А для IDE обязательно нужны синусы. Иначе как графику рисовать? Даже несмотря на то, что все окна квадратные, надо уметь работать с GPU, а синусы легко будет сделать по аналогии.

Учитывая это, проект виртуальной машины имеет смысл делать из трёх частей (в разных частях разные функции)

Минимизация важна для возможности более просто реализовать эту ВМ, например не только на Си, а на чём-нибудь ещё.
Например на ассемблере целевого процессора, или на кириллическом языке, который будет разработан.

Отредактировано Лис (2022-06-15 15:13:07)

0

29

Лис написал(а):

А для IDE обязательно нужны синусы.

Достаточно того, чтобы ВМ умела вызывать подпрограмму. А в ней можно реализовать обращение и к GPU и FPU.

0

30

Евгений написал(а):

Достаточно того, чтобы ВМ умела вызывать подпрограмму. А в ней можно реализовать обращение и к GPU и FPU.

Это так себе идея. Такое во всех рантаймах есть,
но оно рушит возможность доказывания гарантий про код (эмулировать нашу ВМ при помощи машины Поста).

Поэтому простое решение не всегда лучшее.

Вон, в JavaScript с WebAssebmly виртуальная машина не умеет как следует в многопоточность, уже не первое десятилетие с этим мучаются.
А ведь не трудно было с самого начала подумать.

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Некоторые требования к виртуальным машинам