Оболочка C

редактировать
Оболочка Unix

Оболочка C
tcsh и sh на рабочем столе Mac OS X tcsh и sh бок о бок на рабочем столе Mac OS X
Первоначальный автор (ы) Билл Джой
Первый выпуск1978; 42 года назад (1978)
Стабильный выпуск 6.20.00 / 24 ноября 2016 г.; 3 года назад (24.11.2016)
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная система BSD, UNIX, Linux, macOS
Тип оболочка Unix
Лицензия Лицензия BSD
Работает оболочка C на Службы Windows для UNIX

Оболочка C (csh или улучшенная версия, tcsh ) - это Оболочка Unix создана Биллом Джоем, когда он был аспирантом Калифорнийского университета в Беркли в конце 1970-х. Он получил широкое распространение, начиная с 2BSD-релиза Berkeley Software Distribution (BSD), который Joy впервые распространил в 1978 году. Другими ранними участниками идеи или кода были Майкл Убелл, Эрик Аллман., Майк О'Брайен и Джим Кулп.

Оболочка C - это командный процессор, который обычно запускается в текстовом окне, позволяя пользователю вводить команды. Оболочка C также может читать команды из файла, называемого скриптом. Как и все оболочки Unix, он поддерживает имя файла подстановочные знаки, конвейер, здесь документы, подстановку команд, переменные и управляющие структуры для проверки условий и итерация. Что отличало оболочку C от других, особенно в 1980-х, так это ее интерактивные возможности и общий стиль. Его новые функции сделали его проще и быстрее в использовании. Общий стиль языка больше походил на C и считался более читабельным.

Во многих системах, таких как macOS и Red Hat Linux, csh на самом деле является tcsh, улучшенной версией csh. Часто один из двух файлов представляет собой либо жесткую ссылку, либо символическую ссылку на другой, так что любое имя относится к одной и той же улучшенной версии оболочки C.

В Debian и некоторых производных (включая Ubuntu ) есть два разных пакета: csh и tcsh. Первый основан на оригинальной BSD-версии csh, а второй - это улучшенный tcsh.

tcsh добавил имя файла и концепции завершения команд и редактирования командной строки, заимствованные из системы Tenex, которая является источник "т". Поскольку он только добавлял функциональность и не менял того, что там было, tcsh оставался обратно совместимым с исходной оболочкой C. Хотя он начинался как побочная ветка от исходного дерева исходных текстов, созданного Джой, теперь tcsh является основной ветвью для продолжающейся разработки. tcsh очень стабилен, но новые выпуски продолжают появляться примерно раз в год, в основном с исправлениями мелких ошибок.

Содержание
  • 1 Цели и функции дизайна
    • 1.1 Больше похоже на C
    • 1.2 Улучшения для интерактивного использования
      • 1.2.1 История
      • 1.2.2 Операторы редактирования
      • 1.2.3 Псевдонимы
      • 1.2.4 Стек каталогов
      • 1.2.5 Нотация тильды
      • 1.2.6 Завершение имени файла
      • 1.2. 7 Cdpath
      • 1.2.8 Управление заданиями
      • 1.2.9 Хеширование пути
  • 2 Обзор языка
    • 2.1 Основные операторы
      • 2.1.1 Подстановочные знаки
      • 2.1.2 Перенаправление ввода / вывода
      • 2.1.3 Присоединение к
      • 2.1.4 Конвейер
      • 2.1.5 Замена переменных
      • 2.1.6 Цитирование и экранирование
      • 2.1.7 Подстановка команд
      • 2.1.8 Фоновое выполнение
      • 2.1.9 Субоболочки
    • 2.2 Управляющие структуры
      • 2.2.1 Оператор if
      • 2.2.2 Оператор switch
      • 2.2.3 Оператор while
      • 2.2.4 Оператор foreach
      • 2.2.5 Оператор повтора
    • 2.3 Переменные
    • 2.4 Выражения
  • 3 Прием
  • 4 Влияние
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
Цели и особенности дизайна

Основными целями разработки оболочки C было то, чтобы она больше походила на язык программирования C и была лучше для интерактивное использование.

Больше похоже на C

Система Unix была написана почти исключительно на C, поэтому первой целью оболочки C был командный язык, который был более стилистически совместим с остальной системой. Ключевые слова, использование круглых скобок, грамматика встроенных выражений оболочки C и поддержка массивов - все это находилось под сильным влиянием C.

По сегодняшним стандартам оболочка C может показаться не особенно похожей на C, чем многие другие. другие популярные языки сценариев. Но на протяжении 80-х и 90-х годов разница казалась поразительной, особенно по сравнению с оболочкой Bourne (также известной как sh), доминирующей в то время оболочкой, написанной Стивеном Борном в Bell Labs. Этот пример иллюстрирует более традиционные операторы выражения оболочки C и синтаксис.

Bourne shell

#! / Bin / sh if [$ days -gt 365] then echo Это больше года. fi

Оболочка C

#! / bin / csh if ($ days>365) then echo Это больше года. endif

В Bourne sh отсутствовала грамматика выражений. Условие в квадратных скобках должно было быть оценено более медленными средствами выполнения внешней программы test. sh , если командаприняла свои аргументы слова как новую команду, которая будет запущена как дочерний процесс. Если дочерний процесс завершился с нулевым кодом возврата , sh будет искать предложение then (отдельный оператор, но часто записываемый в одной строке с точкой с запятой) и запускать этот вложенный блок. В противном случае он запустил бы else. Жесткое связывание тестовой программы как «test» и «[» дало преимущество квадратных скобок в обозначениях и создавало впечатление, что функциональность теста часть языка sh. Использование в sh ключевого слова reversed для обозначения конца блока управления было стилем, заимствованным из ALGOL 68.

Напротив, csh могла вычислять выражение напрямую, что делало его быстрее. Он также заявил о лучшей читабельности: в его выражениях использовалась грамматика и набор операторов, в основном скопированных с C, ни одно из его ключевых слов не было перевернуто, и общий стиль также был больше похож на C.

Здесь это второй пример сравнения скриптов, которые вычисляют первые 10 степеней 2.

Оболочка Борна

#! / bin / sh i = 2 j = 1, а [$ j -le 10] do echo '2 ** '$ j = $ ii = ʻexpr $ i' * '2` j = ʻexpr $ j + 1` done

C shell

#! / bin / csh set i = 2 set j = 1 while ( $ j <= 10) echo '2 **' $j = $i @ i *= 2 @ j++ end

Опять же, из-за отсутствия грамматики выражений, сценарий sh использует подстановку команд и команду expr (современная оболочка POSIX имеет такая грамматика: оператор может быть записан i = $ ((i * 2))или : $ ((i * = 2)).)

Наконец, вот третий пример, показывающий разные стили для оператора switch.

Bourne shell

#! / Bin / sh for i in d * do case $ i in d?) Echo $ i is короткая ;; *) echo $ i is long ;; esac done

C shell

#! / bin / csh foreach i (d *) switch ($ i) case d ?: echo $ i короткий breaksw по умолчанию: echo $ i длинный endw end

In сценарий sh «;;» отмечает конец каждого случая, поскольку в противном случае sh запрещает пустые операторы.

Улучшения для интерактивного использования

Вторая цель заключалась в том, чтобы оболочка C была лучше для интерактивного использования. Он представил множество новых функций, которые сделали его проще, быстрее и дружественнее для использования путем ввода команд на терминале. Пользователи могли выполнять задачи с меньшим количеством нажатий клавиш, и он работал быстрее. Наиболее важными из этих новых функций были механизмы истории и редактирования, псевдонимы, стеки каталогов, тильда, cdpath, управление заданиями и хеширование пути. Эти новые функции оказались очень популярными, и с тех пор многие из них были скопированы другими оболочками Unix.

История

История позволяет пользователям вызывать предыдущие команды и повторно запускать их, набрав всего несколько быстрых нажатий клавиш. Например, два восклицательных знака «!!», введенные как команда и обозначаемые как «бац, бац», вызывают выполнение предыдущей команды. Другие комбинации коротких нажатий клавиш, например, «! $» для обозначения только последнего аргумента предыдущей команды, позволяют вставлять фрагменты предыдущих команд вместе и редактировать их для создания новой команды.

Операторы редактирования

Редактировать можно не только текст предыдущей команды, но и подстановки переменных. Операторы варьируются от простого поиска / замены строки до анализа имени пути для извлечения определенного сегмента.

Псевдонимы

Псевдонимы позволяют пользователю ввести имя псевдонима и заставить оболочку C развернуть его внутри любого набора слов, пользователь определил. Во многих простых ситуациях псевдонимы работают быстрее и удобнее, чем сценарии.

Стек каталогов

Каталог стек позволяет пользователю нажимать или выталкивать текущий рабочий каталог, что упрощает переход между разными местами файловой системы.

Нотация тильды

Нотация тильды предлагает сокращенный способ указания путей относительно домашнего каталога с помощью символ "~".

Завершение имени файла

Клавиша перехода может использоваться интерактивно для отображения возможных завершений имени файла в конце текущей командной строки.

Cdpath

Cdpath расширяет понятие пути поиска до команды cd(изменить каталог): если указанный каталог не находится в текущем каталоге, csh попытается найти его в каталогах cdpath.

Управление заданиями

В 1980-е годы у большинства пользователей были только простые терминалы в символьном режиме, которые исключали наличие нескольких окон, поэтому они могли Работайте над одной задачей за раз. Элемент управления заданием оболочки C позволяет пользователю приостановить текущее действие и создать новый экземпляр оболочки C, называемый заданием, путем ввода ^Z . Затем пользователь мог переключаться между заданиями с помощью команды fg. Говорилось, что на переднем плане активная работа. Другие задания были либо приостановлены (остановлены), либо выполняются в фоновом режиме .

Хеширование пути

Хеширование пути ускоряет поиск исполняемых файлов оболочкой C. Вместо того, чтобы выполнять вызов файловой системы в каждом каталоге пути, по одному, пока он либо не найдет файл, либо не исчерпает все возможности, оболочка C обращается к внутренней хэш-таблице , построенной путем сканирования каталогов путей. Эта таблица обычно может указать оболочке C, где найти файл (если он существует) без необходимости поиска, и может быть обновлена ​​с помощью команды rehash.
Обзор языка

Оболочка C работает по одной строке за раз. Каждая строка токенизируется в набор слов, разделенных пробелами или другими символами со специальным значением, включая круглые скобки, конвейеры и операторы перенаправления ввода / вывода, точки с запятой и амперсанды.

Базовые операторы

Базовые операторы - это те, которые просто запускают команду. Первое слово используется как имя команды, которая должна быть запущена, и может быть либо внутренней командой, например, echo, либо внешней командой. Остальные слова передаются команде как аргументы.

На базовом уровне операторов вот некоторые особенности грамматики:

Подстановочные знаки

Оболочка C, как и все оболочки Unix, обрабатывает любые аргументы командной строки, содержащие подстановочные знаки. символов в качестве шаблона и заменяет его списком всех совпадающих имен файлов (см. подстановка ).
*соответствует любому количеству символов.
?соответствует любому одиночному символу.
[... ]соответствует любому из символов в квадратных скобках. Допускаются диапазоны с использованием дефиса.
[^... ]соответствует любому символу, отсутствующему в наборе.
В оболочке C также введено несколько удобство записи (иногда известное как расширенное подстановка символов ), поскольку оно копируется другими оболочками Unix.
abc {def, ghi}- это чередование (также известное как расширение скобок ) и заменяется на abcdef abcghi.
~означает домашний каталог текущего пользователя.
~ userозначает домашний каталог пользователя.
Множественные символы подстановки на уровне каталога, например, «* / *.c", поддерживаются.
Начиная с версии 6.17.01, рекурсивный подстановочный знак à la zsh (например, «** / *. C» или «*** / *. Html») также поддерживается с параметром globstar.
Предоставление Ответственность за интерпретацию подстановочных знаков была важным решением для Unix. Это означало, что подстановочные знаки будут работать с каждой командой и всегда одинаково. Однако это решение основывалось на способности Unix эффективно передавать длинные списки аргументов с помощью системного вызова exec, который csh использует для выполнения команд. Напротив, в Windows интерпретация подстановочных знаков обычно выполняется каждым приложением. Это наследие MS-DOS, которое позволяло передавать приложению только 128-байтовую командную строку, что делало использование подстановочных знаков в командной строке DOS непрактичным. Хотя современная Windows может передавать командные строки длиной примерно до 32K Unicode символов, бремя интерпретации подстановочных знаков остается за приложением.

Перенаправление ввода-вывода

По умолчанию, когда csh запускает команду, команда наследует дескрипторы файла stdio csh для stdin, stdout и stderr, которые обычно все указывают на окно консоли где запущена оболочка C. Операторы перенаправления ввода-вывода позволяют команде использовать файл вместо этого для ввода или вывода.
>файл означает, что стандартный вывод будет записан в файл, перезаписывая его, если он существует, и создавая его, если нет. Ошибки по-прежнему поступают в окно оболочки.
>файл означает, что и stdout, и stderr будут записаны в файл, перезаписывая его, если он существует, и создавая его, если нет.
>>file означает, что stdout будет будет добавлен в конец файла.
>>файл означает, что и stdout, и stderr будут добавлены в конец файла.
<file означает, что stdin будет считан из файла.
<<строка является здесь документ. Stdin будет читать следующие строки вплоть до той, которая соответствует строке.

Объединение

Команды могут быть объединены в одной строке.
;означает выполнение первой команды, а затем следующей.
означает выполнение первой и, если она завершилась успешно с кодом возврата 0 , запустить следующую.
||означает выполнить первую команду, а в случае сбоя с ненулевым кодом возврата выполнить следующую.

Трубопровод

Команды могут быть связаны с помощью канала, который заставляет вывод одной команды подавать на ввод следующей. Обе команды запускаются одновременно ..
|означает подключение stdout к stdin следующей команды. Ошибки по-прежнему поступают в окно оболочки.
|означает подключение как stdout, так и stderr к stdin следующей команды.
Выполнение одновременно означает "параллельно". В многоядерной (многопроцессорной) системе переданные по конвейеру команды могут выполняться буквально одновременно, в противном случае планировщик в операционной системе временные интервалы между ними.
По команде, например, «a | b», оболочка создает канал, затем запускает оба aи bс stdio для двух команд, перенаправленных так, что aзаписывает свой stdout во вход канала, а bчитает stdin из выхода канала. Каналы реализуются операционной системой с определенной степенью буферизации, так что aможет какое-то время писать, прежде чем канал заполнится, но как только канал заполнится, любая новая запись будет блокироваться внутри ОС до bчитает достаточно, чтобы разблокировать новые записи. Если bпытается прочитать больше данных, чем доступно, он будет блокироваться до тех пор, пока aне запишет больше данных или пока канал не закроется, например, если aзавершится.

Замена переменной

Если слово содержит знак доллара «$», следующие символы принимаются как имя переменной, а ссылка заменяется значением этой переменной. Различные операторы редактирования, вводимые в виде суффиксов к ссылке, позволяют редактировать путь (например, «: e» для извлечения только расширения) и другие операции.

Цитирование и экранирование

Механизмы цитирования позволяют иначе специальные символы, такие как пробелы, подстановочные знаки, круглые скобки и знаки доллара, следует воспринимать как буквальный текст.
\означает принимать следующий символ как обычный буквальный символ.
"строка "- слабая кавычка. Заключенные пробелы и подстановочные знаки принимаются как литералы, но подстановки переменных и команд по-прежнему выполняются.
'string '- строгие кавычки. Вся заключенная строка принимается как литерал.

Подстановка команд

Подстановка команд позволяет использовать вывод одной команды в качестве аргументов для другой.
`команда `означает взять вывод команды, разобрать его на слова и вставить их обратно в командную строку.

Фоновое выполнение

Обычно, когда оболочка C запускает команду, она ждет, пока команда завершить, прежде чем дать пользователю еще одно приглашение, сигнализирующее о том, что можно ввести новую команду.
команда означает запуск команды в фоновом режиме и немедленный запрос новой команды.

Субоболочки

подоболочка - это отдельная дочерняя копия оболочки, которая наследует текущее состояние, но затем может вносить изменения, например, в текущий каталог, не затрагивая родительский.
(commands )означает запуск команд в подоболочке.

Управляющие структуры

Оболочка C предоставляет управляющие структуры как для проверки условий, так и для итерации. Управляющими структурами проверки условий являются операторы if и switch. Структуры управления итерацией - это операторы while, foreach и repeat.

оператор if

Существует две формы оператора if. Краткая форма набирается на одной строке, но может указывать только одну команду, если выражение истинно.

if (выражение ) команда

В длинной форме используются ключевые слова then, else и endif, позволяющие вставлять блоки команд внутри условия.

if (выражение1 ), затем команды else if (выражение2 ) затем команды... else команды endif

Если ключевые слова else и if появляются в одной строке, csh объединяет их в цепочки, а не вкладывает их; блок завершается одним endif.

Оператор switch

Оператор switch сравнивает строку со списком шаблонов, который может содержать символы подстановки. Если ничего не совпадает, выполняется действие по умолчанию, если оно есть.

переключатель (строка )case pattern1 : commands breakswcase pattern2 : commands breaksw ... по умолчанию: commands breakswENDW

оператор while

Оператор while оценивает выражение. Если это правда, оболочка выполняет вложенные команды, а затем повторяет их, пока выражение остается истинным.

while (выражение ) commands end

foreach оператор

Оператор foreach принимает список значений, обычно список имен файлов, созданных с помощью подстановочных знаков, а затем для каждого устанавливает переменную цикла на это значение и запускает вложенные команды.

foreach переменная цикла (список-значений ) команды конец

оператор повтора

Оператор повтора повторяет одну команду целое число раз.

repeat целочисленная команда

Переменные

Оболочка C реализует как переменные оболочки, так и переменные среды. Environ переменные, созданные с помощью оператора setenv, всегда представляют собой простые строки, передаваемые любым дочерним процессам , которые получают эти переменные через envp аргумент main ().

Переменные оболочки, созданные с помощью операторов setили @, являются внутренними для оболочки C. Они не передаются дочерним процессам. Переменные оболочки могут быть простыми строками или массивами строк. Некоторые из переменных оболочки предопределены и используются для управления различными внутренними параметрами оболочки C, например, что должно произойти, если подстановочный знак не соответствует чему-либо.

В текущих версиях csh строки могут иметь произвольную длину, вплоть до миллионов символов.

Выражения

Оболочка C реализует грамматику 32-битных целочисленных выражений с операторами, заимствованными из C, но с несколькими дополнительными операторами для сравнения строк и тестов файловой системы, например, проверки на наличие файл. Операторы должны отделяться от своих операндов пробелами. Переменные обозначаются как $name.

Приоритет операторов также заимствован из C, но с другими правилами ассоциативности операторов для разрешения неоднозначности того, что идет первым в последовательности операторов с одинаковым приоритетом. В C ассоциативность для большинства операторов слева направо; в оболочке C - справа налево. Например,

// C группирует слева int i = 10/5 * 2; printf ("% d \ n", я); // выводит 4 i = 7-4 + 2; printf ("% d \ n", я); // выводит 5 i = 2>>1 << 4; printf( "%d\n", i); // prints 16
# Группы оболочки C справа @ i = 10/5 * 2 echo $ i # выводит 1 @ i = 7-4 + 2 echo $ i # выводит 1 @ i = (2>>1 << 4) echo $i # prints 0

Скобки в примере оболочки C предназначены для того, чтобы операторы битового сдвига не путались с операторами перенаправления ввода-вывода. На любом языке круглые скобки всегда могут использоваться для явного указания желаемого порядка оценки., даже если только для ясности.

Прием

Хотя Стивен Борн сам признал, что csh лучше его оболочки для интерактивного использования, он никогда не был так популярен для написания сценариев Изначально и до 1980-х годов нельзя было гарантировать наличие csh во всех Unix-системах, но sh могла, что сделало его лучшим выбором для любых сценариев, которые, возможно, придется запускать на других машинах. К середине 1990-х годов csh был широко доступен, но использование csh для написания сценариев столкнулось с новой критикой со стороны комитета POSIX, который указал, что должна быть только одна предпочтительная оболочка, KornShell, как для интерактивных целей, так и для сценариев. Оболочка C также подвергалась критике со стороны других по поводу предполагаемых дефектов синтаксиса, отсутствующих функций и плохой реализации оболочки C.

  • Синтаксические дефекты: обычно были простые, но ненужные несоответствия в определении языка. Например, команды set, setenvи aliasв основном делали одно и то же, а именно связывали имя со строкой или набором слов. Но у всех троих были небольшие, но ненужные различия. Знак равенства требовался для набора, но не для setenvили псевдонима; круглые скобки должны были заключаться в список слов для набора, но не для setenvили псевдонимаи т. д. Аналогично, if, switchи конструкции цикла используйте излишне разные ключевые слова (endif, ENDWи end) для завершения вложенных блоков.
  • Отсутствующие функции: чаще всего упоминается отсутствие возможности управлять файлом stdio самостоятельно и поддерживать функции. В то время как в функциях оболочки Bourne отсутствовали только локальные переменные, псевдонимы Csh - ближайший аналог функций в Csh - были ограничены отдельными строками кода, хотя большинство конструкций управления потоком требовали распознавания новой строки. В результате скрипты Csh не могли быть функционально разбиты, как могли бы быть сами программы C, а более крупные проекты имели тенденцию переходить либо на сценарии оболочки Bourne, либо на код C.
  • Реализация: в которой использовался специальный парсер, вызвал самую серьезную критику. К началу 1970-х технология компилятора была достаточно зрелой, чтобы в большинстве новых языковых реализаций использовался либо нисходящий, либо восходящий синтаксический анализатор, способный распознавать полностью рекурсивный грамматика. Неизвестно, почему для оболочки C был выбран специальный дизайн. Возможно, это просто так, как Джой сказал в интервью в 2009 году: «Когда я начал делать это с Unix, я был не очень хорошим программистом». Специальная конструкция означала, что язык оболочки C не был полностью рекурсивным. Существовал предел сложности команды, которую он мог обработать.

Он работал для большинства интерактивно вводимых команд, но для более сложных команд, которые пользователь мог написать в сценарии, он мог легко выйти из строя, выдав только загадочное сообщение об ошибке или нежелательный результат. Например, оболочка C не может поддерживать трубопровод между управляющими структурами. Попытка передать вывод команды foreachпо конвейеру в grep просто не сработала. (Обход, который работает для многих жалоб, связанных с синтаксическим анализатором, состоит в том, чтобы разбить код на отдельные сценарии. Если foreachперемещается в отдельный сценарий, конвейер работает, потому что сценарии выполняются путем создания новой копии csh, которая наследует правильные дескрипторы stdio.)

Другой пример - нежелательное поведение в следующих фрагментах. Оба они означают: «Если« myfile »не существует, создайте его, написав в нем« mytext »». Но версия справа всегда создает пустой файл, потому что порядок оценки оболочки C заключается в поиске и оценке операторов перенаправления ввода-вывода в каждой командной строке по мере ее чтения, прежде чем проверять остальную часть строки, чтобы увидеть, содержит ли она структура управления.

# Работает должным образом if (! -E myfile) then echo mytext>myfile endif
# Всегда создает пустой файл, если (! -E myfile) echo mytext>myfile
# Обходной путь if (! -E myfile) eval "echo mytext>myfile"

Реализация также подвергается критике за ее заведомо плохие сообщения об ошибках, например, «0 событие не найдено», что не дает полезной информации о проблеме.

Влияние
64-битной оболочки Hamilton C на рабочий стол Windows 7.

Оболочка C оказалась чрезвычайно успешной в плане внедрения большого количества инноваций включая механизм history, псевдонимы, нотацию тильды, интерактивное завершение имени файла, грамматику выражений, встроенную в оболочку, и многое другое, что с тех пор было скопировано другими Оболочки Unix. Но в отличие от sh, который породил большое количество независимо разработанных клонов, включая ksh и bash, только два клона csh известны. (Поскольку tcsh был основан на коде csh, первоначально написанном Биллом Джоем, он не считается клоном.)

В 1986 году Аллен Голуб написал по команде: Написание Unix-подобной оболочки для MS-DOS, книги, описывающей написанную им программу под названием «SH», но фактически скопировавшую структуру языка и особенности csh, а не sh. Сопутствующие дискеты, содержащие полный исходный код SH и базовый набор Unix-подобных утилит (cat, cp, grep и т. Д.), Были доступны у издателя за 25 и 30 долларов соответственно. Управляющие структуры, грамматика выражений, механизм истории и другие функции в SH Holub были идентичны таковым в оболочке C.

В 1988 году компания Hamilton Laboratories начала поставки оболочки Hamilton C для OS / 2. Он включал в себя клон csh и набор утилит, подобных Unix. В 1992 году была выпущена оболочка Hamilton C для Windows NT. Версия для Windows по-прежнему активно поддерживается, но версия OS / 2 была прекращена в 2003 году. В кратком справочнике начала 1990 года цель описывалась как «полное соответствие всему языку оболочки C (кроме управление заданиями )», но с улучшением языкового дизайна и адаптацией к различиям между Unix и ПК. Самым важным улучшением был нисходящий синтаксический анализатор, который позволял управляющих структур быть вложенными или передаваемыми по конвейеру, что не могла поддерживать исходная оболочка C, учитывая ее специальный анализатор. Гамильтон также добавил новые языковые функции, включая встроенные и определяемые пользователем процедуры, блочные локальные переменные и арифметику с плавающей запятой. Адаптация к ПК включала поддержку имени файла и других соглашений на ПК и использование потоков вместо вилок (которые были недоступны ни в OS / 2, ни в Windows) для достижения параллелизм, например, при настройке конвейера.

См. Также
Ссылки
Дополнительная литература
Внешние ссылки
В Викиучебнике есть книга по теме: Сценарии оболочки C
Последняя правка сделана 2021-05-13 12:46:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте