Make with Ada deuxième édition

Posté par (page perso) . Édité par Davy Defaud, Pierre Jarillon et Benoît Sibaud. Modéré par ZeroHeure. Licence CC by-sa
Tags :
18
19
mai
2017
Do It Yourself

Concours de programmation en Ada

Ada est le langage de programmation par excellence lorsque la sécurité, la fiabilité et la pérennité sont essentiels.

Pour la deuxième année consécutive, AdaCore ouvre à tous un concours de programmation autour de ses technologies à savoir Ada et Spark.

Les détails sont en deuxième partie

En quoi cela consiste‐t‐il ?

C’est simple, il faut proposer un projet original de logiciel embarqué utilisant Ada et/ou Spark. Il est possible de fournir un projet utilisant aussi d’autres langages, mais le projet sera noté sur la partie Ada/Spark seule.

Pour qui ?

Il suffit d’être majeur et de ne pas faire partie de la famille des employés d’AdaCore ou des annonceurs. Il est possible de se présenter en équipe de quatre personnes éligibles individuellement.

Conditions de soumission

Le projet devra fournir  :

  • une description technique ;
  • des photos ou des vidéos décrivant le projet ;
  • un lien vers un référentiel des sources du projet ;
  • la documentation en anglais.

De plus, la documentation devra préciser quelles parties proviennent de bibliothèques externes et quelles parties sont originales.

Critères d’évaluation

Le projet sera noté sur les critères suivants :

  • libre selon les définition de la FSF ou de l’Open Source Initiative ;
  • collaboratif : le projet peut‐il être construit avec des outils accessibles à toute la communauté ? Le projet est‐il accessible via un gestionnaire de versions accessible publiquement ? A‐t‐il des interfaces clairement définies ?
  • fiable : le projet utilise‐t‐il des processus permettant de donner des garanties sur le respect des exigences (ex. : méthodes formelles, programmation par contrats, tests…) ?
  • inventif : répond‐il à un nouveau problème ? Fournit‐il une solution inédite à un problème connu ?

Et on soumet quand ?

On peut soumettre depuis le 15 mai 2017 et jusqu’au 15 septembre 2017.
Sachant que l’on peut modifier la soumission jusqu’à la dernière minute, cela laisse trois mois pour peaufiner son projet

Les prix

  • première place : 5 000 € ;
  • seconde place : 2 000 € ;
  • troisième place : 1 000 €.

Par quoi on commence ?

AdaCore fournit depuis maintenant plus d’un an une bonne partie de ses outils sous GitHub, notamment plusieurs environnements d’exécution et une bibliothèque de pilotes pour cartes nues comme la série des cartes de STMicroelectronics utilisant les processeurs STM32.
Il s’agit donc d’un bon point de départ pour démarrer son projet.

Alors, bon courage si ça vous tente, parce que le niveau est assez élevé. :)

  • # Le gagnant de 2016

    Posté par (page perso) . Évalué à 3 (+2/-0).

    Je n'ai pas pensé lors de la création de la dépêche à mettre un lien vers la vidéo montrant la réalisation du gagnant.
    C'est chose faite.

    Au passage, j'en profite pour mettre les logs des projets gagnants qui vous donneront accès au code, entre autres :
    - Etherscope
    - Framework to develop control software for the NXP cup race car
    - Bluetooth Beacons

    Et pour les prix spéciaux:
    - IoT Networking Stack for the NXP FRDM-K64F board
    - LVC-EMR-1, an explorer and mapper robot

    Ouf, voilà

    Finalement, ce serait peut-être bien de les mettre dans la dépêche, histoire que ce soit plus "vendeur" :D

  • # Ada et sécurité

    Posté par . Évalué à 3 (+2/-0).

    Ada est le langage de programmation par excellence lorsque la sécurité, la fiabilité et la pérennité sont essentiels.

    J'entends souvent parler d'Ada comme un langage sûr, je n'en ai jamais directement mais j'ai pu voir quelques concepts via VHDL ou AADL. En quoi ce langage est-il plus sécurisé qu'un code C ?

    • [^] # Re: Ada et sécurité

      Posté par . Évalué à 3 (+2/-0).

      En quoi ce langage est-il plus sécurisé qu'un code C ?

      La réponse me paraît évidente mais d'autres sauront bien mieux que moi la résumer en quelques mots. Je vais plutôt à la place donner un exemple d'application où on a considéré qu'il valait mieux Ada qu'un autre langage tel que C ou C++ : le contrôle-commande d'une partie du parc nucléaire français (et aussi d'autres pays).

      NB. D'autres langages sont apparus depuis, peut-être que certains d'entre eux auraient pu également convenir.

    • [^] # Re: Ada et sécurité

      Posté par (page perso) . Évalué à 5 (+2/-0).

      Le langage permet plus de vérifications à la compilation et à l'exécution (que pas mal d'autres langages et en particulier que le C).

      • [^] # Re: Ada et sécurité

        Posté par . Évalué à 2 (+1/-0).

        En effet les vérifications à l'exécutions sont complètement absentes du C.
        J'essayerai de voir plus en détails les vérifications dont est capable Ada, merci pour le lien :)

        • [^] # Re: Ada et sécurité

          Posté par (page perso) . Évalué à 10 (+19/-0).

          mahikeulbody met la barre vachement haut en disant qu'on pourrait résumer en quelques mots :)
          Les grands concepts d'Ada sont:
          - Le typage fort
          - La concurrence
          - la programmation bas niveau en restant haut niveau

          Voilà pour les gros points. Ceux-ci se déclinent ensuite en différentes techniques.

          Le typage fort

          Ada permet la définition de type très contraint.
          On peut par exemple définir des types comme

          type degre_celsius is range -273..Integer'Last;
          type degre_kelvin is range 0..Integer'Last;

          Qui définit donc deux types entiers avec des bornes différentes.
          Les deux types, même s'ils sont des entiers ayant des plages de recouvrement, sont incompatibles et on ne peut pas, par exemple, assigner à une variable du type degres_kelvin une variable de type degres_celsius sans faire une conversion

          degre_c : degre_celsius := 14; -- Température de circonstance
          degre_k : degre_kelvin := degre_c; -- Impossible même si la valeur est acceptable
          degre_k2 : degre_kelvn := -12; -- le compilateur envoie juste un warning disant que cela va lancer une exception à l'exécution

          Ceci n'est qu'un petit exemple du système de type. Pour beaucoup plus d'infos (il est trop tard :)), voir le wikibook.

          La concurrence

          Les tâches, threads en Java ou C (via les pthread Linux), font partie intégrante du langage depuis 1983.
          Le langage définit donc la notion de multiprocessus depuis le début ainsi que les communications inter-process.
          Ces dernières se font au travers des points de rendez-vous avec ou sans condition et des objets protégés.
          C'est une partie complexe du langage mais qui, comme elle est normalisée, permet de faire de la programmation concurrente sans se soucier de la plateforme.

          Soyons clair, là encore, j'abrège à mort :D

          la programmation bas niveau en restant haut niveau

          Là, il s'agit d'un des domaines où Ada excelle. En effet, on utilise surtout Ada dans l'embarqué… Normal, on ne peut pas y changer le code tous les quatre matins alors on veut un truc qui tienne la route.
          Ada permet d'exprimer ce que l'on appelle les clauses de représentation.
          Celles-ci définissent comment une structure doit être représentée en mémoire.
          Par exemple:

          type Medium is range 0 .. 65_000;
          for Medium'Size use 2*Byte;
          for Medium'Alignment use 2;
          Device_Register : Medium;
          for Device_Register'Size use Medium'Size;
          for Device_Register'Address use System.Storage_Elements.To_Address(16#FFFF_0020#);

          Là, j'avoue, je ne me suis pas foulé, c'est dans la norme ;)
          L'idée est de dire ce que l'on veut représenter, ici un medium mais aussi la taille allouée en mémoire (et le compilateur dira si cela peut se faire) et l'alignement en mémoire.
          Ensuite, on peut même définir l'emplacement en mémoire.
          Au passage, on se rend compte qu'il n'est pas besoin de faire appel aux pointeurs pour ce genre d'exercice.
          Ceux-ci sont réservés à ce pour quoi ils ont été conçus, à savoir l'allocation dynamique.
          Il se trouve que dans l'embarqué, on n'aime pas trop les allocations dynamiques de mémoire puisque le temps d'allocation n'est pas déterministe et le risque d'allocation par manque de RAM qui échoue existe (ce qui pourrait planter le programme).

          Conclusion

          C'est un résumé beaucoup trop rapide à mon goût mais :
          1. il est beaucoup trop tard
          2. le langage est très complet avec des concepts réellement orthogonaux (il n'y a que peu d’ambiguïtés voire pas du tout) et il est difficile de tout aborder dans un seul commentaire
          3. le langage est complexe (mais comme dirait certains auteurs sur le sujet : c'est un langage complexe pour un monde complexe)

          Ce qu'il faut vraiment savoir, c'est que faire compiler un programme Ada est, au début, une vraie gageure tellement le compilateur peut apparaître fasciste mais rien n'est implicite.
          Contrairement au C, on estime que le programmeur fait des erreurs et que le compilateur n'en fait pas (au moins dans ce qu'il sait faire).
          Au début, on se dit que c'est vraiment trop compliqué, trop verbeux et qu'on se bat contre le compilateur. Après un peu de temps, on utilise le compilateur pour ce qu'il est, un outil permettant de vérifier notre code et générer un binaire qui marche (ok, ça, c'est l'utopie) et la verbosité, c'est finalement un atout quand on doit relire son code six mois plus tard.

          Voilà, je pourrais en écrire des tonnes mais je ne peux que te conseille d'essayer, en t'appuyant sur le wikibook, le manuel de référence que tout compilateur doit suivre et les deux newsgroup, le français et l'anglais où l'on ne trouve que des gens sympathiques :)

          Je reste dans les parages pour les questions :D

          • [^] # Re: Ada et sécurité

            Posté par . Évalué à 3 (+3/-0).

            On aurait pu aussi parler de sa gestion des nombres en point flottant et en point fixe, idéal pour le calcul scientifique, de la notion de paquetage (parfait pour les encapsulations et les types abstraits de données), de sa gestion très sure des pointeurs et j'en oublie encore certainement.

            Pour la difficulté et la durée d'apprentissage, deux chiffres : le Kernighan et Ritchie fait 280 pages, le John Barnes ("Programming in Ada 2012", pub gratuite) en fait lui … 949 !

            • [^] # Re: Ada et sécurité

              Posté par (page perso) . Évalué à 3 (+2/-0).

              Pour la difficulté et la durée d'apprentissage, deux chiffres : le Kernighan et Ritchie fait 280 pages, le John Barnes ("Programming in Ada 2012", pub gratuite) en fait lui … 949 !

              Effectivement, j'ajouterai aussi que la norme pèse 951 pages à comparer avec les 1368 pages de la norme C++14… Comme quoi, tout est relatif.

          • [^] # Re: Ada et sécurité

            Posté par . Évalué à 1 (+0/-0).

            Merci beaucoup pour votre commentaire très complet !

            • [^] # Re: Ada et sécurité

              Posté par (page perso) . Évalué à 3 (+2/-0).

              Il pourrait l'être encore plus tellement j'ai laissé de côté certaines fonctionnalités pour me concentrer sur celles différenciant du C en termes de vérifications.

              Comme dit dans ce commentaire, j'aurais pu parler:
              - des différents types de nombres réels (point fixe, point flottant) qui bénéficient eux aussi des contraintes de types range mais aussi des contraintes de précision
              - des paquetages qui représente un niveau d'encapsulation que l'on peut rapprocher des namespaces C++
              - de la généricité (generics Java ou templates C++)
              - des pointeurs que l'on utilise au final assez peu comparé au C
              - de l'orientation objet
              - des contrats apprus avec le version 2012 de la norme

              Ce n'est pas un langage qui peut s'apprendre en peu de temps mais il y a tellement de choses que l'on peut très bien commencer à programmer sans tout connaître.

          • [^] # Re: Ada et sécurité

            Posté par . Évalué à 1 (+1/-0).

            Par rapport à OCaml, quels sont les points communs, les différences ou ses atouts?

            • [^] # Re: Ada et sécurité

              Posté par (page perso) . Évalué à 2 (+1/-0).

              Les différences :

              • Ada n'est pas autant multi-paradigme que peut l'être OCaml. On fait soit de l'impératif, soit de l'objet mais pas de fonctionnel
              • Ada ne fait pas d'inférence de types (et encore moins d'autoboxing si on veut comparer à Java
              • Ada est un langage normalisé par l'ISO sous la référence ISO/IEC 8652:2012(E) dont la norme est libre d'accès

              Les atouts :

              • Le langage contient déjà énormément de choses comme je l'ai déjà écrit plus haut
              • Il est multi-plateforme car la norme ne tient pas compte des différences d'architecture. Cependant comme c'est un langage natif compilé, il faut obligatoirement un compilateur pour la plateforme cible

              Pour les points communs, je ne peux pas dire, je ne connais pas OCaml.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.