Hierbei werden Subroutinen nacheinander aufgerufen. Es wird dazwischen aber kein Maschinencode eingefügt (without inlining of primitives).
Gegeben sei eine Forth Definition:
: name word1 word2 word3 ;
Der Subroutine Threaded Code dazu sieht dann so aus:
header with name | JSR word1 | JSR word2 | JSR word3 | RET |
Wird subroutine threaded code verwendet, ruft die Hardware einen subroutine call nach dem andern auf. Daher besteht das NEXT nur aus der in Hardware angelegten (microcode/hardwired) call instruction. Die Forth Worte geben die Controlle an das aufrufende Wort zurück, indem sie als letztes die
return instruction ausführen. Es gibt keine zentrale Stelle, kein NEXT, die der Prozess immer wieder durchlaufen würde.
Obwohl dies zunächst sehr unkompliziert aussieht, ist reiner Subroutine Threaded Code nicht unbedingt schneller als Direct Threaded Code. Oft ist ein direct threaded NEXT schneller als das call/return-Paar. Auf etlichen Maschinen ist der indirekte Sprung mit auto-increment JMP (IP)++
sehr schnell.
Auf realen 8 Bit CPUs ist JSR-threaded deutlich schneller als alle Varianten mit NEXT und der Speicherverbrauch steigt nicht unakzeptabel. 16 Bit threaded-Varianten hatten 1980 eine Berechtigung als man mit 4kByte EPROMs arbeitete, sie waren ab ca. 1985 schon obsolet, weil der verfügbare Programmspeicher schnell größer wurde.
MfG JRD