CSC 453: Compilers & Systems Software
Resources
Links to resources that will be helpful will appear here during the course of the semester.
MeggyJava
The Meggy Jr Device
- Building programs for the Meggy
- Meggy Jr Physical Assembly Instructions
- Vendor Website
- Guide for Programming with Arduino and MeggyJrSimple interface
- AVR 8-bit Instruction Set Architecture (AVR Assembly Language)
- avr-gcc calling convention, also check out the GCC wiki page about it.
Software Tools Used in CS 453
- Class web page at
http://www.cs.arizona.edu/classes/cs453/fall16. You are already here. The syllabus
states that students are responsible for checking the webpage each day.
Announcements will be on the main page and will also be posted on piazza.
- Makefiles will be used in many of the recitations and most of the
programming assignments. We will be providing the Makefiles for you, but
sometimes you will have to make edits to the Makefile. Read about the
basics at a Makefile tutorial.
- We use the AVR-G++
tool chain to assemble and link your generated AVR code with
the MeggyJrSimple library.
The CS Mac lab machines
have this whole tool chain installed.
By following the Meggy
build instructions, you should be able to do any compilation you
need on the command line. IF you want to download to your own device
and you are not on campus, then you will have to install this software
on your machine. We initially started from the
Arduino software environment
and set the preferences to verbose while the Arduino IDE was
compiling and loading to
reverse engineer the commands to use on the command line.
Also, check out the Makefile
we provide in the Meggy
build github repository to figure out how to use the
AVR-G++ toolchain.
- We will be using github classroom. The PA1 writeup describes
how to set up a repository for your group. There are many ways
to manage github usage. We initially recommend that you just
create your own clone on your laptop and another one on lectura
(everything will have to work on lectura).
Then when you add a file use
git add filename
To commit a new or changed file to your local clone, type the following:git commit filename
To push the changes to the repository you share with your group on github typegit push
To get the changes others have pushded to the shared repository typegit pull
Discuss with your group who will be working on which file at anyone time. IMHO, conflicts are not easy to resolve. Read up on the internet and/or come to lab or office hours to get help.Also, here are some additional github notes from Rick Mercer:
- MJSIM.jar is a simulator for the subset of AVR assembly code we are using in our projects. mjsim was written specifically for this class, and we can update some issues as you find them. We use mjsim to do command-line simulation of the AVR programs your compiler generates for grading. mjsim also has a GUI mode that has a MeggyJr emulator. mjsim is written in Java and provided as a .jar file.
- Haskell. We will be learning Haskell this semester and writing the
MeggyJava compiler in Haskell. Haskell is a purely functional, lazy, and
strongly typed language with syntax that is quite different than what you
are probably used to. Because it is a different programming paradigm, you
will learn different ways to solve problems and you will learn about
programming constructs that are just now starting to make their way into
languages like C++ (think lambda functions).
Here are some resources to help you
learn Haskell.
- Haskell is installed on the CS linux machines. If you would like to install it on your own machine, check out The Haskell Platform.
- Haskell IO for Imperative Programmers, A little long but nice focus on how an imperative programmer thinks. Illustrates laziness with a short-circuiting example.
- Kathleen Fisher lectures on Haskell. These are quite helpful and come with example code.
- Mr. Mitchell's CSc 372 Haskell course notes and and Dr. Colberg's CSc 372 Haskell course notes.
- Bartosz Milewski's Basics of Haskell. Milewski comes from a C++ background and I have found his articles on Haskell more approachable than most.
- Real World Haskell book by O'Sullivan, Steward, and Goerzen. Gives a history of Haskell and also has a lot of examples.
- The Happy Parser Generator, which you can use if you would like but will not be covered in class.
Other
- turnin utility [FIXME: need link]
- Cool regular expression debugger