Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

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

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



План развития виртуальной машины

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

1

Евгений пишет мысли разрозненно:
улучшить описание проекта
добавить инструкцию

Надо сформировать видение - какой будет следующая версия, что в неё войдёт, что не войдёт,
что в каком порядке делать. Кому этим заниматься, как не лидеру проекта "Виртуальная машина" (то есть Евгению)?

Тем более у него на tvoygit появился первый форк.
Что собирается кодить форкнувший?

Когда ожидается мёрж и следующий тег промежуточного релиза?

0

2

Раз уж Лис назвал эту тему планом, то здесь и начнем выкладывать текущие планы.

Текущие планы

1. Создание боковой ветви проекта: "Генератор виртуальной машины" (пробные эксперименты)

2. Переформатирование проекта, чтобы обеспечить возможность добавления новых виртуальных машин (новые колеса для "Сказочной колесницы") (сделано)

3. Опции командной строки (сделано)

4. Реализация арифметических операций (реализовано: целочисленные сложение, вычитание, умножение. В очереди: целочисленное деление и остаток)

5. Опкоды

6. Обработка ошибок

Отредактировано Евгений (2023-03-20 14:45:22)

0

3

Опкоды (обновляемое)

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

Текущий (реализованый) перечень опкодов.

        СТОП       // - Остановка работы процессора
        // - Целочисленная арифметика
        // операции типа регистр-регистр
        СЛЖ     // - Сложение целых чисел
        ВЫЧ        // - Вычитание целых чисел
        УМН        // - Умножение целых чисел
        ДЕЛ        // - Деление целых чисел
        ОСТ        // - Остаток от деления
        И             // - Побитовое И
        ИЛИ        // - Побитовое ИЛИ
        ИСК          // - Побитовое исключающее ИЛИ
        ИЛИ_НЕ (ИЛН)          // - Побитовое  ИЛИ-НЕ
        ЕР         // - Если равно
        ЕН         // - Если не равно
        ЕБ         // - Если больше
        ЕМ         // - Если меньше

        // операции типа регистр-число
        СЛЖЧ    // - Сложение со знаковым числом
        ИЧ    // - Побитовое И со знаковым числом
        ИЛИЧ    // - Побитовое ИЛИ со знаковым числом
        ИСКЧ    // - Побитовое исключающее ИЛИ со знаковым числом
        ИЛИ_НЕЧ (ИЛНЧ)          // - Побитовое  ИЛИ-НЕ со знаковым числом
        ПР        // - Безусловный переход по адресу, находящемуся в регистре
        ПЧ        // - Безусловный переход вперед/назад на величину числа*4
        СДЛ     // - Логический сдвиг влево
        СДП     // - Логический сдвиг вправо
        САП     // - Арифметический сдвиг вправо
        ЕРЧ         // - Если равно числу
        ЕНЧ         // - Если не равно числу
        ЕБЧ         // - Если больше чем число
        ЕМЧ         // - Если меньше чем число

// для операций с беззнаковыми числами используется суффикс "б"
// Пример: СЛЖб - сложение целых беззнаковых чисел. Отличается от знаковых тем, что не обрабатывается ошибка переполнения.

Отредактировано Евгений (2023-03-28 23:37:56)

0

4

Обработка ошибок (обновляемое)

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

1. Общие ошибки
***Найден неизвестный опкод - завершить работу и выйти (с сообщение / без сообщения) об ошибке

2. Ошибки арифмитических операций
***Ошибка переполнения целого числа - не обрабатывается (требуется обсуждение)
***Ошибка деления на ноль - нужна обработка (варианты: завершение работы, возврат значения +/- бесконечность)

3. Ошибки бесконечного цикла

Отредактировано Евгений (2023-03-20 16:15:54)

0

5

1) уже́ есть две команды/инструкции.
то выполнена операция "добавление инструкции в архитектуру" (дважды)
1.1) Следующее дело - составить руководство про то, как команды добавлять.
двух команд уже должно было быть достаточно, чтобы его составить.
1.2) если команды чем-то разные (например режимами адресации),
  то сделать под каждую группу команд по странице
1.3) После этого могли бы найтись добровольцы добавить пару десятков инструкций каждый (ведь было бы написано, что, как и зачем делать).
Для этого надо создать ветку о том, что добровольцы нужны. По крайней мере там можно будет обсудить мотивации.
А даже если бы и не нашлись, всё равно в дальнейшем добавлять команды было бы проще (ведь записано как это делать, и почему так).

2) надо определиться с количеством архитектур
я где-то писал уже про это
например: "Оригинальная", мимикрия под байткод "КуМир", инструкции проекта Янтарь, Интел64, Арм64 (и ещё много разных вариантов возможно)
2.1) надо написать руководство на тему
"Как добавить архитектуру в виртмашину" вообще.
2.2) добавить руководства по особенностям реализации в виртмашине каждой из особенных архитектур
2.3) надо найти лидеров по обеспечению полноты реализации архитектур (по одному или более на архитектуру, которая интересна именно ему)

3) нужно определиться с платформами
3.1) подумать и описать, что нужно в коде сделать, чтобы добавить новую платформу
3.2) описать детали каждой из платформ
Платформа "Виртмашина КуМир-а".
Платформа "Linux/Elf/UTF-8/syscall"
3.3) поискать лидеров по реализации платформ

4) сделать пакеты для установки программы под разные оси
4.1) написать общее руководство, которое описывает программу для всех операционных систем
4.2) написать руководства по опакечиванию под соответствующии ОС (по одному на каждую)
4.2.1) Debian
4.2.2) Gentoo
4.3) найти мейнтейнеров под соответствующие ОС
  (сами они не найдутся, надо написать, что они нужны, почему нужны, и зачем это нужно им самим)

5) написать справку, как эту виртуальную машину запускать, как передавать ей параметры.
Может быть сделать man и команды, положенные по стандарту POSIX (вроде -v).

6) что значит "помочь со справкой"?
6.1) Если это всё описать на форуме в куче топиков, это, конечно поможет. Но плохо сочетается с подготовкой релиза.
6.2) Есть ещё другой механизм - файлы на github.io или аналоге (хостинг статических HTML-страниц, набранных вручную).
Есть ли такое на tvoygit я не знаю. Но если что, то можно зазеркалировать туда и сюда.
6.3) Сделать промежуточный релиз (1.1.0 например). gihub-страницы с релизами сочетаются хорошо.
Релиз в принципе тег, и к нему можно приложить архивы (но вообще и по тегу сгенерируют, не маленькие)
https://stackoverflow.com/questions/146 … ent-branch
... ранее мы ещё обсуждали тхаб.рф для этой цели.

7) составить план дальнейших действий от достигнутого,
определить какие люди понадобятся для реализации будущего плана,
написать к ним воззвание (и добавить его в тексты статей для СМИ)
«Мне надо больше еды, да-да-да, больше еды, больше еды-ы-ыы!!»

8) Кроме факта релиза в репозитории, ещё надо подготовить статьи о нём (факте релиза)
8.1) статью в репозитории
8.2) топик на plana.mybb.ru (хотя бы один общий текст статьи-релиза).
8.3) статью для opennet
Раз они уже один раз разместили, то и про апдейт напишут, особенно, если будет что-то новое.
Ещё можно/нужно поблагодарить автора opennet за организацию предыдущего обсуждения.
8.4) статью для linux.org.ru
тут могут не принять (не проаппрувить)
8.5) есть ещё rsdn.org (если абстрактно рассуждать)
8.6) и programmersforum (у МихалНика)
Кроме того, там (в тексте статей) можно будет написать текст более развёрнуто, а не так, как в прошлый раз.
Заодно сразу на все вопросы заранее ответить, по предыдущим отзывам.
Разместить призывы (за эту идею спасибо БудДену, который определил требуемые показатели количественно)

Итого:
- улучшения в коде;
- пакеты для распространённых операционок;
- документация;
- тексты релизов для публикации;
- пожелания к аудитории (новые планы, призывы)

Месяца в три наверное хорошо бы уложиться? или в полгода?
(надо заметить, что работоспособность необязательна, полнота наборов инструкций необязательна,
обязательно только продвижение/прогресс реализации и документационное оформление для людей).
Без прогресса новости не опубликуют, а без документации люди не привлекутся (выйдет, как сейчас).

Отредактировано Лис (2023-03-09 13:02:18)

0

6

В тексте лицензии
https://tvoygit.ru/stein47/russian-virt … LICENSE#L3
не указаны годы разработки (2023-2023) и автор - Eugeny

Отредактировано Лис (2023-03-11 15:23:19)

0

7

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

В тексте лицензии
https://tvoygit.ru/stein47/russian-virt … LICENSE#L3
не указаны годы разработки (2023-2023) и автор - Eugeny

Отредактировано Лис (Сегодня 15:23:19)

Это поправимо.

Мне тут пришла мысль... А возможно сделать генератор виртуальной машины? По некоторым входным параметрам сгенерировать код на языке программирования, полностью или частично реализующий виртуальную машину. Примерно как генератор синтаксических  анализаторов.

0

8

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

возможно сделать генератор виртуальной машины

Конечно возможно. Не один враг остановить не сможет.

Только непонятно как. Насколько я понимаю, ты хочешь делать детерминированные конечные автоматы (ДКА) или автоматы с магазинной памятью (МП), которым на вход будут подаваться цепочки битов, а эти автоматы будут дёргать функции, как команда будет распознана, верно?

С магазинной памятью (стеком) для Интел64, потому что там есть префиксы к командам и они могут располагаться почти произвольно. А в префиксе бит, говорящий какой регистр используется. С другой стороны, вложенности там нет, так что возможно хватит просто ДКА без стека. Надо пробовать.

Отредактировано Лис (2023-03-11 15:49:06)

0

9

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

Что ты собираешься делать дальше?

Можно поэкспериментировать с intel64  и начальным дампом. Это будет шагом к ассемблеру снизу.

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

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

Отредактировано Евгений (2023-03-14 20:40:25)

0

10

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

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

И какая же из этих активностей ведёт к скорейшему увеличению количества вовлечённых разработчиков?
Или может быть есть ещё какие-то другие активности ("ко́сти"), которыми лучше заняться для того, чтобы проект быстрее оброс "мясом"?
Что у проекта является "становым хребтом"?

Отредактировано Лис (2023-03-14 20:44:52)

0

11

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

И какая же из этих активностей ведёт к скорейшему увеличению количества вовлечённых разработчиков?

Это Лис у нас стратег, у него даже лисоплан есть.) То, что проект на русифицированном Си, немного подогревает любопытство наблюдающих, с другой же стороны является тормозящим моментом для
присоединения к нему. Если Лис намекает, что нужно заняться рекламой и пиаром, то это совсем не моя стезя).

0

12

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

является тормозящим моментом для присоединения к нему

Каков именно "механизм торможения"? Можно ли его "умаслить". Как это всё связано с "кривой обучения"?
Верно ли что писать код на русифицированном Си мешает отсутствие примеров кода?
Поможет ли статья с такими примерами тому, чтобы присоединяться к проекту стало легче?
Кто эту статью должен написать, если лидер проекта ты, людей на земле много, а Лис ленивый?

Отредактировано Лис (2023-03-14 21:24:41)

0

13

Писать должен Лис, потому, что он хорошо это делает.)) А мне нужно сделать несколько примеров кода. И еще хорошо бы восстановить подсветку кода на форуме... И еще, форкнувший спрашивал про
Расширение для VSCodium

0

14

> Писать должен Лис, потому, что он хорошо это делает.

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

А Лису надо для всего проекта в целом то же самое сделать (но для своего проекта, а не для проекта виртмашины).
Сайт сделать, из чего проект состоит, план изобразить в виде красивого HTML и т.д.

Про форт ещё прочитать. Как я смогу правильно планировать, если не разберусь с этим вопросом и не составлю своё мнение?

Поэтому Лис не подписывается под задачей "обеспечить пиар-сопровождение проекта Сказочная Колесница", он не тянет и сразу об этом заранее сообщает. Ищи других разумных.

Отредактировано Лис (2023-03-14 22:06:52)

0

15

В планах появилась новая текущая цель: "Генератор виртуальной машины". Это не будет универсальное решение, это будет простая программа, генерирующая русифицированный Си-файл, реализующий "оригинальную" ВМ для "Сказочной колесницы".
Зачем понадобился генератор,  почему нельзя я не  хочу вручную написать одну простую ВМ, об этом я расскажу в отдельной теме форума. Будет ли эксперимент удачным и можно ли будет извлечь из него какой-то опыт? Время покажет...

И еще одна мысль. Вместе с ВМ почти сразу нужно разрабатывать хоть какой-то ассемблер. Без него даже протестировать нормально машину не получится.

Отредактировано Евгений (2023-03-20 16:47:50)

0

16

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

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

И/или дизассемблер. Если приглядеться к библиотекам, которые есть, то некоторые одновременно дизассемблруют и ассемблируют, используются в двух местах. Есть в этом что-то, кажущееся правильным. И отладчик ещё сможет её использовать.

А ещё вместе с ВМ надо писать спецификацию, чтобы всё это (ассемблер и дизассемблер и библиотеку к ним) могли делать другие люди.

0

17

Обновлен перечень опкодов-мнемоник, реализованых в ВМ.

Реализованы основные арифметические и битовые операции. На очереди логические: равно/не равно/больше/меньше.
Следом идут условные переходы. Затем загрузка из памяти в регистр и выгрузка из регистра в память.

После реализация работы с вещественными числами.

Еще останутся библиотечные и системные вызовы.

Отредактировано Евгений (2023-03-28 23:21:32)

0