1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zzhicanfly-juner_os

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README_OLD.md 6.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 02:55 ec89fe2

juner_os

Введение

Реализован интерпретатор Lisp, который может работать в интерактивном режиме. Последующая цель — организовать код операционной системы, используя смешанный подход Lisp и Rust. В то же время основная библиотека готова к загрузке и поддержке с использованием Lisp. Проект находится в разработке.

Описание

Этот проект объединяет содержание двух проектов: blog_os и mal. Сейчас реализован интерпретатор Lisp, способный работать в интерактивном режиме.

Последующая цель состоит в том, чтобы организовать код операционной системы с использованием смешанного подхода Lisp и Rust. Основная библиотека готова к использованию Lisp для загрузки и поддержки. Проект находится в процессе разработки.

План функций (не реализовано)

  • VGA текстовый режим:
    • Отображение печати: реализовано.
    • Курсор: реализовано.
    • Удаление: реализовано.
    • Код подсказки Tab: не реализовано.
    • Перемещение курсора: не реализовано.
    • Полоса прокрутки: не реализовано.
  • Полноценные функции Lisp:
    • Поддержка макросов: реализовано.
    • Поддержка кода подсказки: не реализовано.
    • Метод sacnf: не реализовано.
    • Чтение и запись файлов: не реализовано.
    • Загрузка модулей: не реализовано.
    • JIT: не реализовано.
    • Поддержка call/cc: не реализовано.
  • Устройства:
    • Распознавание жёсткого диска: не реализовано.
    • Звуковой драйвер: не реализовано.
    • Сетевая поддержка: не реализовано.
  • Абстрактные функции:
    • Параллельная многозадачность: не реализовано.
    • Поддержка GUI: не реализовано.
    • Сеть для загрузки модулей Lisp: не реализовано.
    • Использование нескольких ядер: не реализовано.
    • Самостоятельность (поддержка среды Rust): не реализовано.
  • Приложения мечты:
    • Редактор MAL этого языка: не реализовано.
    • NoteBook: не реализовано.

Журнал разработки

Подробная документация журнала разработки доступна по ссылке: https://www.yuque.com/xiaohao-i0lwb/fn1hxc.

Прямое тестирование и запуск

cargo xrun

Использование rust-gdb для выполнения с точками останова

./gdb.sh
./touchme.sh

Команды точек останова:

  • b — установить точку останова.
  • n — выполнить следующую строку (этот метод довольно ограничен, он позволяет выполнять только одну строку текущего файла).
  • tui enable — открыть представление исходного кода.
  • print — вывести значение переменной.
  • c — продолжить выполнение до следующей точки останова.
  • s — перейти к следующему шагу (но без перехода во встроенный ассемблерный код, что вызывает сожаление).

Задачи

  • Нормальное взаимодействие ввода и вывода.
  • Поддержка многопоточности.
  • Базовая реализация REPL Lisp:
    • Реализовать hashmap и ключевые типы.
    • Реализовать метод gemsym.
    • Реализовать метод call/cc.
  • Реализовать файловую систему на уровне операционной системы и разрешить загрузку Lisp (желательно, чтобы после модификации можно было вносить постоянные изменения) или прямую загрузку из сети.

Синтаксис Lisp:

BNF

В двойных кавычках («word») представлены эти символы как таковые. Double_quote используется для представления двойных кавычек. Вне двойных кавычек слово (возможно, с подчёркиванием) представляет собой синтаксическую часть. Фигурные скобки ({ }) содержат элементы, которые могут повторяться от 0 до бесконечного числа раз. Вертикальные линии (|) обозначают выбор между двумя элементами, аналогично «OR». ::= означает «определено как».

Основные выражения s-выражений:

s_expression ::= atomic_symbol |
               | "(" s_expression "."s_expression ")" |
               | list 
   
list ::= "(" s_expression < s_expression > ")"

atomic_symbol ::= letter atom_part

atom_part ::= empty | letter atom_part | number atom_part

letter ::= "a" | "b" | " ..." | "z"

number ::= "1" | "2" | " ..." | "9"

empty ::= " "

TODO!! Проблема в том, что определение выше не может хорошо распознавать строки как элементы!!!

Встраивание Rust в Lisp

Взаимодействие данных между Lisp и Rust

Основная библиотека?

Можно ли использовать управление процессами и многопоточность в Lisp для реализации метода сканирования?

Вопрос? Нужно ли использовать концепции syscall и семафоров?

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zzhicanfly-juner_os.git
git@api.gitlife.ru:oschina-mirror/zzhicanfly-juner_os.git
oschina-mirror
zzhicanfly-juner_os
zzhicanfly-juner_os
master