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
|