Предисловие
Довольно часто на форумах программистов можно натолкнуться на темы:
а) выбора языка для создания системы;
б) сравнения языков программирования.
а. Априори считается, что система, независимо от количества уровней в ней, должна быть написана на каком-то одном языке программирования. Это убеждение, как правило, обосновывается одним единственным аргументом: так легче развивать и сопровождать систему.
б. Сравнение языков происходит в разных сочетаниях, могут сравниваться языки основанные на одних и тех же парадигмах и/или нацеленные на один и тот же класс задач. Но могут сравнивать и языки, которые основаны на разных парадигмах и/или ориентированные на совершенно разные классы задач. Сторонники тех или иных языков спорят долго, до хрипоты и изнеможения и часто... расстаются злейшими врагами.
Соответственно, возникает вполне закономерный вопрос о том, насколько справедливы такие темы... если исходить не из амбиций, а из понимания того, как устроены и функционируют большие (многоуровневые) системы.
Общие сведения о системах
Для дальнейшего изложения принципиально неважно то, о какой системе идет речь, это может быть программная система (операционная система, система управления базами данных, система управления предприятием и т.п.), техническая система (судно, самолет, автоматическая линия и пр.), живая система, социальная система и т.д. и т.п. Поскольку все перечисленное выше (и многое другое, от атома до вселенной) является системами, то очевидно, что все это имеет нечто общее, что и позволяет отнести их к системам. Известно, что любая система обладает:
1. элементами;
2. связями между элементами.
При этом каждая система представляет собой единое целое и обладает свойством эмерджентности (
http://ru.wikipedia.org/wiki/%D0%AD%D0%BC%D0%B5%D1%80%D0%B4%D0%B6%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C). Понятие "целое", неотделимо от понятия "цель" (это не просто однокоренные слова, но не будем (пока?) углубляться в этимологию этих слов). Система обладает целями, которые образуют три группы:
1. цели создателя (смысл, предназначение целого-системы);
2. цели владельца(ев) системы (цели над-уровня);
3. цели, вырабатываемые самой системой (для систем обладающих целеполаганием).
Для данной темы, представляет интерес вторая группа целей. Наличие "владельцев" определяет:
а) существования способа взаимодействия между "владельцем" и системой;
б) принципиальное наличие разных уровней.
В свою очередь, существование разных уровней (целого-системы) подразумевает и различие целей у уровней. Это принципиально важно, для рассмотрения данной темы. (Примечание. К сожалению, строгий вывод о существовании разных уровней целого не должен постулироваться, но он требует очень значительного объема изложения).
Различие целей каждого уровня проявляется в:
1. Задачах, решаемых каждым уровнем;
2. Способах межуровнего (с над- и под-уровнями) взаимодействия;
3. Структурном (или архитектурном) исполнении уровня.
Различие в задачах, решаемых на разных уровнях системы, предполагает и различие в используемых средствах взаимодействия элементов системы, то есть, в интерфейсах элементов системы. Интерфейсы элементов создаются/моделируются с помощью языка, и, следовательно, язык может быть более или менее адекватным/эффективным для решения конкретных задач данного уровня. Другими словами, каждый уровень системы обладает собственным набором интерфейсов и предъявляет свои требования к средствам взаимодействия между элементами и над-уровнем (и своими требованиями к языку, в частности).
С другой стороны, разнообразие средств взаимодействия не должно приводить к произвольности интерфейсов и случайному выбору языков. В противном случае, легко получить результат аналогичный тому, который получили "строители вавилонской башни". То есть, формирование межуровневых интерфейсов (создание/выбор языков, в частности) должно происходить по единым правилам, устанавливаемых для системы, как единого целого.
Краткое резюме:
Используя один язык для всех уровней системы, невозможно получить эффективную/приемлемую реализацию более, чем для одного уровня. То есть, для создания больших (многоуровневых) систем, такой подход непригоден. Используя произвольные, но эффективные языковые средства для каждого из уровней, крайне трудно обеспечить нормальное межуровневое взаимодействие, а, значит, и работоспособность системы, как единого целого.
PS. Если эта тема представляет интерес, то можно привести иллюстрацию изложенного выше.