Recent Changes - Search:
ECG Home

GitHub

People

Publications

Calendar

Projects

Fall 2017

Older Courses

Spring 2017

Fall 2016

Spring 2016

Fall 2015

Spring 2015

Fall 2014

Spring 2014

Fall 2013

Spring 2013

Fall 2012

Spring 2012

Fall 2011

Spring 2011

Fall 2010

Spring 2010

Fall 2009

Spring 2009

Fall 2008

Spring 2008

Fall 2007

HOWTOs

edit SideBar

OrganizationProgrammingLanguagesFall2008

OrganizationProgrammingLanguagesFall2008.OrganizationProgrammingLanguagesFall2008 History

Hide minor edits - Show changes to output

Added line 106:
<!--
Added line 133:
-->
May 12, 2009, at 09:19 PM by 129.63.32.51 -
Changed line 14 from:
* [[Scheme-&-SQL-Database-Interactions]] by Rohan Golwala
to:
* [[Scheme-&-SQL-Database-Interactions]] by Rohan
May 05, 2009, at 08:10 PM by 129.63.32.25 -
May 05, 2009, at 08:08 PM by 129.63.32.25 -
May 05, 2009, at 08:05 PM by 129.63.32.25 -
Deleted line 15:
* [[Scheme Plotting]] by Easwaran
Added line 31:
* [[Fluxus using Scheme]] by Josyel Perez
Changed line 10 from:
* [[[@$cheme $tock@]->3]] by Gary Kanter and Paul Ricker
to:
* [[[@$cheme $tock@]->Scheme Stock]] by Gary Kanter and Paul Ricker
Changed line 4 from:
Prof. Fred Martin, (:html:)<a href="http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>(:htmlend:) \\
to:
'''Prof. Fred Martin''', (:html:)<a href="http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>(:htmlend:) \\
Added lines 7-32:
----
!!Quick Links to Student Final Projects!

* [[[@$cheme $tock@]->3]] by Gary Kanter and Paul Ricker
* [[Scheme-in-C++-Game-Engine]] by Dante Kappotis
* [[C++-in-Scheme-Calculator]] by Steven Zukowski
* [[Checkbook Balancer]] by Eric Krupnik
* [[Scheme-&-SQL-Database-Interactions]] by Rohan Golwala
* [[XML Baseball Statistics]] by Jerron St. Armand
* [[Scheme Plotting]] by Easwaran
* [[RSS-Mashups-in-Scheme]] by Tom Kiley
* [[iRobot Create Scheme API]] by John Fertitta
* [[Scheme-and-GUI-Box_and_Pointer_Diagrams]] by Dongrui Zhang
* [[ID3 Tag Editor]] by Joshua Kraunelis
* [[GUI Email Client]] by Steven LeBoeuf
* [[SimpleRSS]] by Philip Kovac
* [[CrawLS]] by Patrick Lozzi
* [[SchemeSpider]] by Chris DiMaio
* [[XML Manipulation]] by Brian Mello
* [[Music Discovery]] by Chris Corcoran
* [[Desktop Relief Engraving]] by Mark Sherman
* [[User-interactive Webpage Application  in  PLTScheme]] by Shruthi Rajegowda
* [[Drummer-in-Scheme]] by David Romano
* [[PCB Drill]] by Saroun Sek
----

Changed line 4 from:
Prof. Fred Martin \\
to:
Prof. Fred Martin, (:html:)<a href="http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>(:htmlend:) \\
Changed lines 1-2 from:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]]
to:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[Project]]
Changed lines 116-117 from:
Students who are registered for the honors section of the class are expected to have exemplary work, including classroom participation, written work, and the course project.
to:
Students who are registered for the honors section of the class are expected to have exemplary work, including classroom participation, written work, and the course project. Additional and more difficult problems will be assigned in most of the weekly problem sets.
Changed lines 11-12 from:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. &bull; If browsing on campus, just click on the image of the book, above. &bull; If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then click on the book above.
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. &bull; If browsing on campus, just click on the image of the book, above. &bull; If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read it [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | here]].
Changed lines 11-12 from:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. &bull; If browsing on campus, just click on the image of the book, above. &bull; If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read it [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | here]].
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. &bull; If browsing on campus, just click on the image of the book, above. &bull; If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then click on the book above.
Changed lines 1-2 from:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]] [[Lecture Blog]]
to:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]]
Changed line 10 from:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | Attach:scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
to:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | Attach:scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://proquest.safaribooksonline.com/0132269937 | Attach:core-python-cover.jpg]]
Changed lines 1-2 from:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]]
to:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]] [[Lecture Blog]]
Changed lines 1-2 from:
[[Assignments]] [[Readings]] [[PS1]]
to:
[[OrganizationProgrammingLanguagesFall2008|Home]] [[Assignments]]
Changed lines 1-2 from:
[[Readings]][[PS1]]
to:
[[Assignments]] [[Readings]] [[PS1]]
Changed lines 1-2 from:
[[Readings]]
to:
[[Readings]][[PS1]]
Added lines 1-2:
[[Readings]]
Added lines 116-120:
!!Acknowledgment

I am inheriting this course from UML Prof. Holly Yanco, who has taught it in exemplary form for a number of years.  Much of the course materials will be based on her work.

Changed lines 75-76 from:
We will use Google Groups for class conversation and announcements.  Please join this group.  I'd advise setting it to send email to you directly.
to:
We will use Google Groups for class conversation and announcements.  Please join this group.  I'd advise setting your preferences to immediate, individual delivery of messages&#151;click the &#147;Edit my membership&#148; tab.
Added lines 108-115:
!!Collaboration Policy

You are welcome to discuss ideas in the class with your peers.  However, pair programming or other sharing of code is not allowed.  By turning in an assignment, you attest that ''you have written'' the code that it includes. Please be familiar with the university's [[academic integrity policy->http://www.uml.edu/catalog/undergraduate/policies/academic_dishonesty.htm]].

!!Honors Section

Students who are registered for the honors section of the class are expected to have exemplary work, including classroom participation, written work, and the course project.

Changed lines 63-64 from:
You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be developed in the last three weeks of the semester.  We will start talking about it before then, though, so you can start thinking about it.  In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interests&#151;music, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class.
to:
You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be conducted in the last three weeks of the semester.  We will start talking about it before then, though, so you can start preparing for it.  In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interests&#151;music, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class.
Added lines 73-107:
!!Discussion Group / E-Mail List

We will use Google Groups for class conversation and announcements.  Please join this group.  I'd advise setting it to send email to you directly. 

(:html:)
<table style="border:1px solid #aa0033; font-size:small" align=center>
  <tr>
    <td rowspan=3>
    <img src="http://groups.google.com/groups/img/groups_medium.gif" height=58 width=150 alt="Google Groups">
    </td>
    <td colspan=2 align=center><b>Subscribe to 91301-f08</b></td>
  </tr>
  <form action="http://groups.google.com/group/91301-f08/boxsubscribe">
  <tr>
    <td>Email: <input type=text name=email></td>
    <td>
      <table
      style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;">
      <tr>
        <td>
        <input type=submit name="sub" value="Request">
        </td>
      </tr>
      </table>
    </td>
  </tr>
  </form>
  <tr><td colspan=2 align=center>
  <a href="http://groups.google.com/group/91301-f08">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a>
  </td></tr>
</table>
(:htmlend:)

The group address is mailto:91301-f08@googlegroups.com.  You have to be a member to send to the list.

Changed line 69 from:
25% Project \\ 
to:
25% Project \\
Changed lines 63-64 from:
You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be developed in the last three weeks of the semester.  We will start talking about it before then, though, so you can start thinking about it.  In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interests&#151;music, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class.
to:
You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be developed in the last three weeks of the semester.  We will start talking about it before then, though, so you can start thinking about it.  In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interests&#151;music, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class. 
Changed lines 67-74 from:
25% Weekly homeworks
20% Two quizzes
20% Final
10% Classroom participation

25% Project
----
100% Total

to:
25% Weekly homeworks \\
20% Two quizzes \\
25% Project \\
20% Final \\
10% Classroom participation \\

Changed lines 1-2 from:
This is the site for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.
to:
91.301 Organization of Programming Languages, Fall 2008 \\
Prof. Fred Martin \\
Tue & Thu, 11:30 am &#150; 12:45 pm, Olsen 403

Changed lines 51-74 from:
->Indeed the whole experience of computing becomes one of building objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes that only temporarily instantiate objects, you create them directly, knowing that they will be there for you later.
to:
->Indeed the whole experience of computing becomes one of building objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes that only temporarily instantiate objects, you create them directly, knowing that they will be there for you later.

!!Course Structure and Grading

The class will have regular weekly assignments, which will be graded and returned.  Cumulatively these assignments are worth 25% of your overall grade.  Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value. At least 2/3s of all weekly assignments must be completed satisfactorily or your overall assignment score will be demoted to 0.  (Translation:  please take the homework seriously; this is where you will do most of your learning.)

There will be two in-class quizzes during the semester.  Each is worth 10% of your overall grade.

There will be a cumulative final, worth 20% of your overall grade.

Classroom attendance and participation is worth 10% of your overall grade.  In practice, if your other grades put you on a marking boundary, this will push it one way or the other.

You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be developed in the last three weeks of the semester.  We will start talking about it before then, though, so you can start thinking about it.  In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interests&#151;music, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class.

To summarize:

25% Weekly homeworks
20% Two quizzes
20% Final
10% Classroom participation
25% Project
----
100% Total

August 24, 2008, at 12:39 PM by Fred Martin - tweaking
Changed lines 41-42 from:
->As part of the implementation of the environment, the concept of garbage collection was introduced.  Objects that had no way of being accessed (i.e., they had no names, no pointers to them) could be removed from memory, and the space they took up could then be freed for other purposes.  Once controversial, automatic garbage collection is now considered an obvious part of a modern language design.
to:
->As part of the implementation of the environment, garbage collection was introduced.  Objects that had no way of being accessed (i.e., they had no names, no pointers to them) could be removed from memory, and the space they took up could then be freed for other purposes.  Once controversial because of its complexity, automatic garbage collection is now considered an obvious part of a modern language design.
August 24, 2008, at 11:53 AM by Fred Martin - tweaking
Changed lines 37-38 from:
* '''The environment and persistence.''' In typical programming environments, data and objects are created anew each time the program launches.  If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data.  Object-oriented languages typically provide some way to serialize objects&#151;converting them into a flat-file format (e.g., XML) for saving and loading.
to:
* '''The environment and persistence.''' In typical programming environments, data and objects are created anew each time the program launches.  If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data.  Object-oriented languages typically provide some way to serialize objects&#151;converting them into a flat-file format (e.g., XML) for saving and loading across execution runs.
August 24, 2008, at 11:50 AM by Fred Martin - tweaking
Changed lines 15-20 from:
There are basically two variants of the OPL-type course at CS departments.  One variant is a survey of the ideas in many languages that have been created and implemented.  The other variant is a deep-dive into a language favored by language researchers, typically Scheme or CAML.  Both of these languages are &#147;meta-languages&#148;&#151;they are languages for making languages.

At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class.  For many years here, 91.301 has been a close implementation of the famous &#147;6.001&#148; course at MIT, ''Structure and Interpretation of Computer Programs.'' This course was created in the 1970s and has been hugely influential.  It so happens that MIT has just implemented a major overhaul of their undergrad EECS curriculum, and as of Fall 2008, the 6.001 course is no longer being offered.

Given that, why are we still teaching it, you might ask?
to:
There are basically two variants of the OPL-type course at CS departments.  One variant is a survey of the ideas in many languages that have been created and implemented.  The other variant is a deep-dive into a language favored by language researchers, often Scheme or CAML.  Both of these languages are &#147;meta-languages&#148;&#151;they are languages for making languages.

At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class.  For many years here, 91.301 has been a close implementation of the famous &#147;6.001&#148; course at MIT, ''Structure and Interpretation of Computer Programs.'' This course was created in the 1970s and has been hugely influential. 

Now, it
so happens that MIT has just implemented a major overhaul of their undergrad EECS curriculum, and as of Fall 2008, the 6.001 course is no longer being offered. Given that, why are we still teaching it, you might ask?
Changed line 49 from:
->Indeed the whole experience of computing becomes one of objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes to temporarily instantiate objects, you are creating them directly and you can trust that they will be there for you later.
to:
->Indeed the whole experience of computing becomes one of building objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes that only temporarily instantiate objects, you create them directly, knowing that they will be there for you later.
August 24, 2008, at 12:48 AM by Fred Martin - listener and environment written
Changed lines 45-46 from:
->Because of the Listener, developing Scheme programs feels quite different than working in a typical edit-compile-test language.  After a single procedure is defined, you can try it out interactively, giving it inputs and examining its outputs.  Combined with the concept of the environment, you end up iteratively and alternately data structures and the code for operating on them.
to:
->Because of the Listener, developing Scheme programs feels quite different than working in a typical edit-compile-test language.  After a single procedure is defined, you can try it out interactively, giving it inputs and examining its outputs.  Combined with the concept of the environment, you end up iteratively and alternately developing data structures and the code for operating on them.
Changed lines 45-47 from:
Because of the Listener, developing Scheme programs feels quite different than working in a typical edit-compile-test language.  After a single procedure is defined, you can try it out interactively, giving it inputs and examining its outputs.  Combined with the concept of the environment, you end up iteratively and alternately data structures and the code for operating on them.

When you become accustomed to the Listener, you feel stymied without it.  It becomes annoying to write @@main@@ functions simply for the purpose of exercising your routines&#151;why can't you just talk to them directly?  Similarly, the environment is a powerful construct&#151;you build up a library of objects that are part of your project, and once created, they are part of your software system.  Indeed the whole experience of computing becomes one of objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes to temporarily instantiate objects, you are creating them directly and you can trust that they will be there for you later.
to:
->Because of the Listener, developing Scheme programs feels quite different than working in a typical edit-compile-test language.  After a single procedure is defined, you can try it out interactively, giving it inputs and examining its outputs.  Combined with the concept of the environment, you end up iteratively and alternately data structures and the code for operating on them.

->When you become accustomed to the Listener, you feel stymied without it.  It becomes annoying to write @@main@@ functions simply for the purpose of exercising your routines&#151;why can't you just talk to them directly?  Similarly, the environment is a powerful construct&#151;you build up a library of objects that are part of your project, and once created, they are part of your software system.

->
Indeed the whole experience of computing becomes one of objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes to temporarily instantiate objects, you are creating them directly and you can trust that they will be there for you later.
Changed lines 1-2 from:
This is a starter site for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.
to:
This is the site for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.
Changed lines 37-45 from:
* '''The environment and persistence.''' In typical programming environments, data and objects are created anew each time the program launches.  If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data.  Object-oriented environments typically provide some way to serialize objects&#151;converting them into a flat-file format (e.g., XML) for saving and loading. 

->Scheme handles things totally differently.  Once you create an object, it's just there&#151;existing in the environment in which it was created.  As long has you have a &#147;handle&#148; to it (i.e., you've named it, or it's part of another object that you have access to), the object will persist.  When you quit Scheme, the entire environment of all objects ever created since launch gets saved to disk.  Next time you relaunch, you reload the environment file and everything is exactly as you left it.  (There once were Lisp Machines, and the concept of &#147;quitting Scheme&#148; didn't exist.)

->As
part of the implementation of the environment, the concept of garbage collection was introduced.  Objects that had no way of being accessed (i.e., they had no names, no pointers to them) could be removed from memory, and the space they took up could then be freed for other purposes.  Once controversial, the idea of garbage collection as part of heap management is now considered an obvious part of a modern language design.



*
'''Interpretation and the listener.'''
to:
* '''The environment and persistence.''' In typical programming environments, data and objects are created anew each time the program launches.  If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data.  Object-oriented languages typically provide some way to serialize objects&#151;converting them into a flat-file format (e.g., XML) for saving and loading. 

->Scheme handles things totally differently.  Once you create an object, it's just there&#151;existing in the environment in which it was created.  As long has you have a &#147;handle&#148; to it (i.e., you've named it, or it's part of another object that you have access to), the object will persist.  When you quit Scheme, the entire environment including all objects gets saved to disk.  Next time you relaunch, you reload the environment file and everything is exactly as you left it.  (There once were Lisp Machines, and the concept of &#147;quitting Scheme&#148; didn't exist.)

->As
part of the implementation of the environment, the concept of garbage collection was introduced.  Objects that had no way of being accessed (i.e., they had no names, no pointers to them) could be removed from memory, and the space they took up could then be freed for other purposes.  Once controversial, automatic garbage collection is now considered an obvious part of a modern language design.

* '''Interpretation and the Listener
.''' Scheme was historically an interpreted language, and provided a &#147;Listener&#148; console for interactively constructing expressions and evaluating them.  (At one time, the fact that it was interpreted was considered a significant performance liability, but compiled versions of Scheme and Lisp now exist, removing this as a concern.) 

Because of the Listener, developing Scheme programs feels quite different than working in a typical edit-compile-test language.  After a single procedure is defined, you can try it out interactively, giving it inputs and examining its outputs.  Combined with the concept of the environment, you end up iteratively and alternately data structures and the code for operating on them.

When you become accustomed to the Listener, you feel stymied without it.  It becomes annoying to write @@main@@ functions simply for the purpose of exercising your routines&#151;why can
't you just talk to them directly?  Similarly, the environment is a powerful construct&#151;you build up a library of objects that are part of your project, and once created, they are part of your software system.  Indeed the whole experience of computing becomes one of objects that of course persist and seem &#147;alive.&#148; Rather than writing recipes to temporarily instantiate objects, you are creating them directly and you can trust that they will be there for you later.
Changed lines 31-32 from:
* '''Functions as First-Class Objects.''' In Scheme, procedures (also known as functions) can accept procedures as inputs (arguments).  But they also can easily create procedures as outputs (return values).  This leads to a style of programming known as ''functional programming,'' in which functions are composed and applied to lists of data to produce results, instead of the more prevalent approach of sequentially manipulating data structures.  Functional programming has some advantages in transparency and simplicity, particularly in language and symbolic processing, and is facilitated by a language like Scheme in which code can easily construct and output code on the fly.
to:
* '''Functions as first-class objects.''' In Scheme, procedures (also known as functions) can accept procedures as inputs (arguments).  But they also can easily create procedures as outputs (return values).  This leads to a style of programming known as ''functional programming,'' in which functions are composed and applied to lists of data to produce results, instead of the more prevalent approach of sequentially manipulating data structures.  Functional programming has some advantages in transparency and simplicity, particularly in language and symbolic processing, and is facilitated by a language like Scheme in which code can easily construct and output code on the fly.
Changed lines 37-39 from:
* '''The environment and persistence.'''

to:
* '''The environment and persistence.''' In typical programming environments, data and objects are created anew each time the program launches.  If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data.  Object-oriented environments typically provide some way to serialize objects&#151;converting them into a flat-file format (e.g., XML) for saving and loading. 

->Scheme handles things totally differently.  Once you create an object, it's just there&#151;existing in the environment in which it was created.  As long has you have a &#147;handle&#148; to it (i.e., you've named it, or it's part of another object that you have access to), the object will persist.  When you quit Scheme, the entire environment of all objects ever created since launch gets saved to disk.  Next time you relaunch, you reload the environment file and everything is exactly as you left it.  (There once were Lisp Machines, and the concept of &#147;quitting Scheme&#148; didn't exist.)

->As part of the implementation of the environment, the concept of garbage collection was introduced.  Objects that had no way of being accessed (i.e., they had no names, no pointers to them) could be removed from memory, and the space they took up could then be freed for other purposes.  Once controversial, the idea of garbage collection as part of heap management is now considered an obvious part of a modern language design.



August 23, 2008, at 11:35 PM by Fred Martin - working on big ideas section
Changed lines 31-34 from:
* '''Functional programming and functions as first-class objects.'''

* '''Data abstraction
.'''
to:
* '''Functions as First-Class Objects.''' In Scheme, procedures (also known as functions) can accept procedures as inputs (arguments).  But they also can easily create procedures as outputs (return values).  This leads to a style of programming known as ''functional programming,'' in which functions are composed and applied to lists of data to produce results, instead of the more prevalent approach of sequentially manipulating data structures.  Functional programming has some advantages in transparency and simplicity, particularly in language and symbolic processing, and is facilitated by a language like Scheme in which code can easily construct and output code on the fly.

* '''Data abstraction.'''  This was one of the really big contributions of SICP&#151;the idea of abstracting data structures from the interfaces for manipulating them.  It then becomes possible to re-implement an underlying data structure without changing the code that uses it.  For example, if there is a @@concatenate@@ operation that appends one string to another, code that uses @@concatenate@@ doesn't need to change even if the underlying representation of a string changes.

->This idea, which is of course the basis of object-oriented programming, is so well-established that it may now seem obvious. But this was hardly the case in the 1960s and 1970s when SICP was developed.  Scheme has a somewhat different way of bundling together data representations and the procedures (methods) for manipulating them, which allows a high degree of flexibility.

Added line 39:
Changed lines 23-24 from:
There are actually several &#147;big ideas&#147; in SCIP (as it is commonly known) that we will bring out in OPL:
to:
There are actually several &#147;big ideas&#147; in SICP (as it is commonly known) that we will bring out in OPL:
Changed lines 25-26 from:
* '''Program-as-data.'''  In typical programming languages, there is a sharp distinction between what is code and what is data.  Data structures are allocated explicitly, and code is written to manipulate them.  The two things are of a different nature.  (Of course, &#147;bits are bits,&#148; but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.)  But in Scheme, the fundamental notation for describing code and data (known as the ''S-expression'') is the same thing.  Data structures and executable procedures are both nested lists.  Furthermore, it is commonplace for code to produce data that is executed as code.  This leads to the next point...
to:
* '''Program-as-data.'''  In typical programming languages, there is a sharp distinction between what is code and what is data.  Data structures are allocated explicitly, and code is written to manipulate them.  The two things are of a different nature.  (Of course, &#147;bits are bits,&#148; but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.) 

->
But in Scheme, the fundamental notation for describing code and data (known as the ''S-expression'') is the same thing.  Data structures and executable procedures are both nested lists.  Furthermore, it is commonplace for code to produce data that is executed as code. 

->
This leads to the next point...
Changed lines 25-33 from:
* Program-as-data.  In typical programming languages, there is a sharp distinction between what is code and what is data.  Data structures are allocated explicitly, and code is written to manipulate them.  The two things are of a different nature.  (Of course, &#147;bits are bits,&#148; but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.)  But in

* Functional programming.

* Data abstraction.

* The environment
and persistence.

* Interpretation and
the listener.
to:
* '''Program-as-data.'''  In typical programming languages, there is a sharp distinction between what is code and what is data.  Data structures are allocated explicitly, and code is written to manipulate them.  The two things are of a different nature.  (Of course, &#147;bits are bits,&#148; but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.)  But in Scheme, the fundamental notation for describing code and data (known as the ''S-expression'') is the same thing.  Data structures and executable procedures are both nested lists.  Furthermore, it is commonplace for code to produce data that is executed as code.  This leads to the next point...

* '''Functional programming and functions as first-class objects.'''

* '''Data abstraction.'''

* '''The environment and persistence.'''

* '''Interpretation and the listener.'''
Changed lines 9-12 from:
!!Rationale / What are the Big Ideas?

Basically all departments that award bachelor's degrees in Computer Science have
a course like OPL.  Such a class is also required by CSAB, the professional organization that accredits CS degrees.  So, everyone's got one---why?
to:
!!Rationale

Basically all departments that award bachelor's degrees in Computer Science have a course like OPL.  Such
a class is also required by CSAB, the professional organization that accredits CS degrees.  So, everyone's got one&#151;why?
Deleted lines 14-15:
Historically, the ideas in OPL began life in the late 1950s and early 1960s, and it was once not a foregone conclusion that computing would look like it does today.  Of course, nothing is static, and even dominant paradigms like C++ and Java are being outpaced by small, interactive languages like Python and PHP.
Changed lines 17-18 from:
At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class.  For many years here, 91.301 has been a close implementation of the famous &#147;6.001&#148; course at MIT, ''Structure and Interpretation of Computer Programs.'' This course was created in the 1970s and has been hugely influential.  It so happens that MIT is now implementing a major overhaul of their EECS curriculum, and as of 2008, the 6.001 course is no longer.
to:
At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class.  For many years here, 91.301 has been a close implementation of the famous &#147;6.001&#148; course at MIT, ''Structure and Interpretation of Computer Programs.'' This course was created in the 1970s and has been hugely influential.  It so happens that MIT has just implemented a major overhaul of their undergrad EECS curriculum, and as of Fall 2008, the 6.001 course is no longer being offered.
Added lines 20-33:

!!What Is The Big Idea?

There are actually several &#147;big ideas&#147; in SCIP (as it is commonly known) that we will bring out in OPL:

* Program-as-data.  In typical programming languages, there is a sharp distinction between what is code and what is data.  Data structures are allocated explicitly, and code is written to manipulate them.  The two things are of a different nature.  (Of course, &#147;bits are bits,&#148; but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.)  But in

* Functional programming.

* Data abstraction.

* The environment and persistence.

* Interpretation and the listener.
August 23, 2008, at 10:34 PM by Fred Martin - started rationale
Added lines 9-21:
!!Rationale / What are the Big Ideas?

Basically all departments that award bachelor's degrees in Computer Science have a course like OPL.  Such a class is also required by CSAB, the professional organization that accredits CS degrees.  So, everyone's got one---why?

In my opinion, this course exists to give you a different way of thinking about computing.  A way that is really quite apart from the &#147;professional&#148; programming languages like C, C++, and Java, all of which are based on an edit/compile/debug/deploy model of computation.

Historically, the ideas in OPL began life in the late 1950s and early 1960s, and it was once not a foregone conclusion that computing would look like it does today.  Of course, nothing is static, and even dominant paradigms like C++ and Java are being outpaced by small, interactive languages like Python and PHP.

There are basically two variants of the OPL-type course at CS departments.  One variant is a survey of the ideas in many languages that have been created and implemented.  The other variant is a deep-dive into a language favored by language researchers, typically Scheme or CAML.  Both of these languages are &#147;meta-languages&#148;&#151;they are languages for making languages.

At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class.  For many years here, 91.301 has been a close implementation of the famous &#147;6.001&#148; course at MIT, ''Structure and Interpretation of Computer Programs.'' This course was created in the 1970s and has been hugely influential.  It so happens that MIT is now implementing a major overhaul of their EECS curriculum, and as of 2008, the 6.001 course is no longer. 

Given that, why are we still teaching it, you might ask?
August 23, 2008, at 10:19 PM by Fred Martin - tweaking Core Python parag
Changed lines 7-8 from:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If browsing on campus, just click on the image of the book, above. If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. &bull; If browsing on campus, just click on the image of the book, above. &bull; If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read it [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | here]].
Changed lines 7-8 from:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If browsing on campus, just click on the image of the book, above. If off-campus, first log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
Changed lines 1-2 from:
This is a place-holder page for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.
to:
This is a starter site for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.
Changed lines 7-8 from:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the log-in screen in a separate browser window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
Changed lines 7-8 from:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the historic Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
Changed lines 7-8 from:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  ''Core Python'' is part of O'Reilly's "Safari" system and as a UML student you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
Changed lines 7-8 from:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free when using an on-campus internet connection, or,  log into the  [[https://login.libproxy.uml.edu/login | UML Library's proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free. If off-campus, log into the [[https://login.libproxy.uml.edu/login | UML Library proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]]. 
Changed line 6 from:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | Attach:scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
to:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | Attach:scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]] 
Changed lines 7-16 from:

We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]].

We will also be working with Python in the
class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free when using an on-campus internet connection.

Also
, you can access this book externally by logging in to the UML Library's proxy server.  Here's how:

# Log into the [[https://login.libproxy.uml.edu/login | proxy server]]. (Use right-click to open the link in a new window.)
# Read
''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
to:
|| We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]]. || We will also be working with Python in the class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free when using an on-campus internet connection, or,  log into the  [[https://login.libproxy.uml.edu/login | UML Library's proxy server]] (use right-click to open the link in a new window), and then read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].
Changed lines 6-7 from:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
to:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | Attach:scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
Changed lines 6-7 from:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | http://mitpress.mit.edu/sicp/graphics/main-banner.gif]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
to:
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | scip-cover.jpg]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]
Added lines 3-7:
We will be using the following books:

|| border=0 width=100% cellpadding=10
|| '''Structure and Interpretation of Computer Programs''' (1984) [[<<]] Hal Abelson and Jerry Sussman [[<<]] %height=150px% [[http://mitpress.mit.edu/sicp/ | http://mitpress.mit.edu/sicp/graphics/main-banner.gif]] || '''Core Python Programming, 2nd Edition''' (2006) [[<<]] Wesley J. Chun [[<<]] %height=150px% [[http://safari.oreilly.com/0132269937 | Attach:core-python-cover.jpg]]

Added lines 1-11:
This is a place-holder page for 91.301 Fall 2008, Organization of Programming Languages, to be taught by UML-CS Prof. Fred Martin.

We will be using the venerable Abelson/Sussman book, ''Structure and Interpretation of Computer Programs.''  It is available online (for free) [[http://mitpress.mit.edu/sicp/ | here]].

We will also be working with Python in the class.  We will be using ''[[Core Python Programming, 2nd Edition -> http://safari.oreilly.com/0132269937]]''.  This book is part of O'Reilly's "Safari" system, which should mean that you can read it on the web for free when using an on-campus internet connection.

Also, you can access this book externally by logging in to the UML Library's proxy server.  Here's how:

# Log into the [[https://login.libproxy.uml.edu/login | proxy server]]. (Use right-click to open the link in a new window.)
# Read ''Core Python'' at [[http://proquest.safaribooksonline.com.libproxy.uml.edu/0132269937/ | this URL]].

Edit - History - Print - Recent Changes - Search
Page last modified on January 09, 2010, at 02:38 AM