• [^] # Re: Ouaiche

    Posté par . En réponse au lien "Rust vs. Go: Why They’re Better Together". Évalué à 3.

    Ce qui est indécidable c'est de savoir si le cas où le dénominateur est égal à zéro peut se produire ou pas. C'est à cet énoncé que le théorème de Rice s'applique. Ça veut dire qu'en général des checks au runtime devront être ajoutés pour donner une sémantique particulière dans le cas d'un dénominateur nul. Ça peut être fait soit par le compilateur (comme dans Javascript), soit manuellement du fait de contraintes syntaxiques spéciales (ce que tu proposes). La deuxième méthode n'est utilisée dans aucun langage généraliste de base ; la première parfois dans les compilateurs qui n'ont pas de focalisation sur les performances. Dans les deux cas, le problème est le même : aucune garantie que le programme n'a pas de bug et que la branche zéro ne sera pas prise ; au mieux, on peut limiter les dégâts.

    Ce qu'on trouve au mieux en pratique, c'est des outils qui font des analyses statiques pour vérifier qu'un code respecte des pratiques particulières (c'est-à-dire utilise un sous-ensemble du langage et pas le langage en général), et lorsque c'est le cas, elles peuvent nous assurent l'absence de division par zéro. C'est le genre d'approche qu'on retrouve dans certains codes critiques.