Ho trovato che gli strumenti di metaprogrammazione di Boo e Ruby sono abbastanza utili per creare linguaggi specifici di dominio. Le lingue specifiche del dominio in Boo di Ayende Rahien sono state utili quando stavo creando un DSL per l'automazione dei test. Potrebbe non essere applicabile direttamente al sistema di JetBrain, ma dovrebbe essere utile per comprendere il potenziale di un'infrastruttura linguistica flessibile.
Java ha una buona quantità di informazioni necessarie per ottenere risultati utili. I DSL e gli strumenti di generazione del codice possono aiutare a isolare alcuni di questi cruft, se sono ben progettati. Non conosco lo strumento Jetbrains abbastanza bene da dirti se vale la pena imparare, ma la comprensione di come costruire DSL e la comprensione della metaprogrammazione in generale è assolutamente valsa la pena. Sembra che il prodotto di JetBrains occupi una nicchia simile a Microsoft Visualization and Modeling SDK, ma ho trovato lo strumento Microsoft un po 'troppo frustrante nel mio uso limitato, principalmente a causa dell'enfasi sugli strumenti visivi. Dato che MPS sembra fare un buon lavoro concentrandosi sull'esperienza di editing del testo per il DSL generato, questo potrebbe essere sufficiente per convincermi a scavare in esso.
Esiste una certa sottocultura di sviluppatori che sono cinici riguardo qualsiasi tipo di meta-programmazione, e un'altra sottocultura che è scettica su qualsiasi lingua X in cui X non è la lingua a cui sono abituati. Sufficientemente i programmatori della vecchia scuola possono ricordare il movimento 4GL che si è scoperto, come molti sforzi eccessivi, per non essere promesso tutti i venditori; alcuni venditori hanno affermato che il loro linguaggio consentirebbe agli imprenditori che comprendono il loro codice di scrittura del dominio e minimizzano la necessità di programmatori di livello inferiore. Raramente ha funzionato.
Quindi potresti avere qualche resistenza organizzativa all'uso di tali strumenti, ma come qualsiasi strumento, usato in modo efficace, può rendere il tuo team più efficace ed efficiente.
Il rovescio della medaglia è che, a meno che tu non sia già esperto nel farlo, la creazione di una DSL potrebbe richiedere più tempo rispetto alla costruzione di una logica aziendale simile a quella che hai sempre: nei costrutti goffi del tuo linguaggio abituale. Il guadagno, nel tempo, vale la pena, secondo me. Se hai lavorato con un sistema che utilizza metaprogramming in modo efficace, come Rails in Ruby, capirai rapidamente come i DSL possono ripagare. Se hai usato qualcosa come Boo per costruire un DSL modificando la pipeline del compilatore (meno doloroso di quanto non sembri, almeno in Boo), puoi goderti rapidamente i modi migliori per esprimere i tuoi problemi.
Ma a meno che tu non abbia una squadra che è già nel loro elemento usando questi strumenti, dovrai iniziare lentamente. Forse le regole aziendali per la determinazione del prezzo di un contratto o di un prodotto trarrebbero vantaggio da un linguaggio chiaro e di facile lettura che ti consentisse di rispondere rapidamente ai cambiamenti delle offerte, degli schemi di sconto, ecc. Oppure potresti trovare il compito noioso e ripetitivo di codifica avere ed esplorare se un DSL che semplifica tale attività può esserti d'aiuto.