Wird der Wagenrücklauf als veraltet angesehen?

26

Ich habe eine Open-Source-Bibliothek geschrieben, die strukturierte Daten analysiert, aber die Wagenrücklauferkennung absichtlich ausgelassen hat, weil ich den Punkt nicht verstehe. Es erhöht die Komplexität und den Overhead bei geringem / keinem Nutzen.

Zu meiner Überraschung reichte ein Benutzer einen Fehler ein, bei dem der Parser nicht funktionierte, und ich stellte fest, dass die Daten CR-Zeilenenden im Gegensatz zu LF oder CRLF verwendeten.

Verwendet OSX seit dem Umstieg auf eine Unix-basierte Plattform keine Zeilenenden im LF-Stil?

Ich weiß, dass es Anwendungen wie Notepad ++ gibt, in denen die Zeilenenden so geändert werden können, dass CR explizit verwendet wird, aber ich verstehe nicht, warum jemand dies möchte.

Ist es sicher, die Unterstützung für den statistisch nicht signifikanten Prozentsatz der Benutzer auszuschließen, die sich (aus welchen Gründen auch immer) für die alten Zeilenenden im Mac OS-Stil entscheiden?

Aktualisieren:

Zur Verdeutlichung erfordert die Unterstützung von Windows-Zeilenenden (z. B. CRLF) keine CR-Token-Erkennung. Aus Effizienzgründen wird der Lexer auf Zeichenbasis abgeglichen. Durch das unbeaufsichtigte Ignorieren von CR-Zeichen wird das CRLF-Token zu LF vereinfacht. Das CRLF-Token selbst könnte als ein eigener Anachronismus betrachtet werden, aber darum geht es in dieser Frage nicht.

Das letzte Betriebssystem, das systemweite Unterstützung für Zeilenenden im CR-Stil bot, war Mac OS 9 . Ironischerweise ist Microsoft Excel die einzige Anwendung, die es noch als Standard in OSX verwendet.

Evan Scholle
quelle
21
"Es fügt zusätzliche Komplexität und zusätzlichen Aufwand hinzu": Ich denke, die zusätzliche Komplexität und der zusätzliche Aufwand sind wirklich gering.
Giorgio
11
@EvanPlaice, würde es nicht weniger Kopfschmerzen und mehr Zeit geben, faul zu sein, wenn Sie nur die CR-Unterstützung anschließen, die Sie absichtlich ausgelassen haben?
Pieter B
11
"In geschäftlicher Hinsicht sind die Opportunitätskosten zu hoch. In einfachen Worten, ich würde lieber Gründe finden, um meine Faulheit zu rechtfertigen, als Zeit damit zu verschwenden, Edge-Case-Unterstützung für eine tote Plattform hinzuzufügen.": In geschäftlicher Hinsicht hätte dies weniger Zeit in Anspruch genommen Implementieren Sie die Unterstützung für CR, und stellen Sie hier eine Frage, um die Relevanz dieser Funktion zu untersuchen.
Giorgio
4
@EvanPlaice kulturelle Trägheit ist durchaus ein guter Grund.
Pieter B
5
@EvanPlaice: Das Schreiben dieser Frage hat Sie bereits mehr Zeit gekostet als nur die Unterstützung für CRZeilenumbrüche in Ihre Codebasis zu schaufeln . (... und wenn Sie der festen Überzeugung sind, dass dies nicht der Fall ist, muss das Design Ihres Parsers ziemlich hektisch sein)
ZJR

Antworten:

37

Es gibt eine gute Praxis, bei der Sie "liberal in dem sind, was Sie akzeptieren, und konservativ in dem, was Sie senden" .

Mit anderen Worten, wenn es eine Chance gibt (wie klein sie auch sein mag), dass Ihnen jemand ein Cr-Zeilenende gibt (und davon ausgeht, dass es korrekt funktioniert), müssen Sie es unterstützen.

TBH, ich kann nicht sehen, wie lange das Hinzufügen von CR-Unterstützung dauern würde.

Wenn Sie crim Lexer einen Blick auf das nächste Zeichen nlwerfen, und wenn dies der Fall ist , schlucken Sie die neue Zeile und geben Sie einen neuen Zeilentoken aus, wenn das nächste Zeichen nicht nlnur ein neuer Zeilentoken ist, und fahren Sie fort.

Ratschenfreak
quelle
23
@ZJR: Das Postelgesetz ist gefährlich: Seien Sie sehr vorsichtig, wenn Sie das Robustheitsprinzip anwenden, da es häufig nach hinten losgeht. Das HTML-Parsing-Chaos, in dem wir uns immer noch befinden, kann dieser Denkweise zugeschrieben werden. Wenn ein Programm fehlerhafte Eingaben akzeptiert, wird sein Verhalten als Ergebnis bald erwartet und vom Verhalten abhängig. Alle späteren Änderungen, die die fehlerhaften Eingaben anders oder überhaupt nicht behandeln, obwohl sie technisch korrekt sind, werden häufig als fehlerhaft angesehen.
Whatsisname
4
@whatsisname: Ich bin anderer Meinung. Ich denke, Software in Produktionsqualität sollte robust sein. Entwicklungswerkzeugketten sollten jedoch davon dringend abraten, sich auf eine solche Robustheit zu verlassen, und nur gültige Ergebnisse liefern. Das Chaos in HTML wird durch fast zwei Jahrzehnte schlechter Werkzeuge verursacht, nicht durch die Nachsicht der Browser.
back2dos
2
@ back2dos: _ _ also? Das schlechte Werkzeug wird durch die Nachsicht der Browser verursacht.
Amara
4
die schlechten Werkzeuge sind das Ergebnis der Browser - Krieg
Ratsche Freak
2
@Dibbeke: Beim Umgang mit falsch formatierten Eingaben wird lediglich ein größerer Eingabebereich auf den vorhandenen Statusbereich abgebildet, und dies hat keine Auswirkung auf den vorhandenen Statusbereich - vorausgesetzt, Ihre Software weist eine angemessene Trennung der Bedenken auf.
back2dos
21

Nein. CR ist nicht veraltet (definiert als "nicht mehr hergestellt oder verwendet"). Das haben Sie selbst bewiesen. Es ist vielleicht ungewöhnlich , aber nicht veraltet .

Wie für "Ist es sicher , Unterstützung auszuschließen" für CR? Wie Sie sagen, es geht nicht darum, Verkäufe zu verlieren, und Sie können nicht jede seltsame Zeichenkombination und jedes Dateiformat auf der Welt unterstützen, und nur Sie kennen Ihre Software und Ihre Benutzerbasis. Ich würde also sagen, dass es sicher ist, es auszuschließen, wenn Sie überzeugt sind, dass die Supportlast, wenn Sie es nicht hinzufügen (wie mouviciel erklärt), die Zeitlast, die mit dem Hinzufügen verbunden ist, nicht überwiegt. Aber ohne viel mehr über das Produkt und die Anwenderbasis zu wissen, weiß ich nicht, wie ich es genauer beschreiben soll.

Fröhliche Katze
quelle
13
+1 - IMO, das OP versucht, CR als "veraltet" zu kennzeichnen, damit er eine Entschuldigung dafür hat, es nicht zu unterstützen.
Stephen C
1
@StephenC Ich versuche nicht, diese Tatsache zu verbergen. Es ist nicht so, dass ich wirklich eine Entschuldigung brauche , ich bin der Autor und habe somit das letzte Wort. Der Punkt ist, es wirft eine interessante Frage auf.
Evan Plaice
18

Über Faulheit: Sie müssen ausbalancieren:

  • Bemühen Sie sich, den Code so zu ändern, dass CR sicher gehandhabt wird (und vergessen Sie es dann).

  • Erklären Sie den Benutzern, warum die Dateien, mit denen sie jahrzehntelang zufrieden waren, Ihre App plötzlich zum Absturz bringen, finden Sie Problemumgehungen, die sie verwenden können, ohne Ihren Umsatz zu beeinträchtigen, und fragen Sie hier nach Argumenten und Kommentaren.

Es liegt an Ihnen zu entscheiden, welcher Weg der faulste ist.

mouviciel
quelle
Gute Punkte, Support ist definitiv mit einem Zeitaufwand verbunden. In diesem speziellen Fall ist "Verkauf" kein Thema (dh es ist Open Source), aber es lohnt sich, das Gesamtbild zu betrachten. Ebenso könnte ich auch eine Ausnahme im Code auslösen, wenn ein CR auftritt, der auf ein ungültiges / nicht unterstütztes Zeichen hinweist.
Evan Plaice
7
@Evan: Natürlich ist es Open Source. Wenn das nicht der Fall wäre, hätte Ihr Chef Ihnen gesagt: "Es ist mir egal, dass niemand mehr CR verwendet. Kunden beschweren sich. FIX IT!" : P Das ist das Große an OSS, das mich nervt: die mangelnde Aufmerksamkeit für die tatsächlichen Fälle , über die sich Benutzer beschwert haben. Ob Sie denken, dass es veraltet ist oder nicht, jemand verwendet es noch.
cHao
1
Da es sich um Open Source handelt, können Sie allen Benutzern einen offenen Brief schreiben, in dem Sie Patches akzeptieren, um das Problem zu beheben.
rwong
1
@EvanPlaice: Diese "Aufmerksamkeit ist ... Währung" Sache funktioniert in beide Richtungen. Wenn Sie möchten, dass Benutzer Ihre App verwenden, muss sie funktionieren und das Problem lösen. Eine kaputte App ist nicht immun gegen Kritik, nur weil sie kostenlos ist. Ich sage nicht, dass Sie alles tun müssen, wonach Benutzer fragen. Sie sollten empörende Anfragen ablehnen. Wenn Sie jedoch die Probleme realer Benutzer nicht lösen, verlieren Sie Benutzer.
CHAO
1
@EvanPlaice: Übrigens, wenn ich "sich beschweren" meine, meine ich "einen Fehlerbericht einreichen, der beschreibt, was kaputt ist und wie", und nicht "zufällig darüber jammern, wie schlecht die Software ist".
CHAO
8

Ist es sicher, die Unterstützung für den statistisch nicht signifikanten Prozentsatz der Benutzer auszuschließen, die sich (aus welchen Gründen auch immer) für die alten Zeilenenden im Mac OS-Stil entscheiden?

Vielleicht werden es nicht zu viele Benutzer bemerken, aber es befindet sich ein Elefant im Raum: Windows-Zeilenenden ( CRLF). Wenn Sie diese unterstützen (das tue ich im Allgemeinen, obwohl ich nur Windows für Spiele verwende), sollte es trivial sein, den dritten Teil dieses historischen Bermuda-Dreiecks zu unterstützen.

Wenn Sie so etwas nicht unterstützen, sollten Sie es zumindest in der Dokumentation erwähnen ("Dies ist kein Bug" -Stil) und erfahren, wie Sie Dateien so ändern können, dass sie mit Ihrem Tool auf einfachste Weise funktionieren ( dos2unixzum Beispiel).

l0b0
quelle
2
+1 für die Erwähnung von Windows mit CRLF- es ist die Standardzeile, die auf diesem Betriebssystem endet. Und es gibt keine Möglichkeit, die Quelle einer .csv-Datei zu garantieren, sodass sie möglicherweise auf einem Windows-System erstellt wurde.
1
Das Erwähnen von CRLF in Windows ist nicht relevant, da Sie automatisch CRLF als Bonus erhalten, wenn Sie LF als Haltepunkt festlegen. Das OP weiß das, wie Sie im Text seines Beitrags sehen können.
Davidethell
@ Davidethell Ja, so wird es gemacht. Derzeit werden CR-Zeichen stillschweigend ignoriert. Trotz Elefanten.
Evan Plaice
6

Es gibt viele serielle Geräte, die darauf angewiesen sind, dass CRder Datenstrom vor dem ETXSenden beendet wird. Es ist eine Konvention, die niemals vergehen wird.

Brian
quelle
3

Ich würde die Anfrage als jede Feature-Anfrage behandeln, bei der Sie die Kosten gegen die Vorteile abwägen müssen.

Wenn genau eine Person um CR-Unterstützung gebeten hat, ist dies möglicherweise nicht erforderlich. Im folgenden Buchkapitel finden Sie Informationen zu 37 Signalen, in denen Sie sich nur um sehr beliebte Funktionsanforderungen kümmern sollten.

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

Aaron Kurtzhals
quelle
1
Endlich ein guter Kontrapunkt. Wenn ich zwei Antworten auswählen könnte, würde ich auch diese auswählen.
Evan Plaice
1

MS-Betriebssysteme ab MSDOS verwenden die Kombination CR + LF als Zeilentrennzeichen (ich denke hauptsächlich an Matrixdrucker, die sie benötigen).

Also ja, es ist ein Mist, aber du brauchst immer noch Unterstützung für das verdammte Ding.

linkerro
quelle