2017-02-04 1 views
0

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.

Répondre

1

Il y a une réponse correcte, mais elle est très différente de ce que vous attendez.

Le mieux est de ne pas avoir de mutabilité du tout. En d'autres termes: le langage devrait être purement fonctionnel. Il n'y a aucune raison d'avoir des mutabilités dans une langue avec la collecte des ordures. Haskell en est une preuve.

+0

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". –

+0

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

+0

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