Ich arbeite daran, eine schrittweise getippte Sprache als ein persönliches Projekt zu entwerfen, und ich stehe bei einer bestimmten Designentscheidung bezüglich Unveränderlichkeit fest.Unveränderlichkeit: Eigenschaft von Variable, Wert oder API?
Wenn ich darüber auf eine agnostische (und wahrscheinlich grobe) Art spreche, sage ich, dass es zwei Dinge gibt, die unveränderlich oder konstant sein können: die variable Bindung und der Wert selbst.
Die variable Bindung, die konstant ist, ist wie const
in Javascript oder final
in Java, wo die Variable nicht neu zugewiesen werden kann. Der Wert selbst ist unveränderlich wie const
in C++ oder Object.freeze()
in Javascript.
Die Frage, die ich habe, ist im Falle von unveränderlichen Werten (keine Bindungen), was sollte Unveränderlichkeit eine Eigenschaft sein?
Der Wert/Objekt selbst in Javascript Object.freeze
?
var point = {x: 10};
var frozenPoint = Object.freeze(point);
oder Teil des Typs wie in C++?
const Point p(10);
oder als Variable, wie in Rust-Bindung?
let p = Point { x: 10 };
// vs let mut p = Point { x: 10 };
oder als Teil der API einer Bibliothek? Facebook Immutable.js, Googles Guava-Bibliothek für Java (ImmutableList
Klasse) usw.
Ich verstehe, dass es wahrscheinlich keine „richtige“ Antwort auf diese, so, was ich wirklich bin auf der Suche nach ist ein Vergleich der Philosophien und Motivationen für diese Ansätze.
Ich verstehe diesen Standpunkt, aber ich kann nicht zustimmen, dass es die "richtige Antwort" ist. Sicherlich ist es eine subjektive Meinung, dass reine Unveränderlichkeit der "beste" Weg ist, Dinge zu tun. Die Zielgruppe, die ich mir vorstelle, würde wahrscheinlich eine Möglichkeit bevorzugen, die Veränderlichkeit zu kontrollieren, und daher suche ich nach einer Möglichkeit, diese Kontrolle elegant und "richtig" zu steuern. –
Moderne rein funktionale Sprachen geben Mutationen, und auch sehr elegante und fehlerfreie Möglichkeiten, sie zu kontrollieren. Es wird nur auf einer höheren Ebene als die Semantik der Kernsprache durchgeführt. Deshalb ist das Sprichwort "Haskell ist die beste Imperativsprache." – libeako
Ich verstehe das Argument des Publikums, aber ich stimme damit nicht überein. Anstatt dem imperativen Publikum eine weitere Sprache zu geben, sollten sie ermutigt werden, zu einer rein funktionalen Programmierung überzugehen. – libeako