giovedì 2 febbraio 2012

Perché ogni sviluppatore Rubino dovrebbe imparare Smalltalk

Non importa che tipo di programmazione che si sta facendo in questi giorni probabilmente sentito parlare molto di Smalltalk. E c'è una ragione per questo. La sua influenza su ciò che stiamo facendo e usando in questo momento è difficile da sopravvalutare. Refactoring, XP, TDD, molte tecnologie VM è venuto dalla comunità Smalltalk.
Mentre i programmatori tendiamo a diventare entusiasti nuove cose luccicanti e non apprezzare la storia del nostro mestiere.Node.js sta facendo un sacco di buzz. Facciamo tutti imparare nodo e parlerà solo su di esso! Come risultato stiamo risolvendo gli stessi problemi in continuazione e spesso non scegliere i migliori strumenti per il lavoro. A mio parere, abbiamo tutti bisogno di imparare alcune tecnologie storicamente importanti come Smalltalk o Lisp.

Ciò che è interessante Smalltalk

1. Smalltalk sintassi

1.in Smalltalk:
2.servizio: = WeatherForecastService forLocation: 'Toronto' .
3.previsione: = forecastForDays servizio: Formato: 'xml' .
4. 
5.in Ruby:
6.service = WeatherForecastService.forLoctaion 'Toronto'
7.previsione server.forecastForDaysInFormat = ( "xml" )
E 'molto più vicino a quella inglese, per esempio, Ruby. Anche se è un po 'insolito per le persone che usavano punto come l'invio di un messaggio-operatore alla versione Smalltalk di questo frammento, a mio avviso, è più leggibile.
Un'altra caratteristica sintassi mi piace molto in Smalltalk sta avendo letterali blocco. Se è necessario passare più blocchi a un metodo in Ruby sembra sempre goffo e probabilmente è per questo che non è un idioma comune:

1.service.forecastFor -> {puts "Do roba" } -> {puts "la gestione degli errori" }
Lo stesso codice sarà migliore in Smalltalk:

1.servizio forecastFor: [Trascrizione spettacolo: 'Do roba' ] errore: [mostra Trascrizione: 'Errore!' ].
Questa caratteristica porta ad una grande varietà di modelli interessanti programmatori Smalltalk uso molto e programmatori Rubino non.
2. Linguaggio minimalista
Smalltalk ha concetti molto pochi. Per esempio, non c'è sintassi speciale per cicli o condizionali.

1.) ifTrue: [Trascrizione spettacolo: 'True' ] Se sono false: [mostra Trascrizione: 'False' ]

Ecco come si fa condizionali in Smalltalk. E 'solo il ifTrue: Se sono false messaggio inviato a un valore booleano. Perché è fresco? Perché rende il linguaggio più flessibile. Le persone si lamentano spesso che in Ruby 0 e una lista vuota sono truthy.

1.se []
2.mette 'vera'
3.altra cosa
4.mette 'false'
5.fine
Il frammento di codice stamperà 'vero' e non si può fare nulla per cambiarlo in Ruby. Ma si può facilmente modificare questo comportamento per Smalltlak. Se si desidera inviare il ifTrue: Se sono false messaggio al tuo OrderedCollection e trattare un insieme vuoto come 'false' basta definire ifTrue: metodo Se sono false. Poiché non vi è alcuna sintassi speciale per cicli e conditionas solo la definizione di un metodo risolve il problema. E non c'è bisogno di utilizzare alcun magico "ganci" la VM conosce.
Non fraintendetemi. Non sto dicendo che il linguaggio Ruby è peggio di Smalltalk. E 'un approccio molto diverso.Sintassi di Ruby è molto ricco. Ha tonnellate di costruzioni speciali per risolvere problemi particolari, che spesso porta ad un codice molto elegante. Smalltalk, d'altra parte, offre alcuni costrutti di base che scala molto bene.
3. E 'ripreso a base
Ma la sintassi non è la caratteristica più notevole di Smalltalk. Ciò che differenzia davvero da altre lingue è che è più di un semplice linguaggio.
Smalltalk = VM + Lingua Smalltalk Programma = VM
Quando si inizia a scrivere una nuova applicazione in Smalltalk non aprire Emacs o RubyMine si avvia una macchina virtuale. E la VM offre tutti gli strumenti come un browser classe o un debugger a scrivere il codice. Utilizzando questi strumenti si apportano modifiche alla VM, è così che si scrivono applicazioni in Smalltalk. Fondamentalmente, ogni applicazione Ruby può essere visto come codice sorgente e come applicazione in esecuzione. Il codice sorgente è solo testo e l'applicazione in esecuzione è un gruppo di oggetti che interagiscono tra loro. In Smalltalk non c'è separazione. È possibile visualizzare il codice sorgente dell'applicazione durante l'esecuzione dell'applicazione. Piattaforme che non hanno questa separazione sono chiamate basato su immagini. Ogni volta che si chiude il VM una nuova versione di un immagine verrà salvata su disco. La prossima volta che si esegue si partirà esattamente nello stesso stato si era lasciato l'ultima volta. Quando la tua applicazione è pronta Smalltalk in grado di generare un'immagine di produzione estraendo solo alcune parti del codice VM dipendono. Così l'immagine si distribuisce alla produzione non conterrà elementi IDE in esso.
4. Strumenti impressionante
Il fatto che Smalltalk sa di se stessa rende il processo di sviluppo di strumenti più facile. Ancora oggi, dopo 40 anni dalla prima versione di Smalltalk suoi strumenti in grado di stupire. Anche se la lingua è refactoring estremamente dinamico funziona davvero. Il debugging è anche sorprendente. Se si tenta di inviare un messaggio che Smalltalk non capisce che vi chiederà se si tratta di un errore di battitura e suggerire alcuni messaggi che molto probabilmente ha cercato di inviare. Se la vostra applicazione solleva un'eccezione verrà visualizzato una finestra di dialogo con un backtrace. È possibile fare clic su ogni livello dello stack ed ispezionare tutti gli oggetti. Non è fantastico?
5. ... E molto altro ancora
Ci sono un sacco di cose veramente impressionante in Smalltalk non ho menzionato in questo post che si dovrebbe verificare: negozi di oggetti distribuiti, continuazioni, ecc

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.