32
Haskell aus einer Java EE Perspektive Torsten Fink [email protected] akquinet

Haskell aus einer Java EE Perspektive

Embed Size (px)

DESCRIPTION

Die funktionale Programmiersprache Haskell ist über viele Jahre im akademischen Kontext entstanden und gereift. In der kommerziellen Geschäftswelt kam sie dagegen praktisch nie zum Einsatz. Nun hat sich in den letzten Jahren Haskell und insbesondere das begleitende Umfeld massiv gewandelt. Es ist nun möglich mit dem Benutzer zu interagieren, größere Projekte zu verwalten, Datenbanken anzusprechen und Webanwendungen zu erstellen. Dabei bleiben die Vorteile von Haskell als reine, also durchgehend seiteneffektfreie Programmiersprache erhalten. In diesem Vortrag werden wir, evtl. etwas schwärmerisch, die programmiersprachlichen Vorteile von Haskell kurz vorstellen, und dann aufzeigen, was sich im Umfeld der Programmiersprache an Werkzeugen entwickelt hat zur Erstellung typischer Geschäftsanwendungen. Die Messlatte wird dabei Java mit seiner reichhaltigen Ökosphere sein.

Citation preview

Page 1: Haskell aus einer Java EE Perspektive

Haskell aus einer Java EE PerspektiveTorsten [email protected]

Page 2: Haskell aus einer Java EE Perspektive

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

Page 3: Haskell aus einer Java EE Perspektive

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

Page 4: Haskell aus einer Java EE Perspektive

409.04.2023Copyright © 2010 – akquinet AG

Memories....

Page 5: Haskell aus einer Java EE Perspektive

Die Programmiersprache

What lies beneath..

509.04.2023Copyright © 2010 – akquinet AG

Page 6: Haskell aus einer Java EE Perspektive

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

Page 7: Haskell aus einer Java EE Perspektive

709.04.2023Copyright © 2010 – akquinet AG

Mal zusammengefasst:

Page 8: Haskell aus einer Java EE Perspektive

Was ist cool an Haskell?

... und wird von Java so nicht geboten...

809.04.2023Copyright © 2010 – akquinet AG

Page 9: Haskell aus einer Java EE Perspektive

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

Page 10: Haskell aus einer Java EE Perspektive

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

Page 11: Haskell aus einer Java EE Perspektive

Aber, was ist mit Kapselung?

Page 12: Haskell aus einer Java EE Perspektive

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 ....

Page 13: Haskell aus einer Java EE Perspektive

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

Page 14: Haskell aus einer Java EE Perspektive

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

Page 15: Haskell aus einer Java EE Perspektive

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

Page 16: Haskell aus einer Java EE Perspektive

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...

Page 17: Haskell aus einer Java EE Perspektive

Gibt esauch Probleme?

Page 18: Haskell aus einer Java EE Perspektive

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

Page 19: Haskell aus einer Java EE Perspektive

FrameworksWerkzeugeIm Schweinsgalopp...

1909.04.2023Copyright © 2010 – akquinet AG

Page 20: Haskell aus einer Java EE Perspektive

2009.04.2023Copyright © 2010 – akquinet AG

Klassifikation von Frameworks

Page 21: Haskell aus einer Java EE Perspektive

Yesod

typsicher, REST-basiert und effizient

2109.04.2023Copyright © 2010 – akquinet AG

Page 22: Haskell aus einer Java EE Perspektive

2209.04.2023Copyright © 2010 – akquinet AG

Die Oberfläche

Page 23: Haskell aus einer Java EE Perspektive

2309.04.2023Copyright © 2010 – akquinet AG

Verknüpfung zu Haskell

Page 24: Haskell aus einer Java EE Perspektive

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

Page 25: Haskell aus einer Java EE Perspektive

2509.04.2023Copyright © 2010 – akquinet AG

Tests

BDD mit HSpec

Automatische Testdatenerzeugung mit QuickCheck

Page 26: Haskell aus einer Java EE Perspektive

2609.04.2023Copyright © 2010 – akquinet AG

Cabal, Hackage

Page 27: Haskell aus einer Java EE Perspektive

2709.04.2023Copyright © 2010 – akquinet AG

Zusammengefasst

Page 28: Haskell aus einer Java EE Perspektive

Gibt esauch Probleme?

Page 29: Haskell aus einer Java EE Perspektive

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

Page 30: Haskell aus einer Java EE Perspektive

Resümee

... And the winner is ...

3009.04.2023Copyright © 2010 – akquinet AG

Page 31: Haskell aus einer Java EE Perspektive

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

Page 32: Haskell aus einer Java EE Perspektive

3209.04.2023Copyright © 2010 – akquinet AG

YourChoice!