ECL_INIT_MODULE中的第一个参数做什么



根据ECL手册的某些部分,库的必要部分(由LISP编译(C程序中的初始化正在执行其初始化,为:

ecl_init_module(NULL, init_func_for_library);

在提供的所有示例中,第一个参数为null。

还需要什么其他值,什么目的?当然,参数本身应该具有一定的含义。

nb。在手册的其他部分,为了执行初始化,建议使用read_vv。那做什么?

检查源代码,我们可以看到null绑定到名为 block的变量;当它是NULL时,默认,使用空的codeblock

cl_object
ecl_init_module(cl_object block, void (*entry_point)(cl_object))
{
    ...
    if (block == NULL)
      block = ecl_make_codeblock();
    ...
}

代码块看起来像某种上下文/环境结构:

cl_object
ecl_make_codeblock()
{
  cl_object block = ecl_alloc(t_codeblock);
  block = ecl_alloc_object(t_codeblock);
  block->cblock.self_destruct = 0;
  block->cblock.locked = 0;
  block->cblock.handle = NULL;
  block->cblock.data = NULL;
  block->cblock.data_size = 0;
  block->cblock.temp_data = NULL;
  block->cblock.temp_data_size = 0;
  block->cblock.data_text = NULL;
  block->cblock.next = ECL_NIL;
  block->cblock.name = ECL_NIL;
  block->cblock.links = ECL_NIL;
  block->cblock.cfuns_size = 0;
  block->cblock.cfuns = NULL;
  block->cblock.source = ECL_NIL;
  block->cblock.error = ECL_NIL;
  block->cblock.refs = ecl_make_fixnum(0);
  si_set_finalizer(block, ECL_T);
  return block;
}

我猜在大多数情况下,通过NULL就足够了。大概您可以使用现有代码块调用ecl_init_module与另一个模块共享某个状态。如果没有更好地了解口译员的工作原理,这是有风险的。

相关内容

  • 没有找到相关文章

最新更新