CSE 303: Concepts and Tools for Software Development, Winter 2006

Course Glossary

Foreword: Especially with the furious pace of new tools and environments in CSE303, it is easy to get lost in unfamiliar terms. Here we provide useful working definitions for the purpose of this class. They may not be complete or even one-hundred percent accurate throughout the universe, but they should help us keep concepts straight. This list is to help you; it is not necessary to study the definitions.

This glossary will grow and change as the course proceeds. Feedback on entries and/or the general usefulness of the glossary is welcome.

The entries are listed twice: first in alphabetical order and then roughly in the order in which they were introduced in the course.

address space
An address range is a range of numbers, often [0..232] or [0..264], that correspond to virtual storage locations that your program can use. All (well, almost all) code and data under the control of a program exists somewhere in the address space. The operating system and hardware are responsible for ensuring that there is actual, physical storage backing up allocated portions of the virtual address space. You can think of the whole address space as a giant array of bytes.

alias
In the shell, an alias is a "user-defined builtin", i.e., a way to extend the shell with a new command.

attu
The name of the department's instructional Linux server. It is just the name of a computer on our network. That computer runs Linux and accepts remote connections so that you can do your work there.

arguments (shell)
Values given to a program on the command line when it is run. The arguments to bash shell scripts are stored in variables $1, $2, ...

awk
A stream editor, like sed, but slightly richer.

bash
A particular shell, different from csh which we are using in CSE303. In general, many people find bash better for shell scripting but a bit less convenient for manual command-line interaction.

.bashrc
A file in the user's home directory that is implicitly "sourced" when the user launches a non-login Bash shell.

builtin
In the shell, any "first word" for the command-line that has special meaning, so the shell does not look for a proram of the same name.

C
C is a programming language that looks like Java, but is "closer" to what actually runs on hardware than Java.

.cshrc
A file in the user's home directory that is implicitly "sourced" when the user launches a C-shell.

csh
The C-Shell, a Linux program that interprets command lines and launches other programs. By default, the shell that starts when a user logs into attu is the C-shell. On most Linux machines, csh is actually tcsh, an improved variant.

command-line
The command-line is the place in the shell where you type commands. It is "after" the prompt. A command-line interface is a mode of interaction with the computer via typing command-lines, as opposed to a GUI.

directory
Sometimes called a folder on other operating systems, a directory is part of the file system that holds files and other directories. If a directory A is in a directory B, then we call B the parent directory of A.

emacs
emacs is a powerful, extensible general-purpose text editor with support for many programming languages

exit status
When a process completes execution, it returns an integer which is its exit status, sometimes called an exit code or return code. By convention, 0 indicates successful completion and other numbers indicate an error.

file system
The file system is the tree of directories and files holding the persistent data, i.e., the data that exists even after programs stop and even the computer is turned off.

global variables
In C, and some other languages, variables can be declared outside the scope of any function, module or class. Such variables are called global variables, and can be accessed by any function.

grep
A command line tool that uses regular expressions to find patterns in text. grep has lots and lots of options; check the man page.

GUI
A graphical user-interface, typically using concepts including WIMP: Windows, Icons, Mice, and Pointers.

history variables
In the shell, history variables (e.g., !37) expand to previously executed commands. They are convenience for command-line users.

Linux
A free widely-available operating system that is by design very similar in use and functionality to the various UNIX operating systems.

local variables

.login
A file in the user's home directory that is implicitly "sourced" when the user launches a login Bash shell.

man
The "manual" command for getting information about commands in UNIX and Linux

metacharacters
Metacharacters are characters like * and ? that the shell will change into some other character or characters. Metacharacters are useful for saving typing and flexibility in scripts. To literally write metacharacters, use quotes ("*") or backslashes (\?).

operating system
An operating system is the program that starts running when you boot a computer. The job of the operating system is to manage other programs, manage the file system, manage users and permissions, and manage resources (such as the screen and the disk) that different programs need.

permissions
Different users have different permissions, i.e. priveleges. In UNIX, permissions correspond to files and whether a user can read and/or write and/or execute them.

pipe
A pipe is the connection of the output stream of one process to the input stream of another process.

pointer
A pointer is C is a memory address that refers to some data or code. You get pointers by taking the address of variables: &x. You use pointers by dereferencing them: *y.

process
A running program is a process. You may have multiple processes running the same program (e.g., emacs). Commands for working with processes: &, jobs, fg, bg, kill, ps, top.

prompt
The prompt is the text in the shell to the left of where you type a command.

redirection
The shell can "redirect" standard in, standard out, and standard error to or from files instead of the screen or keyboard.

regular expression
Regular expressions are a "language" for patterns of characters that have some special properties that you will learn if you take a CS theory course. Simple example: ab*c is a pattern that matches "ac", "abc", "abbc", ... Regular expressions are used by many tools like grep and sed.

quoting
Also known as escaping, quoting refers to the way you make a program (such as the shell) interpret special characters (such as *) literally (such as actually the asterisk character).

Reflection-X
Reflection-X is a piece of software for Windows that lets you make ssh connections to other machines (such as attu) and have windows for programs running on the remote machine actually display on your machine.

root
The root directory is the top-level directory (/ in UNIX). The root user is also knows as the superuser, the special user who always has full access to everything. The two uses of root have essentially nothing to do with each other.

safety
Programming languages can be more or less safe. Safe languages, like Java, will throw exceptions and terminate programs that try to do things like write to random memory locations or treat a string as a number. Unsafe languages, like C, will let programs do more or less anything, which may lead to your computer catching on fire.

script
A script is a small program. A shell script is a small program written as a collection of shell commands. To confuse you, "script" also is the name of a program that logs all your shell interaction in a file; this program is badly named.

sed
A command line tool that uses regular expressions to find patterns and replace in text. sed has lots and lots of options; check the man page. sed is short for "Stream EDitor".

segmentation fault
If a program reads or writes a location in the address space that has not been allocated to that program, the hardware and operating system may terminate the program and report a segmentation fault. If you want to know why it's called a "segmentation" fault, take a computer architecture class. On some computers it's called a "bus error".

shell
A shell is a command-line interpreter for running other programs.

shell variable
Shell variables are storage locations managed by the shell that can store strings. Shell variables are useful for shell programming, and some special variables like PATH affect the way the shell works.

ssh
"Secure shell" A way to log-in to a Linux machine (such as attu) via the Internet rather than being physically at the keyboard. It is secure in the sense that all communication with the remote computer is encrypted (unintelligible to eavesdroppers).

stack (a.k.a. "the stack", a.k.a. "call stack")
The stack is an area of memory where a progam remembers the history of function calls that it has made, but not returned from. Also, in C local variables are stored in the stack. This means that once a function call has returned, its local variables do not exist anymore.

Standard In, Standard Out, and Standard Error
Often written, stdin, stdout, and stderr, these input and output "streams" are set up by the shell and can be used by programs to display information to or get input from users.

tcsh
An improved variant of csh.

UNIX
Informally, UNIX is an operating system, or actually a general description for a related family of operating systems. For technical and legal reasons, Linux is not a UNIX operating system, but...

user
An operating-system concept describing an "account", which has a password, a home directory, and particular permissions.

vi
vi is a programmable text editor that is much less "bulky" than emacs.


operating system
An operating system is the program that starts running when you boot a computer. The job of the operating system is to manage other programs, manage the file system, manage users and permissions, and manage resources (such as the screen and the disk) that different programs need.

file system
The file system is the tree of directories and files holding the persistent data, i.e., the data that exists even after programs stop and even the computer is turned off.

command-line
The command-line is the place in the shell where you type commands. It is "after" the prompt. A command-line interface is a mode of interaction with the computer via typing command-lines, as opposed to a GUI.

prompt
The prompt is the text in the shell to the left of where you type a command.

GUI
A graphical user-interface, typically using concepts including WIMP: Windows, Icons, Mice, and Pointers.

shell
A shell is a command-line interpreter for running other programs.

directory
Sometimes called a folder on other operating systems, a directory is part of the file system that holds files and other directories. If a directory A is in a directory B, then we call B the parent directory of A.

user
An operating-system concept describing an "account", which has a password, a home directory, and particular permissions.

Linux
A free widely-available operating system that is by design very similar in use and functionality to the various UNIX operating systems.

UNIX
Informally, UNIX is an operating system, or actually a general description for a related family of operating systems. For technical and legal reasons, Linux is not a UNIX operating system, but...

process
A running program is a process. You may have multiple processes running the same program (e.g., emacs). Commands for working with processes: &, jobs, fg, bg, kill, ps, top.

ssh
"Secure shell" A way to log-in to a Linux machine (such as attu) via the Internet rather than being physically at the keyboard. It is secure in the sense that all communication with the remote computer is encrypted (unintelligible to eavesdroppers).

attu
The name of the department's instructional Linux server. It is just the name of a computer on our network. That computer runs Linux and accepts remote connections so that you can do your work there.

Reflection-X
Reflection-X is a piece of software for Windows that lets you make ssh connections to other machines (such as attu) and have windows for programs running on the remote machine actually display on your machine.

bash
A particular shell, different from csh which we are using in CSE303. In general, many people find bash better for shell scripting but a bit less convenient for manual command-line interaction.

csh
The C-Shell, a Linux program that interprets command lines and launches other programs. By default, the shell that starts when a user logs into attu is the C-shell. On most Linux machines, csh is actually tcsh, an improved variant.

tcsh
An improved variant of csh.

.bashrc
A file in the user's home directory that is implicitly "sourced" when the user launches a non-login Bash shell.

.login
A file in the user's home directory that is implicitly "sourced" when the user launches a login Bash shell.

builtin
In the shell, any "first word" for the command-line that has special meaning, so the shell does not look for a proram of the same name.

man
The "manual" command for getting information about commands in UNIX and Linux

emacs
emacs is a powerful, extensible general-purpose text editor with support for many programming languages

vi
vi is a programmable text editor that is much less "bulky" than emacs.

permissions
Different users have different permissions, i.e. priveleges. In UNIX, permissions correspond to files and whether a user can read and/or write and/or execute them.

root
The root directory is the top-level directory (/ in UNIX). The root user is also knows as the superuser, the special user who always has full access to everything. The two uses of root have essentially nothing to do with each other.

history variables
In the shell, history variables (e.g., !37) expand to previously executed commands. They are convenience for command-line users.

alias
In the shell, an alias is a "user-defined builtin", i.e., a way to extend the shell with a new command.

exit status
When a process completes execution, it returns an integer which is its exit status, sometimes called an exit code or return code. By convention, 0 indicates successful completion and other numbers indicate an error.

pipe
A pipe is the connection of the output stream of one process to the input stream of another process.

script
A script is a small program. A shell script is a small program written as a collection of shell commands. To confuse you, "script" also is the name of a program that logs all your shell interaction in a file; this program is badly named.

quoting
Also known as escaping, quoting refers to the way you make a program (such as the shell) interpret special characters (such as *) literally (such as actually the asterisk character).

shell variable
Shell variables are storage locations managed by the shell that can store strings. Shell variables are useful for shell programming, and some special variables like PATH affect the way the shell works.

metacharacters
Metacharacters are characters like * and ? that the shell will change into some other character or characters. Metacharacters are useful for saving typing and flexibility in scripts. To literally write metacharacters, use quotes ("*") or backslashes (\?).

Standard In, Standard Out, and Standard Error
Often written, stdin, stdout, and stderr, these input and output "streams" are set up by the shell and can be used by programs to display information to or get input from users.

redirection
The shell can "redirect" standard in, standard out, and standard error to or from files instead of the screen or keyboard.

arguments (shell)
Values given to a program on the command line when it is run. The arguments to bash shell scripts are stored in variables $1, $2, ...

regular expression
Regular expressions are a "language" for patterns of characters that have some special properties that you will learn if you take a CS theory course. Simple example: ab*c is a pattern that matches "ac", "abc", "abbc", ... Regular expressions are used by many tools like grep and sed.

grep
A command line tool that uses regular expressions to find patterns in text. grep has lots and lots of options; check the man page.

sed
A command line tool that uses regular expressions to find patterns and replace in text. sed has lots and lots of options; check the man page. sed is short for "Stream EDitor".

awk
A stream editor, like sed, but slightly richer.

C
C is a programming language that looks like Java, but is "closer" to what actually runs on hardware than Java.

safety
Programming languages can be more or less safe. Safe languages, like Java, will throw exceptions and terminate programs that try to do things like write to random memory locations or treat a string as a number. Unsafe languages, like C, will let programs do more or less anything, which may lead to your computer catching on fire.

address space
An address range is a range of numbers, often [0..232] or [0..264], that correspond to virtual storage locations that your program can use. All (well, almost all) code and data under the control of a program exists somewhere in the address space. The operating system and hardware are responsible for ensuring that there is actual, physical storage backing up allocated portions of the virtual address space. You can think of the whole address space as a giant array of bytes.

global variables
In C, and some other languages, variables can be declared outside the scope of any function, module or class. Such variables are called global variables, and can be accessed by any function.

segmentation fault
If a program reads or writes a location in the address space that has not been allocated to that program, the hardware and operating system may terminate the program and report a segmentation fault. If you want to know why it's called a "segmentation" fault, take a computer architecture class. On some computers it's called a "bus error".

stack (a.k.a. "the stack", a.k.a. "call stack")
The stack is an area of memory where a progam remembers the history of function calls that it has made, but not returned from. Also, in C local variables are stored in the stack. This means that once a function call has returned, its local variables do not exist anymore.

pointer
A pointer is C is a memory address that refers to some data or code. You get pointers by taking the address of variables: &x. You use pointers by dereferencing them: *y.