Re: Comparing Pika-syle and JNI-style
Per Bothner 14 Jan 2004 18:29 UTC
Jim Blandy wrote:
> In Pika:
> - Forgetting an UNGCPRO corrupts the GC's data structures, and may
> fail only intermittently. Irregular exits (return; goto; break;
> continue) require attention. longjmp is even harder.
> - Functions may only return Scheme values by reference; they may not
> provide them as their (syntactic) return values. Instead of writing
> "f (g (x))", you must write:
>
> g (&frame.x, &frame.temp);
> f (&frame.temp, &frame.temp2);
>
> In other words, you must write your code as linear series of
> operations which work by side-effects.
> - Since the API functions all expect pointers to t_scm_word values,
> this discourages people from passing them around directly, but it
> can still be done --- e.g. "frame.x = frame.y;" --- and doing so
> will usually work. But doing so is a bug.
> - Variable declarations are cluttered with enclosing structs and GCPRO
> / UNGCPRO calls.
This of course cries out for a C++ interface which can alleviate
these problems:
class ScmVal
{
void *ref;
~ScmVal() { UNGCPRO(ref); }
... copy constructor etc ...;
}
Then f(g(x)) becomes:
f(g(x))
assuming:
ScmVal g (ScmVal x) { ... }
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/