2010-07-22 6 views
5

Les gars ... Les filles, je travaille sur un projet qui pourrait être amélioré en implémentant un langage spécifique au domaine pour définir un ensemble de règles et/ou de conditions pour un type de flux de travail.Premières étapes avec DSL sur Java?

Je veux acquérir une bonne connaissance du sujet, des principes fondamentaux, des meilleures pratiques, etc., et surtout de la façon de les implémenter avec Java.

Que suggérez-vous?

+2

Suggestion sérieuse: Implémentez-le en utilisant Groovy, Scala ou Clojure. – Mike

+0

Cela dépend totalement de la complexité de la DSL. – NawaMan

+0

+1 pour ne pas utiliser Java pour cela. Si quelque chose, j'utiliserais Ruby (ou JRuby). – cletus

Répondre

8

D'abord, je recommande la lecture du chapitre 9 (notation) de The Practice of Programming par Kernighan et Pike.

Lorsque vous avez fait cela, revenez ici avec des questions spécifiques sur la façon de mapper les concepts de ce chapitre à des conceptions spécifiques pour les problèmes que vous voulez résoudre.

Le motif de base consiste à écrire un interpréteur auquel est passé un argument 'command', et éventuellement un argument 'environment', et exécute la commande (dans l'environnement). Vous avez alors la possibilité d'écrire un analyseur, qui prend une chaîne 'script' et le convertit en un objet 'command' valide (c'est-à-dire un DSL externe); ou vous fournissez une bibliothèque pour aider les utilisateurs à créer l'objet 'command' explicitement dans la langue que vous utilisez (internal-DSL). Kernighan et Pike font un bon travail pour montrer à quel point un interpréteur peut être trivial et complexe. Si vous voulez plus de profondeur, alors je suggère de lire The Essentials of Programming Languages par Daniel Friedman et al. Ce qui construit au moins un interpréteur différent par chapitre, et montre comment implémenter des fonctionnalités telles que les variables, les fonctions, les étendues, les objets, les classes, le typage statique et les continuations.

Cependant, je suggérerais de vous essayer à un DSL trivial d'abord, sinon tout cela n'est que théorie - un livre est beaucoup plus intéressant quand il est rendu pertinent et pratique par votre expérience précédente.

+0

Dans le cas où je n'étais pas clair, ma suggestion est: 1. Lisez le chapitre 9 de La pratique de la programmation. 2. Essayez-vous à implémenter un simple DSL 3. Posez des questions spécifiques lorsque vous rencontrez des problèmes 4. Lisez Les Essentiels des langages de programmation lorsque vous commencez à vouloir inclure des fonctionnalités dans votre DSL qui sont plus «programmation like», à savoir . Variables, fonctions, portées, etc ... – Recurse

+0

Drôle, j'ai ouvert le pg 216 de ce livre maintenant, et j'ai pensé que je ferais une recherche google pour 'notation' et les noms de l'auteur et cela est venu. Je suis très excité de lire ce chapitre (et j'ai seulement eu le livre pour 8 $ hehe!) – Rob

+0

Wow, j'ai joué avec l'un regex et (pour moi) il y a une petite erreur sur pg. 225 et je ne vois pas dans leur errata. Dans le cas où vous faites ceci: l'appel à grep devrait être if (grep (argv [1], f, argc> 2? Argv [i]: NULL)> 0)/* NOT argc> 3 */ – Rob

3

Comme d'autres l'ont fait remarquer, Java n'est vraiment pas un excellent choix pour créer un DSL. Scala, Clojure, Groovy, Ruby/JRuby seraient de bons choix. Cependant, considérant que vous pensiez utiliser Java, je pense que Groovy ou Scala semblent être les choix les plus naturels. La courbe d'apprentissage pour les développeurs Java est assez progressive pour les deux langues. Voici quelques liens qui vous permettront de démarrer:

+0

Je vais définitivement jeter un oeil à Scala et Groovy :) –

0

Une fois j'ai utilisé openArchitectureware pour définir et utiliser un DSL. oAW est un plugin à éclipse qui fait maintenant partie du framework de modélisation eclipse, mais bien sûr, il peut aussi être utilisé en dehors des EMF.

Je l'ai aimé car il était assez facile de définir un DSL et oAW va générer automatiquement un éditeur avec mise en évidence de syntacx et vérification d'erreur pour le DSL.

Et il fournit un moteur de modèle qui est assez confortable si vous prévoyez d'utiliser des documents écrits dans votre DSL pour générer automatiquement des fichiers Java, XML ou autres.

(je l'ai lié l'ancienne URL ÖAW parce que la page fournit encore quelques détails et tous les liens vers les pages du projet Eclipse)

0

Juste une addition à @Recurse.Je fais en fait l'exemple regex au chapitre 9, il faisait allusion et cela n'a pas changé jusqu'à ce que je une ligne dans la fonction principale:

  if (grep(argv[1], f, argc>3 ? argv[i] : NULL) > 0) 

devrait vraiment être:

  if (grep(argv[1], f, argc>2 ? argv[i] : NULL) > 0) 

avis l'argc> 2. Cela a fonctionné pour moi après cela. N'était pas sur les errata livres (ce qui n'est pas surprenant étant donné son âge).

Oui, c'est un trésor mais un trésor d'un livre, donc je dois dire que je suis d'accord avec @Recurse. Honnêtement, c'est un livre sensible au temps pour l'étudiant (j'aurais probablement été confus il y a quelques années).

Questions connexes