Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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