2017-02-04 2 views
0

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.

Antwort

1

Es gibt eine richtige Antwort, aber es ist sehr anders als das, was Sie erwarten.

Das Beste ist, keine Mutabilität zu haben. Mit anderen Worten: Die Sprache sollte rein funktional sein. Es gibt keinen Grund, in einer Sprache mit Garbage Collection eine Änderbarkeit zu haben. Haskell ist ein Beweis dafür.

+0

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

+0

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

+0

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

Verwandte Themen