Clean 2.4 is now available for Windows and Linux (32 and 64 bit) and Mac OS X (64 bit) at:
http://wiki.clean.cs.ru.nl/Download_Clean New in version 2.4: - A command line version for Mac OS X 64 bit Intel processors. Apple developer tool Xcode is required. - The license for the runtime system, libraries and examples has been changed to the Simplified BSD License (previously LGPL). - Language extensions: - Qualified imports. Identifiers can be imported qualified by adding 'qualified' after 'import' in the import statement. For example: import qualified StdList; from StdList import qualified drop,++; Identifiers imported in this way can be used by prefixing the identifier with the module name between single quotes and a dot. If an identifier consists of special characters (for example ++) an additional single space is required between the dot and the identifier. For example: f l = 'StdList'.drop 1 (l 'StdList'. ++ [2]); Currently field names of records are not imported by an implicit qualified import, but can be imported with an explicit qualified import. Qualified names may only be used if a qualified import is used, not if the identifier is only imported by a normal (unqualified) import. An identifier may be imported both unqualified and qualified. Qualified imports may be used in definition modules, but qualified identifiers cannot be imported from a (definition) module. - Updates of unique array elements (since Clean 2.3): A unique array element of a (unique) array of unique elements can be selected and updated, if the selection (using ![ ]) and update (with the same index) occur in the same function and the array is not used in between (only the selected element is used). For example, below a unique row is selected, updated by inc_a and finally the row of the array is updated. inc_row :: !*{#*{#Int}} !Int -> *{#*{#Int}}; inc_row a row_i # (row,a) = a![row_i]; row = inc_a 0 row; = {a & [row_i]=row}; inc_a :: !Int !*{#Int} -> *{#Int}; inc_a i a | i<size a # (n,a) = a![i]; a & [i]=n+1; = inc_a (i+1) a; = a; - Strictness annotations in types of class instance members Types of class instance members may contain additional strictness annotations. For example: class next a where next :: a -> a instance next Int where next :: !Int -> Int next x = x+1 If such an instance is exported, the type of the instance member must be include in the definition module: instance next Int where next :: !Int -> Int If no additional strictness annotations are specified, it can still be exported without the type by: instance next Int - The language report has been updated to Clean 2.2, but is still not up to date. A html version is included and the pdf version now has bookmarks. - Bug fixes (Clean IDE, 64 bit runtime system, time profiler and code generation, compiler). - generics are a bit more efficient (more efficient adapters and the GenericInfo info parameter is removed if it is not required). - If the dynamic linker is used, the object code is no longer stored in the .lib file, but each object file is stored separately, and can be shared to save disk space. The .tcl and .typ files are smaller. - The TCPIP library (without Object IO extensions) has been ported to Linux and Mac OS X. - The part ot the Dynamics library that can be used without the dynamic linker is included in all versions. To use dynamics with clm add the -dynamics flag. clm does not recompile modules if -dynamics is enabled, this may result in an undefined labels linker error. _______________________________________________ clean-list mailing list [email protected] http://mailman.science.ru.nl/mailman/listinfo/clean-list
