Я начал связываться с Ypsilon, которая является реализацией схемы на C ++.
Соответствует R6RS, имеет быстрый сборщик мусора, поддерживает многоядерные процессоры и Unicode, но имеет ОТСУТСТВИЕ документации, примеры кода C ++ и комментарии в коде!
Авторы предоставляют его как отдельное консольное приложение.
Моя цель — использовать его в качестве механизма сценариев в приложении для обработки изображений.
Исходный код хорошо структурирован, но структура незнакома.
Я потратил на это две недели, и вот что я узнал:
Насколько я понимаю, мне нужно реализовать 3 пользовательских порта (IN, OUT и ERROR).
Но пока я не могу понять, каковы входные параметры каждой функции (onRead, onWrite, onSetPos, onGetPos, onClose) в обработчики.
К сожалению, нет ни одного примера реализации пользовательского порта, нет примера следующего:
подведение, если кто-нибудь предоставит C ++ пример какого-либо сценария, упомянутого выше, это значительно сэкономит мое время.
Заранее спасибо!
Хорошо, из того, что я могу прочитать из исходного кода, вот как называются различные обработчики (это все неофициально, основано исключительно на проверке исходного кода):
(lambda (bv off len))
: принимает байтовый вектор (в который ваш обработчик поместит прочитанные данные), смещение (fixnum) и длину (fixnum). Вы должны прочитать до len
байты, помещая эти байты в bv
начинается с off
, Возвращает количество фактически прочитанных байтов (как fixnum).(lambda (bv off len))
: принимает байтовый вектор (который содержит данные для записи), смещение (fixnum) и длину (fixnum). Возьми до len
байты из bv
, начинается с off
и выпиши их. Возвращает количество фактически записанных байтов (как fixnum).(lambda (pos))
(вызывается только в текстовом режиме): позволяет хранить некоторые данные для pos
так что будущий вызов к обработчику установленной позиции с тем же pos
значение сбросит позицию обратно в текущую позицию. Возвращаемое значение игнорируется.(lambda (pos))
: Переместить текущую позицию в значение pos
, Возвращаемое значение игнорируется.(lambda ())
: Закрыть порт. Возвращаемое значение игнорируется.Чтобы ответить на другой вопрос, который у вас был, о компиляции и запуске «bytecode»:
compile
, Это возвращает объект кода.run-vmi
, но вы не можете получить доступ к этому извне кода.auto-compile-cache
система.Посмотри на heap/boot/eval.scm
для деталей. (Опять же, это не официальный ответ, а основанный исключительно на личных экспериментах и проверке исходного кода.)