2010-10-17 6 views
19

Nous développons actuellement une solution navcomm de type carte mobile non critique pour notre appareil avionique basé sur Atom. Le prototype a été fait en Python/Qt, maintenant je dois décider d'un langage à utiliser pour la "vraie" application. Ada ou C/C++. Je suis développeur C++ depuis 12 ans et déteste la langue. Ada semble prometteur, mais je m'inquiète un peu de son infrastructure de support, des bibliothèques disponibles, de la disponibilité des développeurs et ainsi de suite. Quelqu'un a-t-il déjà vécu cela auparavant? Quelles sont vos conclusions?Ada pour un nouveau projet?

+5

pas sûr si vous verrez jamais ce commentaire, mais dans quelle langue avez-vous décidé d'aller à la fin et comment cela s'est-il passé? –

+3

Nous avons porté des parties centrales de l'application vers C++ et gardé le reste en Python. L'entreprise a fait faillite avant d'aller plus loin, malheureusement, malgré un bon fonctionnement du cockpit. Nous n'avons jamais été certifiés, mais nous avons réussi à l'intégrer dans quelques cockpits au moyen d'un changement mineur. Cela dit, la langue utilisée était notre plus petit problème. Notre plus grand était l'assaut des appareils Ipad et Android. – zeroc8

Répondre

33

(réponse d'un développeur Ada réelle)

Contrairement à la prédiction de sa mort imminente, Ada va encore très bien le long. La version actuelle du langage est Ada 2005, et les mises à jour pour Ada 2012 sont en cours de finalisation.

Ada continue de subir une modernisation et intègre de nouvelles fonctionnalités et pratiques de génie logiciel telles qu'elles sont développées par l'industrie. (Et l'inverse est également vrai - intégré la concurrence est une caractéristique centrale d'Ada depuis 1983, et qui ne fait que se frayer un chemin dans les langages de programmation "modernes" :-)

La fonctionnalité et la pratique vont être adoptées par Ada, Ada ne va pas se transformer en un langage fonctionnel, par exemple. Mais les fonctionnalités qui améliorent la productivité, la fiabilité et la sécurité des logiciels sont intégrées de manière cohérente avec l'architecture et l'intention sous-jacentes d'Ada. Il est vrai qu'Ada n'est pas un langage de programmation largement répandu, mais il a une communauté de développeurs dévoués, qui sont presque toujours prêts à aider avec les questions, les préoccupations et les conseils pour ceux qui développent des projets et apprennent le la langue. Les ressources incluent ici à StackOverflow (vérifiez le Ada tag), comp.lang.ada, même Reddit. En ce qui concerne la disponibilité des développeurs Ada, il s'agit en quelque sorte d'une situation «Catch-22». Parce qu'il n'est pas largement utilisé, il y a moins de développeurs. Parce qu'il y a moins de développeurs, les entreprises n'hésitent pas à l'utiliser dans des projets, et parce que cela ne sert pas à des projets, les développeurs ne cherchent pas d'emploi.

Je peux attester, cependant, qu'il y a beaucoup de programmeurs Ada actuels et anciens qui aiment travailler avec la langue, et qui seraient particulièrement intéressés à le faire pour une application du type que vous décrivez: s'ils savait à ce sujet. Si vous aviez pris l'engagement d'aller avec Ada, et que vous l'aviez annoncé publiquement pour les développeurs d'Ada - sur Monster, partout où vous publiez, avec goût sur comp.lang.ada ou Reddit - je pense que la disponibilité des développeurs Ada vous surprendrait, vous et beaucoup d'autres. d'autres sceptiques.

Bonne chance pour votre projet.

+2

Merci, je viens de commander "High Integrity Software using Spark" et j'ai hâte de travailler dessus. – user478389

+4

Vous avez dit dans votre question que ce projet n'est pas critique. Cela étant, vous pourriez trouver SPARK un peu exagéré - Ada ordinaire, restreint peut-être en utilisant un guide de style ou des outils plus automatisés comme AdaControl (http://adalog.pagesperso-orange.fr/adacontrol2.htm), devrait être au sujet de la norme de MISRA C. http://www.adaworld.com/pdfs/misracandada.pdf a une comparaison plutôt peu concluante. –

+0

Merci pour les liens, apprécié. – user478389

10

Généralement, il y a certaines situations où je préférerais C++. Si votre programme n'a aucun accès concurrent et qu'il y a des bibliothèques C++ (pas C mais C++) là-bas qui seraient vraiment utiles à utiliser, alors C++ est probablement le chemin à parcourir.

Cependant, si vous avez une simultanéité dans le cadre de la conception de votre système, Ada est un énorme win, car il le supporte nativement. Un travail que j'ai été écrit en fait un programmateur en temps réel entièrement portable. Nous avons transféré l'ensemble de la simulation (> 100KSLOC) de vxWorks vers un compilateur Windows complètement différent d'un fournisseur en environ 2 heures (tous dépensés avec leurs différents systèmes de bibliothèque de code source).

Toute bibliothèque qui a C linkage est parfaitement disponible dans Ada, bien que parfois vous pourriez avoir à écrire des liaisons. C'est un peu plus de travail, mais vous trouverez souvent que d'autres avec les mêmes bibliothèques à traiter ont déjà fait le travail pour vous. Par exemple, je crois qu'il existe des liaisons à tous les Win32 disponibles. Pourtant, en faire de nouveaux est assez facile que je me retrouve souvent à le faire juste pour fournir une interface que j'aime mieux.

Ada a également quelques caractéristiques qui font d'IMHO le premier langage disponible pour la programmation du système de bas niveau. Par exemple, le langage vous permet de spécifier exactement où et dans quelle mesure chaque champ d'un enregistrement est placé. Ceci est essentiel dans le traitement du matériel ou des données communiquées avec d'autres plates-formes. C++ ne permet actuellement que de spécifier la taille de chaque champ. Je fais face à cela maintenant et je trouve cela très frustrant.

L'autre fonctionnalité de tueur pour la programmation du système est que par défaut toutes les matrices sont vérifiées. Vous pouvez l'éteindre pour plus d'efficacité si vous le souhaitez, mais la valeur par défaut est la sécurité. À mon humble avis c'est ce que le défaut devrait être. En C++ si vous voulez la sécurité, vous devez vous débrouiller pour le coder vous-même, ou utiliser une classe plus sûre comme std :: vector (et seulement utiliser la méthode .at(). Combien de fois avez-vous déjà vu quelqu'un fais ça? Jamais? Moi non plus.)

+0

Existe-t-il des outils pour automatiser ces importations de C libs? – user478389

+1

On dirait que Gnat est livré avec un générateur d'interférence http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Running-the-binding-generator.html. Si vous utilisez ce compilateur (acheté chez ACT), c'est probablement votre solution. Sinon, je l'éviterais pour le travail non-GPL car leurs versions gratuites font probablement les enchères GPL. Vous pouvez consulter les autres générateurs à http://www.adapower.com/index.php?Command=Class&ClassID=Utilities&Title=Ada+Utilities. Comme je l'ai dit, je préfère généralement faire mon propre bien. Si vous le faites mécaniquement, vous vous retrouvez avec une routine avec une interface C (beurk!) –

11

Je vais jeter dans mes pensées. Pour un contexte rapide: je travaille actuellement chez Ada dans l'une de ces grandes entreprises (pas Lockheed, mais assez proche). Je suis un programmeur C au cœur. (utilisé C++, C#, et Java aussi bien)

Ada est bien comme langue. Il contient de jolies choses que vous ne pouvez pas obtenir en C/C++. Pour les systèmes critiques en temps réel, c'est vraiment sympa. Il faut s'y habituer un peu, mais c'est assez facile à apprendre.

L'inconvénient est la perception de la langue vraiment. La plupart des ingénieurs que je connais qui aiment et choisissent Ada sont plus âgés (45+). Parmi ceux-ci il y a 2 types de programmeurs: les gens qui sont vraiment bons à Ada et qui peuvent le faire correctement, et ceux qui "connaissent" Ada, mais le programment d'une façon/style représentatif des années 70 avec des langues plus anciennes. Ces bons programmeurs Ada sont très appréciés ici. Pour une petite entreprise de les arracher, je pense que vous auriez besoin de déposer de l'argent important sur eux. Ils ont 4-5 semaines de vacances, 6 salaires en chiffres (même dans des endroits moins chers à vivre) et toutes sortes d'avantages. J'espère que cela ne semble pas vieilli, mais c'est juste comme ça et quelque chose à penser en tant que petite entreprise. Si vous êtes dans un domaine technologique majeur comme Dallas/Fort Worth, cela pourrait être correct. Comme vous l'avez mentionné dans vos commentaires, la plupart des programmeurs plus jeunes ne sont pas excités d'apprendre Ada. Il peut payer bien et être bien comme langue, mais il n'est pas aussi commercialisable ou excitant.

Si je commençais un projet de système embarqué en temps réel, je voudrais juste coller à C (ou C++ si vous avez besoin de l'OO). Pour l'embarqué, je préfère C plutôt que C++ car, d'après mon expérience, les ingénieurs essaient de forcer le système embarqué dans OO et d'utiliser des fonctionnalités car ils sont là, mais votre kilométrage peut varier. Avec C ou C++: 1. ÉNORME pool de programmeurs à choisir. 2. Chaque outil connu de l'homme a été conçu pour fonctionner avec lui (beaucoup sont gratuits). 3. Les ressources en ligne sont infinies.

Il vous permettra de vous mettre au travail. Si vous avez accès à certains des grands débogueurs utilisant JTAG comme Green Hills et VxWorks, cela accélère vraiment la vitesse de développement.

5

Il existe des restrictions pragma que vous pouvez utiliser pour restreindre certaines fonctionnalités de la langue. Peut être une alternative à l'utilisation d'étincelles.

6

Bien qu'Ada ne soit pas une langue à succès (même si je m'intéresse à en apprendre davantage), c'est parce que la plupart des programmeurs veulent être rapides et sales. Regardez simplement Microsoft Windows. Ils ont écrit les premières versions en C (et un peu d'assembleur x86). Il leur a fallu 2 ans pour finir toute la monstruosité, et même maintenant c'est fragile. La facilité avec laquelle les virus et les vers peuvent s'infiltrer dans le système est si mauvaise qu'ils essaient de s'éloigner de l'API Win32 dans Windows 8. Je suis sûr que si le système d'exploitation était écrit dans Ada, ce serait beaucoup plus robuste et un tas plus sécurisé que maintenant

+0

Je sais que c'est vieux, mais la première version de Windows, sous DOS, était écrite en Pascal. – Lucretia