2016-06-07 18 views
5

Ho circa 1800 righe di codice GNU Smalltalk che vorrei inserire in Pharo. Ho iniziato a farlo class per classe, selettore per selettore, ma è molto dispendioso in termini di tempo e noioso.Importazione di un progetto GNU Smalltalk in Pharo?

Esiste un modo per importare un progetto in blocco? Potrei facilmente regolare il formato dei file sorgente GST con vi per essere più simile al Pharo in anticipo.

Un'altra cosa che ho considerato è la copia di un file di .mcz "starter", ottenendo un tatto per il formato del file source.st, quindi la creazione di un nuovo source.st con i file cat s e vi. Ma poi c'è il file snapshot.bin che sembra avere anche la sorgente, rendendo così un percorso difficile. Sembra che ci dovrebbe essere un modo più semplice. Ho cercato Google con frasi diverse ma non ho colpito nulla.

+0

Ottima domanda. Sto postando questo sulla lista per dargli più visibilità. –

risposta

7

Il formato in Monticello (.mcz) è eccessivo per la migrazione. Basta averlo in formato fileout (http://wiki.squeak.org/squeak/1105) e dopo averlo caricato in Pharo tramite filein, puoi creare un pacchetto Monticello usando la GUI se lo desideri.

Un modo veloce per vedere cosa FileOut formato coinvolge (principalmente solo mettendo nei posti giusti '!'):

  1. Caricare fino Pharo
  2. Aprire un browser
  3. destro del mouse su una classe e 'File out' dal menu
  4. si dovrebbe vedere un file chiamato [Classname] .st nella directory lanciato Pharo dal
+0

Sembra promettente. Ho preso uno dei miei moduli e rapidamente convertito in formato filein. Ho usato Pharo 5.0 Tools> File Browser per trovare il file file e selezionarlo. è apparso nella finestra di anteprima. Ho cliccato su "Filein" e ... non è successo nulla. Ho anche provato a fare clic con il pulsante destro del mouse sul nome del file, selezionando "File in intero file" o "Installa in un nuovo set di modifiche" e non è successo nulla. – lurker

+1

Il formato fileIn (o chunk) è un po 'complicato come per il! segni del segno. A volte hai bisogno di due di loro con uno spazio bianco tra luoghi insospettabili ... Dovresti controllarlo.attentamente E la soluzione finale dovrebbe essere il debug di ciò che accade quando fai "File in", troverai rapidamente l'ipotesi di strizzare se sei paziente abbastanza per andare in, e into. –

+0

@ CarlosE.Ferro OK, buon suggerimento. Potrei aver semplificato troppo il mio processo di conversione o aver perso qualche sottigliezza in esso. Posso controllarlo. – lurker

2

Supponi di avere due classi, LuckyClass1 una sottoclasse di Object e una sottoclasse LuckyClass2 di LuckyClass1. E diciamo che il tuo nome è LuckyName. E diciamo che vuoi inserire il tuo codice nel pacchetto Lucky-Package1.

Object subclass: #LuckyClass1 
LuckyClass1 subclass: #LuckyClass2 

Classe LuckyClass1 con un metodo lato un'istanza luckyInstanceSideMethod1, un metodo laterale classe luckyClassSideMethod1 e lato istanza variabile luckyInstanceSideVariable1 e laterale classe variabile LuckyClassSideVariable1.

Analogamente classe LuckyClass2 con un metodo lato un'istanza luckyInstanceSideMethod1, un metodo laterale classe luckyClassSideMethod1 ed un lato ulteriore esempio variabile lato luckyInstanceSideVariable2 e categoria variabile LuckyClassSideVariable2.

riferimenti metodo sarebbe simile a questa

LuckyClass1>>#luckyInstanceSideMethod1 
LuckyClass1 class>>#luckyClassSideMethod1 
LuckyClass2>>#luckyInstanceSideMethod1 
LuckyClass2 class>>#luckyClassSideMethod1 

Su Linux/Mac OS X, fare

vi Lucky-Package1-unix.st

di mettere in un file chiamato Lucky-Package1-unix.st qualcosa come

Object subclass: #LuckyClass1 
    instanceVariableNames: 'luckyInstanceSideVariable1' 
    classVariableNames: 'LuckyClassSideVariable1' 
    poolDictionaries: '' 
    category: 'Lucky-Package1'! 

!LuckyClass1 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:05'! 
luckyInstanceSideMethod1 
    ^luckyInstanceSideVariable1 := 'lucky instance side' 
! ! 

!LuckyClass1 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:06'! 
luckyClassSideMethod1 
    ^LuckyClassSideVariable1 := 'lucky class side' 
! ! 

LuckyClass1 subclass: #LuckyClass2 
    instanceVariableNames: 'luckyInstanceSideVariable2' 
    classVariableNames: 'LuckyClassSideVariable2' 
    poolDictionaries: '' 
    category: 'Lucky-Package1'! 

!LuckyClass2 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:15'! 
luckyInstanceSideMethod1 
    ^super luckyInstanceSideMethod1, ' subclass' 
! ! 

!LuckyClass2 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:17'! 
luckyClassSideMethod1 
    ^super luckyClassSideMethod1, ' subclass' 
! ! 

In effetti, ca n cut & incolla il blocco precedente.

Quindi convertire i ritorni di riga in ritorni a capo oppure Pharo si lamenterà. Questo è importante. Se siete su Linux/Mac OS X è possibile utilizzare il seguente

cat Lucky-Package1-unix.st | tr \\n \\r > Lucky-Package1-pharo.st 

Su Windows Vorrei ancora usare bash, VI, gatto, TR da git-scm https://git-scm.com/download/win

Poi depositare in Lucky-Package1-pharo.st. Dovrebbe apparire nel pacchetto Lucky-Package1 in System Browser.

+0

Vedere il mio commento per l'altra risposta. Ho creato un file in un file formattato, ma Pharo non ha fatto nulla quando ho provato a importarlo. – lurker

+0

Siamo spiacenti. Non posso aiutarti se non sei disposto a provare la mia soluzione. In bocca al lupo. –

+0

Non c'è bisogno di essere snarky. Non ho detto che non ero disposto a provare il tuo suggerimento, vero? Ho intenzione di esaminare prima quello che ho provato, e se fallisce, prova il tuo esempio semplificato come base. Potrei invertire l'ordine di quelli. Non lo so ancora. – lurker