我知道如何编写100行C,但我不知道如何阅读/组织像Rebol这样的大型源代码。某处是hostkit和dll的教程,但似乎R3现在是静态链接的。所以我不知道在哪里看。
我如何编写获取值并返回另一个值的本机?在哪里把它放在源头?要遵守什么,比如告诉GC我用C创建了什么东西?
另外,我如何在其他程序中嵌入R3,从Python或Node调用它?我要求稍后提供Python / Node部分。但我的学习主要应该以类似的方式访问R3。意思是dll。在这样的ffi中是否有一些典型的启动/关闭等挂钩?
[编辑:忘了提及:它适用于Rebol 3。]
答案 0 :(得分:1)
这是两个问题。 : - )
关于第一个(关于添加原生)...它可能最好被详细描述为Wiki上的开发者文档。 rebol标记中的问题通常应该从用户的角度更多地考虑语言。关于源代码本身的答案通常很长,并且实际上只有少数人能够回答它,或者关心答案(StackOverflow称之为“过于本地化”)。如果有的话,它最终会成为一个c问题。
所以告诉开发人员让他们一起行动并编写文档并将其放在一个集中组织的地方可能是最好的主意! :-P但我确实自己尝试过这个。我添加了一个set-env native来设置解释器中的环境变量,你可以看看在GitHub中为了一点点想法而做的差异。
add SET-ENV, tweaks to host api for environment string handling
要记住的一件重要事情是,当您触摸某些文件时,您必须运行 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日开放源代码时。事情将会发生变化,希望能够更好地记录下来。但就目前而言,这似乎是可用的。您可以将主机工具包链接为共享/ DLL或静态库,这取决于您的构建设置以及您使用的编译器。