Подтвердить что ты не робот

Ада для нового проекта?

В настоящее время мы разрабатываем некритическое навигационное решение типа карты для нашего авионика на базе Atom. Прототип был выполнен в Python/Qt, теперь мне нужно выбрать язык для "реального" приложения. Ada или C/С++. Я уже 12 лет являюсь разработчиком С++ и ненавижу язык. Ада кажется многообещающей, но я немного беспокоюсь об этом, поддерживая инфраструктуру, доступные библиотеки, доступность разработчика и так далее. Кто-нибудь здесь прошел через это? Каковы ваши выводы?

4b9b3361

Ответ 1

(Ответ от реального разработчика Ada)

Вопреки предсказаниям о его скорой кончине, Ада все еще в порядке. Текущая версия языка - Ada 2005, а обновления для Ada 2012 находятся в процессе доработки.

Ада продолжает подвергаться модернизации и включать новые функции и методы разработки программного обеспечения, поскольку они разрабатываются промышленностью. (И обратное также верно - встроенный параллелизм был основной функцией Ada с 1983 года, и только сейчас пробивается на "современные" языки программирования. :-)

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

Конечно, правда, что Ada не является широко используемым языком программирования, но у него есть преданное сообщество разработчиков, которые почти всегда готовы помочь с вопросами, проблемами и советами для тех, кто разрабатывает проекты и изучает язык. Ресурсы включают здесь, в StackOverflow (проверьте тег Ada), comp.lang.ada, даже Reddit.

Что касается доступности для разработчиков Ada, то это своего рода "ловушка-22". Поскольку это не широко используется, есть меньше разработчиков. Поскольку разработчиков меньше, компании избегают использовать его в проектах, а поскольку он не используется для проектов, разработчики не ищут в нем работы.

Я могу засвидетельствовать, однако, что есть много хорошо осведомленных нынешних и бывших программистов Ada, которые любят работать с языком и были бы особенно заинтересованы в этом для приложения описываемого вами типа - если бы они знали об этом. Если вы взяли на себя обязательство идти с Ada, а затем без рекламы для рекламодателей Ada - на Monster, где бы вы ни размещали рекламу, со вкусом на comp.lang.ada или Reddit - я думаю, что наличие разработчиков Ada удивит вас и многих другие скептики.

Удачи с вашим проектом.

Ответ 2

Я брошу свои мысли. Для быстрого контекста: я сейчас работаю в Ada в одной из этих крупных компаний (не Lockheed, но достаточно близко). Я программист С в ядре. (также используются С++, С# и Java)

Ада отлично подходит как язык. В нем есть несколько приятных вещей, которые вы не можете получить на C/С++. Для критических систем реального времени это действительно хорошо. Он немного привыкает, но его достаточно легко изучить.

Недостатком является восприятие языка. Большинство инженеров, которых я знаю, любят и выбирают Аду старше (45+). Из них есть 2 типа программистов: люди, которые на самом деле действительно хороши в Ada, и могут сделать это правильно, и те, кто "знает" Ada, но программируют его в стиле/стиле, представляющем 70-х годов со старыми языками. Те хорошие программисты Ada высоко ценятся здесь. Чтобы небольшая компания могла их вырвать, я бы подумал, что вам нужно будет сбросить на них крупные деньги. Они имеют отпуск на 4-5 недель, 6 зарплат (даже в более дешевых местах для жизни) и всевозможные льготы. Надеюсь, это не похоже на возраст, но это так, как есть, и что-то думать о маленькой компании. Если вы находитесь в крупной технической области, такой как Даллас/Форт-Уэрт, возможно, все в порядке. Как вы упомянули в своих комментариях, большинство младших программистов не рады изучать Аду. Он может хорошо заплатить и быть в порядке, как язык, но он не так продуктивен или интересен.

Если бы я начал проект встроенной системы реального времени, я бы просто придерживался C (или С++, если вам нужно OO). Для встроенных я предпочитаю C на самом деле над С++, потому что, по моему опыту, инженеры пытаются заставить встроенную систему в OO и использовать функции, потому что они есть, но ваш пробег может отличаться. С C или С++: 1. ОГРОМНЫЙ пул программистов на выбор. 2. Каждый инструмент, известный человеку, был создан для работы с ним (многие из них бесплатны). 3. Ресурсы онлайн бесконечны.

Это позволит вам просто работать. Если у вас есть доступ к некоторым отличным отладчикам, использующим JTAG, например Green Hills и VxWorks, это действительно ускоряет скорость разработки.

Ответ 3

Как правило, есть ситуации, когда я бы предпочел С++. Если ваша программа не имеет в ней никакого concurrency, и есть некоторые библиотеки С++ (не C, но С++), которые были бы действительно полезны для использования, тогда, вероятно, С++ - это путь.

Однако, если у вас будет concurrency как часть вашего дизайна системы, Ada - это огромный выигрыш, так как он поддерживает его изначально. Одна работа, на которой я была на самом деле, написала полностью переносимый планировщик реального времени. Мы перенесли весь симулятор ( > 100KSLOC) из vxWorks на совершенно другой компилятор Windows поставщика в течение примерно 2 часов (все были потрачены на работу с их различными библиотечными системами исходного кода).

Любая библиотека, имеющая C-связь, отлично доступна в Ada, хотя иногда вам может понадобиться писать привязки. Это немного больше работы, но вы часто обнаружите, что другие с теми же библиотеками, с которыми вы имели дело, уже сделали эту работу для вас. Например, я считаю, что есть привязки ко всем доступным Win32. Тем не менее, создание новых достаточно просто, что я часто нахожу, что я просто делаю это, чтобы обеспечить интерфейс, который мне больше нравится.

В Ada также есть несколько функций, которые IMHO делают его основным языком для низкоуровневого системного программирования. Например, язык позволяет вам указать точно, где и насколько велико каждое поле в записи. Это очень важно при работе с оборудованием или данными, переданными с другими платформами. В настоящее время С++ позволяет указать, насколько велико каждое поле. Я имею дело с этим прямо сейчас, и считаю это очень расстраивающим.

Другая функция killer для системного программирования заключается в том, что по умолчанию все массивы проверены границами. Вы можете отключить его, если хотите, но по умолчанию это безопасность. ИМХО это то, что должно быть по умолчанию. В С++, если вы хотите безопасности, вам нужно уйти с пути, чтобы закодировать его самостоятельно, или использовать более безопасный класс, например std::vector (и использовать только метод .at(). Сколько раз вы когда-либо видели, что? Никогда? Я тоже.)

Ответ 4

В значительной степени причина, по которой Ada не является языком блокбастера (хотя из того, что я читал, мне действительно интересно узнать больше) является то, что большинство программистов хотят быстро и грязно. Просто взгляните на Microsoft Windows. Они написали первые версии в C (и немного ассемблера x86). Им потребовалось 2 года, чтобы закончить все чудовище, и даже теперь оно хрупкое. Легкость, с которой вирусы и черви могут проникнуть в систему, настолько плоха, что они пытаются уклониться от Win32 API в Windows 8. Я уверен, что если бы ОС была написана в Ada, это было бы намного больше надежный и более надежный, чем сейчас.

Ответ 5

Существуют ограничения прагмы, которые вы можете использовать для ограничения некоторых функций языка. Может быть альтернативой использованию искры.

Ответ 6

Если вы пишете программное обеспечение для авионики, вы обычно не можете использовать много библиотек. Обычно у вас есть много правил кодирования, которые необходимо соблюдать. Например, запрещены рекурсивные функции или динамическое выделение памяти. Поэтому библиотеки доставляют много хлопот, когда дело доходит до сертификации (например, DO-178C).

Я предпочитаю Аду над C++, так как она мешает вам делать много глупых ошибок кодирования. В принципе, вы можете делать то же самое с Ada и C++. Однако вы должны определить множество правил кодирования, чтобы соответствовать требованиям сертификации. И вы должны продемонстрировать соблюдение этих правил.

У вас то же самое с Ада, но это меньше работы, чем с C++.

Ответ 7

Это хороший вопрос.

Я написал Аду профессионально в течение многих лет, а также C и C++. Я наслаждаюсь обоими одинаково.

С любым языком, Ada или C/C++ это можно спагетизировать.

Скорее всего, вы найдете дешевый компилятор и поддержку с C/C++. Просто применяйте дисциплину в своей практике кодирования.