Squeak
  links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

FFI (Difference)

FFI

!Foreign Function Interface
Currently refactoring FFI documentation -- should be done in a few minutes -- *Martin McClure*
*FFI Caveats*
*FFI Users*
The following explanation is from a mail message written by *Andreas Raab*:
In a nutshell: FFI is dangerous ;-)
In another nutshell: FFI allows you to call functions written in other
languages (mostly C), so one can call (for instance) OS functions directly from Squeak. Have a look at the examples, they all use functions that are not in Squeak but live somewhere in the outside world. This of course implies that you have to play by the rules of the outside (C) world - or in other words, if you make a mistake you'll not drop into the debugger but Squeak will just crash. That's what the first explanation means.
The FFI stuff is in a way related to pluggable primitives since it's using several of the mechanisms pluggable primitives use. But there are major differences:
-The FFI is for interfacing existing libraries only. If you don't have an existing library that does what you want you'll have to write it - and that's basically what the pluggable primitives are intended for.
-While it is possible to write a set of pluggable primitives that interface existing libraries (such as the AppleScript plugin) you don't have to do it any longer. The FFI does all the necessary conversions for you. The AppleScript stuff could be written using the FFI without the need to have a separate plugin for it.
-The FFI is slow compared to pluggable primitives. Since there are many generic conversions necessary the overhead of calling C functions directly is very high. That doesn't matter as long as you're calling functions that actually do quite a bit of work but if you're concerned about the speed (e.g., when you call these functions a zillion times per second) you are much better off using pluggable primitives.
-The FFI is very platform dependent. Pluggable primitives give you a way of defining abstract interfaces (e.g., primitives) to the provided functionality. When using the FFI you talk to the underlying system directly.
Compiled and linked FFI plugins:
*http://wwwisg.cs.uni-magdeburg.de/~raab/squeak/FFI/*
-<b>Q:</b>Where is the source for these?
-<b>A:</b>In the image. See class side of FFIPlugin (for Unix, you additionally need *libffi>http://sourceware.cygnus.com/libffi/*) *Vanessa Freudenberg*
--Okay, I give up. I looked with the browser but couldn't find any source. *Jeff Szuhay*
---Open a browser. Find the class FFIPlugin. All the methods here get translated to C. Then click on the class button. In the category "C support code" is the platform support code. *Vanessa Freudenberg*
-<b>Q:</b>Will they be reimplemented to use *Squeak VM Plugins*?
-<b>A:</b>Why should they?! The FFI is not at all related to the new plugin structure. There's no point whatsoever in calling the plugins through the FFI - *Andreas Raab*
Information compiled by *Andreas Kuckartz*
_
See also *FFI Examples*.
_
*Jim Benson* has created a QuickTime interface to Squeak for Windows and Mac platforms, using FFI. See *http://home.attbi.com/~zurgle/quicktim.htm*