Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DSLs in Python

DSLs in Python

Presented at µPy.

Marek Kubica

March 13, 2008
Tweet

More Decks by Marek Kubica

Other Decks in Programming

Transcript

  1. DSLs in Python
    Marek Kubica
    13. März 2008
    Marek Kubica DSLs in Python

    View Slide

  2. Der Plan
    Dieser Vortrag lebt vom Feedback!
    daher: Fragen und Anmerkungen explizit erwünscht
    Chris Okazaki hat Recht: Vortrag in eine Richtung ist
    langweilig
    Marek Kubica DSLs in Python

    View Slide

  3. Ganz kurze Einleitung
    DSLs?
    Domänenspezische Programmiersprachen Domain Specic
    Languages
    Kleine Sprachen die für kleine, klar umrissene Dinge eingesetzt
    werden
    gegenteil wären General Purpose Sprachen(Python)
    Beispiele: GraphViz, sed, Vim script, Elisp, JavaScript
    letztere sind auch General Purpose Sprachen
    Marek Kubica DSLs in Python

    View Slide

  4. Ganz kurze Einleitung
    DSLs?
    Domänenspezische Programmiersprachen Domain Specic
    Languages
    Kleine Sprachen die für kleine, klar umrissene Dinge eingesetzt
    werden
    gegenteil wären General Purpose Sprachen(Python)
    Beispiele: GraphViz, sed, Vim script, Elisp, JavaScript
    letztere sind auch General Purpose Sprachen
    Werden aber für gewisse klar gegliederte Aufgabenbereiche
    eingesetzt
    etwa Editor-Skripting, DOM-Editieren
    Marek Kubica DSLs in Python

    View Slide

  5. Zwei Arten von DSLs
    Externe DSLs
    Sind komplette Sprachen, mit allem drum & dran
    Eigene Grammatik, eigene Token, Lexer, Parser, Verhalten
    Komplex zu erstellen, dafür aber viele Freiheiten in der
    Gestaltung
    Marek Kubica DSLs in Python

    View Slide

  6. Zwei Arten von DSLs
    Externe DSLs
    Sind komplette Sprachen, mit allem drum & dran
    Eigene Grammatik, eigene Token, Lexer, Parser, Verhalten
    Komplex zu erstellen, dafür aber viele Freiheiten in der
    Gestaltung
    Schlieÿlich sind es eigenständige Sprachen
    Interne DSLs
    Untermengen der sie umgebenden Sprache
    Also limitierter - aber simpler und einfacher zu verstehen
    Einfach zu implementieren - man wälzt alles auf die
    Hostsprache ab
    Oft in Ruby eingesetzt (Rails), aber auch in Python möglich
    (in einem anderen Umfang)
    Marek Kubica DSLs in Python

    View Slide

  7. Und nun?
    Beschäftigen wir uns mit internen DSLs in Python, an einem
    einfachen Beispiel
    Marek Kubica DSLs in Python

    View Slide

  8. Und nun?
    Beschäftigen wir uns mit internen DSLs in Python, an einem
    einfachen Beispiel
    Warum?
    Marek Kubica DSLs in Python

    View Slide

  9. Und nun?
    Beschäftigen wir uns mit internen DSLs in Python, an einem
    einfachen Beispiel
    Warum?
    Weil man damit einige Probleme lesbarer lösen kann.
    lesbar = besser
    Marek Kubica DSLs in Python

    View Slide

  10. Ohne DSLs
    Was macht der Code in playfair-dsless.py?
    Was ist gut, was ist schlecht?
    Marek Kubica DSLs in Python

    View Slide

  11. Das Problem - Playfair implementieren
    Wikipedia bietet ein gutes Beispiel dafür
    Klartext
    Klartext wird in Groÿbuchstaben gewandelt
    Umlaute aufgelöst, J zu I, aufeinanderfolgende Buchstaben
    durch X getrennt
    in Buchstabenpaare geteilt
    Schlüssel
    Alphabet mit 25 Buchstaben (ohne J)
    In 5x5-Matrix gesetzt
    Buchstaben des Schlüssels werden eingesetzt
    Rest wird alphabetisch aufgefüllt
    Marek Kubica DSLs in Python

    View Slide

  12. Playfair-Algorithmus
    Verfahren
    Im groÿen und ganzen geht es um das tauschen von Buchstaben in
    der 5x5 Matrix.
    Marek Kubica DSLs in Python

    View Slide

  13. Lass Code sprechen
    Was brauchen wir so?
    Ein Alphabet ohne den Buchstaben J
    Einen Matrix-Datentyp
    Einen Matrix-Element-Datentyp
    etwas Glue-Code um das zu verbinden
    Wie sieht das dann aus?
    playfair.py
    wie siehts im Vergleich aus?
    Marek Kubica DSLs in Python

    View Slide

  14. Was hat uns das gebracht?
    Der Code ist länger, ja
    Der Code ist leichter zu verstehen
    Wir haben einige nette Python-Features genutzt :)
    Marek Kubica DSLs in Python

    View Slide

  15. Kompliziertere DSLs
    Interne
    Metaprogrammierung (siehe Elixir, Django)
    Bytecode-Hacks
    Externe
    Parser (PLY, Pyparsing, Pysec)
    Andere Sprachen embedden (Lua, Guile)
    Marek Kubica DSLs in Python

    View Slide