Je travaille sur la conception d'une langue progressivement typée comme un projet personnel et je suis bloqué à une décision de conception particulière concernant l'immuabilité. En parlant de cela dans un langage agnostique (et probablement grossier), je dis qu'il y a deux choses qui pourraient être immuables ou constantes: la liaison de variable et la valeur elle-même.Immuabilité: propriété de variable, valeur ou API?
La liaison de variable étant constante est comme const
en Javascript ou final
en Java, où la variable ne peut pas être réaffectée. La valeur elle-même étant immuable est comme const
en C++ ou Object.freeze()
en Javascript. La question que je pose est la suivante: dans le cas de valeurs immuables (pas de liaisons), à quoi devrait appartenir l'immuabilité? La valeur/objet lui-même dans Object.freeze
de Javascript?
var point = {x: 10};
var frozenPoint = Object.freeze(point);
ou une partie du type comme en C++?
const Point p(10);
ou comme variable de liaison comme dans Rust?
let p = Point { x: 10 };
// vs let mut p = Point { x: 10 };
ou dans le cadre de l'API d'une bibliothèque? Je comprends qu'il n'y a probablement pas de réponse "correcte" pour cela, donc ce que je cherche vraiment, c'est une comparaison des philosophies et des motivations. pour ces approches.
Je comprends ce point de vue, mais je ne peux pas être d'accord que c'est la "bonne réponse". Sûrement, c'est une opinion subjective que l'immuabilité pure est la «meilleure» façon de faire les choses. Le public cible que j'imagine préfèrerait probablement un moyen de contrôler la mutabilité et donc je cherche un moyen de fournir ce contrôle avec élégance et "correctement". –
Les langages purement fonctionnels modernes donnent la possibilité d'avoir des mutations, et aussi des moyens très élégants et sans bug pour les contrôler. C'est juste fait à un niveau plus élevé que la sémantique du langage de base. Par conséquent, le dicton «Haskell est le meilleur langage impératif». – libeako
Je comprends le raisonnement de l'auditoire, mais je ne suis pas d'accord avec cela. Au lieu de donner à l'auditoire impératif une autre langue, ils devraient être encouragés à passer à une programmation purement fonctionnelle. – libeako