Haskell aus einer Java EE Perspek1ve. Torsten Fink torsten.fink@akquinet.de akquinet

Ähnliche Dokumente
CGI Programmierung mit Ha. Markus Schwarz

Chancen agiler Softwareentwicklung. Dipl.-Inform. Henning Wolf Geschäftsführer der akquinet agile GmbH

Sicherheitsaspekte bei der Einführung von Bring Your Own Device in Unternehmen. Philipp Kumar

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

jbpm5 in Java EE 6 Marek Iwaszkiewicz Pascal Schaerf akquinet AG

ALP I. Funktionale Programmierung

Funktionale Programmierung mit Haskell

WebSphere Application Server Installation

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Microsoft (Dynamics) CRM 2020: Wie verändern sich Markt, Eco-System und Anwendungsszenarien nach Cloud & Co?

Grundbegriffe der Informatik

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

.NET Code schützen. Projekt.NET. Version 1.0

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

10 Erweiterung und Portierung

white sheep GmbH Unternehmensberatung Schnittstellen Framework

Übungen zur Softwaretechnik

Programmieren in Haskell Einführung

BPMN verdrängt die EPK? Warum BPMN alleine nicht reicht

Der lokale und verteilte Fall

Abacus Formula Compiler (AFC)

Vorkurs Informatik WiSe 15/16

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Microsoft SharePoint 2013 Designer

Die Orgadata AG ist ein stark expandierendes Software-Unternehmen aus Leer. Mit unserem System LogiKal

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Cad-OasEs Int. GmbH. 20 Jahre UG/NX Erfahrung prägen Methodik und Leistungen. Nutzen Sie dieses Wissen!

B12-TOUCH VERSION 3.5

Der medizinische Fall Wie vernetzt man Leistungserbringer unterschiedlicher Sektoren datenschutzkonform?

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger

Erfahrungen aus einem großen agilen Projekt. Dipl.-Inform. Henning Wolf Geschäftsführer

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Objektorientierte Programmierung

Konsolidierung und Neuimplementierung von VIT. Aufgabenbeschreibung für das Software Engineering Praktikum an der TU Darmstadt

Java Webentwicklung (mit JSP)

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Javakurs zu Informatik I. Henning Heitkötter

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Virtual Roundtable: Business Intelligence - Trends

Viele Bilder auf der FA-Homepage

SERVICE SUCHE ZUR UNTERSTÜTZUNG

Swetlana Stickhof. Universität Heidelberg

ObjectBridge Java Edition

Fussball.de JavaScript

CL-Mini-ABF. Kurzbeschreibung. Installation und Vorbereitung. Stand Ihre HTK-Filiale Michelstadt

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Straumann CARES Visual 8.5.1

ARAkoll 2013 Dokumentation. Datum:

Vereinfachte Ticketerfassung oxando GmbH

Arbeiten mit UMLed und Delphi

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Built to last: Modernisierung von Java-Anwendungen

HP Service Virtualization. Bernd Schindelasch 19. Juni 2013

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Algorithmen mit Python

EIDAMO Webshop-Lösung - White Paper

Java: Vererbung. Teil 3: super()

Erfahrungen mit Hartz IV- Empfängern

Neuerungen in den SK-Programmen Version 3.1 Stand: Juni 2004

amball ECM business day

Visual Basic Express Debugging

Windows XP Jugendschutz einrichten. Monika Pross Molberger PC-Kurse

WPF Steuerelemente Listbox, ComboBox, ListView,

Java Enterprise Architekturen Willkommen in der Realität

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Einführung in die Java- Programmierung

organice CRM 2012 Die Neuerungen für den Entscheider

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

IMS - Learning Design

Übung - Konfigurieren einer Windows-XP-Firewall

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Pfarrverwaltung (Pfarrpaket)

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

OptaPlanner hilft bei verteilten Schulstandorten. Dr. Torsten Fink

Welche Gedanken wir uns für die Erstellung einer Präsentation machen, sollen Ihnen die folgende Folien zeigen.

Java EE Projektseminar

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Kapitel 12 Dokumentation und Zugriffsrechte

Übung Theoretische Grundlagen

FlowFact Alle Versionen

Java Entwicklung für Embedded Devices Best & Worst Practices!

Kurzanleitung zu XML2DB

Die Invaliden-Versicherung ändert sich

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Software Maintenance - Musterlösung zum Übungsblatt 1

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Effizientes Dokumenten und Belegmanagement in verteilten maritimen Geschäftsprozessen

pro.s.app document status check Bringen Sie mehr Transparenz in Ihre Dokumente

Programmieren was ist das genau?

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Neue Funktionalität in mobidas 1.3. erp Serie

Transkript:

Haskell aus einer Java EE Perspek1ve Torsten Fink torsten.fink@akquinet.de akquinet

Zu meiner Person 1999-2003: Promo5on über ausführbare So;warearchitekturen für verteilte Systeme Ab 2004: Berater bei der akquinet technischer Architekt in J2EE- Projekten Projektleitung Betriebsführung, Wartung klassische Beratung und Schulungen 2006-2010: Leiter des JBoss- Competence- Centers bei der akquinet Ab 2011: Geschä;sführer der akquinet tech@spree 2

Unsere Unternehmensstruktur EK: Eigenkapital Geschä;sprozesse business consuleng GmbH 100 T EK akquinet AG 2,4 Mio. EK Ins7tut für So'waretechnik und Outsourcing an der FH Wedel GmbH 100 T EK JAVA SAP MicrosoX /.NET Outsourcing Java/JBoss tech@spree GmbH 300 T EK Security enterprise solu5ons GmbH 130 T EK MS ERP Lösungen dynamic solu5ons GmbH 370 T EK RZ Betrieb outsourcing gem. GmbH 250 T EK Java Entwicklung engineering GmbH 50 T EK agile Entwicklung it- agile GmbH 100 T EK Öffentlicher Sektor public consul5ng & services GmbH 100 T EK ECM- Lösungen, Polen gbs GmbH 25 T EK SAP- Lösungen, Österreich HKS business techn. GmbH 75 T EK Logis1k Lösungen SLS logis5cs GmbH 250 T EK CRM und Sharepoint business solu5ons GmbH 100 T EK Business Intelligence finance und controllling GmbH 100 T EK SozialwirtschaX care GmbH 100 T EK Sanitätshäuser ristec GmbH 52 T EK RZ Services business service GmbH 25 T EK Infrastruktur system integra5on GmbH 125 T EK Applika1onen hos5ng services GmbH 125 T EK RZ Planung und Erstellung data center competence GmbH 100 T EK 3

Memories... 4

Die Programmiersprache What lies beneath.. 5

Historien anhand der Standards Haskell 1.0 Haskell-98 Haskell 2010 1990 1997 1999 1995 1998 2006 2010 2005 2009 2011 Java 1.0a JDK 1.1 JEE 1.2 JDK 5.0 JEE 5.0 JEE 6.0 JDK 7.0 6

Mal zusammengefasst: Copyright 2010 akquinet AG 7

Was ist cool an Haskell?... und wird von Java so nicht geboten... 8

Verzögerte Auswertung Die Menge der natürlichen Zahlen: n = [1..] Alle geraden Zahlen: g = [ x x <- [1..], even x ] Was man damit tun kann? z.b. Nummerierung von Textzeilen lines :: [String] numberedlines = zip n lines :: [(Integer, String)] Abstrahiert: Schwerpunkt auf Beschreibung von Daten und nicht auf Berechnung 9

Algebraische Datentypen Aueau per Konstrukturen data BinTreeT a = Tree (BinTreeT a) a (BinTreeT a) Empty Zugriff per Pagerns binsearch::(ord a)=> a->(bintreet a)->bool binsearch _ Empty = False binsearch search (Tree left value right) search < value = binsearch search left search > value = binsearch search right search == value = True => Ermöglicht kurzen, lesbaren Code 10

Aber, was ist mit Kapselung?

Mit Modulen! Konzept: Verbergen der Konstruktoren => kein Pagern- Matching => kein Zugriff auf Interna Export von Erzeugungs- funk5onen => Einfach und effek1v module ADT ( binsearch, BinTreeT, createbintree ) where... 12

OO mit Funk1onen ohne Daten Typeklassen Menge von Funk5onen, die es für einen Datentyp geben muss unterstützen Mehrfachvererbung erlauben Standardimplemen5e rung class Eq a => Ord a where compare :: a -> a -> Ordering (<) :: a -> a -> Bool (>) :: a -> a -> Bool -- Snip x < y = case compare x y of LT -> True _ -> False instance (Ord a) => Ord (BinTreeT a) where -- Snip 13

Eine letztes Wort zu Typen Haskell ist sta1sch stark typisiert. D.h. jeder Ausdruck hat zur Compilezeit einen geprü;en konkreten Typ keine Typfehler zur Laufzeit Op5mierungsmöglichkeiten, da Typinforma5on zur Laufzeit nicht mehr benö5gt Und prak1sch: Einsatz von Typen zur fachlichen Modellierung ermöglicht teilweise Korrektheitsprüfungen bei der Übersetzung 14

Und nun das Beste! Referen1elle Transparenz a = f b c d e g => a wird sich nie ändern Keine Seiteneffekte! Wesentlich einfachere Programm- und damit Fehleranalyse I/O über Monadenkonzept 15

Weitere Unterschiede zu Java Übersetzung in Binärcode Schnelle Startzeiten, keine externe Laufzeitumgebung (Bsp. Hello World: C 2ms; Haskell 3ms; Java 157ms) System- näher Sehr dünne Abstrak5on von System Orien5erung an Posix und Unix (=> kein VM- Konzept) Und, ja, Funk1onen als 1st Class Ci1zen... 16

Gibt es auch Probleme?

The Ugly... Verzögerte Auswertung erzeugt selten schwer auffindbaren Speicherverbrauch Typinferenz Funk5oniert gut, erschreckt gerne mit Fehlermeldungen Entwurfsentscheidungen waren manchmal unklug Bsp: String als [Char] Ergebnis: zwei verbreitete Alterna5ven: Text, ByteString Compiler- Erweiterung zum einfacheren Handling 18

Frameworks Werkzeuge Im Schweinsgalopp... 19

Klassifika1on von Frameworks 20

Yesod typsicher, REST- basiert und effizient 21

Die Oberfläche 22

Verknüpfung zu Haskell 23

Weitere Yesod- Features Schneller Entwicklungsmodus Automa5sches inkrementelle Übersetzung REST mit JSON Gut geeignet für Single- Page- Anwendungen Interna1onalisierung Authen1sierung mit Standardmodulen für OpenID, BrowserID, Oauth 24

Tests BDD mit HSpec Automatische Testdatenerzeugung mit QuickCheck 25

Cabal, Hackage 26

Zusammengefasst 27

Gibt es auch Probleme?

The Ugly... Cabal, Hackage DLL- Hell^2, schnell ein Versions- Chaos IMHO: Es fehlt an Standard- plazormen Yesod Cool, aber kein Standard Es fehlt: JMS, XA 29

Resümee... And the winner is... 30

Resümee Vergleich der Programmiersprache Haskell deutlich klarer und weiter trotz gewachsener Schrunden Java punktet mit Standardbibliotheken Vergleich der Frameworks Java führt, insb. im Enterprise- Sektor Haskell hat genug für autonome Webanwendungen Sons1ges #Java- Entwickler > #Haskell- Entwickler Wesentlich mehr Inves55onen im Java- Bereich 31

Your Choice! 32

Historien Haskell 1990: Sprachspezifika5on 1.0 nach 3 Jahren Komiteearbeit Ziel: Konsolidierung der funk5onalen Programmiersprachen benannt nach Haskell Curry 1998: Haskell- 98 Aufräumen von Haskell 1.4, Einführung von Standardbibliotheken 2010: Haskell- 2010 Erweiterung/Aufräumen der Sprache; neue Versionen im Jahresrythmus um Sprache zu entwickeln Java 1995: Version 1.0a 1997: JDK 1.1 JDBC, RMI 1998: JDK 1.2 Swing, Collec5ons 1999: Java EE 1.2 EJB, JMS, JTA, JSP 2000: JDK 1.3 HotSpot, JNDI 2001: Java EE 1.3 JAAS 2002: JDK 1.4 neue Bibliotheken 2003: Java EE 1.4 JSF, JMX 2005: JDK 5.0 einige Spracherweiterungen (Generics, Autoboxing...) 2006: JDK 6 Aktualisierungen, Verbesserungen 2006: Java EE 5 Anpassung an Spracherweiterungen, JPA 2009: Java EE 6 CDI 2011: JDK 7 kleine Spracherweiterungen 33