• [^] # Re: a contre courant

    Posté par (site web personnel) . En réponse à la dépêche Site de HurdFR de nouveau disponible. Évalué à 5.

    Salut à tous,

    Attention à la confusion habituelle entre sémantique de haut niveau, et programmation de bas niveau.
    Il n'y a pas de contradiction, ce n'est tout simplement pas la même chose.

    Illustration du niveau sémantique du langage. Je veux décaler des éléments d'un tableau a :

    en Ada :
    a (5..7) := a (10..12);

    Je fait une affectation avec une syntaxe de haut niveau. Mon intention est clairement exprimée par le code, le compilateur vérifie à la compilation que j'affecte bien une tranche de tableau dans une autre de même taille, et que tout tombe bien dans le tableau, sans débordement.

    en C :
    memcpy(a+5, a+10, 3*sizeof(*a))

    Je ne manipule plus un tableau, mais de la mémoire : le niveau sémantique est plus bas. Accessoirement, cela réduit les possibilités d'optimisation du compilateur. Mais surtout, c'est illisible, et pour les contrôles, tiens, fumes!

    Si je dois écrire la gestion de la mémoire d'un OS, on voit tout de suite avec lequel des deux langages le code sera le plus limpide.
    Ceci montre qu'une sémantique de haut niveau est parfaitement indiquée pour faire de la programmation de bas niveau.

    Maintenant, parlons de la programmation de bas niveau. Ada est un langage de haut niveaux, et pourtant c'est aussi l'outils idéal pour faire un OS portable :
    - maitrise totale et portable de la représentation des données en mémoire, contrôle au bit prêt du mapping, contrôle de l'alignement, contrôle de l'adresse, contrôle de la volatilité, contrôle de l'atomicité de l'accès, etc.
    - contrôle de l'allocation mémoire. Possibilité, par exemple, d'avoir des allocateurs dans différents pool mémoire avec des algos différents.
    - contrôle des accès concurrents par les puissants "objets protégés" (pas besoin de manipuler des sémaphore au risque d'oublier d'en libérer un)
    - utilisation des interruptions intégrée dans le langage
    - tasking d'une puissance inégalée ailleurs. Ada est le seul langage à ma connaissance qui te permet d'écrire complètement un ordonnanceur sans appel à une API extérieure type POSIX, même avec des algos complexe genre EDF/LLF, etc.
    - possibilité de faire vérifier par le compilateur des dizaines de restrictions possible (pour des besoins de certification), comme par exemple l'interdiction des allocations dynamiques.
    - possibilité d'insérer de l'assembleur
    etc. etc.

    Et pour finir, un OS est un gros logiciel : c'est exactement ce pourquoi Ada a été conçu. Tu profites donc de tous les "ité" : lisibil, maintenabil, portabil, modular, fiabil, etc :-)
    Par exemple, pour reprendre un point de Manuel, je n'ai jamais vu un projet Ada banir les templates. Ils sont utilisables en toute tranquilité.
    Et pour reprendre un de tes points, la gestion des pointeurs en Ada est un modèle, ils sont utilisable avec une sécurité rare. Pour créer une "dangling référence" en Ada, il faut vraiment le faire exprès.

    Tout ca pour dire qu'il y a au moins un langage de haut niveau doué pour la programmation de bas niveau.