Haskell aus einer Java EE Perspektive

Preview:

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

Haskell aus einer Java EE PerspektiveTorsten Finktorsten.fink@akquinet.deakquinet

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!

Recommended