• # Qu'est-ce qu'une abstraction ?

    Posté par . En réponse au journal Écrire un jeu en Rust presque de zéro. Évalué à 8.

    En vérité, le Rust c'est compliqué, car la programmation c'est compliqué. Contrairement à la plupart des langages, le Rust n'est pas une abstraction. Le compilateur ne prendra aucune décision pour toi et n'essayera jamais de deviner ce que tu as voulu exprimer. Le Rust te fournit un ensemble d'outils, et c'est à toi de les comprendre et de les utiliser correctement. Et ces outils ne sont pas des abstractions, c'est directement l'API du concept sous-jacent, sans aucun opinion de la part du designer.

    J'ai l'impression qu'il y a un quiproquo autours de la notion d'abstraction (peu différente de la notion de "concept sous jacent", la seule chose concrète dans la programmation c'est des électrons dans du silicium, tout le reste n'est qu'abstraction.

    Tous les langages ne sont qu'abstraction, jusqu'à l'assembleur qui propose une abstraction de ce qu'est une instruction machine, quelques types, etc. C'est normal que les langages de programmation ne soient qu'abstractions : c'est leur raison d'exister, personne n'a envie de programmer la machine directement.

    Rust est un langage qui manipule des abstractions de très haut niveau, des fonctions, des pointeurs, avec une notion complexe de "propriété", des "traits", de l'ordre supérieur, etc.
    Le passage de la moindre instruction rust au code machine généré par le compilateur est vertigineux (ou pas généré d'ailleurs, si le système de type se met en travers, une certaine abstraction de ce qu'est un programme "raisonnable").

    Quel niveau d'abstraction est le bon ? Trop bas il ne sert à rien, trop haut il devient restrictif...