This page collects documentation of several tools we use in CS 251. [Reorganized 1 October 2015]
The goal of CS 251 is to learn enduring concepts underlying programming languages, not specific contemporary languages and tools. However, you will learn a few new programming languages and pick up several useful operational skills along the way, since we use real languages to illustrate the concepts we learn and real tools to manage our work. These same languages (and their relatives) and tools are used by many programmers to build major (and minor) pieces of software. Incidentally, all software we use is also free software or open-source software.
CS 251 Computing Environments
We provide and support two computing environments for CS 251 with all the tools you need for the course. It is usually feasible to install the tools in your environment of choice, but we are unable to offer support or guarantees if you choose to work on environments other than ours.
We provide all CS 251 software tools on two fully-supported computing environments running versions of the GNU/Linux operating system:
- CS Linux machines are available in the SCI microfocus lab and SCI 173.
- A CS account is required. If you do not already have one (you might know it as “tempest” or access it with Fetch or WinSCP, etc.), please request an account while on campus.
- The wx appliance is a self-contained CS 251 GNU/Linux computing environment for your Mac or Windows computer.1
- No CS account is required.
Key Software Tools
We use a few key software tools for CS 251. Most of these tools are likely new to you and some will require practice. This page page contains documentation (some tailored specifically to learning these tools for use in this course).
- GNU/Linux operating system: Our provided computing environments run this operating system.
- Bash shell: Bash is the program that interprets text commands in the command-line terminal on GNU/Linux (and Mac OS X).
- Emacs text editor: We use Emacs to edit Standard ML programs and other text.
- Mercurial (hg) version control system: We use Mercurial to manage and collect assignments.
- Programming languages tools:
The CS 251-specific resource for using the Mercurial version control system also contains links to other Mercurial resources.
- Mercurial (hg) and Bitbucket (CS 251-specific)
GNU/Linux and the Terminal
Resources for using GNU/Linux (available on CS Linux machines or in the wx appliance on your personal computer), especially via the command-line terminal and the Bash shell.
- wx appliance: CS 251 GNU/Linux environment for your computer
- Unix [GNU/Linux] Skills, Scott Anderson, Wellesley College (ignore
- linuxsurvival.com – not very flashy, but a useful interactive tutorial for the command line
- Introduction to Unix and the X Window System, Scott Anderson, Wellesley College
- Bash commands, Ruth Anderson, University of Washington
- Some useful Unix commands, Tia Newhall, Swarthmore College
- Duane’s Incredibly Brief Intro to Unix, Duane Bailey, Williams College
- Linux tutorial and gdb notes, University of Washington CSE
- Unix Programming Tools
Resources for using the Emacs text editor.
- Emacs Basics (Start here!)
- SML/NJ and Emacs SML Mode
- “Real Programmers…”
- Reference Card (pdf)
- Emacs Wiki
- vim and evil
The wx appliance can also be installed on Linux, but if you run Linux already, it is likley you will have good luck installing tools directly, with less overhead. ↩