Haskell aus einer Java EE PerspektiveTorsten [email protected]
209.04.2023Copyright © 2010 – akquinet AG
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
309.04.2023
Unsere Unternehmensstruktur
JAVA
Java/JBosstech@spree GmbH 300 T€ EK
Java Entwicklung engineering GmbH 50 T€ EK
agile Entwicklungit-agile GmbH 100 T€ EK
SAP
Securityenterprise solutions GmbH 130 T€ EK
Öffentlicher Sektorpublic consulting & services GmbH 100 T€ EK
ECM-Lösungen, Polengbs GmbH 25 T€ EK
SAP-Lösungen, ÖsterreichHKS business techn. GmbH 75 T€ EK
akquinet AG2,4 Mio. € EK
Institut für Softwaretechnik und Outsourcing an der FH Wedel GmbH 100 T€ EK
Outsourcing
RZ Betrieboutsourcing gem. GmbH 250 T€ EK
RZ Servicesbusiness service GmbH 25 T€ EK
Infrastruktursystem integration GmbH 125 T€ EK
Applikationenhosting services GmbH 125 T€ EK
RZ Planung und Erstellungdata center competence GmbH 100 T€ EK
Microsoft / .NET
MS ERP Lösungendynamic solutions GmbH 370 T€ EK
Logistik LösungenSLS logistics GmbH 250 T€ EK
CRM und Sharepointbusiness solutions GmbH 100 T€ EK
Business Intelligencefinance und controllling GmbH 100 T€ EK
Sozialwirtschaftcare GmbH 100 T€ EK
Sanitätshäuserristec GmbH 52 T€ EK
EK: Eigenkapital Geschäftsprozessebusiness consulting GmbH 100 T€ EK
409.04.2023Copyright © 2010 – akquinet AG
Memories....
Die Programmiersprache
What lies beneath..
509.04.2023Copyright © 2010 – akquinet AG
609.04.2023Copyright © 2010 – akquinet AG
Historien anhand der Standards
1990
Haskell 1.0
1998
Haskell-98
2010
Haskell 2010
1995
Java1.0a
1997
JDK1.1
1999
JEE1.2
2005
JDK5.0
2006
JEE5.0
2011
JDK7.0
2009
JEE6.0
709.04.2023Copyright © 2010 – akquinet AG
Mal zusammengefasst:
Was ist cool an Haskell?
... und wird von Java so nicht geboten...
809.04.2023Copyright © 2010 – akquinet AG
909.04.2023Copyright © 2010 – akquinet AG
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 Textzeilenlines :: [String]numberedLines = zip n lines :: [(Integer, String)]
Abstrahiert: Schwerpunkt auf Beschreibung von Daten und nicht auf Berechnung
1009.04.2023Copyright © 2010 – akquinet AG
Algebraische Datentypen
Aufbau per Konstrukturendata BinTreeT a = Tree (BinTreeT a) a (BinTreeT a) | Empty
Zugriff per Patterns
binSearch::(Ord a)=> a->(BinTreeT a)->Bool
binSearch _ Empty = FalsebinSearch search (Tree left value right) | search < value = binSearch search left | search > value = binSearch search right | search == value = True
=> Ermöglicht kurzen, lesbaren Code
Aber, was ist mit Kapselung?
1209.04.2023Copyright © 2010 – akquinet AG
Mit Modulen!
Konzept:Verbergen der Konstruktoren
=> kein Pattern-Matching=> kein Zugriff auf Interna
Export von Erzeugungs-funktionen
=> Einfach und effektiv
module ADT( binSearch, BinTreeT, createBinTree)where ....
1309.04.2023Copyright © 2010 – akquinet AG
OO mit Funktionen ohne Daten
TypeklassenMenge von
Funktionen, die es für einen Datentyp geben muss
unterstützen Mehrfachvererbung
erlauben Standardimplementierung
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
1409.04.2023Copyright © 2010 – akquinet AG
Eine letztes Wort zu Typen
Haskell ist statisch stark typisiert.
D.h.jeder Ausdruck hat zur Compilezeit einen geprüften konkreten
Typkeine Typfehler zur LaufzeitOptimierungsmö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
1509.04.2023Copyright © 2010 – akquinet AG
Und nun das Beste!
Referentielle Transparenza = f b c d e g
=> a wird sich nie ändernKeine Seiteneffekte!Wesentlich einfachere
Programm- und damit Fehleranalyse
I/O über Monadenkonzept
1609.04.2023Copyright © 2010 – akquinet AG
Weitere Unterschiede zu Java
Übersetzung in BinärcodeSchnelle Startzeiten, keine externe Laufzeitumgebung
(Bsp. Hello World: C 2ms; Haskell 3ms; Java 157ms)
System-näherSehr dünne Abstraktion von SystemOrientierung an Posix und Unix
(=> kein VM-Konzept)
Und, ja, Funktionen als 1st Class Citizen...
Gibt esauch Probleme?
1809.04.2023Copyright © 2010 – akquinet AG
The Ugly...
Verzögerte Auswertungerzeugt selten schwer auffindbaren Speicherverbrauch
TypinferenzFunktioniert gut, erschreckt gerne mit
Fehlermeldungen
Entwurfsentscheidungenwaren manchmal unklugBsp: String als [Char]
Ergebnis:– zwei verbreitete Alternativen:
Text, ByteString– Compiler-Erweiterung zum einfacheren Handling
FrameworksWerkzeugeIm Schweinsgalopp...
1909.04.2023Copyright © 2010 – akquinet AG
2009.04.2023Copyright © 2010 – akquinet AG
Klassifikation von Frameworks
Yesod
typsicher, REST-basiert und effizient
2109.04.2023Copyright © 2010 – akquinet AG
2209.04.2023Copyright © 2010 – akquinet AG
Die Oberfläche
2309.04.2023Copyright © 2010 – akquinet AG
Verknüpfung zu Haskell
2409.04.2023Copyright © 2010 – akquinet AG
Weitere Yesod-Features
Schneller EntwicklungsmodusAutomatisches inkrementelle Übersetzung
REST mit JSONGut geeignet für Single-Page-Anwendungen
Internationalisierung
Authentisierungmit Standardmodulen für OpenID, BrowserID, Oauth
2509.04.2023Copyright © 2010 – akquinet AG
Tests
BDD mit HSpec
Automatische Testdatenerzeugung mit QuickCheck
2609.04.2023Copyright © 2010 – akquinet AG
Cabal, Hackage
2709.04.2023Copyright © 2010 – akquinet AG
Zusammengefasst
Gibt esauch Probleme?
2909.04.2023Copyright © 2010 – akquinet AG
The Ugly ....
Cabal, HackageDLL-Hell^2, schnell ein Versions-
ChaosIMHO: Es fehlt an Standard-
plattformen
YesodCool, aber kein Standard
Es fehlt:JMS, XA
Resümee
... And the winner is ...
3009.04.2023Copyright © 2010 – akquinet AG
3109.04.2023Copyright © 2010 – akquinet AG
Resümee
Vergleich der ProgrammierspracheHaskell deutlich klarer und weiter trotz gewachsener SchrundenJava punktet mit Standardbibliotheken
Vergleich der FrameworksJava führt, insb. im Enterprise-SektorHaskell hat genug für autonome Webanwendungen
Sonstiges#Java-Entwickler > #Haskell-EntwicklerWesentlich mehr Investitionen im Java-Bereich
3209.04.2023Copyright © 2010 – akquinet AG
YourChoice!