Как правило, в некоторых ситуациях я бы предпочел C ++.Если в вашей программе нет параллелизма, и есть несколько библиотек C ++ (не C, но C ++ ), которые было бы очень полезно использовать, то C ++, вероятно, является подходящим вариантом.
Однако, если у вас будет параллелизм как часть дизайна вашей системы, Ada - это огромный выигрыш, поскольку он поддерживает его изначально.Одна работа, над которой я работал, на самом деле - полностью переносимый планировщик реального времени.Мы перенесли всю симуляцию (> 100KSLOC) из vxWorks в компилятор Windows совершенно другого производителя примерно за 2 часа (все потратили на работу с их различными системами библиотек исходного кода).
Любая библиотека, имеющая связь C, идеально доступнав Аде, хотя иногда вам может потребоваться написать привязки.Это немного больше работы, но вы часто обнаружите, что другие с такими же библиотеками уже сделали эту работу за вас.Например, я считаю, что есть привязки ко всем Win32.Тем не менее, создавать новые достаточно просто, поэтому я часто оказываюсь в этом, чтобы предоставить интерфейс, который мне нравится больше.
В Ada также есть пара функций, которые, IMHO, делают ее основным языком, доступным для низкоуровневых систем.программирование.Например, язык позволяет вам точно указать , где и насколько велико каждое поле в записи.Это жизненно важно при работе с оборудованием или данными, передаваемыми на другие платформы.C ++ в настоящее время позволяет только указать, насколько велико каждое поле.Я имею дело с этим прямо сейчас и нахожу это очень расстраивающим.
Другая особенность убийцы для системного программирования состоит в том, что по умолчанию все массивы проверяются с помощью границ.Вы можете отключить его для эффективности, если хотите, но по умолчанию безопасность.ИМХО, это то, что должно быть по умолчанию.В C ++, если вы хотите безопасность, вы должны изо всех сил, чтобы самостоятельно ее кодировать, или использовать более безопасный класс, такой как std :: vector (и использовать только метод .at()
. Сколькораз ты когда-нибудь видел, чтобы кто-нибудь делал это? Никогда? Я тоже.)