Hamilton C shell
# Hamilton C shell

El Hamilton C shell es un clon del shell Unix C y de utilidades para Microsoft Windows creado por Nicole Hamilton en Hamilton Laboratories como un trabajo completamente original, no basado en ningún código anterior. Se lanzó por primera vez en OS/2 el 12 de diciembre de 1988 y en Windows NT en julio de 1992. La versión de OS/2 se suspendió en 2003, pero la versión de Windows sigue siendo activamente compatible.

## Diseño

Hamilton C shell se diferencia del shell Unix C en varios aspectos. Estos incluyen la arquitectura del compilador, el uso de subprocesos y la decisión de seguir las convenciones de Windows en lugar de Unix.

### Analizador

El shell C original utiliza un analizador ad hoc. Esto ha provocado quejas sobre sus limitaciones. Funciona lo suficientemente bien para el tipo de cosas que los usuarios escriben de forma interactiva, pero no muy bien para los comandos más complejos que un usuario puede tomar tiempo para escribir en un script. No es posible, por ejemplo, canalizar la salida de una instrucción foreach en grep. Había un límite a lo complejo que podía manejar un comando.

Por el contrario, Hamilton utiliza un analizador descendente recursivo descendente que le permite compilar sentencias en una forma interna antes de ejecutarlas. Como resultado, las declaraciones pueden ser anidadas o canalizadas arbitrariamente. El lenguaje también se ha extendido con procedimientos incorporados y definidos por el usuario, variables locales, coma flotante y expresión adicional, operadores de edición y comodín, incluido un constructo de comodín de "directorio indefinido" escrito como "..." que coincide con cero o más niveles de directorio necesarios para que el resto del patrón coincida.

### Hilos

Al carecer de bifurcación o de una forma de alto rendimiento para recrear esa funcionalidad, Hamilton usa los subprocesos de Windows. Cuando se crea un nuevo hilo, se ejecuta dentro del mismo espacio de proceso y comparte todo el estado del proceso. Si un hilo cambia el directorio actual o el contenido de la memoria, se cambia para todos los hilos. Es mucho menos costoso crear un hilo que un proceso, pero no hay aislamiento entre ellos. Para recrear el aislamiento faltante de procesos separados, los subprocesos cooperan para compartir recursos usando bloqueos.

### Convenciones de Windows

Hamilton se diferencia de otros shells de Unix en que también admite directamente las convenciones de Windows para letras de unidad, barras de nombre de archivo, caracteres de escape, etc.

