Esiste un termine accettato per un DSL implementato in un linguaggio di programmazione "standard"?

2

L'articolo di Wikipedia per lingue specifiche del dominio sembra solo riferirsi alle attuali lingue .

Tuttavia, ho sentito che il termine "DSL" faceva riferimento a paradigmi di codifica dall'aspetto unico, incoraggiati dalle librerie in lingue "standard".

Da Ruby on Rails, ad esempio (da qui ):

create_table :posts do |t|
  t.string :name
  t.string :title
  t.text :content

  t.timestamps
end

Questo è il codice Ruby. Non è un linguaggio proprio, ma è uno stile di codifica unico incoraggiato da una libreria per rendere più leggibile la codifica in un dominio specifico.

Esiste un termine separato per questo?

    
posta Closure Cowboy 19.04.2011 - 06:38
fonte

5 risposte

12

Ho sentito una cosa del genere denominata "DSL interno" o "DSL incorporato".

    
risposta data 19.04.2011 - 06:44
fonte
3

Solo perché Wikipedia non lo menziona non significa che non esiste :) Generalmente uso il termine DSL per le lingue incorporate in una particolare lingua (e per me, questo include printf e regex). Mi piace il termine "piccolo linguaggio" per i linguaggi vincolati che non hanno tutta la potenza di un linguaggio di programmazione, ma possono comunque richiedere la tokenizzazione e l'analisi. Ma il linguaggio specifico del dominio è il termine giusto per l'arte, indipendentemente dal fatto che la tua lingua sia costruita utilizzando le caratteristiche della tua lingua o se stai costruendo una lingua completamente nuova.

Utilizzerei anche il termine DSL in senso lato, per linguaggi di programmazione completi che affrontano problemi in un determinato dominio, ma ho principalmente creato DSL con l'aiuto delle lingue esistenti, ovvero Boo e Ruby. Se la tua lingua supporta la metaprogrammazione o astrazioni funzionali, di solito è possibile senza un grande sforzo costruire un DSL all'interno o intorno alla lingua. (In Boo, di solito costruisco un DSL come estensione della lingua usando le caratteristiche della pipeline del compilatore e la sintassi della semantica della macro).

Se hai meno controllo sull'albero di sintassi o la sintassi della chiamata al metodo è meno flessibile, puoi utilizzare il concatenamento di metodi per creare un'interfaccia fluente, che è un sottoinsieme di ciò che pensiamo sia un DSL.

Le DSL sono ben supportate nei linguaggi ispirati al Lisp, in cui essenzialmente stai creando una DSL ogni volta che scrivi il codice.

Per inciso, Donald Knuth ha anche usato il termine literate programming per uno stile di programmazione che si auto-documenta perché il codice funge da documento leggibile.

    
risposta data 19.04.2011 - 07:19
fonte
2

Chiamano quelle "API fluenti" o un'interfaccia fluente.

La maggior parte degli esempi sono incentrati su "concatenamento di metodi", ma qualsiasi cosa che renda il codice più specifico del dominio è una API fluente.

link

    
risposta data 19.04.2011 - 11:59
fonte
2

Nel 1977, Nick Lawrence coniò il termine "linguaggio di categoria" per questo genere di cose. Ha presentato un documento in una conferenza di simulazione del 1977, intitolata "Lingue di simulazione della lingua". Questi erano DSL incorporati in un linguaggio di simulazione generico, per rendere molto più semplice l'impostazione di alcuni tipi di simulazioni.

All'epoca, Nick era un guru di simulazione di eventi discreti residente da TI. Era a UT Austin per un po ', insegnando un seminario sulla simulazione di eventi discreti.

    
risposta data 19.04.2011 - 16:57
fonte
1

A parte il nome interno o DSL incorporato menzionato, anche questi tipi di cose sono talvolta correlati al concetto di Convention over Configuration dove la definizione di alcune cose in un modo specifico (o la loro eliminazione totale) viene interpretata in alcuni modi predefiniti (come l'esempio di Ruby on Rails che dai, dove la definizione di questi campi segnala qualcosa su come dovrebbero finire in altri livelli del sistema finale in esecuzione).

    
risposta data 19.04.2011 - 11:06
fonte

Leggi altre domande sui tag