Haskell aus einer Java EE
Perspektive
Torsten Fink
torsten.fink@akquinet.de
akquinet
Zu meiner Person
1999-2003:
 Promotion über ausführbare Softwarearchitekturen
   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äftsführer der akquinet tech@spree

Copyright © 2010 – akquinet AG                       08.04.2013   2
Unsere Unternehmensstruktur
EK: Eigenkapital          Geschäftsprozesse                        akquinet AG                    Institut für Softwaretechnik
                          business consulting GmbH                 2,4 Mio. € EK                  und Outsourcing an der FH
                          100 T€ EK                                                               Wedel GmbH 100 T€ EK




                   JAVA                               SAP                          Microsoft / .NET                   Outsourcing

       Java/JBoss                           Security                         MS ERP Lösungen                     RZ Betrieb
       tech@spree GmbH                      enterprise solutions             dynamic solutions GmbH              outsourcing gem. GmbH
       300 T€ EK                            GmbH 130 T€ EK                   370 T€ EK                           250 T€ EK
       Java Entwicklung                     Öffentlicher Sektor              Logistik Lösungen                   RZ Services
       engineering GmbH                     public consulting &              SLS logistics GmbH                  business service GmbH
       50 T€ EK                             services GmbH                    250 T€ EK                           25 T€ EK
       agile Entwicklung                    100 T€ EK
                                                                             CRM und Sharepoint                  Infrastruktur
       it-agile GmbH                        ECM-Lösungen, Polen              business solutions                  system integration GmbH
       100 T€ EK                            gbs GmbH 25 T€ EK                GmbH 100 T€ EK                      125 T€ EK
                                            SAP-Lösungen,                    Business Intelligence               Applikationen
                                            Österreich                       finance und controllling            hosting services GmbH
                                            HKS business techn.              GmbH 100 T€ EK                      125 T€ EK
                                            GmbH 75 T€ EK
                                                                             Sozialwirtschaft                    RZ Planung und
                                                                             care GmbH 100 T€ EK                 Erstellung
                                                                                                                 data center competence
                                                                             Sanitätshäuser                      GmbH 100 T€ EK
                                                                             ristec GmbH 52 T€ EK

                                                                                                                        08.04.2013         3
Memories....




Copyright © 2010 – akquinet AG   08.04.2013   4
Die Programmiersprache

     What lies beneath..




Copyright © 2010 – akquinet AG   08.04.2013   5
Historien anhand der Standards

Haskell
                            Haskell-98           Haskell 2010
 1.0


1990 1997 1999                               2006    2010
  1995 1998                               2005    2009 2011

Java             JDK             JEE     JDK   JEE   JEE   JDK
1.0a             1.1             1.2     5.0   5.0   6.0   7.0

Copyright © 2010 – akquinet AG                                  08.04.2013   6
Mal zusammengefasst:




Copyright © 2010 – akquinet AG   08.04.2013   7
Was ist cool an Haskell?
     ... und wird von Java so
     nicht geboten...




Copyright © 2010 – akquinet AG   08.04.2013   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
Copyright © 2010 – akquinet AG                      08.04.2013   9
Algebraische Datentypen
Aufbau per Konstrukturen
      data BinTreeT a =
       Tree (BinTreeT a) a (BinTreeT a) |
       Empty

Zugriff per Patterns
      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

Copyright © 2010 – akquinet AG                                08.04.2013   10
Aber, was ist
mit Kapselung?
Mit Modulen!

Konzept:
 Verbergen der Konstruktoren
  => kein Pattern-Matching       module ADT
  => kein Zugriff auf Interna    ( binSearch
 Export von Erzeugungs-         , BinTreeT
  funktionen                     , createBinTree
                                 )
                                 where
=> Einfach und effektiv          ....

Copyright © 2010 – akquinet AG            08.04.2013   12
OO mit Funktionen ohne Daten

Typeklassen                      class Eq a => Ord a where
                                  compare :: a -> a ->
 Menge von                                        Ordering
  Funktionen, die es für           (<) :: a -> a -> Bool
                                   (>) :: a -> a -> Bool
  einen Datentyp                   … -- Snip
  geben muss                       x < y =
                                    case compare x y of
 unterstützen                        LT -> True
                                      _ -> False
  Mehrfachvererbung
                                 instance (Ord a) =>
 erlauben                         Ord (BinTreeT a) where
  Standardimplementie            … -- Snip
  rung
Copyright © 2010 – akquinet AG                      08.04.2013   13
Eine letztes Wort zu Typen

Haskell ist statisch stark typisiert.
D.h.
 jeder Ausdruck hat zur Compilezeit einen geprüften
  konkreten Typ
 keine Typfehler zur Laufzeit
 Optimierungsmöglichkeiten, da Typinformation zur
  Laufzeit nicht mehr benötigt

Und praktisch:
 Einsatz von Typen zur fachlichen Modellierung ermöglicht
  teilweise Korrektheitsprüfungen bei der Übersetzung

Copyright © 2010 – akquinet AG                    08.04.2013   14
Und nun das Beste!

                                 Referentielle 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
Copyright © 2010 – akquinet AG                             08.04.2013   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 Abstraktion von System
 Orientierung an Posix und Unix
  (=> kein VM-Konzept)

Und, ja, Funktionen als 1st Class Citizen...

Copyright © 2010 – akquinet AG                 08.04.2013   16
Gibt es
auch
Probleme?
The Ugly...
Verzögerte Auswertung
 erzeugt selten schwer auffindbaren Speicherverbrauch

Typinferenz
 Funktioniert gut, erschreckt gerne mit
  Fehlermeldungen

Entwurfsentscheidungen
 waren manchmal unklug
 Bsp: String als [Char]
  Ergebnis:
  – zwei verbreitete Alternativen:
    Text, ByteString
  – Compiler-Erweiterung zum einfacheren Handling
Copyright © 2010 – akquinet AG                      08.04.2013   18
Frameworks
     Werkzeuge
     Im Schweinsgalopp...




Copyright © 2010 – akquinet AG   08.04.2013   19
Klassifikation von Frameworks




Copyright © 2010 – akquinet AG   08.04.2013   20
Yesod
     typsicher, REST-basiert und
     effizient




Copyright © 2010 – akquinet AG     08.04.2013   21
Die Oberfläche




Copyright © 2010 – akquinet AG   08.04.2013   22
Verknüpfung zu Haskell




Copyright © 2010 – akquinet AG   08.04.2013   23
Weitere Yesod-Features

Schneller Entwicklungsmodus
 Automatisches inkrementelle Übersetzung

REST mit JSON
 Gut geeignet für Single-Page-Anwendungen

Internationalisierung

Authentisierung
 mit Standardmodulen für OpenID, BrowserID, Oauth

Copyright © 2010 – akquinet AG               08.04.2013   24
Tests

                                 BDD mit HSpec




    Automatische Testdatenerzeugung mit QuickCheck
Copyright © 2010 – akquinet AG                   08.04.2013   25
Cabal, Hackage




Copyright © 2010 – akquinet AG   08.04.2013   26
Zusammengefasst




Copyright © 2010 – akquinet AG   08.04.2013   27
Gibt es
auch
Probleme?
The Ugly ....

Cabal, Hackage
 DLL-Hell^2, schnell ein Versions-
  Chaos
 IMHO: Es fehlt an Standard-
  plattformen
Yesod
 Cool, aber kein Standard
Es fehlt:
 JMS, XA

Copyright © 2010 – akquinet AG        08.04.2013   29
Resümee

     ... And the winner is ...




Copyright © 2010 – akquinet AG   08.04.2013   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

Sonstiges
 #Java-Entwickler > #Haskell-Entwickler
 Wesentlich mehr Investitionen im Java-Bereich
Copyright © 2010 – akquinet AG                     08.04.2013   31
Your
Choice!




Copyright © 2010 – akquinet AG   08.04.2013   32

Haskell aus einer Java EE Perspektive

  • 1.
    Haskell aus einerJava EE Perspektive Torsten Fink torsten.fink@akquinet.de akquinet
  • 2.
    Zu meiner Person 1999-2003: Promotion über ausführbare Softwarearchitekturen 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äftsführer der akquinet tech@spree Copyright © 2010 – akquinet AG 08.04.2013 2
  • 3.
    Unsere Unternehmensstruktur EK: Eigenkapital Geschäftsprozesse akquinet AG Institut für Softwaretechnik business consulting GmbH 2,4 Mio. € EK und Outsourcing an der FH 100 T€ EK Wedel GmbH 100 T€ EK JAVA SAP Microsoft / .NET Outsourcing Java/JBoss Security MS ERP Lösungen RZ Betrieb tech@spree GmbH enterprise solutions dynamic solutions GmbH outsourcing gem. GmbH 300 T€ EK GmbH 130 T€ EK 370 T€ EK 250 T€ EK Java Entwicklung Öffentlicher Sektor Logistik Lösungen RZ Services engineering GmbH public consulting & SLS logistics GmbH business service GmbH 50 T€ EK services GmbH 250 T€ EK 25 T€ EK agile Entwicklung 100 T€ EK CRM und Sharepoint Infrastruktur it-agile GmbH ECM-Lösungen, Polen business solutions system integration GmbH 100 T€ EK gbs GmbH 25 T€ EK GmbH 100 T€ EK 125 T€ EK SAP-Lösungen, Business Intelligence Applikationen Österreich finance und controllling hosting services GmbH HKS business techn. GmbH 100 T€ EK 125 T€ EK GmbH 75 T€ EK Sozialwirtschaft RZ Planung und care GmbH 100 T€ EK Erstellung data center competence Sanitätshäuser GmbH 100 T€ EK ristec GmbH 52 T€ EK 08.04.2013 3
  • 4.
    Memories.... Copyright © 2010– akquinet AG 08.04.2013 4
  • 5.
    Die Programmiersprache What lies beneath.. Copyright © 2010 – akquinet AG 08.04.2013 5
  • 6.
    Historien anhand derStandards Haskell Haskell-98 Haskell 2010 1.0 1990 1997 1999 2006 2010 1995 1998 2005 2009 2011 Java JDK JEE JDK JEE JEE JDK 1.0a 1.1 1.2 5.0 5.0 6.0 7.0 Copyright © 2010 – akquinet AG 08.04.2013 6
  • 7.
    Mal zusammengefasst: Copyright ©2010 – akquinet AG 08.04.2013 7
  • 8.
    Was ist coolan Haskell? ... und wird von Java so nicht geboten... Copyright © 2010 – akquinet AG 08.04.2013 8
  • 9.
    Verzögerte Auswertung Die Mengeder 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 Copyright © 2010 – akquinet AG 08.04.2013 9
  • 10.
    Algebraische Datentypen Aufbau perKonstrukturen data BinTreeT a = Tree (BinTreeT a) a (BinTreeT a) | Empty Zugriff per Patterns 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 Copyright © 2010 – akquinet AG 08.04.2013 10
  • 11.
  • 12.
    Mit Modulen! Konzept:  Verbergender Konstruktoren => kein Pattern-Matching module ADT => kein Zugriff auf Interna ( binSearch  Export von Erzeugungs- , BinTreeT funktionen , createBinTree ) where => Einfach und effektiv .... Copyright © 2010 – akquinet AG 08.04.2013 12
  • 13.
    OO mit Funktionenohne Daten Typeklassen class Eq a => Ord a where compare :: a -> a ->  Menge von Ordering Funktionen, die es für (<) :: a -> a -> Bool (>) :: a -> a -> Bool einen Datentyp … -- Snip geben muss x < y = case compare x y of  unterstützen LT -> True _ -> False Mehrfachvererbung instance (Ord a) =>  erlauben Ord (BinTreeT a) where Standardimplementie … -- Snip rung Copyright © 2010 – akquinet AG 08.04.2013 13
  • 14.
    Eine letztes Wortzu Typen Haskell ist statisch stark typisiert. D.h.  jeder Ausdruck hat zur Compilezeit einen geprüften konkreten Typ  keine Typfehler zur Laufzeit  Optimierungsmöglichkeiten, da Typinformation zur Laufzeit nicht mehr benötigt Und praktisch:  Einsatz von Typen zur fachlichen Modellierung ermöglicht teilweise Korrektheitsprüfungen bei der Übersetzung Copyright © 2010 – akquinet AG 08.04.2013 14
  • 15.
    Und nun dasBeste! Referentielle 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 Copyright © 2010 – akquinet AG 08.04.2013 15
  • 16.
    Weitere Unterschiede zuJava Übersetzung in Binärcode  Schnelle Startzeiten, keine externe Laufzeitumgebung (Bsp. Hello World: C 2ms; Haskell 3ms; Java 157ms) System-näher  Sehr dünne Abstraktion von System  Orientierung an Posix und Unix (=> kein VM-Konzept) Und, ja, Funktionen als 1st Class Citizen... Copyright © 2010 – akquinet AG 08.04.2013 16
  • 17.
  • 18.
    The Ugly... Verzögerte Auswertung erzeugt selten schwer auffindbaren Speicherverbrauch Typinferenz  Funktioniert gut, erschreckt gerne mit Fehlermeldungen Entwurfsentscheidungen  waren manchmal unklug  Bsp: String als [Char] Ergebnis: – zwei verbreitete Alternativen: Text, ByteString – Compiler-Erweiterung zum einfacheren Handling Copyright © 2010 – akquinet AG 08.04.2013 18
  • 19.
    Frameworks Werkzeuge Im Schweinsgalopp... Copyright © 2010 – akquinet AG 08.04.2013 19
  • 20.
    Klassifikation von Frameworks Copyright© 2010 – akquinet AG 08.04.2013 20
  • 21.
    Yesod typsicher, REST-basiert und effizient Copyright © 2010 – akquinet AG 08.04.2013 21
  • 22.
    Die Oberfläche Copyright ©2010 – akquinet AG 08.04.2013 22
  • 23.
    Verknüpfung zu Haskell Copyright© 2010 – akquinet AG 08.04.2013 23
  • 24.
    Weitere Yesod-Features Schneller Entwicklungsmodus Automatisches inkrementelle Übersetzung REST mit JSON  Gut geeignet für Single-Page-Anwendungen Internationalisierung Authentisierung  mit Standardmodulen für OpenID, BrowserID, Oauth Copyright © 2010 – akquinet AG 08.04.2013 24
  • 25.
    Tests BDD mit HSpec Automatische Testdatenerzeugung mit QuickCheck Copyright © 2010 – akquinet AG 08.04.2013 25
  • 26.
    Cabal, Hackage Copyright ©2010 – akquinet AG 08.04.2013 26
  • 27.
    Zusammengefasst Copyright © 2010– akquinet AG 08.04.2013 27
  • 28.
  • 29.
    The Ugly .... Cabal,Hackage  DLL-Hell^2, schnell ein Versions- Chaos  IMHO: Es fehlt an Standard- plattformen Yesod  Cool, aber kein Standard Es fehlt:  JMS, XA Copyright © 2010 – akquinet AG 08.04.2013 29
  • 30.
    Resümee ... And the winner is ... Copyright © 2010 – akquinet AG 08.04.2013 30
  • 31.
    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 Sonstiges  #Java-Entwickler > #Haskell-Entwickler  Wesentlich mehr Investitionen im Java-Bereich Copyright © 2010 – akquinet AG 08.04.2013 31
  • 32.
    Your Choice! Copyright © 2010– akquinet AG 08.04.2013 32