CLU (programming language)

From Wikipedia, the free encyclopedia

Jump to: navigation, search
CLU
Paradigm multi-paradigm: object-oriented, procedural
Appeared in 1974
Designed by Barbara Liskov and her students at MIT
Developer Barbara Liskov and her students at MIT
Typing discipline strong
Major implementations Portable CLU, Native CLU, clu2c
Influenced by Pascal
Influenced Ruby

CLU is a programming language created at MIT by Barbara Liskov and her students between 1974 and 1975. It was notable for its use of constructors for abstract data types that included the code that operated on them, a key step in the direction of object-oriented programming (OOP). However many of the other features of OOP are missing or incomplete, notably inheritance, and the language is also hindered by a sometimes frustrating syntax. CLU and Alphard both seem to get as close as possible to being a full OO language without actually being one.

Contents

The syntax of CLU was based on ALGOL, then the starting point for most new language design. The key addition was the concept of a cluster, CLU's type extension system and the root of the language's name (CLUster). Clusters correspond generally to the concept of an "object" in an OO language, and have roughly the same syntax. For instance, here is the CLU syntax for a cluster that implements complex numbers:

   complex_number = cluster is add, subtract, multiply, ...
       rep = record [ real_part: real, imag_part: real ]
       add = proc ... end add;
       subtract = proc ... end subtract;
       multiply = proc ... end multiply;
       ...
   end complex_number;

While clusters offered a then-advanced system for structuring programs, CLU did not offer any sort of structure for the clusters themselves. Cluster names are global, and no namespace mechanism was provided to group clusters or allow them to be created "locally" inside other clusters. This problem is not unique to CLU, but it is surprising that so many languages have lacked this feature — given the centralness in ALGOL of giving scope to variables, it seems that giving scope to cluster/object names would be an obvious extension.

CLU does not perform implicit type conversions. In a cluster, the explicit type conversions 'up' and 'down' change between the abstract type and the representation. There is a universal type 'any', and a procedure force[] to check that an object is a certain type. Objects may be mutable or immutable, the latter being "base types" such as integers.

Another key feature of the CLU type system are iterators, which return objects from a collection one after the other. Iterators were "black boxes" that offered an identical API no matter what data they were being used with. Thus the iterator for a collection of complex_numbers would be identical to that for an array of integers. Iterators are now a common feature of most modern languages. (See Generator)

CLU also includes exception handling, based on various attempts in other languages; exceptions are raised using signal and handled with except. Oddly, given the focus on type design, CLU does not offer enumerated types, nor any obvious way to create them.

A final distinctive feature in CLU is multiple assignment, where more than one variable can appear on the left hand side of an assignment operator. For instance, writing x,y = y,x would exchange values of x and y. In the same way, functions could return several values, like x,y,z = f(t).

All objects in a CLU program live in the heap, and memory management is automatic.

  • Clu was the name of Kevin Flynn's program avatar in the 1982 cult classic film Tron.

  • Python and Ruby borrowed several concepts from CLU (such as the yield statement and multiple assignment).
  • CLU and Ada were major inspirations for C++ templates.
  • CLU's exception handling mechanisms also influenced newer languages like Java and C++.
  • All objects in a CLU program live in the heap, and memory management is automatic. These elements directly influenced Java.
  • Python and C# include generators (iterators in C#), which first appeared in CLU as iterators.
  • Lua took multiple assignment and multiple returns from function calls from CLU.

Advanced Search
Included Web Search Engines


Safe Search

close

Top Matching Results

Occasionally Search.com will highlight specialized results that are based on the context of your query. Examples of specialized results include specific links to news, images, or video.

Top Matching Results may highlight information from other Search.com pages, content from the CNET Network of sites, or third party content. The listings are based purely on relevance. Search.com does not receive payment for listings in this section but our partners that provide this data may get paid for listing these products.

Sponsored Links

This section contains paid listings which have been purchased by companies that want to have their sites appear for specific search terms and related content. These listings are administered, sorted and maintained by a third party and are not endorsed by Search.com.

Search Results

Search.com sends your search query to several search engines at one time and integrates the results into one list which has been sorted by relevance using Search.com's proprietary algorithm. You can customize the list of search engines included in your metasearch from the preferences.

The search engines that are used in your metasearch may allow companies to pay to have their Web sites included within the results. To view the Paid Inclusion policy for a specific search engine, please visit their Web site. Search.com does not accept payment or share revenue with any search engine partner for listings in this section.