All Versions
Latest Version
Avg Release Cycle
46 days
Latest Release
481 days ago

Changelog History
Page 8

  • v0.14.2 Changes

    March 22, 2016
  • v0.14.1 Changes

    March 21, 2016
    • ๐Ÿ›  Fixed some regressions in the formatter
  • v0.14.0 Changes

    March 21, 2016
    • (breaking change) The syntax of a method argument with a default value and a type restriction is now def foo(arg : Type = default_value). The old def foo(arg = default_value : Type) was removed.
    • (breaking change) Enumerable#take(n) and Iterator#take(n) were renamed to first(n)
    • (breaking change) Socket#addr and Socket#peeraddr were renamed to local_address and remote_address respectively
    • (breaking change) Removed Comparable#between?(a, z). Use a <= x <= z instead
    • (breaking change) HTTP::WebSocketHandler callbacks can now access the HTTP::Context. If you had a forwarding method to it you'll need to update it. See #2313.
    • ๐Ÿ†• New command crystal play that opens a playground for you to play in the browser :-) (thanks @bcardiff)
    • ๐Ÿ†• New command crystal env that prints environment information
    • Spec: you can now run multiple files with specified line numbers, as in crystal spec ...
    • ๐ŸŽ‰ Initial support for musl-libc (thanks @ysbaddaden)
    • โž• Added FileUtils.cp (thanks @Dreauw)
    • โž• Added Array#first(n) and Array#last(n) (thanks @greyblake)
    • โž• Added WebSocket#close and properly handle disconnections
    • โž• Added UDPSocket#send and UDPSocket#receive (thanks @tatey)
    • โž• Added Char#uppercase? and Char#lowercase? (thanks @MaloJaffre`)
    • โž• Added sync_close property to OpenSSL::SSL::Socket, Zlib::Inflate and Zlib::Deflate
    • โž• Added XML::Node#encoding and XML::Node#version
    • โž• Added HTTP::Client::Response#success? (thanks @marceloboeira)
    • โž• Added StaticArray#shuffle!(random) (thanks @Nesqwik)
    • โž• Added Splat#exp method in macros
    • โž• Added fiber-safe Mutex
    • All Int types (except BigInt) can now be used in JSON and YAML mappings (thanks @marceloboeira)
    • Instance variable declarations/initializations now correctly work in generic classes and modules
    • ๐Ÿ›  Lots of bug fixes
  • v0.13.0 Changes

    March 07, 2016
    • (breaking change) Matrix was moved to a separate shard:
    • โฌ†๏ธ The syntax of a method argument with a default value and a type restriction is now def foo(arg : Type = default_value). Run crystal tool format to automatically upgrade existing code to this new syntax. The old def foo(arg = default_value : Type) syntax will be removed in a next release.
    • ๐Ÿ‘€ Special handling of case with a tuple literal. See #2258.
    • Keywords can now be used for variable declaration, so property end : Time works as expected.
    • Comparison of signed vs. unsigned integers now always give a correct result
    • ๐Ÿ‘ Allow declaring instance variables in non-generic module types (module Moo; @x : Int32; end)
    • ๐Ÿ‘ Allow initializing instance variables in non-generic module types (module Moo; @x = 1; end)
    • Spec: allow setting multiple output formatters (thanks @marceloboeira)
    • ๐ŸŽ StringScanner: improved performance
    • โž• Added foo.[0] = 1 and foo.[0] as valid syntax, similar to the one in &. blocks (thanks @MakeNowJust)
    • CSV: allow separate and quote characters different than comma and doble quote (thanks @jreinert)
    • ๐Ÿ”€ YAML: support merge operator (<<) (thanks @jreinert)
    • ๐Ÿ‘ Allow redefining primitive methods like Int32#+(other : Int32)
    • ๐Ÿ‘ Allow defining macros with operator names like []
    • ๐ŸŽ Levenshtein: improved performance (thanks @tcrouch)
    • ๐Ÿ“œ HTTP::Client: fixed incorrect parsing of chunked body
    • HTTP::Client: added a constructor with an URI argument (thanks @plukevdh)
    • String: sub and gsub now understand backreferences (thanks @bjmllr)
    • Random: added Random#rand(Float64) and Random#rand(Range(Float, Float)) (thanks @AlexWayfer)
    • HTML: HTLM.escape includes more characters (thanks @Ryuuzakis)
    • โž• Added TypeNode.class method in macros (thanks @waterlink)
    • run inside macros now also work with absolute paths (useful when used with __DIR__)
    • โž• Added docs for Math and StaticArray (thanks @Zavydiel, @HeleneMyr)
    • ๐Ÿ›  Many bug fixes and some micro-optimizations
  • v0.12.0 Changes

    February 16, 2016
    • (breaking change) When used with a type declaration, the macros property, getter, setter, etc., declare instance variables with those types.
    • (breaking change) JSON.mapping and YAML.mapping declare instance variables with the given types.
    • (breaking change) YAML.load was renamed to YAML.parse, and it now returns a YAML::Any.
    • (breaking change) embed_ecr and ecr_file were renamed to ECR.embed and ECR.def_to_s (the old methods now produce a warning and will be removed in the next release).
    • โž• Added encoding support: IO#set_encoding, String#encode, and HTTP::Client charset check.
    • Segmentation faults are now trapped and shown in a more friendlier way.
    • The record macro can now accept type declarations (for example record Point, x : Int32, y : Int32)
    • โž• Added Iterator#step (thanks @jhass)
    • Array#push and Array#unshift can now accept multiple values and add the elements in an efficient way (thanks @arktisklada)
    • โž• Added default option to JSON.mapping (thanks @kostya)
    • โž• Added default option to YAML.mapping (thanks @jreinert)
    • ๐Ÿ‘ Allow doing case foo; when Foo.class (and Foo(T) and Foo(T).class) in case expressions.
    • โž• Added Class#| so a union type can be expresses as Int32 | Char in regular code.
    • โž• Added File.real_path (thanks @jreinert)
    • โž• Added dns_timeout for HTTP::Client (thanks @kostya)
    • โž• Added dynamic width precision to sprintf (thanks @gtramontina)
    • ๐Ÿ‘ Markdown now supports blockquotes and 1 level of list nesting (thanks @SebastianSzturo)
    • p now accepts multiple arguments
    • ๐Ÿ›  Many bug fixes and some optimizations
  • v0.11.1 Changes

    January 25, 2016
    • ๐Ÿ›  Fixed #2050, #2054, #2057, #2059, #2064
    • ๐Ÿ›  Fixed bug: HTTP::Server::Response headers weren't cleared after each request
    • Formatter would incorrectly change property x :: Int32 to property x = uninitialized Int32
  • v0.11.0 Changes

    January 23, 2016
    • (breaking change) Syntax for type declarations changed from var :: Type to var : Type. The old syntax is still allowed but will be deprecated in the next version (run crystal tool format to automatically fix this)
    • (breaking change) Syntax for uninitialized variables, which used to be var :: Type, is now var = uninitialized Type. The old syntax is still allowed but will be deprecated in the next version (run crystal tool format to automatically fix this)
    • (breaking change) HTTP::Server refactor to support streaming. Check the docs of HTTP::Server for upgrade instructions
    • (breaking change) Renamed HTTP::WebSocketSession to HTTP::WebSocket.
    • (breaking change) Heredocs now remove indentations according to the indentation of the closing identifier (thanks @rhysd)
    • (breaking change) Renamed Enumerable#inject to Enumerable#reduce
    • (breaking change) next and return semantic inside captured block has been swapped (#420)
    • Fibers context switch is now faster, done with inline assembly. libpcl is no longer used
    • ๐Ÿ‘ Allow annotating the type of class and global variables
    • ๐Ÿ‘Œ Support comments in ECR (thanks @ysbaddaden)
    • ๐Ÿ”’ Security improvements to HTTP::StaticFileHandler (thanks @MakeNowJust)
    • ๐Ÿ‘€ Moved seek, tell, pos and pos= from File to IO::FileDescriptor (affects Tempfile)
    • ๐Ÿ“œ URI.parse is now faster (thanks @will)
    • ๐Ÿ›  Many bug fixes, some really old ones involving issues with order of declaration
  • v0.10.2 Changes

    January 13, 2016
    • ๐Ÿ›  Fixed Directory Traversal Vulnerability in HTTP::StaticFileHandler (thanks @MakeNowJust)
  • v0.10.1 Changes

    January 08, 2016
    • โž• Added Int#popcount (thanks @rmosolgo)
    • โž• Added @[Naked] attribute for omitting a method's prelude
    • Check that abstract methods are implemented by subtypes
    • ๐Ÿ›  Some bug fixes
  • v0.10.0 Changes

    December 23, 2015
    • (breaking change) def arguments must always be enclosed in parentheses
    • (breaking change) A space is now required before and after def return type restriction
    • (breaking change) Renamed Dir.working_dir to Dir.current
    • (breaking change) Moved HTML::Builder to its own shard
    • (breaking change) String#split now always keeps all results (never drops trailing empty strings)
    • (breaking change) Removed Array#buffer, StaticArray#buffer and Slice#buffer. Use to_unsafe instead (so unsafe usages are easier to spot)
    • (breaking change) Removed String#cstr. Use to_unsafe instead (so unsafe usages are easier to spot)
    • โšก๏ธ Optimized Range#sum (thanks @MakeNowJust)
    • ๐Ÿ‘ Allow forward declarations for lib external vars
    • โž• Added Int#to_s(base) for base = 62 (thanks @jhass)
    • ๐Ÿ“œ JSON.parse now returns JSON::Any, which allows traversal of JSON objects with less casts
    • โž• Added OpenSSL::PKCS5 (thanks @benoist)
    • MemoryIO can now be created to read/write from a Slice(UInt8). In this mode MemoryIO can't be exapnded, and can optionally be written. And when creating a MemoryIO from a String, it's non-resizeable and read-only.
    • โž• Added Object#!~ (the opposite of =~)
    • at_exit now receives that exit status code in the block (thanks @MakeNowJust)
    • ๐Ÿ‘ Allow using Set in JSON mappings (thanks @benoist)
    • โž• Added File.executable?, File.readable? and File.writeable? (thanks @mverzilli)
    • Array#sort_by and Array#sort_by! now use a Schwartzian transform (thanks @radarek)
    • Added Array#each_permutation, Array#each_combination and Array#each_repeated_combination iterators
    • Added optional random argument to Array#sample and Array#shuffle
    • The delegate macro can now delegate multiple methods to an object (thanks @elthariel)
    • โž• Added basic YAML generation (thanks @porras)