• [^] # Re: Utilisateur trop bête

    Posté par (site web personnel, Mastodon) . En réponse au journal Compilateur trop intelligent. Évalué à 10. Dernière modification le 01 novembre 2017 à 18:56.

    Non la décision n’est pas rationnelle, la fonction Do n’est pas définie, elle est seulement déclarée. Si le compilateur ne sait pas voir ça, l’utilisateur devrait au moins s’attendre à une erreur d’exécution. Le fait que la fonction en exemple efface le disque n’est qu’une aspect contingent du problème. Puisqu’il fallait montrer qu’on pouvait exécuter du code a priori mort, l’utilisateur a choisi cet exemple mais aurait pu choisir d’imprimer "hello world" et l’exemple aurait été aussi efficace mais moins effrayant.

    J’imagine que ce type de comportement peut être employé pour rebrancher l’exécution de manière discrète vers d’autres parties du code dans le but d’introduire des fonctionnalité cachées ou d’en faire ignorer d’autres. Ce n’est pas le compilateur qui a écrit cette fonction mais c’est le compilateur qui fait en sorte qu’on puisse exécuter du code mort. Peu importe ce code mort, c’est un exemple.

    Le compilateur ne fait que ce qu'on lui dit de faire et il exploite notamment tous les comportements indéfinis.

    Si c’est indéfini il n’y a rien à exploiter. Le code est inaccessible.

    On pourrait imaginer qu’une fonction définie ait pour adresse nullptr tant qu’elle n’est pas déclarée, ce qui permettrait de tuer le programme à l’exécution au moment où nullptr serait appelé comme une fonction.

    ce commentaire est sous licence cc by 4 et précédentes