Difference between revisions of "Language features"
From Clean
Jump to navigationJump to searchLine 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. |
Revision as of 15:57, 6 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.