Skip to content

Интерпретатор байт-кода OCaml реализованный на flat assembler g

Notifications You must be signed in to change notification settings

STrusov/microcaml

Repository files navigation

Микроинтерпретатор байт-кода OCaml

О реализации

Интерпретатор обеспечивает запуск исполняемых файлов, сгенерированных транслятором ocamlc. Предполагается как экспериментальная замена штатному ocamlrun.

Цели проекта:

  • Исследовать нюансы использования языка ассемблера в качестве инструмента для создания программного обеспечения под современные процессорную архитектуру AMD64 и операционную систему на базе ядра Linux (окружение GNU не используется).
  • Оценить применимость на практике менеджера кучи, выделяющего память простым инкрементом указателя и подключающего страницы памяти по необходимости и прозрачно для пользователя.
  • Апробировать использование сборщика мусора в программах на языке ассемблера.
  • Сравнить полученную реализацию по эффективности и сопутствующим параметрам с эталонной.

Особенности виртуальной машины

  • В качестве стека виртуального процессора используется аппаратный стек. При этом бо́льшая часть остальных данных хранится в куче, исключая возможность перезаписи адресов возврата при неаккуратной работе с локальными массивами.
  • Адреса обработчиков инструкций виртуального процессора вычисляются арифметически, без использования таблиц, множественных условных переходов, или модификации байт-кода (режим THREADED_CODE в оригинальной реализации). Такой подход потенциально позволяет сократить размер опкодов простых инструкций с четырёх байт до одного, соответственно и файла с байт-кодом (но потребует изменений в трансляторе).

Установка и использование

Для сборки требуется транслятор flat assembler g.

Исходники включают все необходимые заголовочные файлы и, по идее, должны собираться любым исполняемым файлом из архива поставки fasmg. Однако, рекомендуется переименовать (или создать символьную ссылку) fasmg.x64 в fasmg. Для работы утилиты make путь к транслятору должен быть доступен в переменной $PATH.

Файл с байт-кодом для исполнения передаётся параметром (в ранней версии HelloWorld имя было зашито жёстко).

./microcaml test/hello

В виду неполноты реализации, на данный момент вероятно завершение выполнения произвольного файла с сообщением о неподдерживаемом блоке, или невалидном формате инструкции виртуальной машины, либо останов в контрольной точке int3/ud2.

На момент редакции описания пройдены следующие тесты, поставляемые с эталонной реализацией (версия 4.04.2, каталог ocaml/testsuite/tests/):

  • array-functions
  • basic
  • basic-float
  • basic-more
  • extension-constructor
  • lazy
  • letrec
  • lib-format
  • lib-printf
  • lib-queue
  • lib-stack
  • lib-string
  • lib-uchar
  • match-exception-warnings
  • prim-bswap
  • prim-revapply
  • translprim

(пофайловый список см. в autotest.result)

About

Интерпретатор байт-кода OCaml реализованный на flat assembler g

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Languages