typ-sichere dsls

Download Typ-sichere DSLs

Post on 19-Jun-2015

481 views

Category:

Technology

4 download

Embed Size (px)

DESCRIPTION

Mit Xtext/TS, Xtend, Groovy und anderen Sprachen

TRANSCRIPT

  • 1. Typ-sichere DSLsMit Xtext/TS, Xtend, Groovy undanderen Sprachen Werner Keil Eclipse DemoCamp Berlin20. Juni 2012

2. ZielsetzungARITHMETISCHE ODERDATENTYP FEHLER BEI DSLNUTZUNG VERMEIDEN2 2007-2012 Creative Arts & Technologies 3. berblick Einleitung Was ist eine DSL? Interne und Externe DSLs Type-Sicherheit Einheiten im Gesundheitswesen Unit-API, UOMo UCUM, HL7, Groovy in der Gesundheitsbranche Andere Sprachen Jython/WLST Xtext/Xbase/Xtend Scala, Fantom, F# Demo Q&A3 2007-2012 Creative Arts & Technologies 4. Was bin Ich?Werner Keil Consultant Coach Creative Cosmopolitan Open Source Evangelist Software Architect Java Godfather UOMo Lead Twitter @wernerkeil4 2007-2012 Creative Arts & Technologies 5. Was ist eine DSL? Eine DSL ist eine Computersprache (Spezification,Modellierung, Programmierung,) angepasst aneine bestimmte Domne. Doch was ist eineDomne? (siehe nchste Seite;-) DSL Beispiele: SQL, CSS, Sawzall (Google) Gewinn von Aussagekraft undBenutzerfreundlichkeit (kann u.U. Bis zurEntwicklung durch Endbenutzer fhren) Gewinn von Produktivitt Geringerer Wartungsaufwand und -kosten5 2007-2012 Creative Arts & Technologies 6. Was ist eine Domne? Real-TimeBusiness SystemsSystemsRequirements Specification AircraftPatient Insurance control ManagementManagementImplementation systemsSystemsSystems Deployment6 2007-2012 Creative Arts & Technologies 7. Internal Domain Specific Languages Sprachen mit Hilfe syntaktischer Elemente derdarunter liegenden Sprache/Umgebung Im Fall von Java, eine DSL verwendet JavaKlassen und Methoden Bei anderen JVM-basierenden Sprachen ist es inder Regel hnlich, meist wird Java Code oderKlassen generiert7 2007-2012 Creative Arts & Technologies 8. External Domain Specific Languages Externe DSLs Geschriebern in einer eigenen Sprache als der darunterliegenden (Host) Sprache der Anwendung Umgewandelt mit Hilfe eines Compilers, Parsers oder Interpreters Kann auch enthalten XML Konfigurationsdateien Textdateien zur Konfiguration Eigene Sprachen (Meta-DSLs)8 2007-2012 Creative Arts & Technologies 9. Typ-Sicherheit Java hat keine stark typisierten PrimitivenDatentypen (wie etwa Ada). Zwecks Performance nutzen die meistenEntwickler Primitive Datentypen an Stelle derentsprechenden Objekt-Typen. Primitive Datentypen in Argumenten fhren oft zuNamensverwirrung (Methoden mit ident wirkenderSignatur)9 2007-2012 Creative Arts & Technologies 10. Was haben diese Vorflle gemeinsam? Patriot MissileUngenaue Berechnung der Zeit, die seit dem Startverging verursachte den Absturz. Ariane 5 ExplosionFloating point Zahl die in einen Wert umgewandeltwurde, der den verfgbaren 16 bit signed integerberstieg.10 2007-2012 Creative Arts & Technologies 11. Was haben diese Vorflle gemeinsam? Gimli Glider (Beinahe Disaster) Treibstoffmenge falsch berechnet wegen Fehlinterpretation des gerade eingefhrten Metrischen Systems in Kanada, statt des Britischen Imperial System of Units Mars Orbiter Vorlufige Erkenntnisse deuten darauf hin, dass ein Team Englische Einheiten (e.g. inches, feet and pounds) benutzte, whrend andere Teams Metrische Einheiten zur Steuerung der Raumsonde nutzten. NASA lost a $125 million Mars orbiter because a Lockheed Martin engineering team used Englishunits of measurement while the agencys team used the more conventional metric system for a keyspacecraft operation A credible source disclosed, there was a manual step with an outsourced person to convert thesecalculations between the different teams, and NASA budget cuts caused them to fire him and have thewrong, unpatched data transmitted!!! This also underlines the added risk when 3rd party contractors are involved or projects are developedOffshore11 2007-2012 Creative Arts & Technologies 12. Unit Tests helfen hier seltenDem Namen zum Trotz Alle Beispiele illustrieren 3 Kategorien von Fehlern,die man mit Unit Tests nur schwer aufspren kann: Schnittstellen-Fehler (z.B. millisecond/second, radian/degree, meters/feet). Arithmetische Fehler (z.B. overflow). Konvertierungsfehler.17 2007-2012 Creative Arts & Technologies 13. SQL Beispiel mit Fehlern StringBuilder sql = new StringBuilder(); sql.append("SELECT o.sum,(SELECT first_name,last_name"); sql.append(" FROM person p"); sql.append("WHERE o.person_id=p.id) AS client"); sql.append(" FROM order o"); sql.append("WHERE o.id = "+orderId); sql.append(" AND o.status_code IN (?,?)"); PreparedStatement stmt = conn.prepareStatement(sql.toString()); stmt.setString(1, "PAID"); //...19 2007-2012 Creative Arts & Technologies 14. Typ-sicheres SQL Beispiel Person p = new Person(); List> rows = new QueryBuilder(datasource) .from(p) .where(gt(p.height, 170)) .select(p.name, p.height, p.birthday) .list(); for (Tuple row : rows) { String name = row.v1; Integer height = row.v2; Date birthday = row.v3; System.out.println( name + " " + height + " " + birthday); }20 2007-2012 Creative Arts & Technologies 15. Unit-API | Operationen Ergebnis mit Gleicher DimensionAnderer Dimension Binre OperationenBinre Operationen add(double) od. (long)root(int) multiply(double) od. (long) power(int) divide(double) od. (long) multiply(Unit) compound(Unit)divide(Unit) Unre Operationen inverse() 16. UOMo UCUMUnified Code for Units of MeasureUnified Code for Units of Measure ist inspiriert und stark beeinflusst von ISO 2955-1983 ANSI X3.50-1986 HL7s Erweiterungen namens ISO+25 2007-2012 Creative Arts & Technologies 17. HL7 DSL def mySegment = ...// assignment to another NK1 segment instance def group = message.PATIENT_RESULT(0).PATIENT group.NK1(0) = abc // syntax error! msg1.NK1(0) = mySegment// syntax error! msg1.NK1(0).from(mySegment)// works! def nk1= message.PATIENT_RESULT(0).PATIENT.NK1(0) def otherNk1 = message.PATIENT_RESULT(0).PATIENT.NK1(0) nk1[4] = otherNk1[4]// copy address nk1[4][4]= otherNk1[4][4] // copy state or province only nk1[4][4].from(otherNk1[4][4])// equivalent nk1[4][4]= NY // set state or province directly26 2007-2012 Creative Arts & Technologies 18. Healthcare DSL mit GroovyDEMO 19. Jython /** * Java calculator class that contains two simple methods */ public class Calculator {public Calculator(){ }public double calculateTip(double cost, doubletipPercentage) { return cost * tipPercentage;}public double calculateTax(double cost, doubletaxPercentage) { return cost * taxPercentage;} }28 2007-2012 Creative Arts & Technologies 20. Jython (2) import Calculator from java.lang import Math class JythonCalc(Calculator): def __init__(self):pass def calculateTotal(self, cost, tip, tax):return cost + self.calculateTip(tip) + self.calculateTax(tax) if __name__ == "__main__":calc = JythonCalc()cost = 23.75tip = .15tax = .07 print "Starting Cost: ", cost print "Tip Percentage: ", tip print "Tax Percentage: ", tax print Math.round(calc.calculateTotal(cost, tip, tax))29 2007-2012 Creative Arts & Technologies 21. Jython (3)Result Starting Cost: 23.75 Tip Percentage: 0.15 Tax Percentage: 0.07 2930 2007-2012 Creative Arts & Technologies 22. Xtext ExamplesDEMO 23. Scala, Fantom, F# Scala Functional programming language. Type-safe, as the company driving it was called. Very popular for DSLs Fantom Functional programming language Units of Measurement support built in. Runs on both JVM and CLR F# Functional programming language Units of Measurement support built in.33 2007-2012 Creative Arts & Technologies 24. Scala und Fantom BeispieleDEMO 25. Links Eclipse Project UOMo http://www.eclipse.org/uomo/ Units of Measurement API http://www.unitsofmeasurement.org UCUM http://www.unitsofmeasure.org 26. Links (2) OpenHealth Project http://www.openhealth.org Groovy DSL Example http://groovy.dzone.com/news/domain- specific-language-unit- Jython http://www.jython.org 27. Links (3) Xtext http://www.eclipse.org/xtext Scala DSLs http://www.scala-lang.org/node/1403 Fantom http://fantom.org/ 28. FragenQ&A 29. Kontaktwerner@catmedia.us oderuomo@catmedia.usTwitter: @wernerkeilHashtag #EclipseUOMo