[Mono-list] Nemerle 0.3.2 released

Michal Moskal michal.moskal at gmail.com
Wed Jun 1 08:22:34 EDT 2005

The new feature-full 0.3.2 version of Nemerle has just been released.

The usual blurb about what is Nemerle can be found at:

Download informations are available at:

The changelog is in the blog:
as well as at the end of this email.

Have fun!

0.3.2, Jun 1 2005
  This version brings a few new features and a bunch of bugfixes.
  About 350 svn commits was done since the last release.

  New features:
    * You can now omit prefixes of variants and enums in matching, for 
        variant Foo { | A | B }
	match (some_foo) {
	  | A => ...
	  | B => ...
	enum Bar { | A | B }
	match (some_bar) {
	  | A => ...
	  | B => ...
      The restriction is that the type of some_foo need to be
      statically known to be Foo. If type inference cannot guess it
      at this point, you will have to match over (some_foo : Foo) or
      specify Foo.A in the first branch. Same goes to Bar.
      This feature is similar to switches on enums in Java 5.0.

    * Default parameters:
        public DoFoo (s : string, flag1 : bool = true, 
				  flag2 : bool = false) : void
      For boolean, integer and string default value the type of parameter
      can be omitted:
        public DoFoo (s : string, flag1 = true, 
				  flag2 = false) : void
      Only other allowed default value is null:
        public DoFoo (x : SomeClass = null) : void

    * The warning that you should use "FooBar where (...)" instead of
      plain "(...)" is gone. We have found that it was a mistake.
    * Blocks, it is possible to construct a block you can jump out of
      with a value. For example:
	def has_negative =
	  res: {
	    foreach (x in collection)
	      when (x < 0) res (true);
      Please consult http://nemerle.org/Blocks for details.
    * Tuples can be now indexed with []. It is only supported with
      constant integer indexes. Indexing starts at 0, so "pair[1]"
      is "Pair.Second (pair)".
    * Nemerle.English namespace now contains "and", "or" and "not" logical
    * Macros can now define textual infix and prefix operators (just like
      "and" above).
    * Number literal can now contain _ for readability, for example 
        def x = 1_000_000;
    * Lazy value macros http://nemerle.org/Lazy_evaluation
    * Automatic get/set accessor generation http://nemerle.org/Accessor_macros
    * mutable can now define more than one variable:
        mutable (x, y) = (42, "kopytko");
        x++; y = "ble";
        mutable x = 3, y = "kopytko"; // the same
      The second version does not work inside "for (here;;)".
    * Arrays are no longer covariant. They haven't been in 0.2 days,
      and we have found it to be causing problems with type inference
      (see #442).
    * Tuples and lists are now serializable. Variants are deserialized
    * Code can be entered at the top level, without a class and the Main
      method. So the classic example becomes:
        System.Console.Write ("Hello marry world!\n");
      That is, it put alone in the file will just compile. You can define
      classes, issue using declarations before the actual code. You can also
      define local functions with def (which gives you type inference).
      Yeah, we know this is only useful in write-once-run-once-throw-away
      kind of programs and testing, but it is nice anyway :-)

    * The CExpr compiler stage has been removed, which means that a/ we are
      more likely to implement generics soon, b/ we generate better code
      overall. Especially matching has been benchmarked and improved.

    * Overload selection rules have been improved, especially in presence
      of var args, parametric types and named parameters.

    * #142: default parameters
    * #303: indexing operator on tuples
    * #351: Assigning to generic type's field does not yield its type's 
            argument specialization
    * #387: Exhaustiveness check of tuple patterns with variants is 
    * #401: cannot define macros on assembly
    * #408: Do not create delegate proxy for instance methods
    * #409: Omitting the prefix when matching variants
    * #410: overload selection rules
    * #419: Logic operands in plain English
    * #422: _ in number literals
    * #426: macros assigned to local identifiers
    * #428: macros for lazy values
    * #434: /*\n Hang emacs
    * #437: Define more than one variable in the for( ; ; ) construct 
            - extend mutable definition
    * #438: Destroy CExpr stage
    * #440: bogus error messages about meanings of the module
    * #442: code generated for arrays forgets inferred type and crashes
    * #443: Wrong computation order when assigning the return value of a 
            function to a field during field declaration
    * #444: assertion in Typer2 when ignoring value
    * #445: delayed typings does not work on lhs of =
    * #447: Closurising caught value causes invalid IL
    * #449: implementing interfaces vs object subtyping
    * #451: -r:Nemerle.Compiler.dll
    * #453: Tuples are not serializable
    * #454: the ::= operator
    * #455: no warning for uninitialized members of struct
    * #456: Trying to escape block label crashes compiler
    * #457: Optional macro syntax extension not working
    * #458: Nemish fails to load profile.
    * #459: windows ncc.exe Url error
    * #463: matching compiler should use gotos not switches
    * #464: serialization and singleton pattern for variant options
    * #465: Unable to infer common type when there is also common interface
    * #467: get rid of TExpr.TailCall
    * #469: DecisionBuilder crashes on counterexample building
    * #470: inference for default parameters
    * #471: type inference does not work for enforcements
    * #472: preprocessor directive handling broken
    * #473: _ shouldn't be allowed in global types

   Michal Moskal,

More information about the Mono-list mailing list