[Vm-dev] Simulating FFI Calls [was Re: VMMaker simulation - strlen, strcpy, getenv and FakeStdinStream]

Eliot Miranda eliot.miranda at gmail.com
Mon Oct 15 16:55:25 UTC 2018


Hi Alistair,
On Mon, Oct 15, 2018 at 9:48 AM Alistair Grant <akgrant0710 at gmail.com>
wrote:

>
> Hi Eliot,
>
>
> On Mon, 15 Oct 2018 at 16:46, Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
> >
> >
> > Hi Ben,
> >
> > On Oct 15, 2018, at 5:28 AM, Ben Coman <btc at openinworld.com> wrote:
> >
> > On Mon, 15 Oct 2018 at 07:21, Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
> >>
> >>
> >> But too do that we would need a derived pointer type
> >
> >
> > My usual searches... "define derived pointer" and "what is derived
> pointer" are not being helpful.
> > All results seem to be pointers to C++ derived classes, which I guess is
> not directly what your referring to.
> > Can you educate me on this...?
> >
> >
> > By “derived” I mean a pointer to some point inside an object, not a
> pointer to the start of an object.  When one passes eg a ByteArray through
> the FFI to a reference parameter  the marshaling code ends up passing a
> pointer to the start of the object.  That won’t work if what we want to do
> is simulate passing a pointer to the start of a simulation object that
> actually lives at an offset inside the large ByteArray that constitutes the
> entire heap in the simulation.  So we need to be able to express a
> ByteArray, offset pair and pass that through the FFI to a reference
> parameter and have the marshaling code end up passing the derived a pointer
> that is the start of the ByteArray plus the offset, and hence end up
> passing a pointer to the start of the simulation object in the large
> ByteArray that constitutes the entire heap.
>
> As a first step to get things going, couldn't we just copy the
> ByteArray's to and from the simulation memory?  It would obviously be
> much less efficient, but would reduce the number of pre-requisites to
> get started.
>

Maybe, but I expect it is a very small change to marshaling to spurt this
and has high value to the FFI in general (think of trying to pass a field
embedded in a struct; that's not yet possible; with derived pointers it is;
the facility is generally useful).  IME if one can find a simple more
general solution to a problem than some other, then pursue that, even if
its initial cost maybe higher because it will pay off better in the long
run.


> Cheers,
> Alistair
>

_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20181015/a48d59be/attachment-0001.html>


More information about the Vm-dev mailing list