jestem na pewno nie czynnikiem guru, ale ponieważ ich nazwy wydają się sugerować ich zastosowanie:
datastack: używany do pchania i zwykle pojawiały wartości. 3 4 +
używa opakowania danych do wypchnięcia "3", a następnie naciśnij "4". Uruchamianie "+" przesyła 2 wartości ze zbioru danych i przesyła odpowiedź, 5, z powrotem do zbioru danych. Uruchamianie interaktywną sesję czynnik (przynajmniej na Linuksie) drukuje zawartość stosu po każdej interakcji:
$> 1
--- Data stack:
1
$> 2
--- Data stack:
1
2
$> +
--- Data stack:
3
$> .
3
$>
callstack: używane żeby zapisywać, które słowa są uruchomione i ich indywidualne postępy, podczas gdy ich składowe słowa wykonać . Wyobraź sobie, że zdefiniowałeś lepszą wersję sumy: : sum' (seq-of-int -- summmation) 0 [ + ] reduce 20 + ;
(lepiej, bo dostaniesz dodatkowe 20 za darmo!). Chcąc ponownie użyć kodu, użyłeś słowa reduce
, które pochodzi od standardowego współczynnika. Chociaż środowisko wykonawcze wykonuje sum'
, wywołuje implementację reduce
. Ale ponieważ wciąż musimy dodać dodatkowe 20, ktoś musi zarejestrować miejsce rozpoczęcia, gdy tylko powróci reduce
. Te notatki są przechowywane na statywie, najprawdopodobniej z pewnymi pomocniczymi danymi podczas przebiegu debugowania, aby pomóc debuggerom zrozumieć, co się dzieje.
retainstack: służy do zachowania wartości w sortowanym pomocniczym zestawie danych. W Forth można nadużywać stosu powrotnego (analog Fortha do stwora), aby działał jak stój retainstack. Jednym z problemów związanych z tym podejściem jest to, że wracając z twojego słowa bez sprzątania brudnego hacka, przeskoczysz do niewłaściwych lokalizacji i dokonasz ogólnego spustoszenia. Środowisko wykonawcze Forth zobaczy twoje wartości, spodziewając się, że będą to ładne notatki, które wywołają podczas wywoływania słowa i będą zdezorientowane. Używając osobnego stosu dla adresów zwrotnych, czynnik może tego uniknąć.
Namestack: używany do przechowywania danych niezbędnych do wdrożenia dynamic variables. Korzystając ze stosu, można ukryć stare nazwy za pomocą nowych podczas wykonywania podprogramu, a następnie wywołać powiązanie i stare nazwy zostaną przywrócone.
catchstack: używany do obsługi obsługi wyjątków. Za pomocą stosu podprogramy mogą rejestrować własne programy obsługi wyjątków i domyślne zachowanie cienia. Następnie, gdy słowo wróci, stare procedury obsługi mogą być łatwo przywrócone poprzez wyskakiwanie ze stosu.
Co za zabawny język! +1 – Irfy