Johannes Müller 06 Dec 2016

Crystal 0.20.1 released!

Crystal 0.20.1 has been released!

As any release it includes numerous bugfixes, cool features and performance improvements - in 75 commits since 0.20.0.

Exciting Changes

  • p and pp now use pretty printing.
  • finished macro hook was added. It places it’s contents at the end of the program when all other types and methods are known.
class MyModel
  MAPPING = {
    id: Int32
  }

  macro extra_attributes(**values)
    {% for key, value in values %}
      {% MAPPING[key] = value %}
    {% end %}
  end

  macro finished
    JSON.mapping({{MAPPING}})
  end
end

class MyModel
  extra_attributes name: String, foo: Bool
end

# JSON mapping will have attribute id, name and foo.
  • Local variables can now have type restrictions.
  • method_missing hook can now define a method, this allows it to control whether it captures a block (see PR #3610)
class Foo
  def add(method, &block : -> U) forall U
    puts "added #{method} #{block}"
  end

  macro method_missing(call)
    def {{call.name}}(&block : -> U) forall U
      add({{call.name.stringify}}, &block)
    end
  end
end

Foo.new.foo { 1 } # => added foo #<Proc(Int32):0x1063173a0>
Foo.new.bar { 2 } # => added bar #<Proc(Int32):0x1063173b0>

Other Breaking Changes

  • (breaking change) Set#merge as renamed to Set#merge!
  • (breaking change) Slice.new(size) no longer works with non primitive integers and floats
  • (breaking change) The macro method argify was renamed to splat

Thanks to everyone who supported this release through contributions, reviews and suggestions.

Crystal 0.20.1 has been released!

As any release it includes numerous bugfixes, cool features and performance improvements - in 75 commits since 0.20.0.

Exciting Changes

  • p and pp now use pretty printing.
  • finished macro hook was added. It places it’s contents at the end of the program when all other types and methods are known.
class MyModel
  MAPPING = {
    id: Int32
  }

  macro extra_attributes(**values)
    {% for key, value in values %}
      {% MAPPING[key] = value %}
    {% end %}
  end

  macro finished
    JSON.mapping({{MAPPING}})
  end
end

class MyModel
  extra_attributes name: String, foo: Bool
end

# JSON mapping will have attribute id, name and foo.
  • Local variables can now have type restrictions.
  • method_missing hook can now define a method, this allows it to control whether it captures a block (see PR #3610)
class Foo
  def add(method, &block : -> U) forall U
    puts "added #{method} #{block}"
  end

  macro method_missing(call)
    def {{call.name}}(&block : -> U) forall U
      add({{call.name.stringify}}, &block)
    end
  end
end

Foo.new.foo { 1 } # => added foo #<Proc(Int32):0x1063173a0>
Foo.new.bar { 2 } # => added bar #<Proc(Int32):0x1063173b0>

Other Breaking Changes

  • (breaking change) Set#merge as renamed to Set#merge!
  • (breaking change) Slice.new(size) no longer works with non primitive integers and floats
  • (breaking change) The macro method argify was renamed to splat

Thanks to everyone who supported this release through contributions, reviews and suggestions.