# Changelog [![crates.io][crate-badge]][crate] [![docs.rs][docs-badge]][docs] All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog] and this project adheres to [Semantic Versioning]. ## [Unreleased] ## [0.0.9] - 2019-05-29 ### Added - `Range` object type - Generic `Classify` implementation for `Array` and `Hash` - `Symbol::{all|global_vars}` - `Object::get_attr` - `vm::backtrace` - `Array::subseq` - Ability to index with `Array::get` using a `Range` - `Integer` methods: - `to_f64` - `is_zero` - `to_s_radix` - `EvalArgs::eval_in_object` and `Object::eval` ### Changed - `Object::call`, `eval`s, `vm::load`, `vm::require` to be `unsafe` due to ability to break assumptions made by types such as `Array`, where `push` is called on a value of type `B` - Functions to be `const`: - `AnyObject::is_{nil|undefined|true|false}` - `Integer::is_{big|fix}num` - `Integer::{{max|min}_fixnum|from_fixnum_wrapping|zero}` - `Exception::raise` return type to `!` - `Mixin::attr` and friends to `Mixin::def_attr` - `Array::{contains|remove_all}` to take an arg that implements `Into` - `Array::remove_all` to return `Option` - `fixnum_value` in `Integer` to `to_fixnum` - Fixnum type for `Integer` from `i64` to `isize` - `EvalArgs::eval_in` to `eval_in_mixin` ### Fixed - `Integer::to_fixnum` value for negative numbers ## [0.0.8] - 2019-05-23 ### Added - `Array`-based `PartialEq<[A]>` and `PartialEq>` implementations on `AnyObject` - `vm::DestroyError` type with the same [`NonZeroI32`] memory optimization as `vm::InitError` - Ability to specify a Ruby version via `ROSY_RUBY=client:version`; e.g. `ROSY_RUBY=rvm:2.6.0` ### Changed - Internal representation of `vm::InitError` to use [`NonZeroI32`] ### Removed - Falling back to `RUBY` environment variable if `ROSY_RUBY` is not set - `String`-based `PartialEq<[u8]>` and `PartialEq>` implementations on `AnyObject` ## [0.0.7] - 2019-05-22 ### Added - `duplicate` methods to `Array` and `Hash` - More `PartialEq` and `PartialOrd` implementations to `Float` and `Integer` - `meta` module with Ruby's metadata - `From<()>` implementation for `AnyObject` - Allows for not returning anything in `def_method[_unchecked]!` - `InstrSeq::eval_unchecked` - `vm::[set_]safe_level` for managing Ruby's level of paranoia - `vm::require` and friends that allow for importing files - `vm::load[_unchecked]` that allows for simply executing files ### Changed - Where `Float` and `Integer` are located; both now reside in a `num` module - Also moved types related to `Integer::[un_]pack` into `num::pack`. - `Ty` into a `struct` with associated constants instead of an `enum` - This prevents the possibility of having an instance of `Ty` from Ruby that isn't a valid `enum` variant ### Fixed - `vm::eval` error checking ## [0.0.6] - 2019-05-21 ### Added - Explicit typing to `Class` - `Object::class` and `Object::singleton_class` now return `Class` - `Classify` trait for getting a typed `Class` instance for `Self` - Defining methods on a typed class takes the class's wrapped type as a receiver - `MethodFn` now looks similar type-wise to [`FnOnce`] in that it now has an associated `Output` type and has `Receiver` instead of `Args` - Ability to specify the receiver type in `def_method[_unchecked]!` - `Float` object type - Supports arithmetic operations - Functions for evaluating Ruby scripts to the `vm` module ## [0.0.5] - 2019-05-20 ### Added - Variants of `Class::new_instance` that are `unsafe` or take arguments - `PartialEq<[A]>` implementation for `Array` where `O: PartialEq` - `Partial{Eq|Cmp}` implementation over integers for `AnyObject` - `def_method[_unchecked]!` macros for convenience over `Class::def_method[_unchecked]` ### Fixed - Safety of `Class::new_instance` - Indexing into a heap-allocated `Array` ### Removed - `PartialEq + PartialOrd` from `Word` ## [0.0.4] - 2019-05-19 ### Added - `Integer` object type - Features `From` conversions for every native Rust integer type, including `u128` and `i128` - Supports logical bitwise operations - Methods: - `pack` and `unpack` for converting to and from words respectively - `to_truncated` for converting similarly to `as` with primitives - `to_value` for converting similarly to `TryFrom` on primitives - Has `can_represent` helper method - [`Debug`] requirement for `Object` trait ## [0.0.3] - 2019-05-18 ### Added - Typed keys and values for `Hash` - Fast encoding-checking methods to `String` that give `String::to_str` a ~7.5x performance improvement when the internal Ruby encoding is UTF-8 - `encoding_is_ascii_8bit` - `encoding_is_utf8` - `encoding_is_us_ascii` - Made some methods on `Encoding` a bit faster: - `is_ascii_8bit` - `is_utf8` - `is_us_ascii` - Unsafe `protected_no_panic` variant for when the argument is guaranteed by the caller to not panic ### Fixed - `Array::cast` would pass for any objects for `Array` - `protected` is now panic-safe via [`std::panic::catch_unwind`] ### Removed - Fallback call to `is_ascii_whitespace` in `is_whitespace` on `String` ## [0.0.2] - 2019-05-17 ### Added - `_skip_linking` feature flag to hopefully get https://docs.rs/rosy up ## 0.0.1 - 2019-05-17 Initial release [crate]: https://crates.io/crates/rosy [crate-badge]: https://img.shields.io/crates/v/rosy.svg [docs]: https://docs.rs/rosy [docs-badge]: https://docs.rs/rosy/badge.svg [Keep a Changelog]: http://keepachangelog.com/en/1.0.0/ [Semantic Versioning]: http://semver.org/spec/v2.0.0.html [Unreleased]: https://github.com/oceanpkg/rosy/compare/v0.0.9...HEAD [0.0.9]: https://github.com/oceanpkg/rosy/compare/v0.0.8...v0.0.9 [0.0.8]: https://github.com/oceanpkg/rosy/compare/v0.0.7...v0.0.8 [0.0.7]: https://github.com/oceanpkg/rosy/compare/v0.0.6...v0.0.7 [0.0.6]: https://github.com/oceanpkg/rosy/compare/v0.0.5...v0.0.6 [0.0.5]: https://github.com/oceanpkg/rosy/compare/v0.0.4...v0.0.5 [0.0.4]: https://github.com/oceanpkg/rosy/compare/v0.0.3...v0.0.4 [0.0.3]: https://github.com/oceanpkg/rosy/compare/v0.0.2...v0.0.3 [0.0.2]: https://github.com/oceanpkg/rosy/compare/v0.0.1...v0.0.2 [`Debug`]: https://doc.rust-lang.org/std/fmt/trait.Debug.html [`FnOnce`]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html [`std::panic::catch_unwind`]: https://doc.rust-lang.org/std/panic/fn.catch_unwind.html [`NonZeroI32`]: https://doc.rust-lang.org/std/num/struct.NonZeroI32.html