SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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!

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

Devising your Data Movement Strategy for IoT
Devising your Data Movement Strategy for IoTDevising your Data Movement Strategy for IoT
Devising your Data Movement Strategy for IoT
 
Tugas Logika Informatika
Tugas Logika InformatikaTugas Logika Informatika
Tugas Logika Informatika
 
E learn2016r ver_mike
E learn2016r ver_mikeE learn2016r ver_mike
E learn2016r ver_mike
 
Accounting and Accountability
Accounting and AccountabilityAccounting and Accountability
Accounting and Accountability
 
Signe
SigneSigne
Signe
 
Web 2.0 , social media safety in education with Lucian
Web 2.0 , social media  safety  in  education with Lucian  Web 2.0 , social media  safety  in  education with Lucian
Web 2.0 , social media safety in education with Lucian
 
Pasti
PastiPasti
Pasti
 
2008 Directors Reportpdf
2008 Directors Reportpdf2008 Directors Reportpdf
2008 Directors Reportpdf
 
Rootstech-The Basics of Gamification
Rootstech-The Basics of GamificationRootstech-The Basics of Gamification
Rootstech-The Basics of Gamification
 
E Skills Week Teacher Guide
E Skills Week Teacher GuideE Skills Week Teacher Guide
E Skills Week Teacher Guide
 
Strategy Part 3 - Combined Models
Strategy Part 3 - Combined ModelsStrategy Part 3 - Combined Models
Strategy Part 3 - Combined Models
 
Chapter 2 slideshow
Chapter 2 slideshowChapter 2 slideshow
Chapter 2 slideshow
 
Chapter 1
Chapter 1Chapter 1
Chapter 1
 
Achieving Mastery Through Gamification
Achieving Mastery Through GamificationAchieving Mastery Through Gamification
Achieving Mastery Through Gamification
 
BCC 2009 - NSTC
BCC 2009 - NSTCBCC 2009 - NSTC
BCC 2009 - NSTC
 
PowerPoint Template - Put graphics center stage
PowerPoint Template - Put graphics center stagePowerPoint Template - Put graphics center stage
PowerPoint Template - Put graphics center stage
 
APSCo Startup SME Enterprise
APSCo Startup SME EnterpriseAPSCo Startup SME Enterprise
APSCo Startup SME Enterprise
 
NewStar NIMS Profile
NewStar NIMS ProfileNewStar NIMS Profile
NewStar NIMS Profile
 
DiffCalculus Week 3
DiffCalculus Week 3DiffCalculus Week 3
DiffCalculus Week 3
 
Advanced Music 12
Advanced Music 12Advanced Music 12
Advanced Music 12
 

Ähnlich wie Dsl in Lisp e Java

Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazionedibari.92
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritornolordarthas
 
What's Big Data? - Big Data Tech - 2015 - Firenze
What's Big Data? - Big Data Tech - 2015 - FirenzeWhat's Big Data? - Big Data Tech - 2015 - Firenze
What's Big Data? - Big Data Tech - 2015 - FirenzeAlberto Paro
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoMajong DevJfu
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeomarcocasario
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1Gianfranco Fedele
 
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneGabriele Guizzardi
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Fabrizio Bernabei
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Massimiliano Dessì
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourserik0
 

Ähnlich wie Dsl in Lisp e Java (20)

Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
What's Big Data? - Big Data Tech - 2015 - Firenze
What's Big Data? - Big Data Tech - 2015 - FirenzeWhat's Big Data? - Big Data Tech - 2015 - Firenze
What's Big Data? - Big Data Tech - 2015 - Firenze
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di dato
 
Bash programming
Bash programmingBash programming
Bash programming
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1
 
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
 
Pycon
PyconPycon
Pycon
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Corso java base
Corso java baseCorso java base
Corso java base
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 

Dsl in Lisp e Java

  • 1. DSL in Lisp e Java Alessio Stalla alessiostalla@gmail.com
  • 2. DSL in Lisp e Java Domain Specific Language Linguaggio specializzato in un certo dominio applicativo
  • 3. Esempi di DSL SQL JavaFX Script Regex Shell Scripting JSP/JSF EL XUL (Mozilla) Ant tasks Spring WebFlow ecc. ecc.
  • 4. 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)
  • 5. 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, ...
  • 6. 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, ...
  • 7. 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(); }
  • 8. Esempio with_transaction { withdraw 100 € from a; withdraw 200 € from b; deposit 300 € on c; } on_failure { log(...); }
  • 9. 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
  • 10. Lisp Vari dialetti, i più usati oggi:  Common Lisp (ANSI standard, 1991)  Scheme  Emacs Lisp  Autolisp
  • 11. (Common) Lisp Linguaggio Multiparadigma: Imperativo, Funzionale, OO, ... Interpretato e/o compilato Altamente interattivo Molte feature uniche ed interessanti, ma soprattutto... Ottimo per scrivere DSL
  • 12. 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
  • 14. 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
  • 15. Code-is-Data! (defun fact (n) (if (= n 0) n (* n (fact (- n 1)))))
  • 16. Lisp Sintassi Concreta READ Sintassi Astratta EVAL COMPILE Semantica
  • 17. 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!
  • 18. 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, ...
  • 19. 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...
  • 20. 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
  • 21. 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!