Thema: dialects
-
Base64-Varianten: Standard- und URL-sichere Alphabete, Padding-Regeln und Strenge der Decoder
RFC 4648 definiert sowohl das Standard- als auch das URL-sichere Base64-Alphabet und verlangt standardmässig Padding. JWTs lassen es ausdrücklich weg, MIME bricht Zeilen nach 76 Zeichen um (GNU base64 tut dies ebenfalls, solange nicht -w0 gesetzt ist), und Decoder von Python bis zum Browser behandeln fremde Zeichen und fehlendes Padding unterschiedlich streng.
-
Syntax für Versionsbereiche in npm, Cargo, pip, Composer, Go modules, Maven, NuGet und Bundler
Caret- und Tilde-Operatoren bedeuten nicht überall dasselbe, Go modules kennen gar keine Bereiche, und eine blosse Versionsnummer ist in NuGet ein inklusives Minimum, in Maven dagegen nur ein weicher Vorschlag.
-
Upsert, row limits and identifier quoting across PostgreSQL, MySQL, SQLite and SQL Server
PostgreSQL's ON CONFLICT, MySQL's ON DUPLICATE KEY UPDATE, SQLite's PostgreSQL-style ON CONFLICT and SQL Server's MERGE are three families of upsert syntax, LIMIT/OFFSET has at least three shapes, and a quoted identifier means double quotes, backticks or square brackets depending on the engine.
-
Glob-Dialekte: Was * und ** in .gitignore, .dockerignore, Bash, Python und GitHub Actions bedeuten
Dieselben Zeichen * und ** bedeuten je nach Auswertungsort etwas anderes: Ein Muster ohne Schrägstrich in .gitignore greift in jeder Tiefe, dieselbe Zeile in .dockerignore nur im Wurzelverzeichnis des Kontexts. Die Rekursion über globstar in Bash muss aktiviert werden, und fnmatch in Python kennt keine Pfadlogik.
-
Cron-Expression-Dialekte: Felder, Sekunden und die Falle bei Tag des Monats und Wochentag
Vixie cron, Quartz, Kubernetes CronJob, GitHub Actions und AWS EventBridge nennen ihren Zeitplan-String alle «Cron Expression», unterscheiden sich aber in der Feldanzahl, in der Unterstützung von Sekunden und Jahr sowie darin, ob Tag des Monats und Wochentag per ODER verknüpft werden oder nie beide gesetzt sein dürfen.
-
Regex-Dialekte: BRE/ERE, PCRE2, RE2, JavaScript, Python und .NET im Vergleich
Die Zeichen + ? | ( ) { } sind literal oder Sonderzeichen, je nachdem, ob ein Tool POSIX BRE oder ERE verwendet. Lookaround und Rückwärtsreferenzen unterstützen manche Engines, RE2 lehnt sie bewusst ab, um Matching in linearer Zeit zu garantieren. Benannte Gruppen gibt es in drei Schreibweisen, die die Engines in unterschiedlichen Kombinationen akzeptieren.
-
Standard-Timeouts von HTTP-Clients nach Sprache und Bibliothek: keiner, 5 Sekunden oder 100 Sekunden
Python-requests und Gos net/http.Client warten unbegrenzt, solange kein Timeout explizit gesetzt ist. httpx verwendet standardmässig 5 Sekunden, .NET-HttpClient 100 Sekunden, axios und das Gesamt-Timeout von curl sind standardmässig unbegrenzt – einen universell sicheren Standardwert gibt es nicht.
-
Proxy-Umgebungsvariablen in curl, requests, Go, Java, Node und wget
curl verwirft die grossgeschriebene Form HTTP_PROXY bewusst (wegen CGI-Injection), Python requests akzeptiert sie ausserhalb von CGI. Ein führender Punkt in NO_PROXY begrenzt in Gos httpproxy den Treffer auf Subdomains, curl ignoriert den Punkt und erfasst auch die blanke Domain. Node-fetch ignoriert Proxy-Variablen, solange NODE_USE_ENV_PROXY oder ein ProxyAgent nicht eingerichtet ist.
-
.env-Dateien im Vergleich: Quoting, export, mehrzeilige Werte und Expansion in fünf Loadern
Docker Compose, docker run --env-file, python-dotenv, Node-dotenv, systemd-EnvironmentFile und das Sourcen der Datei in einer Shell akzeptieren scheinbar identische Dateien, verhalten sich aber bei Quoting, dem Schlüsselwort export, mehrzeiligen Werten und der Expansion von ${VAR} unterschiedlich.
-
Dauer- und Intervall-Strings: ISO 8601, Go ParseDuration, systemd, Prometheus, PostgreSQL und .NET TimeSpan
PT1H30M, 1h30m, '1h 30min' und 01:30:00 können dieselbe Zeitspanne beschreiben, doch jeder Parser akzeptiert ein anderes Alphabet von Einheitenkürzeln und weist alles andere zurück. Ein zwischen Systemen kopierter Dauer-String lässt sich deshalb oft schlicht nicht parsen.
-
Formatierungs-Token für Datum und Uhrzeit: strftime, Java, Go, .NET sowie Moment/date-fns im Vergleich
Derselbe Buchstabe bedeutet in Formatierungsbibliotheken Unterschiedliches: Das grosse Y in Java steht für das wochenbasierte Jahr, nicht für das Kalenderjahr, und D bezeichnet in Java und date-fns den Tag des Jahres, in Moment dagegen den Tag des Monats. Eine Token-Tabelle zum Prüfen, bevor ein generierter Formatstring übernommen wird.
-
Implizite Typisierung in YAML 1.1 und 1.2: das Norwegen-Problem, Oktalzahlen und welcher Parser welche Regeln anwendet
Der Boolean-Typ von YAML 1.1 behandelt yes, no, on und off als Booleans und eine führende Null als Oktalzahl; das Core Schema von YAML 1.2 beschränkt Booleans auf true/false und verlangt für Oktalzahlen das explizite Präfix 0o. PyYAML, js-yaml und gopkg.in/yaml.v3 liegen dabei jeweils an einer anderen Stelle zwischen den beiden Spezifikationen.
Maschinenlesbar: JSON