Aller au contenu

Blog ·

Le verbe à quatre mots de là

Changer un pronom néerlandais réécrit des verbes qu’il ne touche pas. Une table de 84 mots qui sort sur tout ce qu’elle ignore, et un accord à quatre mots.

Par Provibr

Le néerlandais a deux façons de s’adresser à un lecteur. u est formel et je est informel, et le choix n’est pas seulement une affaire de politesse : il change le verbe, et contrairement à l’équivalent français ou allemand, la forme obtenue dépend de la place du verbe. Ce site avait dérivé vers un usage des deux, nous avons donc tranché pour je et tout converti. Cela fait deux conversions, car le texte néerlandais vit à deux endroits qui n’ont rien en commun : 102 articles en markdown, et un catalogue de messages de 18841 clés. La mesure avant la première conversion : 445 pronoms formels dans 44 des 102 articles, dont 362 simples, 82 possessifs et un réfléchi. Les 58 autres articles étaient déjà à la forme informelle.

Si c’était une langue où un pronom n’est qu’un pronom, l’ensemble tiendrait en une seule commande de remplacement. Ce n’en est pas une, et les échecs intéressants sont tous en aval de ce fait.

La table qui sautait des choses en silence

Le néerlandais inverse le sujet et le verbe dans une question ou après un élément placé en tête, et la terminaison du verbe disparaît quand il le fait. kunt u devient kun je, et non kunt je. Que la terminaison disparaisse ou non dépend du radical : zet u reste zet je, mais schrijft u devient schrijf je.

Le script doit donc savoir, pour chaque mot pouvant se tenir devant le pronom, ce qui arrive à ce mot. La première version avait une table des verbes que j’avais vus dans un échantillon, et elle laissait tout le reste tranquille. Cela a produit Duwt u creditnota's devenu Duwt je creditnota's, et Verlaagt u een tijdstempel devenu Verlaagt je een tijdstempel. Les deux sont faux, les deux ont l’air grammaticaux, et les deux sont entièrement silencieux. Le script a rapporté un succès.

C’est le même échec que celui dont cette base de code a déjà fait les frais dans un domaine totalement différent : un garde-fou qui parcourait l’arbre syntaxique de notre propre source liait une seule sorte de déclaration de variable et sautait toutes les autres, si bien qu’il rapportait des milliers de clés de traduction couvertes tout en étant aveugle au motif qu’emploie tout le panneau. Une table qui saute en silence une forme inconnue a l’air complète et ne l’est pas.

La table contient désormais les 84 mots qui apparaissent réellement devant un pronom formel, comptés sur le corpus plutôt que de mémoire, et un mot inconnu vaut code de sortie 1. Sur les 84, 51 ne changent rien : conjonctions, pronoms relatifs et prépositions, devant lesquels le pronom est simplement le sujet ou l’objet. Les deux tiers de la table existent uniquement pour que le tiers qui compte ne puisse pas se cacher derrière un cas par défaut.

Trois erreurs que seule la lecture a trouvées

Une fois la table exhaustive, trois phrases restaient fausses après l’exécution, et aucune n’est un problème de table. tegen u kan liegen était devenu tegen je kan liegen là où il fallait tegen jou kunt liegen : le pronom y est l’objet d’une préposition et prend la forme accentuée. van u uw était devenu van je uw, parce que la première passe avait consommé la position dont une passe ultérieure avait besoin. Et u zich était devenu je zich, alors que le réfléchi du pronom informel est je je.

Chacune de ces erreurs demande de tenir une proposition entière à l’esprit. Aucune passe sur une fenêtre de deux ou trois mots ne peut les produire, et aucun test comparant des décomptes de mots ne les remarquerait.

L’accord à distance

La trouvaille de la ronde est une phrase qui est correcte avec le pronom formel et fausse avec l’informel, où les deux mots en jeu sont distants de quatre mots.

als u die heeft ingesteld est juste. als je die heeft ingesteld est faux ; il faut hebt. Le pronom et le verbe s’accordent, et die est assis entre les deux, si bien qu’une passe qui exige que le verbe suive directement le pronom ne voit absolument rien. La passe qui s’est déclenchée ici est celle qui change le pronom, et elle n’a aucune raison de regarder plus loin dans la proposition.

Le contrôle qui referme cela est une expression régulière sur le texte fini : le pronom informel, jusqu’à quatre mots intercalés, puis l’un des trois verbes exactement. Chaque correspondance doit être lue par une personne, et ce qui a été lu et approuvé est consigné avec sa raison ; une nouvelle correspondance vaut code de sortie 1.

Trois verbes exactement, parce que ce sont les seuls dont la forme de deuxième personne diffère entre les deux registres. Les cinq voisins évidents sont identiques dans les deux, et les inclure produisait quatre correspondances qui ne pouvaient jamais être un défaut. Un contrôle qui produit des lignes sur lesquelles personne n’a à agir est un contrôle que les gens cessent de lire.

Jusqu’à quatre mots, parce que c’est ce que contient le corpus, et parce qu’un écart non borné franchit les frontières de proposition. Six des dix correspondances sur le catalogue fini étaient correctes précisément parce que le verbe avait un autre sujet.

Deux garde-fous, parce que le masquage ne peut pas être partagé

Les deux corps de texte ont désormais un contrôle permanent, et ce sont deux fichiers distincts.

La raison est que trouver le texte courant est un problème différent dans chacun. En markdown, on masque les blocs de code, le code en ligne et les cibles de lien. Dans un catalogue de messages, on masque le nom d’argument, le mot de style, les libellés de branche et les balises de texte enrichi de la syntaxe des paramètres, tout en gardant le texte à l’intérieur d’une branche, car ce texte est du néerlandais et un pronom qui s’y trouve compte. Ce masquage est un parcours d’accolades et non une expression régulière, pour la même raison que le garde-fou des paramètres juste à côté en est un : une branche dont le texte tient en un mot ressemble exactement à un argument.

Ce que les deux garde-fous partagent, c’est une seule règle, et elle vit dans un seul fichier pour qu’ils ne puissent pas diverger : un pronom en majuscule ne compte qu’en début de phrase.

Cette règle est une mesure, pas une commodité. Dans les articles, dix correspondances nues survivent à la conversion et les dix sont en milieu de phrase : cinq unités de rack venant du chapitre datacenter, cinq la lettre elle-même, issue d’un alphabet qui l’omet délibérément. Dans le catalogue, il y en a 61, dont 54 en milieu de phrase, six comme libellé et une comme unité dans un nom de champ. Les 61 ont été lues et aucune n’est un pronom. Écrire cela sous forme de liste de noms de fichiers aurait manqué la seconde écriture de la même idée ; l’écrire sous forme de motif attrape les deux.

Le drapeau d’insensibilité à la casse sur ce motif a été oublié une fois, ce qui rendait invisible un pronom en majuscule au début d’une phrase : exactement la forme qui apparaît dans un intitulé ou après un point. Un test sonde avec des cas connus l’a attrapé immédiatement. Un garde-fou sans sonde est un garde-fou auquel vous faites confiance au lieu de le tester.

Deux façons d’être vert par vacuité

Vérifier la conversion du catalogue dans un navigateur a produit deux faux verts, et c’est la moitié transposable de cette ronde.

Une page derrière un drapeau de déploiement répond par une page d’erreur, et une page d’erreur ne contient aucun pronom formel. Deux écrans du panneau sont fermés de cette façon et le balayage y a rapporté zéro constatation sur les deux, ce qui se lit exactement comme une page propre. Ce qui l’a rendu visible, c’est une borne inférieure sur le nombre de caractères : la réponse fermée faisait 173 caractères, et une fois les drapeaux levés, les deux mêmes écrans en faisaient 1335 et 557. Le balayage d’une page vide et le balayage d’une page propre donnent le même nombre.

Et le serveur de développement met le catalogue en cache. La première exécution délibérément cassée, celle qui est censée passer au rouge pour que vous sachiez que le contrôle fonctionne, était verte, parce que le fichier échangé n’était servi qu’après un redémarrage. Une preuve rouge qui est verte pour une raison étrangère est pire qu’aucune preuve rouge : elle certifie le contrôle.

Ce que nous noterions

  1. Un pronom dans une langue flexionnelle n’est pas une chaîne de caractères. Le changer réécrit des mots qu’il ne touche pas.
  2. Une table exhaustive vaut mieux qu’une table échantillonnée, et la différence n’est visible que lorsqu’elle sort sur ce qu’elle ignore.
  3. Les deux tiers d’une bonne table peuvent ne rien faire. Ils existent pour que le reste ne puisse pas se cacher derrière un cas par défaut.
  4. Une fenêtre de deux mots ne peut pas voir une proposition. Certaines erreurs demandent un lecteur et il n’y a pas moyen de contourner cela.
  5. L’accord peut agir à distance. Le nôtre portait sur quatre mots, et aucune passe de la chaîne ne regardait aussi loin.
  6. Restreignez un contrôle aux formes qui peuvent réellement différer. Cinq verbes de plus signifiaient quatre lignes sur lesquelles personne ne pouvait agir.
  7. Un contrôle qui produit des lignes inactionnables finit ignoré, ce qui est pire que de ne pas l’avoir.
  8. Consignez les correspondances approuvées avec leur raison, et échouez sur une nouvelle. Le silence n’est pas un résultat.
  9. Une page fermée est propre au balayage. Posez une borne inférieure sur la taille de ce que vous avez balayé.
  10. Prouvez la preuve rouge. Un cache de développement a rendu la nôtre verte et elle n’aurait rien certifié.

Pour être clair sur ce dont il s’agit : la conversion des articles a fait 491 remplacements dans 44 fichiers, avec un différentiel d’exactement 306 lignes retirées et 306 ajoutées et rien de touché en dehors de l’arborescence source néerlandaise ; la conversion du catalogue a fait 169 remplacements sur 115 clés, le nombre de clés restant inchangé à 18841 et dans le même ordre, et l’écart de caractères du fichier entier a été réconcilié lettre par lettre. Les deux corps mesurent désormais zéro pronom formel, et l’invariant de mots qui compare chaque paire de mots n’étant pas la forme d’adresse a rapporté zéro différence et a été prouvé rouge trois fois. Non prouvé : un seul relecteur, aucun second locuteur natif, aucune mesure d’accessibilité, et le texte du chemin d’erreur de trois écrans fermés n’a jamais été rendu dans un navigateur.

Issu du travail de plateforme sur Provibr. Ce que neuf catalogues font à un ensemble de contrôles de taille fixe est dans Seize mille clés, neuf langues, un script de transformation qui a abîmé trois articles vers lesquels il n’avait jamais été pointé est dans Un script de conversion qui a ratissé trop large, et un autre garde-fou incapable de voir la chose pour laquelle il avait été écrit est dans Un pluriel vague n’est pas un nombre.

Commencez avec un hôte et un agent

Créez un compte, installez l’agent avec une seule commande et connectez votre premier hôte Proxmox. La période d’essai dure 14 jours et ne demande aucune coordonnée de paiement.