Mac OS X Support

StrategoXT works on Mac OS X. Unfortunately, to compile and use it you need a patched GNU C Compiler. The compilers currently shipped by Apple and the FSF do not implement nested functions correctly, causing programs using them to segfault.

Fortunately, binary distributions of both GCC and StrategoXT are available from this page. You need them both, since Stratego invokes GCC!

These should be unpacked into your root directory. Then you should add the directories /usr/local/pkg/gcc-3.3-nested/bin and /usr/local/pkg/StrategoXT-0.9/bin at the front of your path. You may want to increase the stack size when running Stratego programs (e.g., ulimit -s 8192 in Bash).

There was an additional problem with the way Stratego calls the linker (ld): it passes linker search directories as "-L /foo", while Apple's ld only accepts "-L/foo". The GCC distribution above now contains a linker wrapper script that fixes this.

Performance

The performance of StrategoXT at Mac OS X is rather poor.

  • The main reason for this is probably the architecture of the G4, which doesn't play too well with the implementation of choices (based on jmp_buf) in the Stratego compiler. The size of a jmp_buf depends on the architecture of the processor and unfortunately RISC processors need a very large jmp_buf.

  • Another reason might be the performance of nested functions. This will be solved when the Stratego compiler no longer uses nested functions for the implementation of lexical scope of strategies in Stratego.

  • Yet another reason is the performance of forking a process. Forking is much slower at Mac OS X (and Cygwin) then at a Linux system.

GNU/Linux at PowerPC

One of our master students (Dick Eimers) has installed Debian at a PowerMac6,3 and I've tried to build StrategoXT on this machine. At first this wasn't very succesful. I was using FSF's GCC 3.3.4 and this resulted in the usual problems.

However, it works look a charm with GCC 3.4.1! Even more suprising to me is the performance, which is excellent. We used to explain the poor performance of StrategoXT at Mac OS X with the size of the jmp_buf and forking, which is more expensive at Mac OS X. Of course forking does however not influence the performanceo of a single Stratego program, so it seems that the jmp_buf is not a huge factor.

  mbravenboer@mcflurry:~$ uname -a
  Linux mcflurry 2.4.25-powerpc #1 mer avr 14 15:38:38 CEST 2004 ppc GNU/Linux

  mbravenboer@mcflurry:~$ more /proc/cpuinfo
  processor       : 0
  cpu             : 7455, altivec supported
  clock           : 1249MHz
  revision        : 3.3 (pvr 8001 0303)
  bogomips        : 1245.18
  machine         : PowerMac6,3
  motherboard     : PowerMac6,3 MacRISC3 Power Macintosh
  board revision  : 00000001
  detected as     : 287 (Unknown Intrepid-based)
  pmac flags      : 00000000
  L2 cache        : 256K unified
  memory          : 512MB
  pmac-generation : NewWorld

  jmp_buf size: 364

jmp_buf size at my SuSE? 9.0 at Pentium M system is 156.

History and Future

Mac OS X is support with a patched GCC from StrategoXT 0.9.1. This patch has been implemented by Eelco Dolstra.

In StrategoXT 0.12 or 0.13 we hope to remove nested functions in the C sources produced by the Stratego Compiler (See issue STR-119).


CategoryToDo? CategoryInstallation