Come hanno fatto le persone a scrivere software per utenti finali in Smalltalk?

7

C'è qualcosa che non ho mai capito su Smalltalk, dal momento che ne ho letto in un libro quando ero un bambino, anche se non l'ho mai usato "nella rabbia". So che si tratta di tartarughe-tutto-giù, che puoi entrare nel programma in qualsiasi momento, ispezionare lo stato dei tuoi oggetti, persino cambiare il codice e riprendere a correre. Questo è ovviamente un sogno che diventa realtà per un ricercatore, sia in CS o nell'industria, un ingegnere che simula un sistema, un analista che modella un mercato e così via. So anche che non c'era alcun concetto di scrivere il sorgente nei file di testo e compilarli in un binario, l'editor e il runtime sono la stessa cosa. Ma come consegnare il software a un utente finale che non conoscerebbe un debugger se li mordesse sul naso e non potrebbe importare di meno di cosa sia un oggetto? C'è stata una sequenza di tasti segreta per disattivare tutte queste funzioni e far sì che si comportasse come un software "normale"? Oppure il software Smalltalk veniva venduto solo a utenti sofisticati che erano anche programmatori?

    
posta Gaius 14.01.2015 - 23:18
fonte

3 risposte

15

Or was Smalltalk software only ever sold to sophisticated users who were programmers too?

No. È il contrario: Smalltalk è stato progettato in modo che ogni utente possa essere un programmatore, senza che che richiede sia sofisticato. In effetti, Smalltalk è stato progettato per bambini .

L'idea di base è che un utente legga un manuale sulla lunghezza di un libro di testo universitario di livello medio per poter utilizzare macchinari sofisticati. Dimmi, sei un falegname e comprati una macchina CNC, non ti aspetteresti di poterlo usare subito, ma non ti aspetteresti nemmeno di aver bisogno di anni per imparare a usarlo. Probabilmente ti aspetteresti di leggere da 10000 a 100000 righe di manuali e di imparare un paio di giorni per un paio di settimane.

Per un sistema software, il manuale definitivo è il codice sorgente. Quindi, per essere utilizzabile, il sistema software non dovrebbe contenere più di 100000 righe di codice, in modo che l'utente possa leggerle tutte. (E dovrebbe essere scritto in un modo e in un linguaggio del genere che lei possa capirlo.) Questo è l'obiettivo di Smalltalk: il sistema originale Smalltalk era di circa 60000 righe di codice per tutto , il "SO ", i driver hardware, la VM, il compilatore, l'interprete, l'IDE, il debugger, l'editor, una suite per ufficio, un sistema di gestione documentale distribuito, ecc. Negli anni '70 era il meglio che potevano fare oggi 40 anni dopo, abbiamo a disposizione linguaggi molto migliori, e il sistema di sostituzione e le lingue in cui al momento sta lavorando il team di Alan Kay, dovrebbero avere meno di 20000 linee per lo stesso set di funzionalità. (Confrontalo ad esempio con Windows, che ha 50 milioni linee.)

Questa era l'idea. Quanto bene ha funzionato quell'idea, beh ... giudica tu stesso: -)

I moderni Smalltalks cercano di fare una distinzione tra sviluppo e distribuzione. Fondamentalmente, si definisce un oggetto radice dell'applicazione, il sistema traccia le connessioni tra tutti gli oggetti nel sistema e copia solo quegli oggetti che sono collegati direttamente o indirettamente all'oggetto dell'applicazione radice, lasciandovi un'immagine semplificata che contiene solo l'applicazione e le librerie e i framework necessari.

In genere non modifichi direttamente il sistema in esecuzione, ma usa un qualche tipo di sistema di controllo della versione (ad esempio Monticello) che memorizza le tue modifiche come una serie di modifiche semantiche al sistema e quindi può essere riprodotto su un sistema diverso. C'è anche una ricerca sui sistemi di moduli e sui sistemi di gestione dei pacchetti, e la maggior parte dei Smalltalks moderni ha almeno uno dei due.

Quindi, il modo in cui i sistemi Smalltalk sono implementati oggi è che c'è una minima immagine "pulita", e si applicano i changeset CVS o si installano pacchetti o moduli di collegamento sopra a quello, che produce un immagine che è specializzata solo per quella applicazione. Se si vuole fare sviluppo, si inizia con un'immagine di sviluppo che include l'editor, il compilatore, l'IDE, ecc. E si applicano le stesse modifiche.

I linguaggi successivi a Smalltalk (ad es. Self, Newspeak) spesso includevano un formato di serializzazione testuale per il codice (Smalltalk stesso non ha sintassi per classi o metodi, perché sono creati a livello di programmazione dall'IDE (ad esempio la creazione di una classe è in realtà solo chiamando il metodo subclass su qualche classe che restituirà una classe che è una sottoclasse della classe su cui è stato chiamato il metodo), ha solo sintassi per espressioni e istruzioni.), che potrebbe essere usata per "file in" classi e metodi nel sistema, e le moderne Smalltalks hanno anche questa capacità.

    
risposta data 14.01.2015 - 23:53
fonte
3

Un punto che Jörg non ha menzionato nella sua risposta: dopo il passaggio "distribuzione" è davvero difficile dire che un'applicazione è stata scritta in Smalltalk, perché l'IDE è stato rimosso o nascosto. Ad esempio, prova questi:

link

link

Inoltre, osservando la gamma di applicazioni realizzate con Smalltalk, puoi dire che oggigiorno i loro utenti non sono certo programmatori: link

Che ogni utente dovrebbe essere in grado di modificare il proprio software è un'idea Smalltalk che non è ancora arrivata al mainstream (mentre molte altre sue idee sono al giorno d'oggi comuni come GUI o Object-Orientation).

    
risposta data 16.01.2015 - 12:41
fonte
2

Nel classico Smalltalk-80, c'era un SystemTracer che noi di Tektronix usavamo per "spogliare" un'immagine per la distribuzione.

Fondamentalmente, ha eseguito un attraversamento completo del sistema da un singolo punto specificato, escludendo il SystemDictionary globale e il suo contenuto.

In questo modo, potresti eseguire SystemTracer sulla tua applicazione (tipicamente, una sottoclasse di Contoller), e trascinerebbe tutto il resto con esso, ma non cose come Context o altre classi e oggetti distinti che non erano coinvolti nell'operazione di la tua applicazione.

    
risposta data 27.12.2018 - 07:55
fonte

Leggi altre domande sui tag