[squeak-dev] The Primitive: I am not a number- I am a named prim!
- SqueakPeople article
tim at rowledge.org
Tue Jul 1 20:34:47 UTC 2008
On 1-Jul-08, at 1:20 PM, Eliot Miranda wrote:
> One doesn't have to *use* the FFI. If the FFI isn't exposed via a
> primitive then no FFI. One can still have named primitives
> supported by the image and not by the VM and not use the FFI. To
> call a named primitive in a primitive plugin the following sequence
> the method containing a named primitive spec is activated and the
> primitive call fails because its function pointer is null.
> the failure code extracts the plugin name and invokes a primitive to
> load the plugin library
> the failure code extracts the primitive name and uses the lookup
> primitive to find the function in the loaded plugin library
> the failure code uses a primitive to slam the function pointer into
> the method
> the failure code uses the executeMethodWithArgs primitive to retry
> the bound named primitive method
> So the FFI is an optional extra. One needs four primitives, load
> library, lookup name in library, insert primitive function pointer.
> and executemethodWithArgs (thanks Tim!). Slamming the function into
> the method could also be done using, say, objectAt:.
> So one can still have a nice small safe VM and have no direct
> support for named primitives in the VM.
Leaving aside my like of all-named-prims, I *like* this enhancement to
the support for named prims.
It would slightly complicate the post-prim-call code in each method
because you would need to handle the failed-to-find-prim case as well
as all the prim-failed cases. It would be helped by an old idea that
I'm pretty sure eliot has plans for anyway (as indeed I have written
about a few times) to add primitive error return values. For those
that haven't heard of them, this is just a way of having the first
temp in a context involved in a prim call be a slot for a return value
from the prim if any error occurs. This means you can actually know
wtf went wrong instead of guessing - "ooh, was the first arg a
SmallInteger? Um, if not, was it a Float that might round nicley? Err,
was the second arg a ByteArray with the first byte = 255?" etc.
Instead you get "ah, errorValue was 1, so we have to explode the
reactor core in order to stop the Dreen from eating the children".
tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim
CITOKATE - Criticism is the Only Known Antidote to Error
More information about the Squeak-dev