復帰文字は廃止と見なされますか


26

構造化されたデータを解析するオープンソースライブラリを作成しましたが、要点がわからないため、意図的にキャリッジリターン検出を省略しました。追加の複雑さとオーバーヘッドが追加され、ほとんど/まったく利点がありません。

驚いたことに、ユーザーがパーサーが機能していなかったバグを提出しました。問題の原因は、データがLFまたはCRLFではなくCR行の終わりを使用していることにあります。

UNIXベースのプラットフォームに切り替えてから、OSXはLFスタイルの行末記号を使用していませんか?

行末を明示的にCRを使用するように変更できるNotepad ++のようなアプリケーションがあることは知っていますが、なぜだれがそうしたいのかわかりません。

(何らかの理由で)古いMac OSスタイルの行末を決定する統計的に重要でない割合のユーザーのサポートを除外しても安全ですか?

更新:

明確にするために、Windowsの行末記号(CRLFなど)のサポートには、CRトークンの認識は必要ありません。効率化のため、字句解析器は文字ごとに一致します。CR文字を静かに無視することにより、CRLFトークンはLFに単純化されます。そのため、CRLFトークン自体は時代錯誤とみなすことができますが、それはこの質問の目的ではありません。

CRスタイルの行末をシステム全体でサポートする最後のOSはMac OS 9でした。皮肉なことに、OSXでデフォルトとして使用している唯一のアプリケーションはMicrosoft Excelです。


21
「追加の複雑さとオーバーヘッドが追加されます」:追加の複雑さとオーバーヘッドは本当に小さいと思います。
ジョルジオ

11
@EvanPlaiceは、頭を痛めず、意図せずに残したCRサポートをプラグインするだけで怠けている時間を与えませんか?
ピーターB

11
「ビジネス用語では機会費用が高すぎます。単純な用語では、無駄なプラットフォームにエッジケースのサポートを追加する時間を無駄にするよりも、怠lazを正当化する理由を見つけたいです。」:ビジネス用語では、この機能の関連性を調査するためにここに質問を投稿するよりも、CRのサポートを実装してください。
ジョルジオ

4
@EvanPlaiceの文化的inertia性は完全に正当な理由です。
ピーターB

5
@EvanPlaice:この質問を書くことはCR、コードベースへの改行をサポートするために単にシャベルで作業するよりも多くの時間を費やしました。(...これが当てはまらないと固く信じている場合、パーサーのデザインはかなり多忙でなければなりません)
ZJR

回答:


37

「受け入れるものはリベラルで、送るものは保守的」であるという良い習慣があります。

言い換えれば、誰かがあなたにcr行の終わりを与える(そしてそれが正しく動作することを期待する)可能性がある場合(それが小さいとしても)、それをサポートする必要があります。

TBH、CRのサポートを追加するのにそれほど時間がかかるかわかりません。

crレクサーでa が次の文字を覗き、それがであるnl場合、次の文字がnl改行トークンを発行して継続しない場合、改行を飲み込んで改行トークンを発行します。


23
@ZJR:ポステルの法則は危険です。ロバスト性の原則を採用するときは、頻繁に裏目に出るため、非常に注意してください。私たちがまだいるHTML解析の混乱は、その考え方に帰することができます。プログラムが不正な入力を受け入れると、その結果としての動作はすぐに予想され、動作に依存するようになります。また、後に不正な入力を異なる方法で処理する、またはまったく技術的に正しくない変更は、しばしば欠陥と見なされます。
whatsisname

4
@whatsisname:私は同意しません。生産品質のソフトウェアは堅牢でなければなりません。ただし、開発ツールチェーンは、このような堅牢性に依存することを強く推奨せず、有効な出力のみを生成する必要があります。混乱したhtmlの原因は、ブラウザーの寛大さではなく、ほぼ20年に及ぶ貧弱なツールにあります。
back2dos

2
@ back2dos:_ _そうですか?貧弱なツーリングは、ブラウザの寛大さが原因です。
アマラ

4
貧弱なツールはブラウザ戦争の結果です
ラチェットフリーク

2
@Dibbeke:不正な形式の入力を処理しても、より大きな入力スペースが既存の状態スペースにマップされるだけで、影響はありません-ソフトウェアに懸念が十分に分離されている場合。
back2dos

21

いいえ。CRは廃止されていません(「生産または使用されなくなった」と定義されています)。あなた自身がその証拠を提供しました。おそらく珍しいことですが、時代遅れではありませ

CRの「サポートを除外しても安全ですか?」あなたが言うように、それは売り上げを失うことの問題ではなく、あなたは世界中のすべての奇妙な文字の組み合わせとファイル形式をサポートすることはできず、あなただけがあなたのソフトウェアとユーザーベースを知っています。そのため、追加しない場合のサポートの負担(mouvicielが説明するように)が追加の時間負担を上回らないと確信している場合は、除外しても安全だと思います。しかし、製品とユーザーベースについて詳しく知ることなく、より具体的になる方法がわかりません。


13
+1-IMO、OPはCRを「廃止」とラベル付けしようとしているので、CRをサポートしない理由があります。
スティーブンC

1
@StephenC私はその事実を隠そうとはしていません。本当に言い訳が必要なわけではなく、私が著者であり、最終決定権を持っています。ポイントは、興味深い質問を提起することです。
エヴァンプレイス

18

怠Aboutについて:バランスを取る必要があります:

  • CRが安全に処理されるようにコードを変更する努力(およびそれを忘れる)。

  • 数十年にわたって満足していたファイルが突然アプリをクラッシュさせる理由をユーザーに説明する努力、販売を妥協することなく使用できる回避策を見つけること、ここでコメントを求めてコメントすることを求めます。

どのパスが最も遅延するかを決定するのはあなた次第です。


良い点、サポートには間違いなく時間がかかります。この特定のケースでは、「販売」は問題ではありません(つまり、オープンソースです)が、全体像を検討する価値があります。同様に、無効またはサポートされていない文字を示すCRが検出された場合、コードで例外をスローすることもできます。
エヴァンプライス

7
@Evan:もちろんオープンソースです。そうでない場合、上司は「「誰も」がCRを使用しないということはもうしません。顧客は不満を言っています。それを修正してください!」:Pこれは私を怒らせるOSSの大きなことです。ユーザーが不満を述べている実際のケースに注意が欠けていることです。あなたがそれが時代遅れであると思うかどうかにかかわらず、誰かがまだそれを使用しています。
cHao

1
それはオープンソースであるため、修正するパッチを受け入れるすべてのユーザーに公開レターを書くことができます。
rwong

1
@EvanPlaice:「注意が...通貨」ということは両方の方法で機能します。ユーザーにアプリを使用してもらいたい場合、アプリは機能し、問題を解決する必要があります。壊れたアプリは無料だからといって批判を免れません。ユーザーが求めるすべてのことを行う必要があると言っているわけではありません。とんでもない要求却下する必要があります。しかし、実際のユーザーの問題を解決しないと、ユーザーを失うことになります。
cHao

1
@EvanPlaice:ちなみに、「文句を言う」とは、「ソフトウェアがどれだけ悪いのかをランダムに示す」のではなく、「壊れているものとその方法の概要を示すバグレポートを提出する」という意味です。
cHao

8

(何らかの理由で)古いMac OSスタイルの行末を決定する統計的に重要でない割合のユーザーのサポートを除外しても安全ですか?

多分あまり多くのユーザーはそれを検出しませんが、部屋には象がいます:Windowsの行末(CRLF)。それらをサポートする場合(私は通常、ゲームにWindowsのみを使用していますが)、この歴史的なバミューダトライアングルの3番目の部分をサポートするのは簡単なはずです。

このようなものをサポートしていない場合は、少なくともドキュメント(「これはバグではありません」スタイル)言及する必要がありますdos2unix


2
+1を使用してWindowsに言及する場合CRLF-そのOSで終了するデフォルトの行です。また、.csvファイルのソースを保証する方法はないため、Windowsシステムで簡単に作成できます。

1
WindowsでCRLFに言及することは、LFをブレークポイントとしてキャッチしている場合、自動的にボーナスとしてCRLFを取得するため、関係ありません。あなたは彼の投稿のテキストで見ることができるように、OPはこれを知っています。
davidethell

@davidethellうん、そういう風にやった。現在、CR文字は黙って無視されます。それにもかかわらず象。
エヴァンプレイス

6

送信CR前にデータストリームの終端として依存するシリアルデバイスは多数ありますETX。それは決してなくなることのない慣習です。


3

このリクエストは、コストとメリットを比較検討する必要がある機能リクエストとして扱います。

正確に1人がCRサポートを要求した場合、おそらく必要ではありません。非常に人気のある機能のリクエストについてのみ心配するべきだと言っている37のシグナルから、以下の本の章を参照してください。

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


1
最後に、良いカウンターポイント。2つの回答を選択できる場合は、これも選択します。
エヴァンプライス

1

MSDOS以降のMS OSでは、CR + LFの組み合わせを行区切り記号として使用します(主に、マトリックスプリンターが必要なためです)。

ええ、それは残念ですが、あなたはまだのろわれたもののサポートが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.