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−2ma_force<20*Si.N# La force est inférieure à 20 Newtonma_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.mmma_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 :)
# Angle mort des langages de programmation
Posté par sobriquet . 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 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 :
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 :)