Введение
Типографическая отметка (\)
Обратная косая черта – это символ, используемый преимущественно в информатике и математике. Она является зеркальным отражением прямой косой черты. Это относительно недавний символ, впервые задокументированный в 1930-х годах. Его также называют хак, уэк, escape (от C/UNIX), обратный слеш, слош, даунвэк, бэксинт, бэквэк, бэш, обратный наклон, обратный солидус и перевернутая вирга.
История
по состоянию на 2022 год попытки установить происхождение этого символа или его назначение до 1960-х годов не увенчались успехом. Самой ранней известной ссылкой на сегодняшний день является руководство по техническому обслуживанию Teletype Corporation 1937 года, содержащее фотографию клавиатуры перфоратора Kleinschmidt WPE 3, использующего систему Wheatstone, и демонстрирующее нестандартный код Морзе. В июне 1960 года IBM опубликовала "Стандарт расширенного набора символов", включающий данный символ под кодом 0x19. В сентябре 1961 года Боб Бемер (IBM) предложил комитету по стандартизации X3.2 включить символы , и в предлагаемый стандарт, описывая обратную косую черту как "оператор обратного деления" и ссылаясь на её предшествующее использование компанией Teletype в телекоммуникациях. В частности, он отметил, что символ необходим для того, чтобы булевы операторы ALGOL (логическое И) и (логическое ИЛИ) могли быть составлены с использованием и соответственно. Комитет принял эти изменения в проект американского стандарта (впоследствии названного ASCII) на своем заседании в ноябре 1961 года. и V7.
In June 1960, IBM published an "Extended character set standard" that includes the symbol at 0x19. In September 1961, Bob Bemer (IBM) proposed to the X3.2 standards committee that , and be made part of the proposed standard, describing the backslash as a "reverse division operator" and cited its prior use by Teletype in telecommunications. In particular, he said, the was needed so that the ALGOL Boolean operators (logical conjunction) and (logical disjunction) could be composed using and respectively. The Committee adopted these changes into the draft American Standard (subsequently called ASCII) at its November 1961 meeting. and V7.
Языки программирования
Во многих языках программирования, таких как C, Perl, PHP, Python, скриптовых языках Unix, и многих форматах файлов, таких как JSON, обратная косая черта используется как символ экранирования, чтобы указать, что следующий за ней символ должен интерпретироваться особым образом (если он обычно интерпретируется буквально), или буквально (если он обычно интерпретируется особым образом). Например, внутри строкового литерала в C последовательность `\n` создает байт новой строки вместо символа 'n', а последовательность `\"` создает фактическую двойную кавычку, а не специальное значение двойной кавычки, обозначающее конец строки. Фактическую обратную косую черту можно получить с помощью двойной обратной косой черты `\\`.
Regular expression languages used it the same way, changing subsequent literal characters into metacharacters and vice versa. For instance searches for either '|' or 'b', the first bar is escaped and searched for, the second is not escaped and acts as an "or". Outside quoted strings, the only common use of backslash is to ignore ("escape") a newline immediately after it. In this context it may be called a "continued line" as the current line continues into the next one. Some software replaces the backslash+newline with a space. To support computers that lacked the backslash character, the C trigraph was added, which is equivalent to a backslash. Since this can escape the next character, which may itself be a , the primary modern use may be for code obfuscation. Support for trigraphs in C++ was removed in C++17, and support for them in C is planned to be removed in C23. In Visual Basic (and some other BASIC dialects) the backslash is used as an operator symbol to indicate integer division. This rounds toward zero. The ALGOL 68 programming language uses the "\" as its Decimal Exponent Symbol. ALGOL 68 has the choice of 4 Decimal Exponent Symbols: e, E, \, or 10. Examples: , , or
In APL is called Expand when used to insert fill elements into arrays, and Scan when used to produce prefix reduction (cumulative fold). In PHP version 5.3 and higher, the backslash is used to indicate a namespace. In Haskell, the backslash is used both to introduce special characters and to introduce lambda functions (since it is a reasonable approximation in ASCII of the Greek letter lambda, λ).
Регулярные выражения используют ее аналогичным образом, преобразуя последующие литеральные символы в метасимволы и наоборот. Например, `\|b` ищет либо '|', либо 'b'; первая вертикальная черта экранирована и ищется как литеральный символ, а вторая не экранирована и действует как оператор "или". За пределами заключенных в кавычки строк единственным распространенным применением обратной косой черты является игнорирование (экранирование) символа новой строки, следующего непосредственно за ней. В этом контексте ее можно назвать "продолжением строки", поскольку текущая строка продолжается на следующей строке. Некоторые программы заменяют обратную косую черту и символ новой строки пробелом. Для поддержки компьютеров, на которых отсутствовал символ обратной косой черты, был добавлен триграф C `\`, который эквивалентен обратной косой черте. Поскольку он может экранировать следующий символ, который сам может быть `, основное современное применение может заключаться в обфускации кода. Поддержка триграфов была удалена из C++ в C++17, а планируется удалить поддержку триграфов из C в C23. В Visual Basic (и некоторых других диалектах BASIC) обратная косая черта используется как оператор для обозначения целочисленного деления. Результат округляется к нулю. Язык программирования ALGOL 68 использует "\" как символ десятичного показателя степени. ALGOL 68 предоставляет выбор из 4 символов десятичного показателя степени: e, E, \, или 10. Примеры: `1.23e5`, `1.23E5`, `1.23\5` или `1.23105`.
Regular expression languages used it the same way, changing subsequent literal characters into metacharacters and vice versa. For instance searches for either '|' or 'b', the first bar is escaped and searched for, the second is not escaped and acts as an "or". Outside quoted strings, the only common use of backslash is to ignore ("escape") a newline immediately after it. In this context it may be called a "continued line" as the current line continues into the next one. Some software replaces the backslash+newline with a space. To support computers that lacked the backslash character, the C trigraph was added, which is equivalent to a backslash. Since this can escape the next character, which may itself be a , the primary modern use may be for code obfuscation. Support for trigraphs in C++ was removed in C++17, and support for them in C is planned to be removed in C23. In Visual Basic (and some other BASIC dialects) the backslash is used as an operator symbol to indicate integer division. This rounds toward zero. The ALGOL 68 programming language uses the "\" as its Decimal Exponent Symbol. ALGOL 68 has the choice of 4 Decimal Exponent Symbols: e, E, \, or 10. Examples: , , or
In APL is called Expand when used to insert fill elements into arrays, and Scan when used to produce prefix reduction (cumulative fold). In PHP version 5.3 and higher, the backslash is used to indicate a namespace. In Haskell, the backslash is used both to introduce special characters and to introduce lambda functions (since it is a reasonable approximation in ASCII of the Greek letter lambda, λ).
В APL `\` называется Expand при использовании для вставки заполняющих элементов в массивы и Scan при использовании для получения префиксного сокращения (кумулятивного свертывания). В PHP версии 5.3 и выше обратная косая черта используется для обозначения пространства имен. В Haskell обратная косая черта используется как для введения специальных символов, так и для введения лямбда-функций (поскольку это разумное приближение в ASCII греческой буквы лямбда, λ).
Regular expression languages used it the same way, changing subsequent literal characters into metacharacters and vice versa. For instance searches for either '|' or 'b', the first bar is escaped and searched for, the second is not escaped and acts as an "or". Outside quoted strings, the only common use of backslash is to ignore ("escape") a newline immediately after it. In this context it may be called a "continued line" as the current line continues into the next one. Some software replaces the backslash+newline with a space. To support computers that lacked the backslash character, the C trigraph was added, which is equivalent to a backslash. Since this can escape the next character, which may itself be a , the primary modern use may be for code obfuscation. Support for trigraphs in C++ was removed in C++17, and support for them in C is planned to be removed in C23. In Visual Basic (and some other BASIC dialects) the backslash is used as an operator symbol to indicate integer division. This rounds toward zero. The ALGOL 68 programming language uses the "\" as its Decimal Exponent Symbol. ALGOL 68 has the choice of 4 Decimal Exponent Symbols: e, E, \, or 10. Examples: , , or
In APL is called Expand when used to insert fill elements into arrays, and Scan when used to produce prefix reduction (cumulative fold). In PHP version 5.3 and higher, the backslash is used to indicate a namespace. In Haskell, the backslash is used both to introduce special characters and to introduce lambda functions (since it is a reasonable approximation in ASCII of the Greek letter lambda, λ).
Имена файлов
MS DOS 2.0, выпущенная в 1983 году, переняла идею иерархической файловой системы из Unix и, следовательно, использовала прямой слеш (/) в качестве разделителя каталогов. Вероятно, по настоянию IBM, Microsoft добавила обратную косую черту (\), чтобы позволить вводить пути в командной строке интерпретатора, сохраняя при этом совместимость с MS DOS 1.0, в которой символ «-» служил индикатором опции командной строки. Ввод «-w» давал команде «DIR» опцию "wide", поэтому требовался другой способ, если пользователь действительно хотел запустить программу с именем «foo» внутри каталога с именем «foo». За исключением COMMAND.COM, все остальные части операционной системы принимают оба символа в пути, но стандарт Microsoft остаётся за использованием обратной косой черты, и API, возвращающие пути, используют обратную косую черту. В некоторых версиях символ опции можно изменить с «-» на «/» с помощью SWITCHAR, что позволяет COMMAND.COM сохранить «-» в имени команды. Семейство операционных систем Microsoft Windows унаследовало поведение MS DOS и поэтому по-прежнему поддерживает оба символа, но отдельные программы Windows и подсистемы могут ошибочно принимать только обратную косую черту в качестве разделителя пути или могут неправильно интерпретировать прямой слеш, если он используется в качестве такового. Некоторые программы будут принимать только прямые слеши, если путь заключён в двойные кавычки. Неспособность средств безопасности Microsoft распознавать неожиданные направления слешей в локальных и интернет-путях, в то время как другие части операционной системы всё ещё реагируют на них, привела к серьёзным уязвимостям в системе безопасности. Доступ к ресурсам, которые не должны быть доступны, был получен с использованием путей, содержащих определённые комбинации, например, «…\».
Маркировка текста
Обратная косая черта используется в системе компьютерной верстки TeX и в файлах RTF для начала тегов разметки. В USFM обратная косая черта используется для обозначения элементов форматирования при редактировании переводов Библии. В обозначении "карет", \ представляет собой управляющий символ 0x1C, разделитель файлов. Это чистое совпадение и не связано с её использованием в путях к файлам.
Математика
Для разности множеств используется символ, похожий на обратную косую черту. Обратная косая черта также иногда используется для обозначения правого смежного класса. Особенно при описании компьютерных алгоритмов, часто определяют обратную косую черту так, что a\b эквивалентно целочисленному делению с округлением вниз, а не к нулю. В Wolfram Mathematica обратная косая черта используется именно таким образом для целочисленного деления. В MATLAB и GNU Octave обратная косая черта используется для левого матричного деления, а прямая косая черта – для правого матричного деления.
Смешение с ¥ и другими символами
В японских кодировках ISO 646 JP (7-битный код на основе ASCII), JIS X 0201 (8-битный код) и Shift JIS (многобайтовая кодировка, 8-битная для ASCII), кодовая точка 0x5C, которая в ASCII используется для обратной косой черты, вместо этого отображается как знак йены. Из-за широкого использования кодовой точки 005C для представления знака йены, даже сегодня некоторые шрифты, такие как MS Mincho, отображают символ обратной косой черты как ¥, поэтому символы в кодовых точках Unicode 00A5 (¥) и 005C (\) отображаются одинаково при выборе этих шрифтов. Компьютерные программы по-прежнему интерпретируют 005C как обратную косую черту в этих средах, но отображают её как знак йены, что вызывает путаницу, особенно в именах файлов MS DOS. В нескольких других версиях ISO 646 также обратная косая черта заменяется другими символами, включая ₩ (корейский), Ö (немецкий, шведский), Ø (датский, норвежский), ç (французский) и Ñ (испанский), что приводит к аналогичным проблемам, хотя и с менее продолжительным эффектом по сравнению со знаком йены. В 1991 году RFC 1345 предложил как уникальный двухсимвольный мнемонический код, который можно использовать в интернет-стандартах как "практичный способ идентификации [этого] символа без ссылки на кодированную таблицу символов и его код в [этой] таблице". В результате, этот стиль можно встретить в ранних документах Internet Engineering Task Force.