В зависимости от того, как вы смотрите на эту проблему, существует много или мало приложений, написанных на нескольких языках.
Например, рассмотрим гибридное веб-приложение, которое использует несколько веб-сервисов . Каждый веб-сервис может быть написан на другом языке. В некотором смысле, такое приложение является написанным на многих языках .
В качестве альтернативы вы можете посмотреть «простое», не смешанное, веб-приложение , которое может использовать:
- SQL для персистентности ,
- C # / Groovy / RoR / и т.д.. для логики приложения ,
- и JavaScript / CSS / (X) HTML для представления .
Для доступа к хранилищу данных может даже использоваться ИЛИ / М инструмент или LINQ to SQL в случае C #. Давайте не будем забывать о правильном разбрасывании регулярных выражений , встроенных в различные уровни кода. Это все разные языки. В этом смысле для создания приложений регулярно используется несколько языков .
Но я не думаю, что это то, что вы имеете в виду. Я думаю, что предполагаемая область действия - это «основная часть» кода, созданного одной командой проекта . Вы задаетесь вопросом, почему проект не пишет, скажем, один компонент на Java, другой на Лиспе и третий на Erlang, а затем связывает их все вместе как некий унифицированный результат.
Были предложены некоторые ответы, такие как сборка / развертывание сложнее, или не каждый сможет работать в каждой части системы из-за некоторого недостатка навыков в определенных языках. Я не продан на таких типах ответов. Я видел неприятные сценарии сборки / развертывания в проектах, написанных в основном на одном языке. И по моему опыту, когда почти любой проект достигает определенного размера, особенно если он был написан многими умами, каждому становится трудно быть хорошо разбирающимся в каждой части системы. Кроме того, переход с одного языка на другой (при наличии достаточно опытного разработчика) на самом деле не такой большой барьер, как это делают некоторые.
Проблема в том, что мы не можем просто соединить вместе куски кода, такие как блоки lego . Мы хотели бы, а в некоторых случаях, может быть, мы можем что-то вроде этого сделать. Проблема главным образом заключается в зрелости спецификаций для открытых компонентных интерфейсов и зависимостей компонентов . Опять же, я видел, как эти вещи мешают проекту «в основном на одном языке». Но когда вы переходите границы языка, ситуация усложняется.
Независимо от того, наличие "правильного" языка для правильной задачи очень ценно . Если вы действительно верите, что у вас есть три компонента, которые лучше всего выражены, скажем, в Java, Lisp и Erlang, то вам выгодно написать эти компоненты на этих языках. До тех пор, пока вы ожидаете, что работа, необходимая для их соединения и поддержания этих ссылок, не превышает ценность, которую вы получаете от написания на нескольких языках .
Итак, все сводится к снижению затрат на сборку компонентов. Это немного другое понятие, чем просто сказать «сборка становится сложнее». С четко определенными общедоступными интерфейсами, надлежащим сокрытием информации, сравнительно безболезненным обнаружением и разрешением зависимостей нет причин, по которым компоненты одного проекта не могут быть написаны на нескольких языках.