2010-05-12 9 views
9

Recentemente, quando ho cercato di spiegare perché Ruby on Rails è un linguaggio specifico del dominio (DSL) per uno stagista presso la mia organizzazione, non sono stato in grado di articolare il mio ragionamento sull'effetto che mi piacerebbe fare. Forse non capisco abbastanza bene lo spazio per insegnare le sfumature. Reindirizzarlo a Martin Fowler 'article o Google classificato uno InfoQ o altro materiale non ha aiutato molto neanche.Perché Ruby on Rails chiama un linguaggio specifico del dominio?

qualcuno può spiegare il motivo per cui Rails è un DSL con un esempio/situazione parallela che non è roba voodoo per qualcuno che è abbastanza nuovo al mondo del codice? Comprendere l'ideologia potrebbe anche aiutare a elaborare le complessità dell'ecosistema delle rotaie?

+0

Per roba voodoo probabilmente significherei qualcosa come questo http://jroller.com/rolsen/entry/building_a_dsl_in_ruby1 – papdel

risposta

12

Tecnicamente, Ruby non è una DSL, solo si presta a scrivere DSL interni molto pulita. This link nel blog di Martin's Fowler wiki dovrebbe aiutare a chiarire le cose.

Rails è stato descritto come un modem DSL, anche se ci penso più precisamente come un quadro che fa buon uso di un paio di DSL.

Edit: La intro to the public version of Martin Fowler's DSL book ha un esempio motivante, anche se è ancora rivolto un po 'più a programmatori.

Edit di nuovo: L'esempio di "voodoo" può essere utile se fai notare che Ruby permette codice Ruby per assomigliare

port 2001 

respond :resource=>"/hello" do |request, response| 
    response.body = "<message>hello</message>" 
end 

che è più pulita di chiamare direttamente i metodi. L'implementazione di un DSL può richiedere "voodoo" come il codice (è molto più difficile la creazione di un DSL rispetto all'utilizzo di uno), e in qualcuno genere relativamente nuovo per la codifica dovrebbe preoccupare prima di non ciò che il DSL fa e così tanto come viene implementato.

Ciò che rende il rubino efficace nei DSL interni include (1) l'uso di blocchi (qualsiasi linguaggio con chiusure pulite ha questo vantaggio), (2) classe di metodo che non richiede parentesi e (3) la possibilità di modificare classi su al volo (che è ciò che fa validates). Ci sono probabilmente più che non ho pensato.

+0

Penso che la chiave sia che Rails è un framework che combina diverse DSL per descrivere le proprietà della tua webapp. –

4

Ruby è un linguaggio che è possibile utilizzare per creare un DSL. Ruby on Rails può essere considerato un DSL (Domain Specific Language) per la creazione di applicazioni web.

2

Ruby non è certamente un DSL. È un linguaggio generico, che è l'opposto di una DSL. È, tuttavia, un linguaggio che è molto adatto come host per DSL di tipo interno. Questo è; Puoi usare Ruby per creare DSL con.

0

Non capisco bene la domanda. Ruby non è una lingua specifica per il dominio, è una lingua per uso generale. Non ha senso chiamarlo DSL, perché non lo è. Quindi l'intera premessa della domanda non ha senso.