Для rebol3: Хотите начать работу с собственными расширениями в Linux. Как мне написать привет-мир?
Я знаю, как написать около 100 строк C, но я не знаю, как читать / организовывать большие источники, такие как Rebol. Где-то был учебник с hostkit и dll, но кажется, что R3 теперь статически связан. Поэтому я не знаю, где искать.
Как бы я написал нативный, который получает значение и возвращает другое? Где положить это в источнике? Что повиноваться, как сказать GC, что я создал что-то в C?
Кроме того, как я могу встроить R3 в другие программы, чтобы вызвать его из Python или Node? Я прошу для Python/Node часть приходит позже. Но мой учитель должен получить доступ к R3 аналогичным образом. Значит длл. И есть ли в таких ffi какие-то типичные хуки для запуска / выключения и т. Д.?
[Редактировать: забыл упомянуть: это для Rebol 3.]
1 ответ
Это два вопроса.:-)
Что касается первого (о добавлении нативного)... это, вероятно, лучше всего разработано как документация для разработчиков на вики. Вопросы в теге ребол обычно должны касаться языка с точки зрения пользователя. Ответы относительно самого исходного кода обычно будут длинными, и на самом деле есть только несколько человек, которые могут ответить на него или позаботиться о ответе (то, что Stackru называет "слишком локализованным"). И это в конечном итоге станет скорее вопросом c, если уж на то пошло.
Так что сказать разработчикам, чтобы они собрались вместе, написали эту документацию и разместили ее в централизованно организованном месте, вероятно, лучшая идея!:-P Но я действительно попробовал это сам. Я добавил set-env native для установки переменных окружения из интерпретатора, и вы можете взглянуть на различия, необходимые для этого в GitHub, для небольшой идеи.
добавить SET-ENV, настройки хоста API для обработки строк среды
Важно помнить, что когда вы касаетесь определенных файлов, вы должны запустить make prep, который автоматически выполняет много операций сканирования и генерации кода. Добавление нативного - это одна из тех вещей, где вам определенно придется делать это каждый раз, когда вы переходите на такой фундаментальный интерфейс.
Что касается вашего второго вопроса, который является скорее вопросом, касающимся встраивания интерпретатора, то первое, на что нужно обратить внимание, это то, как реализован простой REPL. Сейчас в главном репозитории есть две версии: одна для Posix, а другая для Windows.
https://github.com/rebol/r3/blob/master/src/os/host-main.c
Таким образом, строка входит и строка выходит. Но существуют более сложные формы взаимодействия, и вы можете получить к ним информацию из reb-host.h, который включает эти файлы из src / include
#include "reb-config.h"
#include "reb-c.h"
#include "reb-ext.h" // includes reb-defs.h
#include "reb-args.h"
#include "reb-device.h"
#include "reb-file.h"
#include "reb-event.h"
#include "reb-evtypes.h"
#include "reb-net.h"
#include "reb-filereq.h"
#include "reb-gob.h"
#include "reb-lib.h"
Таким образом, вы можете просмотреть эти файлы для API в том виде, в котором они существовали на момент открытия с открытым исходным кодом 12 декабря. Вещи будут развиваться, и, надеюсь, гораздо лучше задокументированы. Но сейчас это то, что кажется доступным. Вы можете связать хост-набор как разделяемую /DLL или статическую библиотеку, это зависит от ваших настроек сборки и того, какой компилятор вы используете.