[CompLB] SRL - Simple Regex Language

Ertugrul Söylemez esz at posteo.de
Mi Feb 15 07:54:21 CET 2017


> Diese Halblösungen, wie du es nennst, sind halt für viele sehr
> praktikabel. Beispiel: Bei mir im Unternehmen gibt es Berater, die
> Schnittstellen einrichten. Dabei geht es zB darum, Emails mit Anhang
> in ein Ticketsystem einzubringen und dafür müssen sie dann reguläre
> Ausdrücke schreiben. Diese Leute sind keine Programmierer, wollen es
> auch nicht sein. Die müssen einfach schnell eine stabile Lösung
> haben. Und für die taugt das. Und ich finde lesbaren Code immer
> sympathisch :)

Vergleich' doch mal die Kombinatorensyntax mit der SRL-Syntax.  Sie sind
sehr ähnlich.  Wer SRL lernen kann, kann auch den regulären Teil von
Kombinatoren lernen, und andersherum.  Unterschied: Kombinatoren sind
noch viel mächtiger als reguläre Ausdrücke, haben eine formbare Syntax
und eine über Jahrzehnte perfektionierte Implementierung.

Auf die Frage, ob Laien wirklich Haskell-Syntax schreiben sollten,
lautet meine Antwort: Warum nicht?  Es ist ja nur ein kleiner Teil der
Syntax, und der sieht nicht großartig anders aus als SRL, nur etwas
prägnanter.  Aus

    capture (any of (digit, letter, one of "._%+-")
             once or more)
        as "local",
    literally "@"

wird dann eben:

    local <- many1 (digit <|> letter <|> oneOf "._%+-")
    char '@'

Nur der "<-"-Pfeil ist feste Syntax.  Alles andere kann man für Laien
anpassen, wenn man will:

    let onceOrMore = many1
        or = (<|>)

    local <- onceOrMore (digit `or` letter `or` oneOf "._%+-")
    char '@'

oder:

    let onceOrMore = many1
        anyOf = asum

    local <- onceOrMore (anyOf [digit, letter, oneOf "._%+-"])
    char '@'

Für Captures kann man auch einen Extrakombinator einführen, und man kann
auch 'char' umbenennen:

    let capture name p = do
            x <- p
            modify (M.insert name x)

    capture "local" (onceOrMore (anyOf [digit, letter, oneOf "._%+-"]))
    literally "@"

oder von mir aus sogar:

    let capture p _ name = do
            x <- p
            modify (M.insert name x)
        as = ()

    capture (onceOrMore (anyOf [digit, letter, oneOf "._%+-"]))
            as "local"
    literally "@"

Wie du siehst kann man Kombinatoren so sehr wie SRL aussehen lassen wie
man möchte.  Und nein, man muss keinen Parser dafür schreiben.  Das ist
alles normale Haskell-Syntax. =)


> Das Problem mit Haskell ist übrigens, dass es wenig Verbreitung
> hat. Klar ist Haskell toll. Interessiert aber kaum einen Chef, der auf
> Zahlen schauen muss. Was bringt es ihm, wenn er ein Stück Code hat,
> für das er kaum EntwicklerInnen findet? Dann muss er denen, die es
> können, ja viel zahlen. Oder schlimmer: Mitarbeiter gehen und er
> findet nicht sofort Ersatz.

Dieses Argument fand ich schon immer sehr zweifelhaft und kurzsichtig
(wie fast alle wirtschaftlichen Totschlagargumente, die die Worte "Chef"
und "interessieren" enthalten), aber ich möchte jetzt keinen Roman
schreiben.  Kurzfassung: es gibt inzwischen genug Unternehmen, darunter
auch Konzerne, die dieses Experiment durchgeführt haben.  Resultat: Im
Jahr 2008 hätte ich das Argument noch gelten lassen, aber heute zahlt es
sich unter'm Strich aus.


> Und da Haskell für Programmieranfänger einfach nicht zugänglich ist,
> wird es in nächster Zeit auch nicht die erste Sprache an Schulen und
> damit das Paradigma nicht das dominierende an Hochschulen. Haskell mag
> die perfekte Sprache sein, praktikabel ist sie in diesen Zuständen
> nicht (hier bitte ein Adorno-Zitat einfügen).

Ebenso zweifelhaft (ich kann Gegenbeispiele nennen), aber vor allem
irrelevant.

Du siehst einen Teufelskreis, wo keiner ist. =)
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 487 bytes
Beschreibung: nicht verfügbar
URL         : <http://ml.complb.de/pipermail/public/attachments/20170215/d18c056e/attachment.sig>


Mehr Informationen über die Mailingliste Public