stringtranslate.com

Обратная косая черта

Обратная косая черта \ — это знак, используемый в основном в вычислительной технике и математике . Это зеркальное отражение обычного слеша / . Это относительно новый знак, впервые задокументированный в 1930-х годах. Иногда его называют hack , whack , escape (из C / UNIX ), reverse slash , slosh , downwhack , backslant , backwhack , bash , reverse slant , reverse solidus и reverse virgule . [1] [2]

История

Клавиатура телетайпа Уитстона Перфоратора 1930-х годов с обратной косой чертой в конце третьего ряда
Раскладка клавиатуры Teletype ASR-33 с набором символов ASCII, до 14 июня 1966 г., с обратной косой чертой при нажатии Shift+L

По состоянию на ноябрь 2022 года попытки определить происхождение этого символа или его предназначение до 1960-х годов не увенчались успехом. Самая ранняя известная ссылка, найденная на сегодняшний день, — это руководство по техническому обслуживанию 1937 года от Teletype Corporation с фотографией, показывающей клавиатуру ее клавиатурного перфоратора Kleinschmidt WPE-3, использующего систему Уитстона . [3] [4] Символ назывался «диагональным ключом», [5] и ему был присвоен (нестандартный) код Морзе   ▄ ▄▄▄ ▄ ▄ ▄▄▄  . [6] [a]

В июне 1960 года IBM опубликовала «Расширенный стандарт набора символов», который включает символ в позиции 0x19. [4] В сентябре 1961 года Боб Бемер (IBM) предложил комитету по стандартам X3.2 сделать [, ]и \частью предлагаемого стандарта, описав обратную косую черту как «оператор обратного деления» и сославшись на его предшествующее использование Teletype в телекоммуникациях. В частности, он сказал, что \ был необходим для того, чтобы булевы операторы ALGOL ( логическая конъюнкция ) и ( логическая дизъюнкция ) могли быть составлены с использованием /\ и \/ соответственно. Комитет принял эти изменения в проекте Американского стандарта (впоследствии названного ASCII ) на своем заседании в ноябре 1961 года. [4]

Эти операторы использовались для минимума и максимума в ранних версиях языка программирования C, поставляемых с Unix V6 [7] и V7. [8]

Использование

Языки программирования

Во многих языках программирования, таких как C , Perl , PHP , Python , скриптовых языках Unix и многих форматах файлов, таких как JSON , обратная косая черта используется как экранирующий символ , чтобы указать, что следующий за ним символ должен обрабатываться особым образом (если в противном случае он будет обрабатываться буквально) или буквально (если в противном случае он будет обрабатываться особым образом). Например, внутри строкового литерала C последовательность \nсоздает байт новой строки вместо 'n', и последовательность \"создает фактическую двойную кавычку вместо особого значения двойной кавычки, заканчивающей строку. Фактическая обратная косая черта создается двойной обратной косой чертой \\.

Языки регулярных выражений использовали его таким же образом, изменяя последующие литеральные символы на метасимволы и наоборот. Например, \||b ищет либо '|', либо 'b', первая черта экранируется и ищется, вторая не экранируется и действует как "или".

За пределами строк в кавычках единственным распространенным применением обратной косой черты является игнорирование («экранирование») новой строки сразу после нее. В этом контексте это можно назвать «продолженной строкой» [9], поскольку текущая строка продолжается в следующей. Некоторое программное обеспечение заменяет обратную косую черту+новую строку пробелом. [10]

Для поддержки компьютеров, в которых отсутствовал символ обратной косой черты, был добавлен триграф C ??/ , эквивалентный обратной косой черте. Поскольку это может экранировать следующий символ, который сам может быть ?, основным современным применением может быть обфускация кода . Поддержка триграфов в C++ была удалена в C++17 , а их поддержка в C планируется быть удалена в C23 .

В Visual Basic (и некоторых других диалектах BASIC ) обратная косая черта используется как символ оператора для обозначения целочисленного деления . [11] Это округляет до нуля.

Язык программирования ALGOL 68 использует "\" в качестве символа десятичного показателя степени . ALGOL 68 имеет выбор из 4 символов десятичного показателя степени: e, E, \ или 10. Примеры: 6.0221415e23 , 6.0221415E23 , 6.0221415\23 или 6.0221415 10 23. [ 12]

В APL \ называется Expand , когда используется для вставки заполняющих элементов в массивы, и Scan , когда используется для выполнения сокращения префикса (кумулятивной свертки).

В PHP версии 5.3 и выше обратная косая черта используется для обозначения пространства имен . [13]

В Haskell обратная косая черта используется как для введения специальных символов, так и для введения лямбда-функций (поскольку это разумное приближение в ASCII греческой буквы лямбда, λ) . [14]

Имена файлов

MS-DOS 2.0, выпущенная в 1983 году, скопировала идею иерархической файловой системы из Unix и, таким образом, использовала (прямую) косую черту в качестве разделителя каталогов. [15] Возможно, по настоянию IBM, [16] [17] Microsoft добавила обратную косую черту, чтобы разрешить ввод путей в приглашении интерпретатора командной строки, сохранив при этом совместимость с MS-DOS 1.0 (в которой / был индикатором параметра командной строки. Ввод " DIR/W " давал "широкую" опцию команде " DIR ", поэтому требовался какой-то другой метод, если кто-то действительно хотел запустить программу с именем W внутри каталога с именем DIR ). За исключением COMMAND.COM , все остальные части операционной системы принимают оба символа в пути , но соглашение Microsoft по-прежнему использует обратную косую черту, и API , возвращающие пути, используют обратные косые черты. [18] В некоторых версиях символ опции можно изменить с / на - с помощью SWITCHAR , что позволяет COMMAND.COM сохранять / в имени команды.

Семейство операционных систем Microsoft Windows унаследовало поведение MS-DOS и поэтому по-прежнему поддерживает любой из этих символов, но отдельные программы и подсистемы Windows могут ошибочно принимать только обратную косую черту в качестве разделителя пути или неправильно интерпретировать прямую косую черту, если она используется как таковая. Некоторые программы принимают только прямую косую черту, если путь заключен в двойные кавычки . [19] Неспособность функций безопасности Microsoft распознавать косые черты неожиданного направления в локальных и интернет-путях, в то время как другие части операционной системы по-прежнему действуют на них, привела к некоторым серьезным пробелам в безопасности. Ресурсы, которые не должны быть доступны, были доступны с помощью путей, использующих определенные сочетания, такие как http://example.net/secure\private.aspx . [20] [21]

Текстовая разметка

Обратная косая черта используется в системе набора текста TeX и в файлах RTF для начала тегов разметки.

В USFM [22] обратная косая черта используется для обозначения особенностей форматирования при редактировании переводов Библии .

В нотации с кареткой представляет ^\собой управляющий символ 0x1C, разделитель файлов . [23] Это чистое совпадение, не имеющее ничего общего с его использованием в путях к файлам.

Математика

Для обозначения разницы используется символ, похожий на обратную косую черту . [24]

Обратная косая черта также иногда используется для обозначения правого смежного пространства. [25]

Особенно при описании компьютерных алгоритмов часто определяют обратную косую черту так, что a \ b эквивалентно a / b . [26] Это целочисленное деление, которое округляет вниз, а не к нулю.

В MATLAB и GNU Octave обратная косая черта используется для левого деления матрицы , а (прямая) косая черта — для правого деления матрицы. [27]

Путаница с ¥ и другими символами

В японских кодировках ISO 646-JP (7-битный код на основе ASCII ), JIS X 0201 (8-битный код) и Shift JIS (многобайтовая кодировка, которая является 8-битной для ASCII), кодовая точка 0x5C, которая использовалась бы для обратной косой черты в ASCII, вместо этого отображается как знак йены ¥ . Из-за широкого использования кодовой точки 005C для представления знака йены, даже сегодня некоторые шрифты, такие как MS Mincho, отображают символ обратной косой черты как ¥, поэтому символы в кодовых точках Unicode 00A5 (¥) и 005C (\) отображаются как ¥ , когда выбраны эти шрифты. Компьютерные программы по-прежнему рассматривают 005C как обратную косую черту в этих средах, но отображают его как знак йены, вызывая путаницу, особенно в именах файлов MS-DOS. [28]

Несколько других версий ISO 646 также заменяют обратную косую черту другими символами, включая ₩ (корейский), Ö (немецкий, шведский), Ø (датский, норвежский), ç (французский) и Ñ (испанский), что приводит к аналогичным проблемам, хотя и с менее продолжительным эффектом по сравнению со знаком иены.

В 1991 году RFC 1345 предложил //уникальную двухсимвольную мнемонику , которая могла бы использоваться в интернет-стандартах как «практический способ идентификации [этого] символа без ссылки на кодированный набор символов и его код в [этом] кодированном наборе символов». [29] Следовательно, этот стиль можно увидеть в ранних документах Internet Engineering Task Force .

Примечания

  1. ^ Это обратный код символа косой черты (   ▄▄▄ ▄ ▄ ▄▄▄ ▄  ).

Ссылки

  1. ^ Словарь Macquarie (3-е издание)
  2. ^ Рэймонд, Эрик С. "ASCII". Файл жаргона . Архивировано из оригинала 2019-01-18 . Получено 2007-07-28 .
  3. Бюллетень 125, выпуск 2: Описание и настройка телетайпного перфоратора Уитстона (PDF) . Teletype Corporation. Май 1938 г. [август 1937 г.]. стр. ii. Архивировано (PDF) из оригинала 2021-02-12 . Получено 2021-03-15 – через navy-radio.com.
  4. ^ abc Фишер, Эрик (20 июня 2000 г.). «Эволюция кодов символов, 1874–1968» (PDF) . стр. 14–15 (таблица 35). Архивировано (PDF) из оригинала 30 ноября 2022 г. Получено 30 ноября 2022 г.Ссылки на Bemer, RW; Buchholz, W. (1 июня 1960 г.). Стандарт расширенного набора символов (технический отчет). Лаборатория разработки продукции, Отдел систем данных, Корпорация International Business Machines. TR 00.721.Коллекция компьютерных стандартов, Архивный центр, Национальный музей американской истории, Смитсоновский институт, ящик 1.
  5. ^ "Бюллетень 188: Телетайпный автоматический перфоратор" (PDF) . Teletype Corporation. Август 1945 г. стр. 6. Архивировано (PDF) из оригинала 2021-12-19 . Получено 2021-12-19 – через navy-radio.com.
  6. ^ "Бюллетень 1025, выпуск 3: Детали для телетайпного перфоратора Уитстона" (PDF) . Teletype Corporation. Июль 1945 г. стр. 9. Архивировано (PDF) из оригинала 2021-12-19 . Получено 2021-12-19 – через navy-radio.com.
  7. ^ "Исходный код компилятора C". bitsavers.org . 1975. Архивировано из оригинала 2011-08-15 . Получено 2009-10-11 .
  8. ^ "Исходный код компилятора C". mit.edu . 1979. Архивировано из оригинала 2013-12-03 . Получено 2009-10-11 .
  9. ^ "The C Preprocessor". GNU .org . Архивировано из оригинала 2021-08-03 . Получено 2021-01-04 .
  10. ^ "3.1.1 Разбиение длинных строк". Руководство по GNU make . Архивировано из оригинала 5 июня 2018 г. Получено 28 июля 2019 г.
  11. ^ "Арифметические операторы в Visual Basic". Возможности языка Visual Basic: операторы и выражения . MSDN. 10 июля 2012 г. Архивировано из оригинала 17 сентября 2012 г. Получено 7 октября 2012 г.
  12. ^ "Пересмотренный отчет об алгоритмическом языке Algol 68". Acta Informatica . 5 (1–3): 1–236. Сентябрь 1973. doi :10.1007/BF00265077. S2CID  2490556. Архивировано из оригинала 26.07.2020 . Получено 10.02.2020 .
  13. ^ "Обзор пространств имен". php.net . Архивировано из оригинала 2012-10-16 . Получено 2012-10-10 .
  14. ^ О'Салливан, Стюарт и Герцен, Real World Haskell , гл. 4: анонимные (лямбда) функции, стр. 99
  15. ^ «Почему символ пути DOS — «\"?». Blogs.msdn.com. 2005-06-24. Архивировано из оригинала 2022-11-19 . Получено 2013-06-16 .
  16. ^ Necasek, Michal (24 мая 2019 г.). «Почему Windows на самом деле использует обратную косую черту в качестве разделителя пути?». Музей OS/2 . Архивировано из оригинала 24 мая 2019 г. Получено 28 мая 2019 г.
  17. ^ Larson, Chris; Immerwahr, Don (1983), MS-DOS v1.25 и v2.0 Исходный код, README.txt, Microsoft, архивировано из оригинала 21 ноября 2022 г. , извлечено 21 ноября 2022 г. , Руководство пользователя содержит несколько существенных ошибок. Большинство из них вызвано изменениями в последнюю минуту для достижения большей степени совместимости с реализацией MS-DOS (PC DOS) IBM. Это включает в себя использование "\" вместо "/" в качестве разделителя пути и "/" вместо "-" в качестве символа переключателя. Для передачи пакетных файлов между машинами Microsoft рекомендует использовать "\" и "/" соответственно на рынке США. [...] Приносим извинения за любые неудобства, которые эти изменения могли причинить вашему персоналу технических публикаций.
  18. ^ "Path.GetFullPath Method". Библиотека классов .NET Framework . Microsoft. Архивировано из оригинала 21 декабря 2008 г. Получено 2009-01-02 .
  19. ^ "Когда Windows начала принимать косую черту в качестве разделителя пути?". Bytes.com. Архивировано из оригинала 6 февраля 2009 года . Получено 2009-01-02 .
  20. ^ Каплан, Симона (2004). «Microsoft Probes Flaw in ASP.NET». DevSource, спонсируется Microsoft . Ziff Davis Enterprise Holdings Inc. Архивировано из оригинала 21.01.2013 . Получено 14.06.2009 .
  21. ^ Бернетт, Марк (2004). «Дыры в безопасности, которые глубоки». SecurityFocus. Архивировано из оригинала 2021-02-02 . Получено 2009-06-14 .
  22. ^ "USFM – Unified Standard Format Markers". paratext.org . 18 апреля 2017 г. Архивировано из оригинала 13 августа 2020 г. Получено 30 июня 2013 г.
  23. ^ "C0 control character set, 1987". pd.infn.it . Архивировано из оригинала 2019-09-06 . Получено 2021-03-14 .
  24. ^ "Количества и единицы – Часть 2: Математические знаки и символы, используемые в естественных науках и технологиях". ISO 80000-2:2009 . Международная организация по стандартизации. 15 апреля 2008 г. Архивировано из оригинала 2014-03-26 . Получено 2012-10-07 .
  25. ^ "Определение:Пространство смежных классов". ProofWiki. Архивировано из оригинала 26 февраля 2021 г. Получено 1 февраля 2017 г.
  26. ^ "Целочисленное деление". mathworld.wolfram.com . Архивировано из оригинала 2020-02-21 . Получено 2020-03-10 .
  27. ^ Eaton, John W.; David Bateman; Søren Hauberg (февраль 2011 г.). "GNU Octave: высокоуровневый интерактивный язык для численных вычислений" (PDF) . Free Software Foundation. стр. 145. Архивировано (PDF) из оригинала 24 октября 2012 г. Получено 7 октября 2012 г.
  28. ^ "Когда обратная косая черта не является обратной косой чертой?". Blogs.msdn.com. Архивировано из оригинала 2016-03-23 . Получено 2013-06-16 .
  29. ^ Simonsen, Keld (1991-12-26). "RFC 1345". Tools.ietf.org. Архивировано из оригинала 2016-06-13 . Получено 2013-06-16 .

Внешние ссылки