Le caractère de retour chariot est-il considéré comme obsolète

26

J'ai écrit une bibliothèque open source qui analyse les données structurées mais a intentionnellement omis la détection de retour chariot car je ne vois pas le point. Il ajoute une complexité et des frais supplémentaires pour peu ou pas d'avantages.

À ma grande surprise, un utilisateur a soumis un bogue où l'analyseur ne fonctionnait pas et j'ai découvert que la cause du problème était que les données utilisaient les fins de ligne CR par opposition à LF ou CRLF.

OSX n'utilise-t-il pas les fins de ligne de style LF depuis le passage à une plate-forme basée sur Unix?

Je sais qu'il existe des applications comme Notepad ++ où les fins de ligne peuvent être modifiées pour utiliser CR explicitement, mais je ne vois pas pourquoi quelqu'un voudrait le faire.

Est-il sûr d'exclure la prise en charge du pourcentage statistiquement insignifiant d'utilisateurs qui décident (pour une raison quelconque) des anciennes terminaisons de style Mac OS?

Mise à jour:

Pour clarifier, la prise en charge des fins de ligne Windows (c'est-à-dire CRLF) ne nécessite pas de reconnaissance de jeton CR. Pour des raisons d'efficacité, le lexer correspond sur une base par caractère. En ignorant silencieusement les caractères CR, le jeton CRLF se simplifie en LF. En tant que tel, le jeton CRLF lui-même pourrait être considéré comme un anachronisme qui lui est propre, mais ce n'est pas de cela qu'il s'agit.

Le dernier système d'exploitation qui fournissait une prise en charge à l'échelle du système pour les fins de ligne de style CR était Mac OS 9 . Ironiquement, la seule application qui l'utilise encore par défaut dans OSX est Microsoft Excel.

Plie d'Evan
la source
21
"Cela ajoute une complexité et des frais supplémentaires": je pense que la complexité et les frais supplémentaires sont vraiment faibles.
Giorgio
11
@EvanPlaice ne donnerait-il pas moins de maux de tête et plus de temps pour être paresseux à simplement brancher le support CR que vous avez intentionnellement laissé de côté?
Pieter B
11
"En termes commerciaux, le coût d'opportunité est trop élevé. En termes simples, je préfère trouver des raisons de justifier ma paresse que de perdre du temps à ajouter un support de pointe pour une plate-forme morte.": En termes commerciaux, il aurait fallu moins de temps pour implémenter le support de CR que de poster une question ici pour enquêter sur la pertinence de cette fonctionnalité.
Giorgio
4
L'inertie culturelle @EvanPlaice est une très bonne raison.
Pieter B
5
@EvanPlaice: Écrire cette question vous a déjà coûté plus de temps que de simplement pelleter le support des CRsauts de ligne dans votre base de code. (... et si vous croyez fermement que ce n'est pas le cas, la conception de votre analyseur doit être assez mouvementée)
ZJR

Réponses:

37

Selon une bonne pratique, vous êtes "libéral dans ce que vous acceptez et conservateur dans ce que vous envoyez" .

En d'autres termes, s'il y a une chance (aussi petite soit-elle) que quelqu'un vous donne une fin de ligne cr (et s'attend à ce qu'elle fonctionne correctement), vous devrez la supporter.

TBH, je ne vois pas comment l'ajout du support CR prendrait si longtemps.

Lorsque vous voyez un crdans le lexer jeter un coup d'œil au caractère suivant et s'il s'agit d'un nl, avalez la nouvelle ligne et émettez un jeton de nouvelle ligne, si le caractère suivant n'est pas nljuste émettez un jeton de nouvelle ligne et continuez.

monstre à cliquet
la source
23
@ZJR: la loi des postels est dangereuse: soyez très prudent lorsque vous utilisez le principe de robustesse, car cela se retourne fréquemment. Le désordre d'analyse html dans lequel nous sommes encore peut être attribué à cet état d'esprit. Lorsqu'un programme accepte une entrée incorrecte, son comportement en conséquence devient rapidement attendu et dépend du comportement, et tout changement ultérieur qui traite différemment l'entrée incorrecte, ou pas du tout, tout en étant techniquement correct, est souvent considéré comme défectueux.
whatsisname
4
@whatsisname: je ne suis pas d'accord. Je pense que les logiciels de qualité de production devraient être robustes. Les chaînes d'outils de développement devraient cependant décourager fortement de s'appuyer sur une telle robustesse et ne produire que des résultats valides. Le mess html est dû à près de deux décennies de mauvais outils, et non à la clémence des navigateurs.
back2dos
2
@ back2dos: _ _ alors? le mauvais outillage est dû à la clémence des navigateurs.
amara
4
le mauvais outillage est le résultat de la guerre des navigateurs
ratchet freak
2
@Dibbeke: La gestion des entrées mal formées mappe simplement un espace d'entrée plus grand à l'espace d'état existant et n'a donc aucun effet sur celui-ci - à condition que votre logiciel ait une séparation décente des préoccupations.
back2dos
21

Non. CR n'est pas obsolète (défini comme "n'est plus produit ou utilisé"). Vous-même en avez fourni la preuve. C'est peut-être rare , mais pas obsolète .

Quant à "est-il sûr d'exclure le support" pour CR? Comme vous le dites, il ne s'agit pas de perdre des ventes, et vous ne pouvez pas prendre en charge toutes les combinaisons de caractères et formats de fichiers étranges dans le monde, et vous seul connaissez votre logiciel et votre base d'utilisateurs. Je dirais donc qu'il serait prudent de l'exclure si vous êtes convaincu que la charge de support de ne pas l'ajouter (comme l'explique mouviciel) ne l'emporte pas sur la charge de temps de l'ajouter. Mais sans en savoir beaucoup plus sur le produit et la base d'utilisateurs, je ne sais pas comment être plus précis.

Chat heureux
la source
13
+1 - IMO, l'OP essaie d'étiqueter CR comme "obsolète" afin qu'il ait une excuse pour ne pas le soutenir.
Stephen C
1
@StephenC Je n'essaye pas de cacher ce fait. Ce n'est pas comme si j'avais vraiment besoin d' une excuse, je suis l'auteur et j'ai donc le dernier mot. Le fait est que cela soulève une question intéressante.
Evan Plaice
18

A propos de la paresse: il faut équilibrer:

  • effort pour changer le code afin que CR soit manipulé en toute sécurité (et puis oubliez-le).

  • effort pour expliquer aux utilisateurs pourquoi les fichiers dont ils étaient satisfaits pendant des décennies plantent soudainement votre application, pour trouver des solutions de contournement qu'ils peuvent utiliser sans compromettre vos ventes et pour demander des arguments et répondre aux commentaires ici.

C'est à vous de décider quel chemin est le plus paresseux.

mouviciel
la source
Bons points, le support vient certainement avec un coût en temps. Pour ce cas particulier, les «ventes» ne sont pas un problème (c'est-à-dire qu'elles sont open source) mais cela vaut la peine de considérer la situation dans son ensemble. De même, je pourrais également lever une exception dans le code lorsqu'un CR est rencontré indiquant un caractère non valide / non pris en charge.
Evan Plaice
7
@Evan: Bien sûr, c'est open source. Si ce n'était pas le cas, votre patron vous aurait dit "Je m'en fous que" personne "n'utilise plus de CR! Les clients se plaignent. FIX IT!" : P C'est la grande chose à propos d'OSS qui me fait chier: le manque d'attention aux cas réels dont les utilisateurs se sont plaints. Que vous pensiez que c'est obsolète ou non, quelqu'un l' utilise toujours.
cHao
1
parce que c'est open source, vous pouvez écrire une lettre ouverte à tous les utilisateurs que vous accepterez n'importe quel patch pour le corriger.
rwong
1
@EvanPlaice: Cette chose "l'attention est ... monnaie" fonctionne dans les deux sens. Si vous voulez que les gens utilisent votre application, cela doit fonctionner et cela doit résoudre leur problème. Une application cassée n'est pas à l'abri des critiques simplement parce qu'elle est gratuite. Je ne dis pas que vous devez faire tout ce que les utilisateurs demandent; vous devriez rejeter les demandes scandaleuses. Mais si vous ne résolvez pas les problèmes des vrais utilisateurs, vous finissez par perdre des utilisateurs.
cHao
1
@EvanPlaice: Et au fait, quand je veux dire "se plaindre", je veux dire "déposer un rapport de bug décrivant ce qui est cassé et comment", pas "pleurnicher au hasard sur la gravité du logiciel".
cHao
8

Est-il sûr d'exclure la prise en charge du pourcentage statistiquement insignifiant d'utilisateurs qui décident (pour une raison quelconque) des anciennes terminaisons de style Mac OS?

Peut - être pas trop d'utilisateurs détecteront, mais il y a un éléphant dans la pièce: les fins de ligne (Windows CRLF). Si vous les supportez (je le fais généralement, même si je n'utilise que Windows pour les jeux), il devrait être trivial de prendre en charge la troisième partie de ce triangle historique des Bermudes.

Si vous ne supportez pas quelque chose comme ça, vous devriez au moins le mentionner dans la documentation (style "Ce n'est pas un bug") et comment changer les fichiers pour travailler avec votre outil de la manière la plus simple possible ( dos2unixpar exemple).

l0b0
la source
2
+1 pour mentionner Windows utilisant CRLF- c'est la ligne par défaut se terminant sur ce système d'exploitation. Et il n'y a aucun moyen de garantir la source d'un fichier .csv, il aurait donc pu facilement être créé sur un système Windows.
1
Mentionner CRLF dans Windows n'est pas pertinent car si vous attrapez LF comme point d'arrêt, vous obtiendrez automatiquement CRLF en bonus. L'OP le sait, comme vous pouvez le voir dans le texte de son message.
davidethell
@davidethell Oui, c'est comme ça que ça se passe. Actuellement, les caractères CR sont ignorés en silence. Malgré les éléphants.
Evan Plaice
6

Il existe de nombreux périphériques série qui comptent sur la CRfin du flux de données avant leur ETXenvoi. C'est une convention qui ne disparaîtra jamais.

Brian
la source
3

Je traiterais la demande comme n'importe quelle demande de fonctionnalité où vous devez peser les coûts par rapport aux avantages.

Si exactement une personne a demandé une assistance CR, ce n'est peut-être pas nécessaire. Voir le chapitre du livre ci-dessous de 37 signaux où ils disent que vous ne devriez vous soucier que des demandes de fonctionnalités très populaires.

http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php

Aaron Kurtzhals
la source
1
Enfin, un bon contrepoint. Si je pouvais sélectionner deux réponses, je choisirais celle-ci aussi.
Evan Plaice
1

Les systèmes d'exploitation MS à partir de MSDOS utilisent la combinaison CR + LF comme séparateur de ligne (je pense principalement à cause des imprimantes matricielles qui en ont besoin).

Alors oui, c'est une déception, mais vous avez toujours besoin de soutien pour ce fichu truc.

linkerro
la source