Clean 3.1 is now available for Windows (64 and 32 bit), Linux
(64 and 32 bit Intel/AMD64 and ARM64) and Mac OS X (64 bit Intel) at:

https://wiki.clean.cs.ru.nl/Download_Clean


New in version 3.1:

- added Platform library

- added itask branch Clean compiler with some added features for iTasks

- ARM64 Linux version

- added command line build tool cpm.exe on Windows


Language additions:

- strict, lazy, unboxed and overloaded maybe types:
  ? a, ?^ a, ?# a | UMaybe a and m a | Maybe m a
  with constructors:
  ?Just, ?^Just, ?#Just, ?|Just and ?None, ?^None, ?#None, ?|None.
  For example:

  m_strict_boxed :: (? x) -> ? x
  m_strict_boxed (?Just x) = ?Just x
  m_strict_boxed ?None = ?None

  m_lazy :: (?^ x) -> ?^ x
  m_lazy (?^Just x) = ?^Just x
  m_lazy ?^None = ?^None

  m_strict_unboxed :: (?# x) -> ?# x | UMaybe x
  m_strict_unboxed (?#Just x) = ?#Just x
  m_strict_unboxed ?#None = ?#None

  m_overloaded :: (ma x) -> mr x | Maybe ma x & Maybe mr x
  m_overloaded (?|Just x) = ?|Just x
  m_overloaded ?|None = ?|None

- 32 bit unboxed signed integer and real arrays:
    f :: ( *{32#Int}, *{32#Real} )
    f = ( {32# 1} , {32# 3.5} )

- lazy array value expression: {^array_elements}

- head strict list generator: [e \\ e <!- list]

- generic derive for unboxed list and maybe, for example:

  derive gEq [#!]

- omit some generic classes when deriving generic superclasses
  from a class, for example:

    derive class G \ gEq,gPrint T

    class G a | gEq{|*|} a & gPrint{|*|} a & gDefault {|*|} a

  derives gDefault for T, but not gEq and gPrint

- derive a member of an instance using a generic function with
  the same type, for example

  instance == T where
    derive == gEq

  derives an == member of type T using generic function gEq.

  If there is only one member, this can also be written as:

  instance == T derive gEq

  The default member of a class can also be derived, for example:

  class equal a where
    equal :: a a -> Bool
    derive equal gEq

  instance equal T

- improved detection of overlapping instances.
  These are rejected except for default instances.

- add abc code for primitive functions to definition modules, instead of
  searching abc files of system modules, for example:

    instance + Int :: !Int !Int -> Int :== code { addI }


Optimisations:

- more efficient overloaded calls of members of instances (that have not
  been specialized). The calling convention is now determined by the
  type and strictness annotations in the class definition.
  Strict arguments are evaluated before the call and arguments and
  result may be passed unboxed.

- for generic derive: a program transformation reduces the number of
  allocated partial applications, FIELD and OBJECT nodes are not
  allocated any more and in more cases specialized code is used
  instead of bimap, bimap was changed and can be optimised better
  by generic fusion.

- optimised code for some dynamics with a simple type.

- fewer compare instructions are generated for some pattern matches.


Changes to StdEnv:

- added module _SystemStrictMaybes and modified module StdMaybe

- added to module StdReal: Infinity,NaN,isNaN,isInfinity,isFinite

- moved modules StdDynamic and _SystemDynamic from StdDynamicEnv
  to the StdEnv

- changed generic bimap in module StdGeneric

_______________________________________________
clean-list mailing list
clean-list@science.ru.nl
https://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to