Tools
This page collects documentation of software tools used in CS 301.
- wx appliance
- Scala programming language and tools
- Eclipse / Scala IDE
- Mercurial (hg) version control system
- JFlex and JavaCUP
- x86-64 assembly language
- Emacs text editor
- GNU/Linux operating system and Bash shell
Computing Environments
We provide all CS 301 software tools on two fully-supported computing environments:
- 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 301 GNU/Linux computing environment for your computer.
- No CS account is required.
You can install most of the necessary software (Scala IDE) directly on any computer. A key component of our compiler (the machine code generator) depends on specific system details. Assembling, linking, and running compiled programs will require some tinkering on your personal computer, but should just work on our platforms. We may also provide useful testing scripts that assume a Linux/Unix/Mac OS X environment.
Scala
- Home page
- Documentation
- Scala for Java Programmers
- Scala By Example
- Skip early chapters on full-program examples.
- Chapters 4-11 and 13 are most useful for us.
- Early examples can be tested by running the REPL (read-eval-print loop): run
scala
at the command line, with no arguments. - Unless you are curious or have taken a PL course (e.g., 251) I suggest skipping 5.2-5.3 and 8.2-8.4 for now.
- Many chapters end with a nice recap including a grammar for the language features discussed!
- Twitter Scala School
- Learning Scala in Small Bites
- Scala Library Guides
- Scala Library Reference
- Physical books on the shelf:
- Programming in Scala. Oderksy, Spoon, and Venners.
- Programming Scala. Wampler and Payne.
Scala command line tools
- Edit:
emacs Things.scala
- Compile:
fsc Thingy.scala
orscalac Thingy.scala
- If
fsc
hangs on thewx
appliance, runsudo hostname localhost
and try again.
- If
- Run compiled code:
scala Thingy
- REPL:
scala
Eclipse / Scala IDE
- Scala IDE
- Eclipse
- Eclipse Documentation
- Lots of errors all of sudden? “Conflicting Symbols” or “Already Defined”? The asynchonous compiler seems to have a concurrency bug. Make a small change and save or choose “Clean…” from the “Project” menu – should kick it to resolve.
Mercurial
- Mercurial (hg) and Bitbucket: CS 301-specific version control guide with links to more.
- MercurialEclipse Documentation
- Mercurial & Eclipse
JFlex and JavaCUP
x86
Detailed reference on the x86 assembly language and instruction set architecture. CSAPP contains good basic reference.
- x86asm.net
- x86 manuals from Intel
- x86 manuals from AMD (see manuals section)
- WikiBook
Debugging and Disassembly
Reference for the GNU Debugger (GDB), the Valgrind memory error detector, and other tools for debugging and disassembly.
- GDB manual
- GDB reference sheet (pdf, txt)
- Debugging and disassembly tools, Tia Newhall, Swarthmore College
- Valgrind manual
man objdump
man strings
C Tools
Reference for the C programming language, the GNU C Compiler (GCC), and the Make system for automating compilation.
- The C Programming Language (a.k.a. K&R), Kernighan and Ritchie, THE classic book
- Stanford CS Library C resources
- C resources, Tia Newhall, Swarthmore College
- Duane’s Incredibly Brief Introduction to the C Programming Language, Duane Bailey, Williams College
- GCC manual (Run
gcc --version
to determine what version you have.)- Note that
gcc
installed on Macs via Xcode is not actually GCC.
- Note that
- Make manual (not easy reading)
Emacs
Reference for the Emacs text editor.
- Emacs Basics (Start here!)
- “Real Programmers…”
- Reference Card (pdf)
- Tour
- Manual
- Emacs Wiki
- vim and evil
GNU/Linux and the Terminal
Reference for the GNU/Linux command-line environment (available on CS Linux machines or in the wx appliance on your personal computer).
- wx appliance: self-contained CS 301 environment for your computer
- linuxsurvival.com: non-flashy interactive tutorial for the command line
- Unix Skills (including remote login to CS machines with
ssh
), Scott Anderson, Wellesley College - Introduction to Unix and the X Window System, Scott Anderson, Wellesley College
- linuxcommand.org
- 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