[Vm-dev] FFI Plugin | Proposal: Add #doesNotCoerce:for: (like #doesNotUnderstand:)

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Jun 19 13:58:38 UTC 2020


Le ven. 19 juin 2020 à 15:46, Marcel Taeumel <marcel.taeumel at hpi.de> a
écrit :

>
> Hi Nicolas.
>
> > - enable ExternalData to have an ExternalStructure or ExternalTypeAlias
> as type inst. var.
>
> This does not sound right. But I think you mean that "type" in
> ExternalData could be a struct type and the plugin would automatically
> coerce it correctly.
>
> That's good. :-)
>
> "type" in ExternalData must always be an instance of ExternalType.
>
> I see what you mean.
But, that's not exactly how it works.
ExternalStructureFoo (the class, not an instance) acts as an ExternalType
surrogate.
See:
    ExternalType structTypeNamed: #FFISmallStruct1.
It will answer FFISmallStruct1, so FFISmallStruct1 is a type somehow, a
structType more exactly (or a type alias).

I suggest to use that as ExternalData type whenever we have a pointer to a
FFISmallStruct1 or an array of FFISmallStruct1.
It also make FFI type checking super easy, because we already pass the
FFISmallStruct1 as argClass (only when passing struct by value by now, but
I suggest extending it when passing FFISmallStruct1 *, which currently is
not even possible - we have to declare void *)


> This way, we can make FFI a bit safer than using those void *
>
> Sounds good.
>
> Best,
> Marcel
>
> P.S.: I think I messed up with the name "ExternalTypeAlias". Hmpf. Because
> is a subclass of ExternalStructure, not ExternalType. Well. :-)
>
> Am 19.06.2020 15:09:01 schrieb Nicolas Cellier <
> nicolas.cellier.aka.nice at gmail.com>:
> Hi Marcel,
> Forget about FFIPlugin it's legacy
>
> I'm currently changing ThreadedFFIPlugin to:
> - enable passing ExternalData as atomicType by value
> The use case is the one of ExternalVariable
> - enable ExternalData to have an ExternalStructure or ExternalTypeAlias as
> type inst. var.
> and enable passing that to a corresponding
> ExternalStructure/ExternalStructure pointer/ExternalTypeAlias/
> ExternalTypeAlias pointer
> - returning a new ExternalTypeAlias when returning such type by value
>
> This way, we can make FFI a bit safer than using those void *
>
>
> Le ven. 19 juin 2020 à 13:45, Marcel Taeumel a
> écrit :
>
> >
> > Hi all, again. :-)
> >
> > I am aware that such a mechanism would have to be implemented in
> 2-times-7
> > different places:
> >
> >
> > Best,
> > Marcel
> >
> > Am 19.06.2020 13:15:40 schrieb Marcel Taeumel :
> > Hi all!
> >
> > We have #doesNotUnderstand:, which is sent to the receiver when a
> message
> > cannot be understood. Default reaction in Object is to raise
> > MessageNotUnderstood exception.
> >
> > What if we could have a similar mechanism for FFI calls:
> > #doesNotCoerce:for:. The receiver would be the one that made that call,
> > should be an instance of ExternalLibrary, but could be any object. The
> > arguments would be a pair of (argObject, argType) and the message (like
> the
> > argument for doesNotUnderstand:) that represents the FFI call.
> >
> > The pair of (argObject, argType) could be expressed as FFICallArgument:
> >
> > FFICallArgument
> > argObject ...
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20200619/e2493381/attachment.html>


More information about the Vm-dev mailing list