Java Python C# Haskell Ada ML FORTRAN Icon Pascal Ruby Algol Lua C Red Lua COBOL Perl Go Clojure awk Eiffel Assembly Rexx LISP JavaScript Tcl Elixir BASIC Factor Swift APL Scala Rust Shadow

Course Information

  • Time: MWF 1:50 - 2:45
  • Location: The Point 113
  • Instructor: Prof. Stucki
  • A study of two classes of languages: formal languages (regular, context-free, and computable) and their associated machines (finite automata, pushdown automata, and Turing machines); and programming languages, including the essential features of imperative, functional, object-oriented, and logic programming languages, together with their design and implementation on modern computers and virtual machines.

    Additionally, exposure to formal definitions of programming languages including syntax and semantics; recursive descent parsing, data structures, control constructs, recursion, binding times, expression evaluation, compiler implementation; symbol tables, stacks, dynamic allocation, compiler compilers.

Most programming languages do not come with Integrated Development Environments (IDEs), and in fact many programmers prefer to learn a powerful general-purpose text editor and use it for all their editing, including writing programs. Recommended editors are listed below. VS Code is the new kid on the block, but has very powerful, very compelling features. Vim and Emacs are a bit different than most editors, but they're both very powerful and run on practically every computer on the planet (they've also been around a long time). jEdit is written in Java, so it will run on anything that can run Java. Notepad++ is Windows-only, and is NOT the same as Notepad.

Readings

Note on readings: unlike text book readings, the assigned readings in this course will follow a variety of formats. Some may be scholarly journal articles written by pioneers in the field and will require a different level of attention and focus than you may be accustomed to. Others may be from wikis (WikiPedia, WikiWikiWeb, Wolfram's Mathworld, etc.) that allow for non-linear exploration of topics through a variety of pages. The more time you put into reading these assignments, the more you will be prepared for the programming assignments. A new reading assignment will be posted every Monday (except during fall break), including holidays.

Assignments

Project Languages

If you find additional resources, send me links and I'll add them here

The three languages you select must be from different categories.

A: “traditional” statically-typed compiled imperative/OO languages

  1. Ada (GNAT Community Edition IDE)
  2. Eiffel (EiffelStudio IDE)
  3. Fortran 90 (use gfortran, which is part of gcc)
  4. Go (official site, and see An Introduction to Programming in Go)
  5. Nim (official site)
  6. Pascal (Free Pascal 3.0 and Lazarus IDE)
  7. Shadow ( Shadow Tutorial; Standard Library Reference)

B: “traditional” dynamically-typed scripting languages

  1. awk (awk is a standard Unix utility)
  2. Julia (official site)
  3. Lua (official site)
  4. Perl (perl is a standard Unix utility)
  5. Rexx  (Rexx Official SiteRegina Rexx 3.9 Interpreter)
  6. Ruby  (Ruby 2.4.1 Official Site)
  7. Tcl  (Tcl 8.6)

C: “nontraditional” languages

  1. Clojure (official site)
  2. Elixir (official site)
  3. Scala (official site)
  4. Haskell (official site, and see Learn You a Haskell)
  5. Icon (official site)
  6. OCaml (official site)
  7. Red (official site)

Languages Selected

Name

  •   David
  •   Dylan
  •   Ezra
  •   Ian
  •   Isaac
  •   Jacob M.
  •   Jacob R.
  •   Johnathan
  •   Jy'el
  •   Max
  •   Owen
  •   Shabib
  •   Tony
  •   Travis
  •   Zac
  •   Zane

Project #1

  •   Scala
  •   Red
  •   Rexx
  •   Julia
  •   Go
  •   Shadow
  •   Perl
  •   Lua
  •   Haskell
  •   Clojure
  •   Nim
  •   tcl
  •   OCaml
  •   Elixir
  •   Ruby
  •   Ada

Project #2

  •   Ada
  •   Lua
  •   Red
  •   Haskell
  •   OCaml
  •   Ruby
  •   Shadow
  •   Scala
  •   Rexx
  •   Nim
  •   Clojure
  •   Go
  •   Julia
  •   Eiffel
  •   Elixir
  •   Perl

Project #3

  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   

Presentation Details

The language you select is subject to the following restrictions. You may NOT choose:

Most importantly, your language choice must be approved by me before it will be added to the schedule.

You should research the origins, history, and development of your language, including the following questions in your investigation: (1) What other languages influenced it? (2) What new features or constructs did it introduce? (3) What was its intended purpose? (4) Who created it? (5) Who uses it now?

Be creative in asking yourself other interesting questions about your language. It will be a challenge for you to organize and compress all that you learn into a succinct, interesting, and informative presentation. Make sure that you prioritize your findings and include the most important and interesting aspects of your language.

You should use PowerPoint or an equivalent presentation platform to organize your thoughts.

Languages Selected

Date

  •   10/23
  •   10/27
  •   10/30
  •   11/1
  •   11/6
  •   11/6
  •   11/8
  •   11/10
  •   11/13
  •   11/15
  •   11/15
  •   11/17
  •   11/20
  •   11/20
  •   11/27
  •   11/29
  •   12/1

Name

  •   Stucki
  •   Jy'el
  •   Dylan
  •   Jacob R
  •   Max
  •   Ezra
  •   Johnathan
  •   Tony
  •   Shabib
  •   Travis
  •   Owen
  •   Isaac
  •   Zane
  •   Ian
  •   Jacob M
  •   Zac
  •   David

Language