Difference between revisions of "Discus"

From HaskellWiki
Jump to navigation Jump to search
m (Benl23 moved page DDC to Discus: Project rename.)
 
(24 intermediate revisions by the same user not shown)
Line 1: Line 1:
  +
The Discus language is an experimental dialect of Haskell which investigates static typing and program transformation in the presence of computational effects. Discus includes region and effect typing, and this extra information provides a handle on the operational behaviour of code that isn't available in other languages.
[[Image:Ddc-alpha1-logo.png|DDC|center]]
 
   
  +
Programs can be written in either a pure/functional or effecful/imperative style, and one of our goals is to provide both styles coherently in the same language. The two styles can be mixed safely, for example: when using laziness the type system guarantees that computations with visible side effects are not suspended. Many Haskell programs are also Discus programs, or will run with minor changes.
Disciple is an explicitly lazy dialect of [http://www.haskell.org Haskell] which supports destructive update, computational effects, type directed field projections and some other useful things.
 
   
== Disciple vs Haskell ==
+
== More Information ==
  +
* Please see http://discus-lang.org for further information.
* Strict [[DDC/EvaluationOrder|EvaluationOrder]] is the default, laziness is introduced explicitly.
 
* Type directed [[DDC/FieldProjections|FieldProjections]] complement type classing.
 
* All data objects support [[DDC/DestructiveUpdate|DestructiveUpdate]].
 
* The [[DDC/EffectSystem|EffectSystem]] tracks what computational effects are being used in a program, without the need for state monads.
 
* The [[DDC/ClassSystem|ClassSystem]] ensures that effects and destructive update play nicely with laziness.
 
* [[DDC/ClosureTyping|ClosureTyping]] is used to track data sharing, and to preserve soundness in the presence of [[DDC/PolymorphicUpdate|PolymorphicUpdate]].
 
* Some [[DDC/FurtherReading|FurtherReading]].
 
 
Some example [http://cs.anu.edu.au/people/Ben.Lippmeier/project/disciple/src/NBody-Main.ds code] showing most of the extensions, and its [http://cs.anu.edu.au/people/Ben.Lippmeier/project/disciple/nbody.png output],
 
[http://cs.anu.edu.au/people/Ben.Lippmeier/project/disciple/src/NBody.dump-core-reconstruct.dc core] and [http://cs.anu.edu.au/people/Ben.Lippmeier/project/disciple/src/NBody.ddc.c C-code]
 
 
== The Disciplined Disciple Compiler ==
 
* Uses a typed core language which includes effect, closure, region and mutability information.
 
* This extended type information is used to allow code-transformation style optimizations in the presence of side effects and mutable objects.
 
* Compiles via standard C99, so is highly portable.
 
* Compiles cleanly on linux-x86 and darwin-x86 (tested on Mac OS X 10.5.2)
 
* Is in a usable alpha state.
 
 
== Get the Source ==
 
Get the latest stable release with [http://darcs.net darcs]:
 
darcs get http://code.haskell.org/ddc/ddc-alpha1
 
 
For thrill-seekers, the development branch (which usually builds ok) is:
 
darcs get http://code.haskell.org/ddc/ddc-head
 
 
Alternatively, download the source tar-ball from Google code
 
[http://code.google.com/p/disciple/downloads http://code.google.com/p/disciple/downloads]
 
 
Check the [[DDC/ReleaseNotes-Alpha1|ReleaseNotes]] and [http://code.haskell.org/ddc/ddc-head/INSTALL INSTALL] and [http://code.haskell.org/ddc/ddc-head/doc/HACKING HACKING] instructions.
 
 
== Contact the Maintainers ==
 
* If you've tripped over a bug then please add it to the [http://code.google.com/p/disciple/issues Issues List].
 
* You can also post in http://groups.google.com/group/disciple-cafe
 
* Or send mail to Ben.Lippmeier (wibble) anu.edu.au
 

Latest revision as of 00:48, 24 February 2018

The Discus language is an experimental dialect of Haskell which investigates static typing and program transformation in the presence of computational effects. Discus includes region and effect typing, and this extra information provides a handle on the operational behaviour of code that isn't available in other languages.

Programs can be written in either a pure/functional or effecful/imperative style, and one of our goals is to provide both styles coherently in the same language. The two styles can be mixed safely, for example: when using laziness the type system guarantees that computations with visible side effects are not suspended. Many Haskell programs are also Discus programs, or will run with minor changes.

More Information