Benutzer:Jsowieso/PureScript

aus Wikipedia, der freien Enzyklopädie
Jsowieso/PureScript
Paradigmen: funktional, strikte Auswertung, modular, deklarativ
Erscheinungsjahr: 2013
Entwickler: Phil Freeman, Gary Burgess und andere
Aktuelle Version: 0.14  ()
Typisierung: statisch, stark, Typinferenz
Beeinflusst von: Haskell, JavaScript
Betriebssystem: plattformübergreifend
Lizenz: BSD
purescript.org

PureScript ist eine rein funktionale Programmiersprache die nach Javascript kompiliert. Syntax und Funktionsweise sind stark angelehnt an Haskell und die Implementierung selbst ist in Haskell geschrieben. Da die Sprache nach Javascript kompiliert ist sie überall da einsetzbar wo Javascript verwendet wird, hauptsächlich in Webanwendungen.

Entstehung und Geschichte

Erster Github-Eintrag, Changelog?, Ziele (bspw lesbares JS)

Merkmale

Da PureScript sehr stark von Haskell beeinflusst ist sollen hier nicht sämtliche Haskell-Eigenschaften wiederholt werden. Der größte Unterschied zur Haskell besteht darin dass PureScript strikt auswertet. Es lässt sich zwar mittels Lazy auch eingeschränkt nicht-strikter Code schreiben, vergleichbare Optimierungen wie in Haskell sind allerdings kaum möglich. Im Quellcode schlägt sich das größtenteils im Verwenden von Arrays statt Listen nieder.

Des weiteren wurden Klassenaufteilungen im Gegensatz zu Haskell etwas modernisiert und redundante Elemente entfernt, da keine Kompatibilität zu älteren Haskell-Versionen benötigt wurde. Es werden auch einige fortgeschrittene Erweiterungen Haskells standardmäßig implementiert (insb. Rank-N-Typpolymorphismus, Multi-Parameter-Typklassen, explizites forall).

Record-Syntax und Zeilen-Polymorphism

PureScript implementiert Javascripts Objekte (Schlüssel-Wert-Abbildungen) als Records. Jeder Record hat einen implizierten Typ. So ist bspw. der Typ von

{ x :: 3, y :: 4 }

gleich

{ x :: Number, y :: Number }

Für Funktionen die Records mit bestimmten Schlüsseln benötigen leitet der Compiler allerdings keinen konkreten Typ nur mit diesen Schlüsseln ab, sondern erlaubt sämtliche Records solange sie die benötigten Schlüssel enthalten. Der Typ bleibt also polymorph im Bezug auf die anderen Zeilen (Schlüssel-Wert-Paare).

showPoint p = "(" <> show p.x <> "," <> show p.y <> ")"
-- Typ von showPoint: forall r. { x :: Number, y :: Number | r } -> String

Mit expliziten Typannotation kann dieses Verhalten angepasst werden.

Einbinden von oder in Javascript

???

??? Die kleineren Abweichung zu Haskell sollten hier nicht von Relevanz sein, allerdings gibt es dann auch nichts mehr zu erwähnen… Vielleicht sollten doch die wesentlichen Eigenschaften von Haskell wiederholt werden.???

Codebeispiel

Ein minimales Hallo-Welt-Programm, welches auf die Browserkonsole ausgibt, sieht wie folgt aus:

module Main where

import Effect.Console (log)

main = log "Hallo Welt!"

Dieses kurze Beispiel verwendete keine Typannotationen, der Compiler hat sie eigenständig abgeleitet. Hier ist das obige Beispiel mit expliziten Typannotationen:

module Main where

import Prelude
import Effect (Effect)
import Effect.Console (log)

main :: Effect Unit
main = log "Hallo Welt!"


Bestandteile

REPL

PureScript enthält eine interaktive Codeausführungsumgebung namens PSCi (Pure Script Compiler interactive). Sie kann verwendet werden um kurze Codeschnipsel auf Funktionalität zu testen, insbesondere Typen von Funktionen und ihre Kompatibilität zueinander kann hier schnell überprüft werden.

Paketverwaltung

Eine eigene Paketverwaltung namens Spago, ansonsten NPM

Weblinks

Es gibt leider zur Zeit keinerlei deutschsprachige Literatur, die folgenden Verweise sind alle in englischer Sprache.

Aufgrund der großen Ähnlichkeit mit Haskell bietet es sich an zum Lernen auf Literatur zu Haskell zuzugreifen und später die Änderungen von PureScript zu lernen.

Einzelnachweise


Kategorie:Funktionale Programmiersprache Kategorie:Freies Programmierwerkzeug