forked from MagLev/maglev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
smalltalk_ffi
51 lines (33 loc) · 1.47 KB
/
smalltalk_ffi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
=== Smalltalk FFI
The MagLev VM is a GemStone VM that has been enhanced to run Ruby as well
as Smalltalk. GemStone provides a set of <tt>.rb</tt> files that allow Ruby
code to call into the GemStone/Smalltalk evnironment.
==== Create Ruby Wrappers for GemStone/Smalltalk Classes
To generate the ruby wrappers:
$ cd $MAGLEV_HOME
$ rake stwrappers
The wrapper files are placed in
<tt>$MAGLEV_HOME/lib/ruby/site_ruby/1.8/smalltalk</tt>
==== Using the Wrappers
To use a wrapper, simply require the appropriate file and call the methods:
require 'smalltalk/System'
puts Smalltalk::System._st_inTransaction
require 'smalltalk/SymbolSet'
s = Smalltalk::SymbolSet._st_new(10)
require 'smalltalk/IdentityBag'
b = Smalltalk::IdentityBag._st_new(10)
puts b._st_hash
puts b._st_getIndexInfo
==== Conventions
The naming conventions of the files, methods and classes have a Smalltalk
flavor to remind you that they are Smalltalk objects and follow Smalltalk
semantics rather than Ruby semantics.
* Do not use ruby <tt>new</tt> to initialize objects via the Smalltalk
FFI. Smalltalk objects need to be initialized with a send of
<tt>_st_new</tt>.
* In order to call a method defined in a super class, the wrapper file for
the super class must also be loaded into the system. The wrapper files
are generated with the proper includes. E.g., <tt>Bag.rb</tt> contains;
require 'smalltalk/UnorderedCollection'
require 'smalltalk/Collection'
require 'smalltalk/Object'