La programmazione orientata alla lingua è pratica?

12

Ho letto questo articolo sulla programmazione orientata alla lingua. Indica alcuni punti deboli nei moderni approcci procedurali / OOP alla programmazione e suggerisce un nuovo paradigma di programmazione che li risolverà

Io sono tutto per piccole parti di programma liberamente accoppiate: è molto meglio imparare un sacco di piccole cose, che userete, di un paio di grandi cose, che usate solo pezzi di pezzi.

Leggendo l'articolo, ho avuto l'impressione che l'autore stesse promuovendo una delle due cose:

  • Una moltitudine di linguaggi di script facilmente creabili
  • Un unico linguaggio facilmente estensibile che può riscriversi per soddisfare le esigenze del programmatore

Se suggerisce il secondo, risponderei con "Già fatto!" e dare Lisp come esempio. Come suggerisce Paul Graham, le lingue sembrano andare continuamente verso questo comunque .

Per quanto riguarda il primo, penso che sia una buona idea, se c'è un linguaggio di base che li lega tutti insieme. Questo mi sembra il punto debole: la comunicazione tra le lingue. Usereste le chiamate, che sono un concetto procedurale o un passaggio di messaggi, che mi ricorda la comunicazione tra processi? Gradirei l'opportunità di lavorare con linguaggi di dominio limitato, se è facile usarli tutti allo stesso tempo. Questo approccio (LOP) sarebbe pratico?

    
posta Michael K 07.02.2011 - 16:49
fonte

5 risposte

8

Ho sostenuto le DSL da molto tempo, ma mi preoccupo di cosa succede alle Good Ideas quando diventano bandwagons. I prodotti vengono creati per pubblicizzare The Good Idea, promettendo che tutto ciò che devi fare è ottenere uno e sarai nel gruppo, senza dover pensare molto attentamente a cosa significa.

Che cos'è una lingua? È un vocabolario e una sintassi in cui i significati possono essere comunicati, giusto? Ogni volta che dichiari una variabile, scrivi una funzione, definisci una classe, stai costruendo una nuova lingua, aggiungendo nomi e verbi a una lingua esistente. Ora puoi dire cose che non avresti mai potuto.

Penso che ciò che rende un linguaggio specifico per il dominio è la misura in cui esprime naturalmente i concetti mentali che vengono comunicati, e penso che ci sia una misura semplice di ciò. Fondamentalmente, se esiste un semplice requisito autonomo indipendente X, che potrebbe essere incluso nel programma o meno, la sua corretta implementazione richiede una serie di inserimenti, eliminazioni e sostituzioni di codice Y. Può essere visualizzata una semplice differenza prima e dopo Y. Il numero N di tali cambiamenti è una misura del modo in cui il linguaggio è specifico del dominio. La N più piccola è, per esigenze tipiche, la migliore.

Non dipende necessariamente da sintassi di fantasia, strutture di controllo, passaggio di messaggi o cosa hai. Ciò che dipende è come implementa in modo conciso il requisito. Molti strumenti pretenderanno di farlo, ma le affermazioni non sono realtà. Deve essere reale .

A volte è necessaria una tecnologia insolita . Ecco il mio esempio preferito Quando lo è, illustra il punto che potrebbe richiedere uno sforzo da parte dei programmatori per capirlo. Quindi la specificità del dominio (e la manutenibilità) non è affatto la stessa cosa di leggibilità .

Quindi sono d'accordo con il secondo approccio, che una buona lingua è quella che permette facilmente di costruire le lingue necessarie su di essa. (Questo è quello che mi è piaciuto di Lisp.) Ma ancora più importante è che i programmatori hanno bisogno di sapere come costruire linguaggi per abbinare i domini in cui stanno lavorando, ed essere disposti a scalare le curve di apprendimento di tali linguaggi.

Non lo vedo davvero. Invece sono bloccati nei "programmi = algoritmi + struttura dei dati", o "i nomi diventano le classi e i verbi diventano metodi" modi di pensare a manovella. Non funzionano in termini di come prendere domini pensati e linguizzarli per la massima concisione.

    
risposta data 24.02.2011 - 16:39
fonte
3

Questo è piuttosto l'approccio di Ruby.

  • Mantieni il linguaggio di base semplice ed estendilo tramite gemme
  • Crea dialetti di Ruby per domini specifici tramite patch di scimmia. per esempio Ruby on Rails.

Non so se è meglio, ma immagino sia molto pragmatico.

    
risposta data 07.02.2011 - 16:59
fonte
1

L'approccio LOP è estremamente pratico. Tieni presente che non è necessario implementare "linguaggi di scripting", anche la metodologia è applicabile agli eDSL e in genere vengono compilati in modo efficiente. Sto usando questo approccio letteralmente in tutto il mio lavoro di sviluppo.

    
risposta data 07.02.2011 - 17:39
fonte
1

In futuro vedremo molto di più sulle lingue specifiche del dominio, a giudicare dalle persone che ne parlano ora- ho notato Martin Fowler ne parla molto e alcuni articoli interessanti attraverso Lambda The Ultimate sull'argomento, tra gli altri.

Questo mi suggerisce che questa è sicuramente una direzione in cui soffia il vento per quanto riguarda la programmazione del linguaggio e le piattaforme di programmazione. In un certo senso è già da un po 'di tempo - uno dei vantaggi di Ruby (come qualcuno ha già osservato) è che semplifica la creazione di DSL, ma in realtà ce ne sono molti in giro nelle applicazioni e nelle librerie di programmazione che già usiamo.

    
risposta data 07.02.2011 - 18:01
fonte
0

Uso LOP ogni volta che programma da solo. Ho trovato che in alcuni progetti, non c'è altro modo per rispettare il programma. In una semplice allegoria, si può equiparare l'uso di LOP agli utensili elettrici. Se lavori da solo nel laboratorio, non puoi fare le cose manualmente e rispettare la scadenza. Se ci sono altre persone con te, il coordinamento dell'uso di tali strumenti elettrici è essenziale per l'efficienza e la sicurezza.
In modalità squadra, la LOP richiede una preparazione organizzativa per evitare un disastro della Torre di Babele.

    
risposta data 12.09.2016 - 22:18
fonte