[squeak-dev] Need your help filling a FAQ

Igor Stasenko siguctua at gmail.com
Sun Apr 25 18:14:41 UTC 2010

On 25 April 2010 20:08, Hannes Hirzel <hannes.hirzel at gmail.com> wrote:
> Hello Igor
> Three more questions....
> 1) What are example applications of NativeBoost?

Case 1) dynamic FFI callout generation:

loadLibrary: libName
	<primitive: 'primitiveNativeCall' module: 'NativeBoostPlugin'>

	^ NBFFICallout apiCall: #( long 'LoadLibraryA' ( String )) module: #Kernel32

Case 2) dynamic primitive generation

readSignedInt32From: integerAddress

	<primitive: 'primitiveNativeCall' module: 'NativeBoostPlugin'>
	Emulate the C function of form:
		long readSignedInt32From(long* ptr) {
			return *ptr;
	we don't need to call anything but just read the int32 value from given address
	and let a callout generator care about value coercion
	^ NBFFICallout cdecl: #(long long)
		emitCall: [:gen |	| asm |
				asm := gen asm.
					mov: (asm mem: ESP) to: EAX;
					mov: (asm mem: EAX) to: EAX

Case 3) an OpenGL binding i working on.. (its a bit too big to fit in there) ;)

> 2) How much faster are they compared to regular Smalltalk code?

A question is a bit vague. There is a many ways how to answer it.
In short: Smalltalk code is interpreted by VM. Native code is
interpreted by CPU of your computer.
In smalltalk, you code fast, but running slow.
In assembler, you code slow, but running fast.

> 3) How do I write the native code?
Sorry, don't understand, what exactly you want to know.
There is a helper classes, which allow you to do it more or less
without much hurdles.
So, if you know assembler you can write it right away.
And sure thing, i will post an examples how to use it in my docs.

> Hannes
> On 4/25/10, Michael Haupt <mhaupt at gmail.com> wrote:

Best regards,
Igor Stasenko AKA sig.

More information about the Squeak-dev mailing list