• # Angle mort des langages de programmation

    Posté par . En réponse au journal [Letlang] Faire la différence entre un nombre et une quantité. Évalué à 2.

    C'est une bonne idée ! Pour moi, la dimension des grandeurs manipulées est un gros angle mort de la plupart des langages de programmation. On peut distinguer 3 cas d'usage :
    * Le contrôle de dimension : lancer une erreur de compilation quand on ajoute une masse à un temps
    * Le contrôle d'unités : même si les dimensions sont cohérentes, ajouter des km/h à des m/s est le signe d'une erreur potentielle
    * La conversion automatique : passer de manière transparente de kg·m·s−2 à 10 Newton

    Certaines librairies gère une partie de ce travail, je pense en particulier à Pint en Python, mais c'est souvent syntaxiquement assez lourd. J'avais codé une preuve de concept qui permettait une syntaxe assez légère, et qui peut parser toutes les unités du Système International (SI). On peut écrire des choses telles que :

     ma_force = 10 * SI.kg.m.s(-2) # une force de 10 kg·m·s−2
     ma_force < 20 * Si.N # La force est inférieure à 20 Newton
     ma_force > 10 * Si.m # On compare une force à une distance, ça soulève une erreur

    Ma preuve de concept ne prend en charge que les unités du Système International, c'est un choix idéologique et d'économie de travail : j'ai tendance à penser que les librairies qui passent par une déclaration préalable des unités répondent à des problématiques essentiellement anglo-américaines. Mais on peut aussi s'adapter en écrivant :

     pied_romain = 296.3 * SI.mm
     ma_distance = 10 * pied_romain

    Je n'ai jamais osé publier cette librairie, entre autres par ce que je soupçonne que le surcoût à l'exécution n'est pas toujours négligeable. L'idéal serait de pouvoir faire ça dans un langage compilé, de manière à ce qu'il n'y ait quasiment plus de surcoût à l'exécution.

    Félicitation en tout cas, tu viens de capter toute mon attention pour ton projet :)