• [^] # Re: Et en plus

    Posté par (site web personnel, Mastodon) . En réponse au lien Java is becoming more like Rust, and I am here for it!. Évalué à -6. Dernière modification le 17 mars 2024 à 21:12.

    Aucun programme dans un OS de ses 30 dernières années pourrait corrompre la mémoire comme ça

    Bien sûr que si. La seul chose c'est qu'effectivement l'OS limite le phénomène et généralement la corruption est limité au programme qui tourne et arrive très rarement aux autres programmes/drivers et exceptionnellement à l'OS.

    Non quelque soit le langage si l'OOM killer veut ta peau il l'aura

    Bien sûr que Rust consomme de la mémoire, mais en quantité plus limité surtout il évite en grande majorité ce que l'on appel la fuite mémoire. La fuite mémoire c'est quand tu alloue de la mémoire en boucle sans jamais la libéré. Or en Java comme tu sais que tu ne peux pas "oublier" de libérer la mémoire gâce au garbage collector, naturellement, tu fais moins attention. En Rust, cette fuite est possible mais bien moins courante car il le programme doit prévoir de libérer sa mémoire par conception. Mais évidemment si tu fait un appel récursif infini (Ou trop important..) par exemple, fatalement, dans un cas comme dans l'autre tu crash.
    PS : l'OOM killer, est une "option" sous Linux (par défaut sur la plupart des distribs) mais pas toujours présente. Il est une sécurité pour éviter de crasher l'OS faute de mémoire.

    Null-pointer-exception

    Oui bien sûr qu'un accès null-pointer en C est bien plus grave en C qu'en Java, reste que c'est un plantage dû à la mémoire indésirable quelques soit le programme.
    En Java en gros on quitte "Proprement", sans corrompre la mémoire contrairement à C. Mais en Rust, on a une exception que l'on est censé traité. Evidemment si on la traite pas on est comme en Java. Mais la différence n'est pas négligeable.

    J'ai aucune idée de ce que signifie s'arrêter proprement particulièrement quand on ne gère pas.

    C'est simple, quand un programme crash il fait n'importe quoi autrement dis il peut faire du dégât comme en C ou il peut aller ailleurs dans la mémoire et écraser tout et n'importe quoi. Mais pire, il peut ne pas planter, et continuer avec des donner qu'il a totalement pourri. Souvent d'ailleurs le crash réel intervient longtemps après.
    En Rust et en Java on a une exception. La mémoire n'est pas corrompu et si on gère "l'exception" on peut utiliser les données car elles restent bonnes (Elles n'ont pas été altérées par le programme).
    Evidemment, en Rust comme en Java, tu peux par bug, faire entrer le programme dans un comportement impossible et corrompu malgré tout (Par exemple mettre 400° dans un angle censé être entre 0 et 360). Ada est le langage ultime pour ça mais il est encore bien moins productif...

    Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.