Системы DWIM: Понимание намерений пользователя в компьютерных интерфейсах.
DWIM
DWIM: системы, понимающие намерения пользователя. Автокоррекция ошибок, "умные" функции в Emacs Lisp (PILOT). Пример: автоматическое определение пути при копировании файлов.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Компьютерные системы DWIM (do what I mean) стремятся предугадать намерения пользователя, автоматически исправляя незначительные ошибки вместо слепого выполнения явных, но потенциально ошибочных команд.
DWIM (do what I mean) computer systems attempt to anticipate what users intend to do, correcting trivial errors automatically rather than blindly executing users' explicit but potentially incorrect input.
Программное обеспечение
Термин был введен Уорреном Тейтельманом в его пакете DWIM для BBN Lisp, являющемся частью его системы PILOT, примерно до 1966 года.
The term was coined by Warren Teitelman in his DWIM package for BBN Lisp, part of his PILOT system, sometime before 1966.
Эмаки
Концепция DWIM была принята в расширенной форме в контексте текстового редактора GNU Emacs для описания философии проектирования функций Emacs Lisp или команд, которые стремятся интеллектуально "делать то, что нужно", в зависимости от контекста. В вики Emacs приводится пример команды копирования файла, способной определить путь назначения на основе конфигурации разделенного окна, содержащего два буфера dired, один из которых отображает исходный путь; такое поведение также распространяется на многие применимые действия dired, принимающие два пути к каталогам в качестве аргументов. Поведение DWIM, когда оно доступно, часто указывается в названии команды; например, в GNU Emacs есть функция dwim-комментирования, которая комментирует выделенный фрагмент, если он не закомментирован, или раскомментирует его, если он уже закомментирован, используя символы комментариев и отступы, подходящие для среды программирования и текущего контекста. Этот тип DWIM часто не связан напрямую с исправлением ошибок пользователя, а скорее с определением намерения пользователя на основе доступного контекста. Например, пакет Emacs Magit последовательно реализует эту философию проектирования. Среди множества команд diff есть команда magit-diff-dwim, которая не требует дополнительного ввода от пользователя, а просто пытается угадать, что пользователь хочет проанализировать, исходя из положения курсора. В руководстве пользователя Magit поведение magit-diff-dwim описывается просто: "Показать изменения для объекта под курсором", где "курсор" – это термин Emacs для обозначения позиции ввода.
The concept of DWIM has been adopted in augmented form within the context of the GNU Emacs text editor to describe the design philosophy of Emacs Lisp functions or commands that attempt to intelligently "do the right thing" depending on context. The Emacs wiki gives the example of a file copy command that is able to deduce the destination path from a split window configuration that contains two dired buffers, one of which displays the source path; this behaviour also generalises to many applicable dired actions that take two directory paths for arguments. DWIM behaviour, when available, is often mentioned in a command's name; e. g. GNU Emacs has a comment dwim function that comments out a selected region if uncommented, or uncomments it when already commented out, while using comment characters and indentation appropriate for the programming language environment and current context. This kind of DWIM is often not directly concerned with correcting user error but rather guessing user intent from available context. For example, the Emacs Magit package evinces this design philosophy pervasively. Among its numerous diff commands, there is a magit diff dwim command, which requires no further input from the user but simply guesses what the user wants to analyse based on the location of the cursor. The Magit User Manual describes the behaviour of magit diff dwim simply: "Show changes for the thing at point", "point" being the Emacs term for the cursor.