Цитата:
Однако сегодня парадокс заключается вот в чём - современный процессор способен на очень эффективные действия, которые не находят аналога в промежуточном звене - ЯВУ. То есть ЯВУ являются по существу слабым звеном, тормозящим прогресс:
- с одной стороны, недоиспользуют высокоуровневые абстракции (ту же математику);
- с другой стороны, недоиспользуют низкоуровневые возможности исполнителя.
Как первый шаг к решению проблемы я бы перестал беспокоиться о "недоиспользовании низкоуровневых возможностей", в общем случае (т.е. за исключением спецпроцессоров). Пусть голова болит у разработчиков оборудования, как заточиться под ЯВУ.
Далее ЯВУ должны быть, как это намечено в Эль-76, очищены от тех вещей, которые навязаны старым оборудованием (это не только низкоуровневые средства, с которыми уже в хороших ЯВУ разобрались, а те предположения-ограничения, которые сделаны для эффективного выполнения на старых процессорах).
Далее, по поводу "недоиспользования высокоуровневых абстракций". Алексей, я знаю, что у Вас голова тут ещё по "GOTO-вопросу" болит (т.е. по проблемам линейного структурного программирования), я его сейчас намеренно обойду (эти вопросы разрешимы).
Здесь очень опасная ловушка, что якобы уровень абстракции можно наращивать и наращивать, делая машину "умнее и умнее". Возможно, эта ловушка идёт из старых бредней ИИ, непонимания проблем вычислимости и т.п. На самом деле есть некоторый естественный, универсальный алгоритмический уровень, от которого не уйти. Когда избавились от противоестественных артефактов конкретной реализации, но находимся на уровне общей физической, так скажем, вычислимости. Идя выше, будем терять универсальность, закладываясь уже на какую-то конкретику. При этом в современном языке с механизмами абстракции данных Вы всегда сможете подняться ровно до того уровня, который Вам нужен. Изобретать для этого особый язык - в общем случае - нет необходимости.
Посмотрим на ФП. Компьютеры, вообще, это "физически реализованная математика". Математика работает со структурными моделями реальности, существующими в нашей голове. В универсальных цифровых ЭВМ удалось сделать обратное отображение - физически смоделировать идеальные понятия математики (например, полную дискретность - а отсюда многое другое... Эту особенность - что программист имеет физическую реализацию идеальных вещей - Дейкстра ещё отмечал). Понятие алгоритма - оно, вообще, довольно естественного порядка (из реальности ухваченное). Понятие функции в его максимальном обобщении вроде как более умозрительное, идеальное. Математика, как уже сказали мы выше, работает с идеальными моделями каких-то объектов. Может быть модель на модель, модель в разных терминах (теоретико-множественных, функциональных и т.п.) - это уже их, математиков, прерогативы.
(Кому интересна хорошая книжка об этих вопросах - моделировании и т.п., при этом с точки зрения физика, то могу посоветовать и дать PDF Г.П. Мельникова "Азбука математической логики" (1969 г.). Книжка не требует спец. подготовки и знаний, всего 100 стр., но очень глубокая по своему анализу сути вещей...)
Естественно, что можно построить некоторую модель алгоритма и физических вычислений в терминах функций. Абстрагироваться, так сказать. А потом, воспользовавшись тем, что обратное отображение инженеры нам сделали - в точности смоделировать это физически. Опять же, через понятие алгоритма.
Чуете, какая занятная и подозрительная петелька получается - многократные переходы и модели? Потенциально, естественно, мощность одна и та же на каждом этапе (потому и возможен переход во все стороны), но существо, природа этих представлений разная...
Нужно понимать, что ФП - это модель, в некотором смысле, "второй свежести" (с точки зрения "свежести красок", по отношению к реальности. Конечно, для теор. математиков всё наоборот - для них "свежее" как раз модель ФП. А вот прикладникам, которым считать в конечном счёте всё на реальном оборудовании - по ситуации). Если это полезно - нужно использовать. Если нет - то лучше избегать. Но нужно всегда помнить об опасности заблудиться и получить тут "королевство кривых зеркал".
Ещё был такой язык SETL. Любопытный язык, развивался в нек. университетах США и в Новосибирске, как раз с претензией на сверхвысокоуровневость, только не через функции, а через теоретико-множественные модели.
http://ru.wikipedia.org/wiki/SETLТоже соблазн - если мы при обычном программировании специфицируем исходные и конечные условия в виде логич. утверждений, которые частично дублируют смысл программы, то не писать ли вообще только эти утверждения, а машина пусть сама трудится над алгоритмом?
Проблемы Сетля немного рассмотрены у Непейводы. Оказывается, что слишком далёкий уход от физической вычислимости чреват последствиями. На подобном языке можно написать с виду безобидные и простые конструкции, совершенно понятные, но чудовищно неэффективные. И оптимизировать их машина не может в принципе - такая трансляция тоже экспоненциальна либо неразрешима... И разделить в сверхвысокоуровневом языке средства так, чтобы сразу была видна их цена, тоже невозможно. Слишком большое расстояние от "чистого существования" в математике до способа это конструктивно сделать в реальности (из чего как раз возникла идея конструктивной математики-логики).
Чтобы конструктивно работать с подобными мат. моделями, эти модели должны быть сильно почиканы. Как в Прологе - логика урезана до примитивных Хорновских дизъюнктов (да ещё с реализационными ошибками). И тут выясняется, что овчинка выделки уже не стоит. В частности, Пролог удобен только для макетирования небольших систем, либо весьма простых структурно систем специфического рода. В противном случае очень быстро теряется контроль над сложностью, над связями, да ещё приходится эмулировать императив местами. И в итоге лучше использовать общий ЯВУ, смоделировав нужные места из математики в терминах библиотек...