2

我知道如何编写大约 100 行 C,但我不知道如何读取/组织像 Rebol 这样的较大源代码。某处是关于 hostkit 和 dll 的教程,但似乎 R3 现在是静态链接的。所以我不知道在哪里看。

我将如何编写一个获取值并返回另一个值的本机?把它放在源代码的什么地方?要遵守什么,比如告诉 GC 我在 C 中创建了一些东西?

另外,如何将 R3 嵌入到其他程序中,以便从 Python 或 Node 中调用它?我要求稍后提供 Python/Node 部分。但是我的 learning-main 应该以类似的方式访问 R3。表示dll。在这样的 ffi 中是否有一些用于启动/关闭等的典型钩子?

[编辑:忘了提:它适用于 Rebol 3。]

4

1 回答 1

1

这是两个问题。:-)


关于第一个(关于添加本机)……最好将其详细说明为 Wiki 上的开发人员文档。标签中的问题通常应该更多地与语言有关。关于源代码本身的答案通常会很长,而且实际上只有少数人可以回答或关心答案(StackOverflow 称之为“过于本地化”)。如果有的话,到那时它最终将更像是一个问题。

因此,告诉开发人员齐心协力编写文档并将其放在一个集中组织的地方可能是最好的主意!:-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"

因此,您可以查看在 12 月 12 日开源时存在的 API 文件。事情将不断发展,并希望得到更好的记录。但就目前而言,这似乎是可用的。您可以将主机套件链接为共享/DLL 或静态库,这取决于您的构建设置和您使用的编译器。

于 2013-02-24T20:14:21.970 回答