В обычных языках программирования у вас есть переменные, которые можно свободно определять, и вы вызываете методы, используя эти переменные в качестве аргументов. Это просто понять, но несколько ограничено. Часто трудно повторно использовать существующий метод, потому что вы просто не можете отобразить существующие переменные в параметры, необходимые для метода, или метод A вызывает другой метод B, и A подойдет вам, если вы сможете заменить вызов только B с вызовом на C.
Конкатенационный язык использует фиксированную структуру данных для сохранения значений (обычно это стек или список). Там нет переменных. Это означает, что многие методы и функции имеют один и тот же «API»: они работают над чем-то, что кто-то еще оставил в стеке. Плюс сам код считается «данными», т. Е. Обычно пишется код, который может изменять себя или который принимает другой код в качестве «параметра» (т. Е. Как элемент в стеке).
Эти атрибуты делают эти языки идеальными для объединения существующего кода в создание чего-то нового. Встроенное повторное использование. Вы можете написать функцию, которая принимает список и фрагмент кода и вызывает код для каждого элемента в списке. Теперь это будет работать с любыми типами данных, если они ведут себя как список: результаты из базы данных, ряд пикселей на изображении, символы в строке и т. Д.
Самая большая проблема в том, что у вас нет намека на то, что происходит. Существует только пара типов данных (список, строка, число), поэтому все сопоставляется с этим. Когда вы получаете часть данных, вам, как правило, все равно, что это и откуда. Но это затрудняет отслеживание данных через код, чтобы увидеть, что с ним происходит.
Я полагаю, что для успешного использования языков требуется определенный разум. Они не для всех.
[РЕДАКТИРОВАТЬ] Форт имеет некоторое проникновение, но не так много. Вы можете найти PostScript в любом современном лазерном принтере. Так что это нишевые языки.
На функциональном уровне они находятся на одном уровне с LISP, C-подобными языками и SQL: все они Turing Complete , так что вы можете вычислить что угодно. Это просто вопрос того, сколько кода вы должны написать. Некоторые вещи более просты в LISP, некоторые более просты в C, некоторые более просты в языках запросов. Вопрос «лучше» бесполезен, если у вас нет контекста.