From Wikipedia, the free encyclopedia
- Interaction between higher-order and nested functions. Supported in Algol and Pascal. (Andrew Appel. Modern compiler implementation)
- Raphael A. Finkel. Advanced Programming Language Design
- Michael Lee Scott. Programming Language Pragmatics
- Functions as dynamic values in dynamic programming languages (eval)
- C Sharp 2.0#Anonymous delegates vs. C Sharp 3.0#Lambda expressions
- Lexical and dynamic scoping
- Anything to say about recursion? (Anonymous recursion, returning nested recursive functions, tail recursion)
- Putting it together: function composition, a higher-order function taking two functions as argument and returns an (anonymous or nested) function.
- Pascal: fails because we cannot return functions
- Oberon: fails because we cannot return nested functions
- C: fails because the function we return needs to have access to the (non-local) paramaters
- Lisp: fails because of dynamic scoping
- C++0x: fails because closures do not extend lifetime/capture by copy
- Java: fails because anonymous inner classes cannot capture the non-final parameters
- Early languages: POP-2
- parameters/non-local variables/partial application
- First-class functions and object-oriented languages (scoping of
this
, fully-featured closures?)
- Discuss why C is sometimes said to have 1.5-class functions (e.g. in MLS, Prog. Lang. Prag.)
- Tidy the table (again...); add ref=note
- Figure out how Algol and Pascal compilers handle passing nested functions as arguments to higher-order function. They probably don't build a closure.
- Missing from language support table: BASIC, COBOL, PL/I, PL/M, Modula, Modula 2, Modula 3
- http://c2.com/cgi/wiki?FirstClass
- Other aspects of first-class entities: equality testing, pattern matching, deriving from Object, etc.
- Mention and link to closure conversion.