Wiem trochę o FORTH, więc ograniczę się do tego. Jest to język niskiego poziomu, który zapewnia jako programista dostęp do wszystkich zasobów sprzętowych. Możesz więc robić, co chcesz.
Konkurencja
Aby mieć równoległe programy (edytuj: używane w przypadku prawdziwych programów współbieżnych) potrzebujesz co najmniej dwóch jednostek wykonawczych (CPU-ów). Zaimplementowanie słowa w FORTH byłoby raczej trywialne, mówiąc na przykład: „uruchom to słowo na procesorze 2, używając tych dwóch argumentów”. Słowo przydzieli dwa potrzebne stosy na procesorze 2 i zacznie je uruchamiać. Będziesz musiał nieco ograniczyć się dokładnie w tym, jakie konstrukcje możesz użyć w tym programie.
Jeśli liczba współbieżnych programów jest większa niż liczba jednostek wykonawczych, wybrałbyś programy „pseudo równoległe”. Zasadniczo istnieją dwa sposoby, aby to zrobić: coroutines lub zapobiegawcza wielozadaniowość. W każdym razie jest możliwe (niełatwe, ale dobrze opisane w literaturze), jak to osiągnąć, a FORTH umożliwia dostęp do wszystkich potrzebnych rzeczy na niskim poziomie.
Leniwa ocena
Oczywiście możesz to zrobić w FORTH, jak w prawie każdym języku programowania. Nie będzie tak elegancki ani „wbudowany”, jak na przykład Haskell. Podam bardzo naiwny przykład.
Chodzi o to, że definiujesz „funkcję” (tutaj używana luźno), która zwraca zestaw rzeczy. Przykładem może być funkcja zwracająca wszystkie liczby całkowite. Następnie wykonujesz operacje na tym zestawie, a po zakończeniu podaj wynik. Na przykład możesz zsumować wszystkie liczby całkowite, dopóki suma nie będzie większa niż 1000. Nie leniwa ocena najpierw przydzieli wszystkie liczby całkowite jako zbiór, co jest niemożliwe, ponieważ istnieje nieskończona liczba liczb całkowitych. Wtedy zacząłby działać na tym zestawie. Leniwa implementacja mogłaby „dać mi następną wartość w zestawie”. Aby to zrobić, potrzebna jest tylko jedna zmienna w funkcji „ostatnia wartość daje”.
Haskell robi to w ten sposób. Oczywiście obsługuje bardziej skomplikowane sytuacje, ale pomysł jest taki sam. Powoduje ocenę oceny w sposób, który pozwala programistom skoncentrować się na problemie, a nie na tym, jak go rozwiązać.