[Oberon] Oberon and closures

B. Smith-Mannschott benpsm at gmail.com
Thu Oct 30 17:54:24 MET 2008

On Oct 30, 2008, at 09:11, Jörg Straube wrote:

> What about this?
> MODULE Example;
> (* my oberon is also a little rusty *)
>  Printer = POINTER TO Closure;
>  Closure = RECORD
>    n-: INTEGER;
>    Print: PROCEDURE();
>  END;
> PROCEDURE CreatePrinter*(i: INTEGER): Printer;
>  VAR s: Printer;
>    NEW(s); s.n :=i; RETURN Printer
>  END
> VAR p, q: Printer;
>  p:=CreatePrinter(2);
>  q:=CreatePrinter(3);
>  p.Print
>  q.Print
> END Example.
> Joerg

Indeed, there is an equivalence between objects (state with behavior)  
closures (behavior with state).

Anton van Straaten observed a few years ago (more humorously than I  
could manage):

   The venerable master Qc Na was walking with his student, Anton.   
Hoping to
prompt the master into a discussion, Anton said "Master, I have heard  
objects are a very good thing - is this true?"  Qc Na looked pityingly  
his student and replied, "Foolish pupil - objects are merely a poor  
Chastised, Anton took his leave from his master and returned to his  
intent on studying closures.  He carefully read the entire "Lambda: The
Ultimate..." series of papers and its cousins, and implemented a small
Scheme interpreter with a closure-based object system.  He learned  
much, and
looked forward to informing his master of his progress.

   On his next walk with Qc Na, Anton attempted to impress his master by
saying "Master, I have diligently studied the matter, and now understand
that objects are truly a poor man's closures."  Qc Na responded by  
Anton with his stick, saying "When will you learn? Closures are a poor  
object."  At that moment, Anton became enlightened.
// Ben

More information about the Oberon mailing list