This is the long awaited second milestone release (after 0.2.0 -- CLS
consumer) with a new typing engine and a new parser.
About 300 svn commits has been made since the last release.
Additions:
- The most important addition in this release are implicit conversions
of several kinds.
- We now respect user-defined op_Implicit (like the ones for
Decimal type)
- Functional values are implicitly converted to delegates.
- when (...) 3; now gives a warning instead of error (about using
implicit object -> void conversion).
- Last but not least, conversions are provided for built-in numeric
types like int and long. They work much
like in C#.
This also works in a kinda special way for literals. There might be
some related bugs with constant folding though.
- From the cute new features departments -- it is now possible to use
pattern matching on properties, in addition to previous possibility
of matching on fields.
- Another nice addition are the P/Invoke methods.
- The interactive interpreter -- nemerlish -- has been included in the
default build and install.
- Indentation engine in the emacs mode has been improved.
- 'is' can be now used where 'matches' was. 'matches' shall be
considered obsolete by now. It will give a warning in the next
release.
There is one drawback with this change. If you have been using
a polymorphic variant (like x is Some) on the right hand side of
'matches' it won't work anymore. You either need to supply the type
argument (x is Some [int]), you can use wildcard type (x is Some
[_]), or make it a valid non-identifier pattern (x is Some (_),
x is None ()).
For the particular Some/None you can use freshly added
IsSome/IsNone properties.
Incompatible changes:
- The arithmetic operators on types smaller than int now return int.
This is the same behavior as in C (and C#).
- Various matching optimization flags have been removed (they now
print a warning). Boolean optimizations are now always enabled,
while the other were buggy. Patches are welcome.
- Progress bar is now disabled by default. You -bar+ switch to turn
it on (we found people very often disable it, and it confuses
emacs).
Library:
- List manipulation functions have been added to the list type itself.
Bugfixes:
- The MSI package now properly installs itself in the directory
specified, not always in "c:/Program Files/Nemerle/".
Fixed bugs from our bugtracker:
- #007: Static variable initalization in metadata
- #119: subtyping relation for numeric types
- #138: matching on properties
- #249: functions are not "boxed" to delegates
- #256: Should we implicitly convert from DateTime to SqlDateTime
- #284: a=b-1U; does not parse
- #316: Allow PInvoke methods
- #334: Custom operators are not looked up properly
- #343: Algorithm for binding base classes is broken
- #360: Inference engine loops compiler when parameter is used on itself as function
- #364: support ++/-- overloads
- #383: Assigning to variable with name of type
- #390: Problems with the $-notation
- #391: Explicit cast operator is not chosen when needed
- #393: Using nested foreach crashes compiler.
- #394: We do not check attribute targets
- #395: Another meaningless error message
- #396: ncc crashes during typing of foreach loop on N.C.Hashtable
- #397: ICE when fixing type of local function
- #398: return type is not checked in delayed overloads
- #399: comparing with == against null shall not be special
- #400: strange problem with delayed typings and overload resolution
- #402: cannot use _ in keywords
- #404: $ "$Name" doesn't work -- usesite problems
- #406: Something is broken with expected return types
- #407: Lambdas from embedded expressions crashes compiler
- #414: comparing ,,result'' of mutable definition to null causes ICE
- #418: Literal fields should be available in match patterns
- #420: Nested types are not visible in derived class
- #421: Add implicit conversion from 0 to any enum
- #424: merge the literals branch
- #431: Change 'matches' to 'is'
- #432: ice with foo(){| _ => {}}