web-dev-qa-db-ja.com

UNIX / POSIXシステムコールの命名が判読できないのはなぜですか?

timecreatの代わりにgetCurrentTimeSecscreateFileのようなわかりにくいシステムコール名を使用する理由は何ですか。あるいは、Unixでより適切かもしれませんget_current_time_secsおよびcreate_file。これは私を次のポイントに連れて行きます:誰かがキャメルケースまたは少なくともアンダースコアなしでcfsetospeedのようなものを読みやすくする必要があるのはなぜですか?もちろん、呼び出しにはより多くの文字がありますが、コードの可読性がより重要であることは誰もが知っていますよね?

43
Benjoyo

それは当時の技術的な制約によるものです。 POSIX標準は1980年代に作成され、1970年に生まれたUNIXを参照していました。当時のいくつかのCコンパイラーは、6文字または8文字の長さの識別子に制限されていたため、変数と関数の長さの標準を決定しました名前。

関連する質問:

61
dr_

dr01は正しいですが、別の理由もあります-使いやすさ。昔は、キーボードを打つほど快適なものはありませんでした。運が良ければ、昔ながらのタイプライターのようなものがありました。運が悪ければ、実際の物理的な操作を必要とするシステム( "キー"を押すのに多大な力を要した)に対処するか、カードに手動で穴を開けました。

つまり、6〜8文字の制限内でも、コマンドをできるだけ短くしようとしました。そのため、lsではなくlistを使用し、creatの代わりにcreateを使用します。その時代のコードは、axiなどの変数でいっぱいです-もちろん、x2 と友達。タイピングは大変な作業でした-今日では、タイピングによるlistIndexの使用は、以前の「タイピング」iによるものよりも少なくて済みます。オートコンプリートなどの追加のテクノロジーを使用)。

本当の質問は-どうしてそんなに多くのUnixのイディオムがもはや望ましくないのに存続するのか?

26
Luaan

他の回答に加えて、UnixはMultics、CTSS、およびその他の現代的なオペレーティングシステムへの反応として開発されたことを指摘したいと思います。 http://www.multicians.org/devdoc.html でこれらのOSの感触をつかむことができます。たとえば、 http://www.multicians.org/mspm-bx-1-00.htmlchange_nameファイルの名前を変更するコマンドとして。 Unix mvと比較してください。

また、非常に短いシステムコール名persistが使用される主な理由は、下位互換性です。新しいAPIはより明確になる傾向があることに気づくでしょう。例えばgettimeofdayおよびclock_gettimeだけではなくtime

(今日でも、ループインデックスにwhateverIndexの代わりにiを使用すると、myで自動コードレビューエラーが発生します。本 ;-)

22
zwol

デニス・リッチーは自分自身にCの制約を設定しました。これは、Fortranでも必要とされなかったリンカー機能に依存しないというものです。したがって、外部名の6文字の制限。

10
user207421