Sujet : dialects
-
Variantes de base64 : alphabets standard et URL-safe, règles de padding et tolérance des décodeurs
La RFC 4648 définit les alphabets base64 standard et URL-safe et impose le padding par défaut, mais les JWT l'omettent explicitement ; MIME coupe les lignes à 76 caractères, tandis que le base64 de GNU fait de même tant qu'on ne lui passe pas -w0 ; enfin, les décodeurs, de Python au navigateur, ne s'accordent pas sur le fait de traiter comme des erreurs les caractères parasites et l'absence de padding.
-
Syntaxe des plages de versions dans npm, Cargo, pip, Composer, Go modules, Maven, NuGet et Bundler
Les opérateurs caret et tilde n'ont pas le même sens partout, Go modules n'a aucune notion de plage, et un numéro de version seul est un minimum inclusif dans NuGet mais une simple suggestion souple dans Maven.
-
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.
-
Dialectes de motifs glob : signification de * et ** dans .gitignore, .dockerignore, bash, Python et GitHub Actions
Les caractères * et ** n'ont pas le même sens selon l'outil qui évalue le motif : un motif sans barre oblique dans .gitignore correspond à toutes les profondeurs, alors que la même ligne dans .dockerignore ne correspond qu'à la racine du contexte. La récursion globstar de bash est optionnelle, et fnmatch de Python ne tient même pas compte des chemins.
-
Dialectes d'expressions cron : champs, secondes et le piège jour du mois / jour de la semaine
Vixie cron, Quartz, Kubernetes CronJob, GitHub Actions et AWS EventBridge appellent tous leur chaîne de planification « expression cron », mais divergent sur le nombre de champs, la présence de secondes ou d'une année, et sur la combinaison du jour du mois et du jour de la semaine (OU logique, ou interdiction de renseigner les deux).
-
Variantes d'expressions régulières : BRE/ERE, PCRE2, RE2, JavaScript, Python et .NET comparés
Les caractères + ? | ( ) { } sont littéraux ou spéciaux selon qu'un outil utilise la syntaxe POSIX BRE ou ERE. Les assertions de contexte (lookaround) et les références arrière sont prises en charge par certains moteurs et volontairement refusées par RE2 pour garantir une correspondance en temps linéaire, tandis que les groupes nommés existent sous trois graphies que les moteurs acceptent selon des combinaisons différentes.
-
Délais d'expiration par défaut des clients HTTP selon le langage et la bibliothèque : aucun, 5 secondes ou 100 secondes
Le requests de Python et le net/http.Client de Go attendent indéfiniment tant qu'aucun timeout n'est défini explicitement ; httpx applique 5 secondes, HttpClient de .NET 100 secondes, et axios comme le timeout de transfert total de curl n'imposent aucune limite. Il n'existe donc pas de valeur par défaut sûre valable partout.
-
Variables d'environnement de proxy dans curl, requests, Go, Java, Node et wget
curl rejette volontairement `HTTP_PROXY` en majuscules pour éviter l'injection via CGI, alors que Python requests l'accepte hors CGI ; un point initial dans `NO_PROXY` restreint la correspondance aux sous-domaines dans le `httpproxy` de Go, alors que curl ignore ce point et couvre aussi le domaine nu ; le `fetch` de Node ignore les variables de proxy tant que `NODE_USE_ENV_PROXY` ou un `ProxyAgent` n'est pas configuré.
-
Dialectes d'analyse des fichiers .env : guillemets, export, valeurs multilignes et expansion dans cinq chargeurs
Docker Compose, docker run --env-file, python-dotenv, le dotenv de Node, EnvironmentFile de systemd et le sourcing du fichier dans un shell acceptent des fichiers d'apparence semblable, mais divergent sur les guillemets, le mot-clé export, les valeurs multilignes et l'expansion de ${VAR}.
-
Chaînes de durée et d'intervalle : ISO 8601, ParseDuration de Go, systemd, Prometheus, PostgreSQL et TimeSpan de .NET
PT1H30M, 1h30m, « 1h 30min » et 01:30:00 peuvent désigner la même durée, mais chaque analyseur accepte un jeu différent de suffixes d'unité et rejette tout le reste : une chaîne de durée copiée d'un système à l'autre échoue donc souvent tout simplement à l'analyse.
-
Tokens de format de date et d'heure : correspondances entre strftime, Java, Go, .NET et Moment/date-fns
Une même lettre n'a pas le même sens d'une bibliothèque de formatage à l'autre : le Y majuscule de Java désigne l'année basée sur les semaines et non l'année calendaire, et D est le jour de l'année en Java et dans date-fns, mais le jour du mois dans Moment. Un tableau de tokens à consulter avant de se fier à une chaîne de format générée.
-
Typage implicite de YAML 1.1 et 1.2 : le problème de la Norvège, les nombres octaux et quels parseurs suivent quelle version
Le type booléen de YAML 1.1 traite yes, no, on et off comme des booléens et un zéro initial comme un octal ; le Core Schema de YAML 1.2 restreint les booléens à true/false et exige le préfixe explicite 0o pour l'octal. PyYAML, js-yaml et gopkg.in/yaml.v3 se situent chacun à un endroit différent entre les deux.
Lisible par machine : JSON