DWIM(Do What I Men's Mean:私の意図通りに実行する)コンピュータシステムは、ユーザーが何をしようとしているかを予測し、ユーザーが明示的に入力したが潜在的に誤っている可能性のある入力を盲目的に実行するのではなく、些細なエラーを自動的に修正しようとします。
この用語は、 1966 年以前のある時期に、ウォーレン・タイテルマンがBBN Lisp用の DWIM パッケージ(彼の PILOT システムの一部)で考案したものです。[ 1 ] [ 2 ] [ 3 ]
TeitelmanのDWIMパッケージは、自然言語の自動修正と同様に、「エラーを自動的に、またはわずかなユーザーの介入で修正」しました[ 2 ] 。
タイテルマンと彼のゼロックスPARCの同僚であるラリー・マジンターは後に、インターリスプ・プログラミング環境(BBN Lispの後継)においてDWIMの理念を説明した。
ほとんどのユーザーはDWIMを単一の識別可能なパッケージとして認識していますが、DWIMはユーザーインターフェース設計における普遍的な哲学を体現しています。すなわち、ユーザーインターフェースレベルでは、システム機能は認識できない入力が与えられた場合に合理的な解釈を行うべきである、という哲学です。…Interlisp全体で使用されているインターフェーススタイルにより、ユーザーはさまざまなパラメータを省略でき、それらのパラメータは妥当なデフォルト値に設定されます…
DWIMは、ユーザーがコンテキスト情報からユーザーの要求を解釈しようとするエージェントと対話しているという考え方を具現化したものです。ユーザーにはシステムと会話していると感じてもらいたいので、修正や情報が明白な状況では、ユーザーが止められて修正を強制されたり、追加情報を提供させられたりするべきではありません。[ 4 ]
DWIMの批判者たちは、それが「タイテルマンが陥りやすい特定のタイピングミスにのみ対応しており、他のミスには対応していない」と主張し、「タイテルマンが意図するところを実行せよ」または「インターリスプが意図するところを実行せよ」[ 5 ]と呼んだ。また、この頭字語は「Damn Warren's Infernal Machine」の略だと示唆する者もいた。[ 6 ]
DWIM の概念は、 GNU Emacsテキストエディタのコンテキスト内で拡張された形で採用され、コンテキストに応じてインテリジェントに「正しいこと」を実行しようとするEmacs Lisp関数またはコマンドの設計思想を説明するために使用されています。 [ 7 ] Emacs wiki では、ソース パスを表示するdiredバッファが 2 つ含まれる分割ウィンドウ構成から宛先パスを推測できるファイル コピー コマンドの例が示されています。この動作は、引数として 2 つのディレクトリ パスを受け取る多くの適用可能な dired アクションにも一般化されます。
DWIM の動作は、利用可能な場合はコマンド名で言及されることが多い。たとえば、GNU Emacs にはcomment-dwim、選択した領域がコメントされていない場合はコメントアウトし、既にコメントアウトされている場合はコメントを解除する関数があり、その際、プログラミング言語環境と現在のコンテキストに適したコメント文字とインデントを使用する。[ 8 ] [ 9 ]
この種の DWIM は、多くの場合、ユーザーエラーの修正に直接関係するのではなく、利用可能なコンテキストからユーザーの意図を推測します。たとえば、Emacs のMagitパッケージは、この設計思想を広く示しています。多数のdiffコマンドの中に、magit-diff-dwimユーザーからの追加入力を必要とせず、カーソルの位置に基づいてユーザーが分析したいものを推測するコマンドがあります。Magit ユーザー マニュアルでは、その動作をmagit-diff-dwim次のように説明しています。「ポイントにあるものの変更を表示します」[ 10 ]。ここで、 「ポイント」は Emacs のテキスト カーソル (マウス ポインタではない) の用語です。
一般的に、M-; (comment-dwim) コマンドは、セミコロンの数に応じて、適切なタイプのコメントを自動的に開始するか、既存のコメントを適切な位置にインデントします。
コメントを作成または整列させるコマンドは M-; (comment-dwim) です。「dwim」は「Do What I Mean」の頭文字をとった略語で、このコマンドは使用する状況に応じて、コメントに関連するさまざまな作業に使用できることを示しています。