blog

プログラミング言語におけるいくつかの厄介なルール

プログラマーは、他人が開発したプログラミング言語やオペレーティングシステム、さまざまな開発ツールを使います。前世代の言語開発者やシステム設計者が下した決断のいくつかは、当時は理にかなっていたかもしれま...

Jun 30, 2014 · 5 min. read
シェア

プログラミング言語の設計やオペレーティング・システムの設計で何年も前に行われた選択は、当時は無関係に思えたかもしれません。しかし、これらの古い決断は、今日でもソフトウェア開発者を悩ませ続けています。

プログラマーは、他社が開発したプログラミング言語やオペレーティング・システム、さまざまな開発ツールを使っています。前世代の言語開発者やシステム設計者が下した決断の中には、当時は理にかなっていても、今となっては冗長に思えるものもあるかもしれません。

例えば2009年、インターネットの創始者であるティム・バーナーズ=リーは、インターネットのURLのhttp:の後にある2つのスラッシュ//は本当は必要ないことを認め、不便であることを謝罪しました。このスラッシュ2つで、どれだけの時間、印刷インク、紙が無駄になっているかわかりません。

そのほかにも、日々コードを書いているソフトウェア開発者にとっては、先人たちが当時下した決断が後世の頭痛の種になることがたくさんあります。次は、開発者を頭痛の種にしたプログラミング言語とオペレーティング・システムの時代遅れの選択を見てみましょう。

1.Unixの隠しスポットファイル

初期のUnixオペレーティングシステムは、コマンドでディレクトリの内容をリストアップする際、.NETで始まるファイルやディレクトリはすべて非表示になるように設計されていました。 .で始まるファイルやディレクトリは、デフォルトで非表示になります。

それ以来、ドットファイルは日常的に気づかれなくなり、悪意のあるファイルが簡単に隠れる手段にもなっています。

[]

引用

「この小さなショートカットのせいで、この40年間にどれだけのバグが発生したことか。どれだけのCPUサイクルが無駄になったでしょう?どれだけのヒューマンエラーが発生したでしょうか?だから、この教訓は覚えておくべきです。今度、コードにショートカットを使いたくなったときには、この教訓を思い出してください。"Rob Pike

2.JavaScriptは "+"を使って文字列を連結します。

約20年前、NetscapeがJavaScriptを開発した当初、彼は文字列の連結に+演算子を多用することにしました。

[]

しかし結局のところ、JavaScriptの弱い型付けと相まって、+演算子の使用は通常、値の足し算や引き算ではなく、数値変数の連結になることがわかりました。他のプログラミング言語でも同じように、異なる連結演算子を選んだり、専門的なプログラマーが混乱を避けるために変数を厳密に入力するようにしたりしています。

引用

「私が最初にJavaScriptを学んだとき、入力の挙動が一貫していないため、最終チェックでバグを見つけるのが難しく、本当に困りました

3.マイクロソフトはパスの区切り文字としてバックスラッシュを選択します。

1983年、マイクロソフトはMS-DOS 2のリリース.0し、Unixのようなディレクトリ階層を搭載しました。しかし、ディレクトリパスの分割にフォワードスラッシュを使用していたUnixとは異なり、マイクロソフトはバックスラッシュを使用しました。この理由は、フォワードスラッシュがすでにコマンドラインオプションを示すために使用されていたため、マイクロソフトはバックスラッシュを使用することを選択しました。

[]

バックスラッシュはUnixやPerl、C言語などで、主にバックスラッシュの直後の文字を区別するために使われます。

引用

4.Pythonはブロックを表現するためにインデントを使用します。

中括弧のような明示的な区切り文字を使ってステートメントのグループ化を示す大多数のプログラミング言語とは異なり、Pythonはリーディング・ブランクどのブロックがどの行に属するかを示します。

[]

実際、経験豊富なPythonプログラマーだけがこの機能を使うがりますが、Pythonに慣れていない人やあまり使わない人にとって、特にコードのカットアンドペーストやプラットフォームの変更、コードのリファクタリングの際に、この機能がどれだけ煩わしいものであるかについては言及しません。

引用

"2つのプラットフォームを切り替えてみると、これがプログラミング言語における本当に究極の機能であることがわかるでしょう!"Joe Zitzelberger

#p#

5.トニー・ホーアが空引用を考案

1965年、イギリスの有名なコンピュータ科学者であるTony Hoareは、使用するすべての参照が安全であることを保証するために、ALGOL W言語に引用コンセプト導入しました。現在に至るまで、この発明はほとんどのプログラミング言語に存在しています。

[]

コンパイラはNULLポインタについて文句を言うことはありませんが、実行時エラーやシステムクラッシュを引き起こす可能性のある参照を非推奨にしたい場合、プログラマは防御やデバッグのために何かを試みなければなりません。

引用

"何十億ドルもの損失を招いた過ちだと思います"Tony Hoare

6.JavaScriptは自動的にセミコロンを挿入します。

JavaScriptのセミコロンは文の終わりを表しますが、JavaScriptは自動的に適当な場所にセミコロンを挿入します。例えば、プログラムの最後や、改行の return 文の直後などです。

[]

その場合、セミコロンが自動的に挿入されると、構文エラーになることがあります

引用

"この機能は、特に本番環境でコードを圧縮する場合、開発者の仕事を少し混乱させます。"Mike Nelson

7.日付の表現方法

[]

また、うるう年の計算には多くのバグがあり、一部のシステムではY2K38 問題も発生しています。

引用

「1960年代、メモリの価値は1バイトあたり約1ドルでした。ですから、1960年代や1980年代に2つの数字を使うのは理にかなっています。しかし問題は、安定した正確なソフトウェアが、その設計寿命を完全に超えて動作してしまうことです。"--フレッド・クランペ

Read next

カスペルスキー、新たなサイバー諜報活動「マスク」を発見する

Kaspersky Labの研究者は、少なくとも2007年に始まった極秘のサイバースパイ活動を発見し、スパイウェアが使用するコマンド・アンド・コントロール・サーバーを制御した後、31カ国から380人の被害者を特定しました。研究者たちはこのスパイ活動を「The Mask」と呼んでいます。

Jun 30, 2014 · 1 min read