| Hamilton C shell | |
|---|---|
64-bit Hamilton C shell on a Windows 7 desktop. | |
| Original author | Nicole Hamilton |
| Initial release | December 12, 1988; 37 years ago (1988-12-12) |
| Stable release | 5.2.g / March 5, 2017; 8 years ago (2017-03-05) |
| Written in | C |
| Operating system | Windows (historicallyOS/2) |
| Type | Unix Shell onWindows |
| License | Commercialproprietary software |
| Website | hamiltonlabs |
Hamilton C shell is aclone of theUnix C shell andutilities[1][2] forMicrosoft Windows created by Nicole Hamilton[3] at Hamilton Laboratories as a completely original work, not based on any prior code. It was first released onOS/2 on December 12, 1988[4][5][6][7][8][9] and onWindows NT in July 1992.[10][11][12] The OS/2 version was discontinued in 2003 but the Windows version continues to be actively supported.
Hamilton C shell differs from the Unix C shell in several respects. These include itscompiler architecture, its use ofthreads, and the decision to follow Windows rather than Unix conventions.[8][9]

The original C shell uses an ad hoc parser. This has led to complaints about its limitations. It works well enough for the kinds of things users type interactively but not very well for the more complex commands a user might take time to write in a script. It is not possible, for example, to pipe the output of aforeach statement intogrep. There was a limit to how complex a command it could handle.[13]
By contrast, Hamilton uses a top-downrecursive descent parser that allows it to compile statements to an internal form before running them.[1][8] As a result, statements can be nested or piped arbitrarily.[6] The language has also been extended with built-in and user-defined procedures, local variables, floating point and additional expression, editing and wildcarding operators, including an "indefinite directory" wildcard construct written as "..." that matches zero or more directory levels as required to make the rest of the pattern match.[14]

Lackingfork or a high performance way to recreate that functionality, Hamilton uses the Windowsthreads facilities instead.[6][8] When a new thread is created, it runs within the same process space and it shares all of the process state. If one thread changes the current directory or the contents of memory, it's changed for all the threads. It's much cheaper to create a thread than a process but there's no isolation between them. To recreate the missing isolation of separate processes, the threads cooperate to share resources usinglocks.[15]
Hamilton differs from other Unix shells in that it also directly supports Windows conventions fordrive letters,filename slashes,escape characters, etc.[9]