Оболочка Гамильтона С


Оболочка Hamilton C является клоном оболочки Unix C и утилит [1] [2] для Microsoft Windows , созданных Николь Гамильтон [3] в Hamilton Laboratories как полностью оригинальная работа, не основанная на каком-либо предшествующем коде. Впервые он был выпущен для OS/2 12 декабря 1988 г. [4] [5] [6] [7] [8] [9] и для Windows NT в июле 1992 г. [10] [11] [12] ОС /2 была прекращена в 2003 году, но версия для Windows продолжает активно поддерживаться.

Оболочка Hamilton C отличается от оболочки Unix C в нескольких отношениях. К ним относятся архитектура компилятора , использование потоков и решение следовать соглашениям Windows, а не Unix. [8] [9]

В оригинальной оболочке C используется специальный синтаксический анализатор. Это привело к жалобам на его ограничения. Он работает достаточно хорошо для того, что пользователи вводят в интерактивном режиме, но не очень хорошо для более сложных команд, на написание которых пользователю может потребоваться время в сценарии. Например, невозможно передать вывод оператора foreach в grep . Был предел тому, насколько сложной командой он мог управлять. [13]

В отличие от этого, Hamilton использует анализатор рекурсивного спуска сверху вниз , который позволяет компилировать операторы во внутреннюю форму перед их выполнением. [1] [8] В результате операторы могут быть вложены или переданы произвольно. [6] Язык также был расширен встроенными и определяемыми пользователем процедурами, локальными переменными, числами с плавающей запятой и дополнительными выражениями, операторами редактирования и подстановочными знаками, включая конструкцию подстановочного знака «неопределенный каталог», записанную как « », которая соответствует нулю или ...более уровни каталогов по мере необходимости, чтобы остальная часть шаблона совпадала. [14]

Не имея форка или высокопроизводительного способа воссоздания этой функциональности, Гамильтон вместо этого использует средства потоков Windows . [6] [8] Когда создается новый поток, он выполняется в том же пространстве процесса и разделяет все состояние процесса. Если один поток изменяет текущий каталог или содержимое памяти, это изменяется для всех потоков. Создать поток гораздо дешевле, чем процесс, но между ними нет изоляции. Чтобы воссоздать недостающую изоляцию отдельных процессов, потоки взаимодействуют для совместного использования ресурсов с помощью блокировок . [15]

Hamilton отличается от других оболочек Unix тем, что он также напрямую поддерживает соглашения Windows для букв дисков , косых черт имени файла , escape-символов и т. д. [9]


Оболочка Hamilton C и Cygwin bash в Windows 7 , демонстрирующие использование рекурсии для факторинга.
Оболочка Hamilton C и циклы даты Cygwin bash .