FFI Callbacks

Diego Fernandez diegof79 at gmail.com
Fri Sep 1 21:30:54 UTC 2006


Again thanks to both for the reply... :)

[se entendio perfecto, gracias :)]

On 9/1/06, Alejandro F. Reimondo <aleReimondo at smalltalking.net> wrote:
> Hi Andreas,
> Using the option (2) will activate the method context for Foo>>callSomething
>  (a context with a block context....)
> The option (1) will execute the primitive WITHOUT method activation.
> I think that perfomance of option (1) will be similar to primitives/plugIn
> calls
> Also the indirection to the global association (CallSomething function)
>  must be added; in option (1) the method serve as reference to the function.
> Without an optimized VM the penalty of method activation
>  and indirection can make a diference.
> cheers,
> Ale.
>
>
> ----- Original Message -----
> From: "Andreas Raab" <andreas.raab at gmx.de>
> To: "The general-purpose Squeak developers list"
> <squeak-dev at lists.squeakfoundation.org>
> Sent: Friday, September 01, 2006 5:26 PM
> Subject: Re: FFI Callbacks
>
>
> > Diego Fernandez wrote:
> > > I know that <> is used in primitives, but in calls to external
> > > libraries there is a performance reason for this kind of notation?
> > > Have this kind of methods different bycodes (like in primitives) or
> > > it's only a shorthand for the longer expression?
> >
> > It's both a shorthand and a "statically compiled version" of the longer
> > expression. Here is something that is essentially equivalent:
> >
> > 1. Using <> syntax:
> >
> > Foo>>callSomething
> >       <cdecl: void 'callSomething' () module: 'Foo'>
> >       Transcript cr; show: 'Failed to call function'.
> >
> > 2. Using the (mostly) equivalent explicit version:
> >
> > Object subclass: #Foo
> >      instanceVariableNames: ''
> >      classVariableNames: 'CallSomething'
> >      poolDictionaries: ''
> >      category: 'Croquet-Harness'
> >
> > Foo class>>initialize
> >      "Construct the FFI call for callSomething"
> >      CallSomething := ExternalLibraryFunction
> >          name:'callSomething'
> >          module: 'Foo'
> >          callType: ExternalFunction callTypeCDecl
> >          returnType: ExternalType void
> >          argumentTypes: #()
> >
> > Foo>>callSomething
> >      ^[CallSomething invoke] on: PrimitiveFailed do:[
> >          Transcript cr; show: 'Failed to call function'.
> >       ].
> >
> > The reason this is only "mostly" equivalent is that there isn't a
> > PrimitiveFailed exception (but there should be ;-)
> >
> > Cheers,
> >    - Andreas
> >
>
>
>



More information about the Squeak-dev mailing list