Dsl in Lisp e Java
Upcoming SlideShare
Loading in...5
×
 

Dsl in Lisp e Java

on

  • 1,976 views

Domain Specific Languages: implementazione in Lisp e integrazione con Java mediante API JSR-223.

Domain Specific Languages: implementazione in Lisp e integrazione con Java mediante API JSR-223.
Presentazione tenuta il 20/01/2009 in occasione dell'incontro del JUG Genova.

Statistics

Views

Total Views
1,976
Views on SlideShare
1,872
Embed Views
104

Actions

Likes
1
Downloads
5
Comments
0

5 Embeds 104

http://juggenova.net 54
http://juggenova.wordpress.com 46
http://www.slideshare.net 2
http://translate.googleusercontent.com 1
http://web.archive.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Dsl in Lisp e Java Dsl in Lisp e Java Presentation Transcript

  • DSL in Lisp e Java Alessio Stalla alessiostalla@gmail.com
  • DSL in Lisp e Java Domain Specific Language Linguaggio specializzato in un certo dominio applicativo
  • Esempi di DSL SQL JavaFX Script Regex Shell Scripting JSP/JSF EL XUL (Mozilla) Ant tasks Spring WebFlow ecc. ecc.
  • DSL e programmazione Bottom-Up Language Oriented Programming (M. Fowler) o Bottom-Up Programming (P. Graham) Avvicinare il Linguaggio al Problema (Bottom-Up) invece di avvicinare il problema al linguaggio (Top-Down)
  • DSL – Pro e Contro Pro • Linguaggio vicino al problema: alto livello di astrazione, concisione, semplicità, programmazione dichiarativa • Ciclo di sviluppo più snello, rapid prototyping • DSL sono linguaggi di programmazione: possiamo usare le tecniche che conosciamo – variabili, funzioni, classi, ...
  • DSL – Pro e Contro Contro • Babele di linguaggi: curva di apprendimento, scarso supporto dai tool di sviluppo • Inefficienza • DSL sono linguaggi di programmazione: necessario progettare e implementare parser, compilatore/interprete, ambiente di esecuzione, ...
  • Esempio Transaction t = tm.beginTransaction(); try { accounts.getAccount(quot;aquot;).withdraw(t, 100, quot;€quot;); accounts.getAccount(quot;bquot;).withdraw(t, 200, quot;€quot;); accounts.getAccount(quot;cquot;).deposit(t, 300, quot;€quot;); t.commit(); } catch(TransactionException e) { log.error(...); t.rollback(); }
  • Esempio with_transaction { withdraw 100 € from a; withdraw 200 € from b; deposit 300 € on c; } on_failure { log(...); }
  • Lisp Famiglia di linguaggi con origini molto antiche (John McCarthy, 1958) Nasce come linguaggio funzionale per la manipolazione di dati simbolici Tradizionalmente associato all'IA, ma con applicazioni in tutti i campi
  • Lisp Vari dialetti, i più usati oggi:  Common Lisp (ANSI standard, 1991)  Scheme  Emacs Lisp  Autolisp
  • (Common) Lisp Linguaggio Multiparadigma: Imperativo, Funzionale, OO, ... Interpretato e/o compilato Altamente interattivo Molte feature uniche ed interessanti, ma soprattutto... Ottimo per scrivere DSL
  • Un po' di teoria... Sintassi Semantica for(...) { ... } “The basic for statement executes some initialization code, then void method(args) { executes an Expression, a Statement, and some update ... code repeatedly until the value of } the Expression is false.” The Java Language Specification
  • Abstract Syntax Tree
  • In Lisp... Sintassi Sintassi Astratta – AST Semantica – valori Concreta (Oggetti in memoria) (Oggetti in memoria) (Caratteri) 123 123 (0x007a) 123 (0x007a) quot;abcquot; quot;abcquot; (abc0) quot;abcquot; (abc0) PIPPO pippo (SYMBOL { name = quot;PIPPOquot;, Valore della variabile PIPPO value = ..., function = ... }) (+ 1 2) [ ]->[ ]->[ ]->NIL 3 | | | (Funzione + applicata a 1 e 2) + 1 2
  • Code-is-Data! (defun fact (n) (if (= n 0) n (* n (fact (- n 1)))))
  • Lisp Sintassi Concreta READ Sintassi Astratta EVAL COMPILE Semantica
  • Macro  Funzioni eseguite prima della compilazione  Operano su Oggetti in memoria e non su testo  Sono scritte in Lisp  Permettono di estendere il linguaggio aggiungendo nuovi costrutti  Il tool perfetto per scrivere DSL!
  • Ricordate i Contro? • Babele di linguaggi: curva di apprendimento, scarso supporto dai tool di sviluppo Sintassi Uniforme (parser integrato) • Inefficienza Compilatore integrato e trasparente (macro) • DSL sono linguaggi di programmazione: necessario progettare e implementare parser, compilatore/interprete, ambiente di esecuzione... Riutilizzo massimo del linguaggio preesistente: parser, interprete, compilatore, IDE, ...
  • E Java? Common Lisp è uno standard Ne esistono numerose implementazioni, commerciali e open source ABCL (Armed Bear Common Lisp) gira sulla JVM Il compilatore produce bytecode Java ABCL è nato per portare Java a Lisp, non viceversa: API molto poco Java-like...
  • ABCL e JSR-223 ABCL supporterà a breve la Java Scripting API:  esecuzione di script da file/stream  chiamate dirette a funzioni Lisp  compilazione  implementazione di interfacce Java in Lisp
  • ABCL e JSR-223 In Lisp, un DSL è un'estensione del linguaggio tramite macro... ...ciò significa che anche il vostro DSL ABCL- based è integrato con la Java Scripting API! Morale: se stai pensando a XML... valuta invece Lisp e DSL!