Oggetti immutabili [chiuso]

6

Esaminare domande come queste

mi sembra che la gente chieda "perché non è immutabile?" e ho pensato di fare un altro tipo di domanda.

Diciamo che gli oggetti immutabili sono (soprattutto) buoni - anche se non sei d'accordo, umorami per un secondo.

A partire da ora, sembrano esserci più di 6k progetti Java su freecode.com . Probabilmente c'è un sacco di etichette errate, ma anche molte altre che non sono elencate. Quindi diciamo che ce ne sono almeno un migliaio. E possiamo contare con sicurezza su altri, come C #, che sono ugualmente rilevanti.

Quindi hai qualche esempio di grandi progetti relativamente di successo che usano l'immutabilità a un livello ragionevole? Voglio dire, tutti possono scrivere dei piccoli esempi che mostrano quanto tutto sia buono quando è immutabile, ma se ci sono 10k + LOC, allora è una storia diversa.

Riesco a capire i vecchi progetti - OK, carico storico, sarebbe una grande impresa da riscrivere, per es. Firefox per essere per lo più immutabile. Posso capire cose specializzate, ad es. Collezioni Guava, progettate in modo simile da zero. Ci sono esempi di applicazioni reali, preferibilmente nuove, che sono così? Quanto è "mutabile Java" migliore / peggiore rispetto a "Java immutabile" e in quali aspetti - ma dal punto di vista pratico ?

    
posta levant pied 14.10.2014 - 23:44
fonte

3 risposte

10

Stai chiedendo esempi dal linguaggio di programmazione sbagliato. Java è uno dei linguaggi più ostili per l'immutabilità, sia da una cultura di sviluppo che da una prospettiva di una lingua. Per lavorare con oggetti immutabili su larga scala senza impazzire, sono necessarie funzionalità linguistiche in stile funzionale, che Java non ha nemmeno iniziato a prendere in considerazione fino a Java 8, e anche in questo caso sono ancora abbastanza limitate. Ecco perché in Java vedi principalmente l'immutabilità in Strings e altri oggetti di trasferimento dati relativamente piccoli.

Le lingue in cui si trovano grandi progetti con immutabilità onnipresente includono, ma non si limitano a Scala, utilizzate su LinkedIn, Twitter e FourSquare ed Erlang, utilizzate su Amazon, Facebook ed Ericsson. La ragione per cui questi sono gli esempi più importanti è che l'immutabilità diventa praticamente un requisito quando si ha a che fare con la massiccia parallelizzazione e il calcolo distribuito.

In altre parole, contrariamente alle tue ipotesi, sono le strutture di dati mutabili che diventano più problematiche man mano che aumenti. Non fraintendetemi, l'immutabilità è un limite difficile per i programmatori a cui ci si abitua in un primo momento, soprattutto rendendolo efficiente, ma una volta che questi problemi sono risolti in piccoli programmi, non peggiorano di per sé in programmi più grandi. Questo perché strutture di dati immutabili tendono a generare algoritmi che sono molto più facili da disaccoppiare.

    
risposta data 15.10.2014 - 06:38
fonte
6

Mi stai chiedendo di Java, ma nella tua domanda menzioni anche C #, quindi risponderò con un progetto significativo in quella lingua: Project Roslyn, riscrittura da zero di Microsoft dei compilatori C # e VB.NET in C # e VB .NET utilizza sempre strutture dati immutabili. In particolare, tutti gli alberi di analisi e semantici sono immutabili e ogni operazione e trasformazione di quell'albero, sia che si tratti di ottimizzazioni fatte dal compilatore, annotazioni fatte da alcuni strumenti di analisi statica, refactoring o correzioni di codice fatte dall'IDE, macro fatte da qualche plugin utente o qualsiasi altra cosa produce sempre un albero completamente nuovo.

Quindi, questo è un progetto commerciale, ampio, resistente al settore, sensibile alle prestazioni (AFAIK, il compilatore di Roslyn C # è attualmente all'interno di una piccola percentuale del vecchio compilatore C # scritto in C ++) e molto probabilmente sarà a il fulcro non solo della prossima versione di .NET, ma anche della prossima versione di Visual Studio.

Oh, ed è anche completamente Open Source sotto Apache Software License 2.0, quindi puoi vedere come lo hanno fatto: link

    
risposta data 15.10.2014 - 10:32
fonte
0

Senza limitare l'ambito a Java, direi che Cocoa è uno dei grandi progetti là fuori. È utilizzato dalle applicazioni iOS e OS X e scommetto che molti dei programmatori potrebbero incappare su come NSString (la classe di base della stringa) è immutabile e imparare a usare NSMutableString. Lo stesso con le strutture dati (NSArray, NSDictionary, ecc.)

Direi anche che molti li usano (classi immutabili) solo perché imparano a cacao senza capire perché l'immutabilità sia buona.

    
risposta data 15.10.2014 - 04:11
fonte

Leggi altre domande sui tag