Pratico sistema di programmazione Meta (MPS)

7

Si tratta di Meta Programming System o MPS di JetBrains. Finora, dai miei sforzi per imparare a usare MPS, ho solo imparato il suo scopo di base e che è molto complesso.

Vale la pena imparare MPS?

C'è qualcuno che già utilizza effettivamente MPS per creare le proprie lingue e gli editori per quelle lingue e usa questi editor creati come loro principale modo di programmazione? Se sì, quali tipi di programmi hanno fatto con questo?

Quali sono i vantaggi e gli svantaggi del lavorare con MPS?

    
posta still_dreaming_1 27.10.2010 - 03:36
fonte

3 risposte

2

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.

    
risposta data 18.12.2010 - 22:19
fonte
1

Il bello di MPS è che l'editor può essere più sofisticato, perché stai modificando un AST invece del solo testo.

Ad esempio qualcuno che usa MPS, controlla link e guarda i video. Penso che sarai colpito.

    
risposta data 07.01.2011 - 01:29
fonte
-1

Anche se non su Java, ho voluto creare la mia meta-programmazione per un po 'su .NET ( Irony (link 1) è una cosa interessante da guardare), Penso di usare M modelling language (link 2) dopo averlo imparato anch'io.

I'd post this as a comment, but thanks to this rant I can't, so I'll try and throw a 2¢ while I'm at it).

Se ci pensi, una lingua è uno strumento per dire al computer cosa fare. Alcune lingue sono più specifiche di altre e consentono di esprimere ciò che si desidera in modo molto più conciso rispetto ad altri (per un particolare argomento). Altri cercano di essere generosi e forniscono una linea di base coerente da cui partire per costruire.

Ma questi "limitati, specifici e semplicistici" Domain Specific Languages (link 3) "sono ottimi per i casi occasionali in cui ciò che vuoi è specifico . In questi casi, ti risparmiano un sacco di digitazione e possibili errori.

Per esempio, pensa a quanto tempo sprecheresti se dovessi usare un'API SQL "Object-Oriented" per Java (e quanto sarebbe prolisso) invece di usare query SQL così brevi e trasmettere il messaggio in modo chiaro.

Mi piacerebbe se venissero utilizzate più lingue specifiche del dominio. Non mi piace molto XAML (anche se è meglio di come le interfacce utente sono codificate in Winforms), ma lo vedo come un passo nella buona direzione. Mi piacerebbe, in un futuro a medio termine, progettare DSL per determinati compiti comuni che faccio frequentemente, come un linguaggio di annotazione HTML semplificato che emette un codice hacked-for-IE senza che io debba fare le stesse cose più e più volte ( o forse non lo faccio, ma non è questo il punto)

tl; dr:

Non ho mai usato MPS , ma penso che se sei un ragazzo di Java in ogni caso controlla, dopo un po 'IMHO, i cervelli si arrugginiscono. Come impararlo? Trova qualcosa per cui desideri una lingua (qualcosa di ripetitivo e noioso) e crea un linguaggio per questo! Se è inutile, almeno avrai un nuovo strumento sulla cintura.

LINK

(qui a causa di una replica)

  1. http://irony.codeplex.com/
  2. http://en.wikipedia.org/wiki/Oslo_(Microsoft_project)#Characteristics_of_the_.22M.22_Modeling_Language
  3. http://en.wikipedia.org/wiki/Domain-specific_language
risposta data 27.11.2010 - 22:59
fonte

Leggi altre domande sui tag