Вопрос

Из обсуждений, которые у меня были по поводу языкового дизайна, складывается впечатление, что многие люди приводят аргумент о том, что "единого истинного языка" нет и никогда не будет.Альтернатива, по мнению этих людей, состоит в том, чтобы быть знакомым с несколькими языками и выбрать правильный инструмент для работы. Это имеет смысл на уровне целого проекта или крупного подпроекта, который должен взаимодействовать с остальной частью проекта только через очень узкий, четко определенный интерфейс.

С другой стороны, использование множества разных языков кажется очень неудобным занятием при попытке элегантно решить множество мелких подзадач.Другими словами, ИМХО, языки общего назначения, которые хороши во всем, все еще имеют значение.В качестве тривиального примера предположим, что вам нужно сделать следующее:

  1. Считывает кучу данных в некотором произвольном формате из файла.Проверьте его на наличие ошибок и т.д.(Лучше всего это сделать на чем-то вроде Perl).
  2. Загрузите эти данные в матрицы, выполните над ними кучу сложных матричных операций (лучше всего это сделать в чем-то вроде Matlab).
  3. Запустите на нем пользовательскую, требующую больших вычислительных затрат процедуру, которая должна быть быстрой и занимать мало места (лучше всего это делать на C или C ++).

Это довольно простой проект, если не считать написания пользовательской процедуры обработки матриц с большими вычислительными затратами, но единственным хорошим ответом на вопрос о том, какой язык использовать, кажется, является универсальный, который хорош во всем.

Чего я здесь не понимаю?Как эффективно использовать несколько языков, чтобы воспользоваться преимуществами каждого из их сильных сторон?

Это было полезно?

Решение

Я работал над многими проектами, которые содержат довольно разнообразное сочетание языков.Если это не .NET-проект, вы обычно используете эти разные языки на разных уровнях или в разных процессах.Возможно, ваше веб-приложение на PHP, а ваш сервер приложений на Java.Таким образом, на самом деле вы не "смешиваете и сочетаете" на уровне метода.

В .NET и для некоторых языков виртуальной машины java правила немного меняются, поскольку вы можете смешивать гораздо более свободно.Но возможности этих языков в основном определяются библиотеками классов, которые являются общими.Таким образом, мотивация для переключения языков в .net обычно определяется другими факторами, например, тем, какой язык знают разработчики.F # на самом деле предоставляет довольно много языковых функций, специфичных для этого языка, так что, похоже, это небольшое исключение в .NET .Некоторые языки виртуальной машины java также добавляют методы в стандартные библиотеки Java, добавляя функции, недоступные в Java.

На самом деле вы вполне привыкаете работать с несколькими языками, если все они имеют хорошую поддержку IDE.Без этого я действительно думаю, что был бы потерян.

Другие советы

Встроенные языки, такие как Lua, делают это довольно простым.Lua - отличный динамичный язык, похожий на Ruby или Python и позволяющий быстро разрабатывать высококачественный код.Он также имеет тесную интеграцию с C, что означает, что вы можете воспользоваться преимуществами библиотек C / C ++ и оптимизировать критически важные для производительности разделы, написав их на C или Си ++.

В научных вычислениях также нередко бывает сценарий, который, например, выполняет некоторую обработку данных в Matlab, использует Perl для переформатирования выходных данных, а затем передает это в другое приложение, написанное на Matlab, C или любом другом.Однако это, как правило, чаще встречается при интеграции приложений, написанных разными людьми, чем при разработке чего-либо с нуля.

Рассмотрим самую трудную часть вашей задачи.Является ли синтаксический анализ файла самой сложной частью?Хороший язык для чтения файлов, а затем манипулирования ими может оказаться наиболее подходящим выбором.

Являются ли математические преобразования самой сложной частью?Возможно, вы захотите смириться с этим и использовать matlab, дополняя его скриптами или другими домашними инструментами.

Является ли производительность самой важной частью?Какой объем вычислений будет выполнен по сравнению с преобразованиями и синтаксическим анализом?Если 90% проделанной работы будет связано с вычислениями, а остальные части являются лишь временными, то рассмотрите решение на C / C ++.

По сути, нет ничего плохого в том, чтобы использовать сильные стороны нескольких языков в простом решении, особенно если вы не возражаете склеить его со сценариями.Однако, чем больше языков и модулей вы интегрируете, тем больше увеличивается количество ваших зависимостей, и чем больше у вас зависимостей, тем сложнее становится распространять и поддерживать ваше приложение.Вот где кроется настоящий компромисс:чем меньше технологий, библиотек и фрагментов программного обеспечения вам нужно для запуска приложения, тем проще оно становится.Чем проще приложение, тем более удобным для сопровождения, распространения, отладки и использования оно становится.

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

Я думаю, что все в порядке.Если вы настроите его как n-уровневую настройку, где каждый слой обращается к тому, что находится под ним, одинаковым образом (SOAP / XML / COM и т.д.), я обнаружил, что в итоге он будет невидимым.

Для вашего примера я бы выбрал один язык для интерфейса, который является простым, быстрым, гибким и может выполнять много-много-много-много типов вызовов к различным интерфейсам, таким как com, corba, xml, .net, пользовательские библиотеки dll, ftp и пользовательские шлюзы событий.Это гарантирует, что вы сможете легко звонить на любой другой язык или взаимодействовать с ним.

Мой любимый инструмент для этого - Coldfusion от работы с ASP / PHP / Java и немного Ruby.Кажется, что все это собрано в одном месте и очень просто.В вашем конкретном случае ColdFusion позволит вам скомпилировать ваш собственный библиотечный тег, который вы можете вызывать в своем веб-коде.Внутри тега вы можете поместить весь код на языке Си, который вам нравится, и заставить его делать все, что вы хотите.

Доступны бесплатные версии Coldfusion с открытым исходным кодом, и это фантастическое решение для наивного выполнения вызовов Java и .NET из одной кодовой базы.Проверьте это, я действительно чувствую, что это может лучше всего подойти, поскольку оно создано для такого рода корпоративных решений.

Я знаю, что PHP тоже может быть довольно хорош для этого, в зависимости от вашей ситуации, и я уверен, что Asp.net не слишком отстает.

Моя работа на нескольких языках включала в себя всего лишь простое сочетание C # и C ++ / CLI (это похоже на C ++ с .NET, если вы еще не слышали об этом).Я действительно думаю , что стоит сказать это таким образом .NET и Visual Studio позволяют вам комбинировать множество разных языков вместе, что означает, что у вас не будет таких больших накладных расходов, как вы обычно ожидаете при объединении двух языков - Visual Studio объединяет все это.Учитывая, что их много .СЕТЕВЫЕ клоны различных языков - F #, IronPython, IronRuby, JScript.Например, NET - Visual Studio - это довольно хороший способ, с помощью которого вы можете комбинировать различные языки.

Что касается технического уровня, который звучит так, как вам интересно, то способ, которым это делается в Visual Studio, заключается в том, что у вас должен быть один проект для каждого отдельного языка, и каждый проект компилируется в сборку - по сути, это означает, что он становится библиотекой для использования другими проектами.У вас будет один основной проект, который управляет всем и вызывает другие библиотеки.Требование, чтобы каждый отдельный язык был отдельным проектом, означает, что вы не стали бы менять языки на уровне метода, но если вы создаете достаточно большое приложение, которое можно логически разделить на несколько проектов, это действительно может быть весьма полезно.В частности, разделение и абстракция могут упростить задачу в целом.

Вы говорите, что есть выбор: либо а) написать все на одном языке и потерять эффективность, либо б) собрать воедино кучу разных исполняемых файлов, чтобы использовать наилучший язык для каждого раздела задания.

Большинство работающих программистов выбирают вариант c:делают все, что в их силах, с языками, которые их ИТ-отделы поддерживают в производстве.Обычно программисты имеют некоторый ограниченный выбор языка в рамках определенной среды, такой как JVM или CLR, так что это не утопия toolbox и не одноязычное гетто.

Даже LAMP и Rails поддерживают (требуют, на самом деле) разные языки на разных уровнях - HTML, Javascript, Ruby, C в случае Rails.Если вы пишете программные сервисы (а именно там в наши дни происходит большая часть интересной работы), то вряд ли вы когда-либо пишете только на одном языке.Но и ваш выбор не бесконечен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top