Please Reload Every
Time You Read This Page!
CSC123/252: Programming Languages, Fall 2013
Dr. Chuck C. Liang
Professor of Computer Science,
Hofstra University .
Office Address:
201A Adams Hall
Hofstra University
Hempstead, NY 11550
Office Phone: (516 463) 5559
Email: cscccl@hofstra.edu
(<- click to send me mail)
Official Office Hours: Tuesday through Thursday 1-2pm
Course Syllabus and
Goals
Online Resources:
- Lambda Calculus tutorial.
(here's another tutorial)
- Scheme tutorial
- MIT Scheme homepage. Install this version for windows (change shortcut target from --edit to --interactive.)
- Ruby Documentation and Download page. This page contains most of what you'll need with respect to the Ruby language.
Read the "ruby in twenty minutes" tutorial first, then my lambda calculus program below.
- My "Perl Tutorial in Perl"
- Perl.org homepage. Recommend Strawberry Perl for windows.
- A Short C++ to Java Tutorial
- A Short Java to C++ Tutorial
- brief instructions on installing C#
- C# Documentation at MSDN
- OOP Design Patterns (beware: abstract class used instead of interface). You need to first understand Singleton, Factory Method, Adapter, Facade, Observer
- Wikipedia page on Variant types
- Class notes on type inference calculi (pdf)
- Typed functional languages: Standard ML, F# .Net.
- F# intro tutorial and language reference,
more docs available for OCAML
- Algebraic programming in SML. F# version
- F# Download links: 2.0 (does not require visual studio), visual studio express,
open source for linux, macs, etc
- Haskell: a typed functional language with "non-strict" functions.
- Scala language homepage. Scala tutorial for Java programmers
- AspectJ Homepage. Install java first, and then
the latest stable release and
read at least the first two chapters of the programming guide.
- Java API Documentation
Lambda calculus in Scheme
Lambda calculus in Ruby
Lambda calculus in Perl
Halting Problem in Lambda Calculus/Scheme
Homework 1.
Scheme lab and assignment.
Perl-Scheme lab and assignment.
C# Assignment 1
SPECIAL MULTIPLE INHERITANCE ASSIGNMENT DUE
TUESDAY 10/22. Your program must work with multinhasn.dll (compile with csc yourprogram.cs /r:multinhasn.dll)
Optional Halloween Assignment
The Food Assignment. Your xmlwriter visitor should write
files consistent with this example.
Food files: foods.cs,
foodvisitors.cs
aboutfood.cs.
FSA hint for checking sorted list
F#/C# integration assignment. Supporting files:
base F# program, fractions.dll, fractions.cs (recompile only if there are version compatibility issues)
Second F# assignment (parsing and compiling)
AspectJ Assignment
Submit all programming assignments on blackboard (csc123) (but not the first homework, which is a written assignment).
More Scheme Programs (files in bold are
required reading)
Perl Programs (supplements the Perl tutorial. Files in bold are
required reading)
C# Programs ( Files in bold are required reading)
- Static and dynamic dispatch mechanisms in C#
- Type casting rules in C#
- C# Delegates (in version 1.0).
Another delegates example (in version 2.0). And final integration with typed lambda terms (version 3.0)
- Notes on the difference between abstract class and
interface.
- THE PIZZA FACTORY! (my example of Factory Method pattern)
- My example of the ABSTRACT FACTORY pattern
- My example of the Adapter pattern
- invest.cs. (my example of Observer pattern)
- Expressions trees program : csc16 version,
csc17 version, csc123 (visitor pattern) version, Parametrized VP version
- Student Visitors (visitor pattern example), updated 2013:
basic, extended, and main class
- Older student visitors example, that includes
weirdstudents
Version of "student" visitor pattern that includes xml file parser).
- notes and examples of polymorphism
- Balancing generics and inheritance, with
example of separate compilation. mainapp file, and
.net IL assembly code.
- Covariant, Contravariant and Invariant types.
F# programs:
AspectJ Programs (All required reading)
- First AspectJ example. (Contains installation and
compilation instructions).
- Second AspectJ example
superprivate.java and
sptest.java
- Third and major AOP example: base program,
invariance aspect,
initialization aspect,
profiling aspect,
security aspect.
- More AspectJ Programs: advice precedence,
preventing circularity, contro-flows,
if pointcut,
pertarget aspects,
doubly linkedlist (optional)
- Rational and complex numbers: numbersaop.java, print.java, trace.java
- exptree6.java: AOP version of expression tree program. Contains important theoretical remarks (read!).
Other Programs:
C code for linked lists similar to those used in class
Inheritance in
pure C, and C#
Multiple Inheritance in C++
A poem in C++
Use of pointers and casting in C compared
to C++
SPECIAL VIDEO LECTURE on factory and observer design patterns (play with windows media player).
About templates in C++
Announcements:
Final exam THURSDAY 12/19, 6:15-8:15pm in Adams 200 (to be proctored by someone else). There are some conflicting info from Hofstra as to when
the exam is to take place. The time here is definitive. No excuses will be
accepted for missing the final.
Here's the final exam study guide with
sample solutions to the practice problems.
Also included are sample solutions to the F-sharp quiz.
I will be in Adams 019 from 6:15 to 7:40 on Thursday 12/12 for a review
session. Bring questions.