Difference between revisions of "Language features"

From Clean
Jump to navigationJump to search
 
(One intermediate revision by the same user not shown)
Line 5: Line 5:
 
* Clean is a lazy, pure, and higher-order functional programming language with explicit graph-rewriting semantics.  
 
* Clean is a lazy, pure, and higher-order functional programming language with explicit graph-rewriting semantics.  
  
* Although Clean is by default a lazy language, one can smoothly turn it into
+
* Although Clean is by default a lazy language, one can smoothly turn it into a strict language to obtain optimal time/space behavior: functions can be defined lazy as well as (partially) strict in their arguments; any (recursive) data structure can be defined lazy as well as (partially) strict in any of its arguments.
a strict language to obtain optimal time/space behavior: functions can be  
 
defined lazy as well as (partially) strict in their arguments; any (recursive)  
 
data structure can be defined lazy as well as (partially) strict in any of its  
 
arguments.
 
  
* Clean is a strongly typed language based on an extension of the well-known  
+
* Clean is a strongly typed language based on an extension of the well-known Milner/Hindley/Mycroft type inferencing/checking scheme including the common higher-order types, polymorphic types, abstract types, algebraic types, type synonyms, and existentially quantified types.
Milner/Hindley/Mycroft type inferencing/checking scheme including the common  
 
higher-order types, polymorphic types, abstract types, algebraic types, type  
 
synonyms, and existentially quantified types.
 
  
* Clean has pattern matching, guards, list comprehensions, array  
+
* Clean has pattern matching, guards, list comprehensions, array comprehensions and a lay-out sensitive mode.
comprehensions and a lay-out sensitive mode.
 
  
* Clean supports type classes and type constructor classes to make overloaded  
+
* Clean supports type classes and type constructor classes to make overloaded use of functions and operators possible.
use of functions and operators possible.
 
  
* The uniqueness typing system of Clean makes it possible to develop efficient
+
* The uniqueness typing system of Clean makes it possible to develop efficient applications. In particular, it allows a refined control over the single-threaded use of objects which can influence the time and space behavior of programs. Uniqueness typing can also be used to incorporate destructive updates of objects within a pure functional framework. It allows destructive transformation of state information and enables efficient interfacing to the nonfunctional world (to C but also to I/O systems like X-Windows) offering direct access to file systems and operating systems.
applications. In particular, it allows a refined control over the single-threaded  
 
use of objects which can influence the time and space behavior of
 
programs. Uniqueness typing can also be used to incorporate destructive
 
updates of objects within a pure functional framework. It allows destructive  
 
transformation of state information and enables efficient interfacing to the  
 
nonfunctional world (to C but also to I/O systems like X-Windows) offering  
 
direct access to file systems and operating systems.
 
  
 
* Clean offers records and (destructively updateable) arrays and files.
 
* Clean offers records and (destructively updateable) arrays and files.
  
* The Clean type system supports dynamic types, allowing values of arbitrary  
+
* The Clean type system supports dynamic types, allowing values of arbitrary types to be wrapped in a uniform package and unwrapped via a type annotation at run time. Using dynamics, code and data can be exchanged between Clean applications in a flexible and type-safe way.
types to be wrapped in a uniform package and unwrapped via a type annotation at  
 
run time. Using dynamics, code and data can be exchanged between Clean applications  
 
in a flexible and type-safe way.
 
  
 
* Clean provides a built-in mechanism for generic functions.
 
* Clean provides a built-in mechanism for generic functions.
  
 
* There is a Clean IDE and there are many [[libraries]] available offering additional functionality.
 
* There is a Clean IDE and there are many [[libraries]] available offering additional functionality.

Latest revision as of 13:22, 27 July 2010

Clean is a general purpose, state-of-the-art, pure and lazy functional programming language designed for making real-world applications. Here is a list of the most notable language features:

  • Clean is a lazy, pure, and higher-order functional programming language with explicit graph-rewriting semantics.
  • Although Clean is by default a lazy language, one can smoothly turn it into a strict language to obtain optimal time/space behavior: functions can be defined lazy as well as (partially) strict in their arguments; any (recursive) data structure can be defined lazy as well as (partially) strict in any of its arguments.
  • Clean is a strongly typed language based on an extension of the well-known Milner/Hindley/Mycroft type inferencing/checking scheme including the common higher-order types, polymorphic types, abstract types, algebraic types, type synonyms, and existentially quantified types.
  • Clean has pattern matching, guards, list comprehensions, array comprehensions and a lay-out sensitive mode.
  • Clean supports type classes and type constructor classes to make overloaded use of functions and operators possible.
  • The uniqueness typing system of Clean makes it possible to develop efficient applications. In particular, it allows a refined control over the single-threaded use of objects which can influence the time and space behavior of programs. Uniqueness typing can also be used to incorporate destructive updates of objects within a pure functional framework. It allows destructive transformation of state information and enables efficient interfacing to the nonfunctional world (to C but also to I/O systems like X-Windows) offering direct access to file systems and operating systems.
  • Clean offers records and (destructively updateable) arrays and files.
  • The Clean type system supports dynamic types, allowing values of arbitrary types to be wrapped in a uniform package and unwrapped via a type annotation at run time. Using dynamics, code and data can be exchanged between Clean applications in a flexible and type-safe way.
  • Clean provides a built-in mechanism for generic functions.
  • There is a Clean IDE and there are many libraries available offering additional functionality.