Kaperungen, Schmuckstuecke und diverse Notizen (Braindump)

10/02/2014 - 08:59 von ram | Report spam
Wollte ich gerade mal notieren:

Es gibt in einigen Sprachen Kaperungen, wo man bestehende
Syntax für eine andere Semantik kapert.

Ein bekanntes Beispiel ist »static« in C, welches eigentlich
statische Lebensdauer bezeichnet, aber auch für
Dateigültigkeitsbereichkennzeichnung gekapert wurde.

Ein anderes Beispiel wàre »On Error GoTo 0« in VBA, was
/nicht/ bedeutet, daß bei einem Fehler zu Zeile 0 gesprungen
werden soll.

Ein anderes Beispiel ist »"use strict";« in JavaScript.
Man weiß nicht so recht, ob man die Eleganz bewundern soll,
die sonst nutzlose Zeichenkettenauswertung einer nützlichen
Verwendung zuzuführen oder über den Mißbrauch der Semantik
der Ausdruckanweisung klagen soll!

Nun noch zu einem etwas anderen Thema, zwei Dinge, die mir
in einigen Sprachen besonders gut gefallen! Es gibt abweisende
und nicht-abweisende Schleifen. In vielen Sprachen haben sie
unterschiedliche Syntax oder Schlüsselwörter oder Semantik
(in Pascal enthàlt die nichtabweisende immer eine Verneinung).
Das ist in VBA besonders elegant gelöst, wo die Syntax beider
Formen vereinheitlicht ist. Abweisend:

Do While Condition
...
Loop

Nicht-abweisend:

Do
...
Loop While Condition

Das ist wirklich suggestiv und orthogonal: Man bewegt die
While-Klause und àndert sonst nichts!

Schließlich: Kommentare, es gibt unter anderem folgende
Kommentareinleiter:

/*
//
#
;

. Aber mir erschien der von Ada (eventuell gibt es den auch
in PL/1 oder SQL) immer am suggestivsten:


. In Sprachen der C-Familie kann man den natürlich schlecht
verwenden, weil er dort schon für das Dekrementieren steht.
Aber, wenn ich mir in Pseudocode am Ende einer Zeile einen
Kommentar notieren will, verwende ich »--«, und das obwohl
ich nie in Ada programmiert hat.

Die Do-Schleife aus VBA und »--« waren also die
»Schmuckstücke« aus dem Betreff. Dabei ist ein
»Schmuckstück« einer Programmiersprache etwas aus einer
Programmiersprache, das nicht sehr verbreitet ist, aber das
man in anderen Sprachen auch gerne hàtte.

Eine Kaperung ist die Überladung vorhandener Syntax mit
einer ganz anderen Semantik.

LISP war früher voller Schmuckstücke, wie garbage collection
oder closures. Langsam »klauen« das aber immer mehr
mainstream-Sprachen, so daß es langsam seinen
Schmuckstückcharakter verliert. Umgekehrt hat Common Lisp
heute auch viel mehr »prozedurale« und »strukturierte«
Bestandteile aus anderen Sprachen als das klassische LISP.
Die Programmiersprachen konvergieren etwas.

Nach gewissen Hypes hat sich die logische Programmierung mit
Prolog und die funktionale mit Haskell nicht besonders
durchgesetzt. Dafür verwenden viele Programmiersysteme heute
deklarative Elemente mit den Deklarationen in XML
(beispielsweise für die GUI-Struktur oder lokalisierte
Texte), aber kaum logische Ableitungen daraus. Funktionale
Elemente sickern in viele mainstream-Sprachen ein.

Beim Übergang von Ant zu Gradle wird XML durch eine DSL
ersetzt. Die DSL enthàlt viel weniger Redundanz als XML,
aber sie ist nur auf den ersten Blick besser lesbar.
Versucht man nàmlich eine Spezifikation dieser DSL zu
finden (in der wenigstens die Syntax formal und die
Semantik in genauem Englisch und vollstàndig angegeben wird),
so sucht man vergeblich. Daher wird es dann schwierig,
wenn man so ein DSL-Skript erstellen oder bearbeiten will.
 

Lesen sie die antworten

#1 Stefan Reuther
12/02/2014 - 19:53 | Warnen spam
Stefan Ram wrote:
Ein anderes Beispiel ist »"use strict";« in JavaScript.
Man weiß nicht so recht, ob man die Eleganz bewundern soll,
die sonst nutzlose Zeichenkettenauswertung einer nützlichen
Verwendung zuzuführen oder über den Mißbrauch der Semantik
der Ausdruckanweisung klagen soll!



Pascal deutet seit 30 Jahren Sinn in Kommentare (*$I foo.inc*), und Lisp
interpretiert vermutlich noch deutlich lànger Sinn in Strings am Anfang
von Funktionen - auf genau die gleiche Weise wie Javascript.
(defun foo (bla)
"Lorem ipsum dolormit"
(* 2 bla))
Wirklich neu ist das also keineswegs.


Stefan

Ähnliche fragen