Ну, раз пошла такая пьянка, вставлю и свои пять копеек... нет, лучше рублей

В набросках восьмилетней давности"Непричёсанные мысли о первичности..."я пришёл к интересной мысли оботсутствии принципиальных различий между парадигмами программирования.

И таковые различиясводятся к вопросам оптимизации алгоритма при кодогенерации.

Причём, что характерно, в рамках объектно-ориентированной модели(разумеется, не той модели, которая в С++).

Достаточно внимательно рассмотреть тривиальный пример "c=a+b", чтобы заметить, что этот оператор сам по себе не содержит никакого алгоритма. Единственно важным, что мы можем увидеть из этой записи, это наличие объектов (a,b,c) и взаимоотношений между ними. Рассматривая эту метаинформацию в "императивном" контексте (чему способствует запись "c:=a+b"), мы можем добавить дополнительньное утверждение: "хочу, чтобы результат сложения объектов а и b был помещён в объект с".

Тем не менее, реализация даже такого "тривиального" примера может быть очень и очень не простой. И не очевидной.

Но в очень большом количестве случаев нам, желающим получить результат, достаточно приведённой выше метаинформации. В качестве постановки задачи. А в какой парадигмеиполнительрешит эту задачу, нам не так уж и важно!