Il carattere carriage-return è considerato obsoleto

26

Ho scritto una libreria open source che analizza i dati strutturati ma ha omesso intenzionalmente il rilevamento del carriage-return perché non vedo il punto. Aggiunge ulteriore complessità e sovraccarico per poco / nessun vantaggio.

Con mia sorpresa, un utente ha presentato un bug in cui il parser non funzionava e ho scoperto che la causa del problema era che i dati utilizzati terminano con la linea CR anziché con LF o CRLF.

OSX non ha usato terminazioni di linea stile LF da quando è passato a una piattaforma basata su Unix?

So che esistono applicazioni come Notepad ++ in cui è possibile modificare le terminazioni di riga per utilizzare CR in modo esplicito, ma non vedo perché qualcuno vorrebbe farlo.

È sicuro escludere il supporto per la percentuale statisticamente insignificante di utenti che decidono (per qualsiasi motivo) per i vecchi line-end di stile Mac OS?

Aggiornamento:

Per chiarire, il supporto delle terminazioni di riga di Windows (es. CRLF) non richiede il riconoscimento del token CR. Ai fini dell'efficienza, il lexer corrisponde su una base per-char. Ignorando silenziosamente i caratteri CR, il token CRLF si semplifica in LF. In quanto tale, il token CRLF stesso può essere considerato un anacronismo tutto suo ma non è quello di cui tratta questa domanda.

L'ultimo sistema operativo che forniva il supporto a livello di sistema per le terminazioni di linea in stile CR era Mac OS 9 . Ironia della sorte, l'unica applicazione che lo utilizza ancora come predefinita in OSX è Microsoft Excel.

    
posta Evan Plaice 13.12.2012 - 07:24
fonte

7 risposte

37

Esiste una buona pratica in cui sei "liberale in ciò che accetti e conservativo in ciò che invii" .

In altre parole, se c'è una possibilità (per quanto piccola sarà) che qualcuno ti dia una fine cr line (e aspetti che funzioni correttamente), dovrai supportarla.

TBH, non riesco a vedere come l'aggiunta del supporto CR richiederebbe tutto questo tempo.

Quando vedi un cr nel lexer guarda il prossimo carattere e se è un nl , inghiotta la nuova riga ed emette un token newline, se il prossimo carattere non è un nl emette semplicemente una nuova riga token e continua.

    
risposta data 13.12.2012 - 09:55
fonte
21

No. CR non è obsoleto (definito come "non più prodotto o utilizzato"). Tu stesso ne hai fornito la prova. È forse non comune , ma non obsoleto .

Per "è sicuro per escludere il supporto" per CR? Come dici tu, non si tratta di perdere vendite, e non puoi supportare ogni strana combinazione di caratteri e formati di file nel mondo, e solo tu conosci il tuo software e la tua base di utenti. Quindi direi che sarebbe sicuro escluderlo se sei convinto che l'onere del supporto di non aggiungerlo (come spiega mouviciel) non superi l'onere di aggiungerlo. Ma senza sapere molto di più sul prodotto e la base di utenti non sono sicuro di come essere più specifico.

    
risposta data 13.12.2012 - 11:20
fonte
18

A proposito di pigrizia: devi bilanciare:

  • sforzo nel cambiare il codice in modo che CR sia gestito in modo sicuro (e poi dimenticarlo).

  • impegno nello spiegare agli utenti perché i file di cui erano soddisfatti per decenni improvvisamente bloccano la tua app, nel trovare soluzioni alternative che possano utilizzare senza compromettere le tue vendite e nel chiedere argomenti e commenti ai commenti proprio qui.

Dipende da te decidere quale percorso è il più pigro.

    
risposta data 13.12.2012 - 10:07
fonte
8

Is it safe to exclude support for the statistically insignificant percentage of users who decide (for whatever reason) to the old Mac OS style line-endings?

Forse non molti utenti lo rileveranno, ma nella stanza c'è un elefante: terminazioni di linea di Windows ( CRLF ). Se supporti quelli (in generale, anche se utilizzo solo Windows per i giochi), dovrebbe essere banale supportare la terza parte di questo triangolo storico delle Bermuda.

Se non supporti qualcosa del genere, dovresti almeno menzionarlo nella documentazione (stile "Questo non è un bug") e come cambiare i file per lavorare con il tuo strumento in il modo più semplice possibile ( dos2unix per esempio).

    
risposta data 13.12.2012 - 13:03
fonte
6

Ci sono molti dispositivi seriali che fanno affidamento su CR come fine del flusso di dati prima che venga inviato ETX . È una convenzione che non andrà mai via.

    
risposta data 13.12.2012 - 19:52
fonte
3

Tratterei la richiesta come qualsiasi richiesta di funzionalità in cui è necessario valutare i costi rispetto ai benefici.

Se esattamente una persona ha richiesto il supporto CR, forse non è necessario. Vedi il capitolo seguente del libro da 37 segnali in cui dicono che dovresti preoccuparti solo delle richieste di funzionalità molto popolari.

link

    
risposta data 08.01.2013 - 19:47
fonte
1

MS OS da MSDOS in poi usa la combinazione CR + LF come separatore di riga (penso soprattutto per le stampanti a matrice che ne hanno bisogno).

Quindi sì, è un fiasco, ma hai ancora bisogno del supporto per la dannata cosa.

    
risposta data 13.12.2012 - 17:11
fonte

Leggi altre domande sui tag