Language features: Difference between revisions
From Clean
Jump to navigationJump to search
No edit summary |
m moved Language Features to Language features |
||
| (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 12: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.