[CompLB] Linkliste Dezember 2016

Ertugrul Söylemez esz at posteo.de
Fr Dez 23 22:52:00 CET 2016


>>   * <https://gist.github.com/esoeylemez/40c7e05aa4058d46097c0f520988ef9e>
>>
>> Die Konten sind nur im RAM.  Der Code für die Anbindung an eine
>> Datenbank sieht aber sehr ähnlich aus.
>
> kannst du kurz in Prosa beschreiben, was der Code genau macht?
> Vielleicht einfach ein kleiner Use Case.

Gerne.  Ich habe in diesem Code Concurrency-Performance bevorzugt
gegenüber Simplizität, daher ist der Code etwas länger als er sein
müsste.  Aber wenn du die ungewohnte Haskell-Grammatik ignorierst,
sollte er sich eigentlich fast wie englischer Text lesen lassen.
Einstiegspunkt ist 'main' (Zeile 51).

Zeile 53:  Der Code legt eine "transactional variable" (TVar) an, die
eine Zuweisung zwischen Namen und Kontenständen enthält.  Die
"atomically"-Funktion, die du überall siehst, sorgt dafür, dass
Änderungen dieser Kontostände atomar sind wie eine Datenbanktransaktion.
Für mehr Informationen siehe [Software Transactional Memory].

In Zeilen 55, 58, 62 und 68 werden die Routen-Handler definiert mit
Platzhaltern für Variablen (z.B. "/add-account/:name").  Die Handler
selbst machen nichts weiter als die Variablen zu parsen ("param") und an
eine Transaktion zu übergeben, die die entsprechenden Änderungen macht.
Als Ausnahme macht die "/overview"-Aktion gar keine Änderungen, sondern
extrahiert einfach nur die Übersicht aller Konten und schickt sie dem
Client als JSON.

Das ist natürlich eine High-Level-Erklärung.  Für Details schlage ich
ein Treffen vor, bei dem ich diese oder eine ähnliche App (z.B. mit
Datenbankanbindung) neu entwickle und jeden einzelnen Schritt erkläre.

Use-Cases für sowas gibt's natürlich genug, da schließlich fast alle
Web-Services im Grunde nichts anderes tun als Datenbanken abzufragen
oder zu ändern.  Aber natürlich ist ein Scotty/Servant-Service
keinesfalls darauf beschränkt. =)

Falls du den Code einfach mal selber ausführen willst, kann ich auch
gerne ein komplettes Paket schnüren.  Dieses kannst du dann mit ein paar
Befehlen kompilieren und ausführen (Abhängigkeiten werden automatisch
behandelt).

[software transactional memory]: https://en.wikipedia.org/wiki/Software_transactional_memory


Viele Grüße
ertes
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 454 bytes
Beschreibung: nicht verfügbar
URL         : <http://ml.complb.de/pipermail/public/attachments/20161223/579c660e/attachment.sig>


Mehr Informationen über die Mailingliste Public