0.4.3 - 2022-12-07
gc::mark_slice
was skipping the last element of the slice.
0.4.2 - 2022-11-30
- Removed errant
dbg!()
.
0.4.1 - 2022-11-29
scan_args::get_kwargs
error/segfault when leading optional args were not provided, due to trying to convert the type of the missing value.
0.4.0 - 2022-11-19
Value::funcall_with_block
.- impl
TryConvert
forException
andExceptionClass
. Class
trait (implemented forRClass
andExceptionClass
).define_error
andModule::define_error
helpers for defining an Exception Class.RTypedData::wrap
andRTypedData::get
inherent methods for wrapping Rust types in Ruby objects.- Support for Ruby 3.2 preview.
- Support for mswin platform (msvc) on Windows with Ruby 3.2 (in addition to the mingw support previously available for all Ruby versions on Windows).
- Switched to rb-sys for low level bindings.
- Rust types wrapped in Ruby objects must be
Send
. - Only function pointers (fn or non-capturing closure) are accepted as argument
for
Value::block_call
. UseProc::from_fn
+Value::funcall_with_block
for closures that capture variables. Proc::new
only accepts a function pointer, useProc::from_fn
for closures that capture variables.ExceptionClass::default()
now returnsStandardError
rather thanRuntimeError
.TryConvert
now takesValue
by value (rather than a reference).
DataTypeBuilder::free_immediatly
(usefree_immediately
).free_immediatly
attribute inwrap
macro (usefree_immediately
).free_immediatly
inmagnus
attribute ofderive(TypedData)
macro (usefree_immediately
).
String::encode_utf8
, user_string.conv_enc(RbEncoding::utf8())
instead.Value::leak
, usegc::register_mark_object
instead.define_global_variable
(usedefine_variable
).
- Memory leak of the message when returning an
Error
to raise an exception. Flonum
support disabled for Ruby built with USE_FLONUM=0 (e.g. 32 bit systems).- Correct spelling of
free_immediatly
(tofree_immediately
) in theDataTypeBuilder
struct, andwrap
andderive(TypedData)
macros.
printf
-style format strings no longer interpreted in error messages when automatically raised as Ruby exceptions.
0.3.2 - 2022-05-29
- Better error output from build script when
ruby
can't be found or errors. - Fixed crash in
Proc::new
andValue::block_call
when the proc was stored and called later.
0.3.1 - 2022-05-21
- Integer overflow in Ruby Float to f64 conversion
0.3.0 - 2022-05-18
RString::new_shared
andRString::new_frozen
.encoding
module, includingencoding::Index
andRbEncoding
types.RString::enc_coderange
and related methods.RString::codepoints
andRString::char_bytes
iterators over string contents.- The following methods for
RArray
:dup
,concat
,plus
,delete
,delete_at
,resize
,reverse
,rotate
, andsort
. - New methods for
RString
:enc_new
,len
,length
, andis_empty
. RHash
gains the methodsdelete
andclear
.require
,current_receiver
,call_super
, anddefine_global_const
functions.Object::singleton_class
andObject::extend_object
.Proc::new
,Proc::arity
, andProc::is_lambda
.superclass
andname
methods forRClass
.scan_args::check_arity
.- Methods for
Module
:include_module
,prepend_module
,const_set
,ancestors
,define_attr
, anddefine_alias
. rb-sys-interop
feature to use low level bindings from rb-sys, andrb_sys
module to expose functions for working with rb-sys.- Added
gc::register_mark_object
,gc::register_address
,gc::unregister_address
,gc::count
,gc::stat
, andgc::all_stats
. Error::iter_break
.StaticSymbol::check
andId::check
to check if a symbol exists.
RArray::cat
,RArray::from_slice
, andgc::mark_slice
will accept a slice of any Ruby type as an argument, rather than only a slice ofValue
. This may change type inference rules such that things likeRArray::from_slice(&[1.into()])
will no longer work. UseRArray::from_slice(&[Value::from(1)])
instead.- Similar to above,
gc::location
will accept any Ruby type as an argument. BoxValue
can hold any Ruby type, not justValue
.- Improved performance for conversion between Ruby floats/integers and Rust types.
- The parameters to the closure passed to
RHash::foreach
will now be automatically converted fromValue
to Rust types. Module::define_method
,Module::define_private_method
,Module::define_protected_method
,RModule::define_singleton_method
, andObject::define_singleton_method
all returnResult<(), Error>
rather than()
as they may fail in the unusual case that the receiver is frozen.
String::encode_utf8
, user_string.conv_enc(RbEncoding::utf8())
instead.Value::leak
, usegc::register_mark_object
instead.define_global_variable
(usedefine_variable
) to better match Ruby C API naming.
error::protect
removed as it should not be needed when using Magnus. For use with rb-sys enable therb-sys-interop
feature and usemagnus::rb_sys::protect
.Qfalse::new
,Qnil::new
,Qtrue::new
,Qundef::new
(use QFALSE/QNIL/QTRUE/QUNDEF).- Functions for generating an
Error
with a specific Ruby type. E.g.Error::type_error("...")
, useError::new(exception::type_error(), "...")
.
- creating a
StaticSymbol
from a&str
with characters outside the ASCII range. - panicking in any of the functions of
DataTypeFunctions
will abort the process to avoid undefined behaviour. - panicking in the closure passed to
RHash::foreach
won't result in undefined behaviour.
0.2.1 - 2022-04-03
- Fixed compilation error in
method!
andfunction!
macros with arity argument of 5.
0.2.0 - 2022-03-31
- Functions in
class
,module
, anderror
modules to access built-in classes/modules. - Many doc examples.
RArray::len
,RArray::includes
,RArray::join
,RArray::is_shared
,RArray::replace
, andRArray::subseq
.- Implement
From<&str>
andFrom<String>
forRString
. - Support for
Range
. - Pre-built bindings for Ruby 3.1 on Windows.
- Support calling Ruby methods with Rust closure as a Ruby block.
Class::new
andModule::new
for creating anonymous classes/modules.r_string!
macro to create Ruby string from astr
literal.Value::equal
andValue::eql
for object equality.Value::respond_to
andValue::check_funcall
for conditionally calling Ruby methods only when they are defined.scan_args
andget_kwargs
for complex argument parsing.
Qundef::to_value
now markedunsafe
.RArray::cat
,RArray::push
,RArray::unshift
, andRArray::store
now returnResult<(), Error>
.eval!
macro uses anonymous (rather than caller's) binding.
Qfalse::new
,Qnil::new
,Qtrue::new
,Qundef::new
(use QFALSE/QNIL/QTRUE/QUNDEF).- Functions for generating an
Error
with a specific Ruby type. E.g.Error::type_error("...")
is nowError::new(exception::type_error(), "...")
Binding::new
. This will be removed in the future as the underlyingrb_binding_new
will not function as of Ruby 3.2.
- Converting Ruby integers to
isize
/i64
/usize
/u64
on Windows. - Edge case where static symbol created after a dynamic symbol with the same name wouldn't be detected as static.
- Many
RArray
methods now correctly protect from exceptions (instead returningResult<_, Error>
when an exception occurs).
0.1.0 - 2022-02-25
- Support for most core classes,
String
,Symbol
,Integer
,Float
,Array
,Hash
and more. - Defining Rust methods as Ruby functions.
- Calling Ruby methods from Rust.
- Automatic type conversion between Rust and Ruby types.
- Conversion from Ruby exceptions to Rust Results and visa versa.
- Support for wrapping custom Rust structs as Ruby objects.
Enumerator
as a iterator.yield
to Ruby blocks.#[init]
macro to mark init function to load extension withrequire
.- Pre-built bindings for Ruby 2.6 - 3.1 on common platforms, build-time generated bindings otherwise.