====== Subroutine threaded code ====== 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. == Kritische Anmerkung dazu: == 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