Come fare pragmatico alto livello / meta-programmazione?

6

Immagina di aver implementato la creazione di una bella forma stellare basata sul percorso in Lisp. Quindi scopri Elaborazione e riattivi l'intero codice, poiché Elaborazione / Java / Java2D è diverso. Quindi vuoi armeggiare con libcinder, quindi porta il tuo codice a C ++ / Cairo.

Stai scrivendo (ri) molto codice della piastra della caldaia, mentre il requisito reale "creare una forma a stella" (o "creare un percorso, moveto x y, lineto x y") non è cambiato.

Quali sono le opzioni per incapsulare i dettagli di implementazione? Una sorta di meta-programmazione pragmatica? Forse un sistema esperto? Come definiresti la tua logica aziendale principale come indipendente dalla lingua possibile?

EDIT: questo è stato un vero problema di business per alcune persone, se guardi Schlep o Stella . L'idea è che hai scritto la tua libreria principale, ad es. in Java e ora è necessario scrivere un'app per iOS. In che lingua scommetti futuro? Come puoi salvare il tuo investimento nella tua attuale base di codice?

    
posta LennyProgrammers 02.03.2011 - 18:21
fonte

6 risposte

4

L'unico modo per avere l'indipendenza della lingua sarebbe creare la tua lingua. Questo è ciò che Joel ha fatto con Wasabi . Avresti essenzialmente bisogno di un compilatore source-to-source.

    
risposta data 02.03.2011 - 18:28
fonte
3

Un approccio è Trasformazione del programma . Ciò include le tecniche che consentono la traduzione da sorgente a fonte. In teoria, scrivi il tuo programma in una lingua e poi lo trasformi in altre lingue di destinazione. In pratica, è un sacco di lavoro e un'area di alto interesse accademico. Strumenti di esempio:

Non voglio darti false speranze. Dovresti scrivere tu stesso le trasformazioni che sono un sacco di lavoro. Eppure, la gente mi stupisce ogni giorno. Forse avrai una visione che rende la trasformazione del programma molto più semplice per tutti. È una disciplina interessante che richiede partecipanti più interessanti.

    
risposta data 03.03.2011 - 06:28
fonte
1

In genere i progetti sono molto più complicati rispetto al tuo esempio, quindi la proporzione del codice della piastra della caldaia è minore. Tuttavia, la logica del core business non può essere completamente estratta dal codice. Ci sono alcune cose che puoi fare come spostare alcune regole in file di configurazione e database, ma ad un certo punto dovrai scrivere codice.

Non mi preoccuperei di rendere un linguaggio di sistema indipendente. Invece mi concentrerei su un'implementazione di qualità in qualunque lingua fosse stata selezionata per l'attività. Avere codice chiaro ben scritto con documentazione di supporto per il progetto è la tua migliore risorsa se devi trasferire l'applicazione in una nuova lingua.

Infine, la dimostrazione di concetti e prototipi dovrebbe essere costruita prima del tempo in modo che la scelta della lingua non cambi a metà del progetto.

    
risposta data 02.03.2011 - 19:14
fonte
0
  1. Per un tipo di "esplorazione di lingue diverse" di szenario: usa uno strumento di mappatura mentale come un miglioramento rispetto alle note scritte / dipinte a mano
  2. Per più struttura: UML
risposta data 02.03.2011 - 19:14
fonte
0

Il modo pragmatico IMO sarebbe avere un set di macro Lisp che emettesse la lingua di destinazione che volevi.

    
risposta data 02.03.2011 - 21:37
fonte
0

Avere quel problema con una libreria personalizzata.

Prova ad usare concetti globali, che si applicano a diversi linguaggi di programmazione, e crea documentazione per questo. Se esiste un concetto nel tuo linguaggio di programmazione originale, ma non nel secondo, trova un concetto alternativo.

Crea un design (UML) del tuo codice sorgente (originale e di prima programmazione), così com'è, senza rimuovere bug correnti, senza aggiungere enhacements , proprio come è il codice.

Per progettazione, intendo, documenta i tuoi spazi dei nomi, le classi, le funzioni globali, le variabili, ecc.

Quindi, crea una nuova versione del tuo progetto, copiando l'originale. Prova a migrare il tuo codice sorgente della prima lingua sul secondo codice sorgente del linguaggio di programmazione. (Esempio: C ++, Java)

Se devi apportare modifiche al nuovo codice sorgente come nuove classi o nuovi metodi, potrebbe essere necessario documentarlo e modificare il codice sorgente con il primo linguaggio di programmazione.

Il seguente esempio di mondo reale vale la pena di leggere, forse non applicarlo.

Esempio: Il mio primo codice sorgente di programmazione (Dephi) usa proprietà. Nel mio secondo codice sorgente di programmazione (C ++), le proprietà non esistono.

Ho documentato in un U.M.L. che i miei clases hanno proprietà.

Cambio il codice sorgente del secondo linguaggio di programmazione (C ++), aggiungo nuovi metodi virtuali ("getProperty", "setProperty"), che mi consentono di emulare le proprietà.

Aggiorna la documentazione, quindi i nuovi metodi virtuali sono inclusi. Aggiorna il primo linguaggio di programmazione, quindi include i nuovi metodi virtuali.

Quindi, passo a un terzo linguaggio di programmazione (C #). Aspettare. Uso le biblioteche globali con variabili globali e metodi globali. C # non ha quei concetti. Ma, posso usare le classi statiche o il modello singleton.

Emulo le librerie con il modello singleton. E può essere fatto, nelle lingue precedenti. Quindi documento le modifiche e sostituisco il codice delle biblioteche, nella prima e nella seconda lingua con il modello singleton.

Ora, il mio codice funziona in 3 lingue simili, ma non uguali. La documentazione mi aiuta a apportare modifiche, aggiungere enhacement, correggere bug su tutti loro.

Ripeti il processo, con altri linguaggi di programmazione.

È complicato, ma è fatto nel mondo reale.

    
risposta data 04.03.2011 - 21:49
fonte

Leggi altre domande sui tag