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

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

21 голосов
/ 17 октября 2010

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

Ответы [ 6 ]

37 голосов
/ 17 октября 2010

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

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

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

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

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

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

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

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

13 голосов
/ 27 октября 2010

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

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

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

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

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

12 голосов
/ 18 октября 2010

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

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

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

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

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

7 голосов
/ 21 октября 2011

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

5 голосов
/ 09 марта 2011

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

3 голосов
/ 22 марта 2018

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

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

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

...