NEWS
User visible changes in mruby3.4 from mruby3.3
“NOTE:” are changes to be aware of.
The language
-
mruby now supports
privateandprotectedvisibitily (b0db0bd) -
Maximum length of inlined symbols reduced from 5 to 4 characters to provide space for visibility flags (6442a01)
-
Many methods are made private according to CRuby visibility (4a0e806)
-
Generate OP_SSEND for
self.methodtype calls (111fe4b) -
initializemethod will be always private (eb8b412) -
Add new hooks
method_removed,method_undefined(9c74f6e) -
Add new hooks
singleton_method_removed,singleton_method_undefined(0863c08) -
Updated
OP_DEFoutput from codedump (3a3e877) -
Better handling of binary strings, e.g. String#b (b0127f0)
-
Hash
to_sformat has changed (baeeb5e) -
Some encoding related method such as
#force_encoding(e47b4ca),#b(b0127f0) -
Constant folding for
String#+(6687bdd) -
Remove Float bit-operation (db8368f)
-
use SWAR technique for strlen performance (cbb31e6)
-
use merge sort for
Array#sort(5bd63d6)
Changes in C API
-
pool.c renamed to mempool.c (and mrb_pool to mrb_mempool) (49525fa)
-
mrb_pool_value renamed to mrb_irep_pool to reduce confusion (62ef5db)
-
rename BOXNIX_SET_VALUE to BOXNO_SET_VALUE (#6397)
-
MRB_FROZEN_P()is replaced bymrb_frozen_p()(c11d18e) -
add
obj->frozeninstead of flagsMRB_SET_FROZEN_FLAG/MRB_UNSET_FROZEN_FLAG(8276143)
Build & Configuration
-
New Build Target:
test:run:serial,test:run:serial:lib,test:run:serial:bin(#6423) -
New Platform: Playstation Portable (#6022)
-
New Platform: emscripten (#6487)
-
New Config: no-float (with MRB_NO_FLOAT) (32200f1)
Changes in mrbgems
-
mruby-print: removed; if you do not use
mruby-io, mruby use#printetc. in the core (8c8bbd9) -
mruby-enum-lazy: Add Enumerable::Lazy#grep_v to mruby-enum-lazy (#6171)
-
mruby-io: Add
levelargument toFile.dirname(#6463) -
mruby-io: File.absolute_path? (#6482)
-
mruby-io: File.absolute_path (96113a2)
-
mruby-toplevel-ext: top-level public/private/protected moved to the core (2a876d2)
-
mruby-metaprog: method list methods now works according to the visibility (9229da1)
-
mruby-metaprog:
public_instance_methods,private_instance_methods,protected_instance_methods(9e3e7b2) -
mruby-encoding: MRB_UTF8_STRING turned on automatically with this gem (74bdae9)
Fixed GitHub Issues
-
#6173 Fails to build with tcc(Tiny C Compiler)
-
#6156 ‘/LIBPATH’ issue
-
#6183 “.e”.to_f returns NAN
-
#6182 mrb_read_float() converts “0.3” with a small error compared to strtod()
-
#6210 Unary minus seems broken
-
#6255 Wrong number of characters in broken UTF-8 string
-
#4038 Heap buffer overflow in OP_ENTER
-
#6262 Unable to define == for objects when using Array#delete
-
#6267 When MRB_UTF8_STRING is enabled, giving byte characters for String#index and String#split gives wrong results
-
#6277 MSVC: can’t use malloc() in string.c with WIN32_LEAN_AND_MEAN
-
#6240 Differentiate between lib and lib64 in the build settings.
-
#6304 Calling method_missing with only Kwargs passes arguments incorrectly
-
#6317 mrb_gc_register() may cause GC and collect the object being protected
-
#6307 Planned change patch for mrb_vm_exec()
-
#6298 foo :bar {} is legal in mruby?
-
#6326 Detect “Use-after-free” with address sanitizer
-
#5358 static warning from getpwnam
-
#6339 mrb_ary_delete() may refer to an invalid address (use-after-free)
-
#6346 Block kwargs are passed as last positional arg when using yield
-
#6365 powl() not available when compiling for Dreamcast
-
#6369 100x Performance Regression from 3.1
-
#6270 NODE_ZSUPER from deeply nested blocks will result in a truncated digits for block index in OP_ARGARY
-
#6297 Assigning to a block variable changes the actual block (thus affecting block_given? and yield)
-
#6389 instance_exec named block args don’t work properly
-
#6388 Recent commit broke my windows build
-
#6411 Wrong function unwinding when using return in a block
-
#6439 OP_JMPUW does not call the ensure block when it jumps to the beginning of the begin block
-
#6441 break inside while loop will execute the ensure block outside of the while loop
-
#6453 Bigint: incorrect behavior of ^ operator
-
#6452 Bigint: weird mod behavior
-
#6451 Bigint: incorrect division behavior
-
#6456 bigint: bug with division of a small number by a bigint
-
#6466 mruby-bin-mruby using Kernel#p and Kernel#print in bintest fails test
-
#6467 Heap-Use-After-Free due to Recursive group_by Calls
-
#6471 Discrepancy in codegen for binary operations between master branch and 3.3.0
-
#6477 heap-buffer-overflow in mrb_vm_exec
-
#6485 Hash#rehash does not check if the hash is frozen
-
#6483 Hash#default_proc= accepts arbitrary objects that are not callable
-
#6491 Destroy existing string literals when composing string literals
Merged Pull Requests (User Visible Ones)
-
#6171 Add Enumerable::Lazy#grep_v to mruby-enum-lazy
-
#6174 Fix MRUBY_PACKAGE_DIR in mruby-config.bat
-
#6175 Corrected strange conditional in mrb_vm_run()
-
#6176 Stop assuming alias proc in CI_PROC_SET()
-
#6177 gha: add macOS 14 to the build
-
#6184 Remove the L_STOP label
-
#6185 Added mrb_callinfo::u.keep_context for clarity
-
#6186 Omit NULL check of e->cxt in OP_RETURN_BLK
-
#6191 Speed up symbol equality comparison
-
#6192 Fix
OP_STOPwith exception -
#6193 Fix wrong assertion in
OP_SENDB. -
#6194 Simplify the calculation of the number of closures in
MRB_TT_FIBER -
#6197 Fix int_xor to call flo_xor.
-
#6201 tasks/doc.rake: standardize the
rake docerror messages -
#6202 Remove the
.yardocfolder withrake doc:clean:api -
#6204 Clean up the
.editorconfigfile -
#6209 Minor
.gitignoreclean up -
#6211 Minor
.gitignoreclean up; order entries -
#6216 Shared empty
iv_tblof module -
#6217 Strict declaration for
mrb_istruct_size() -
#6219 Avoid assigning a fixed value in the loop
-
#6220 Reorganize
mrb_cache_entryandmrb_method_ttypes -
#6221 Arranging
each_backtrace() -
#6222 Need to synchronize
dbg->regsafter VM call inmrdb -
#6224
mrb_env_unshare()to break the link to fiber -
#6225 Revert “Adjust environment when
mrb_exec_irephappened.” -
#6227 fix:
Array#shuffle(!)result distribution -
#6228 Revert “
envreferred from top-level callinfo should not be unshared; fix #4019” -
#6230 Fix status of fiber after switched by exception raised
-
#6231 Add a way to let other gems handle closing of fds in mruby-io
-
#6232 Fold the code for freeing
env -
#6233 Free stack memory at end of fiber
-
#6235 fix
Array#deletealways firing the block when deletingnil -
#6236 unify the code for filter methods (and speed up
#reject!) -
#6237 Stricter env objects to attach to ci
-
#6238 Minimize zero initialization of the stack
-
#6243 Fixed base64 decoding in
mruby-pack -
#6244 Revise scope of role of
mrb_vm_run() -
#6246 Fix typo in
test/t/hash.rb -
#6249 Fix grammar in
src/vm.c;catched->caught -
#6250 Fix spelling
-
#6251 Clean up root move
CODEOWNERSto.githubdirectory -
#6253 Allow recycling fibers by GC if not referenced directly
-
#6256 Update documentation for
mrb_top_run() -
#6257 fix some mrbconf.md typos
-
#6260 Remove
exc_caughtfrommrb_vm_exec() -
#6261 fix:
to_ainteger ranges withbegin > endfailing -
#6263 fix:
Array#deletemistakenly calling block even if not passed -
#6264 Must pass keyword arguments for
Kernel#to_enum -
#6265 Fixes
Dir.childrenandDir.each_child -
#6266 Passes the nonexistent key as a block argument in
Array#delete -
#6273 Improvements to
mrb_protect_atexit() -
#6275 Fixed
Binding#evalthat failed to assign to the same variable -
#6276 Always run
atexiton the top-level call frame -
#6279 Include headers for malloc() explicitly; fix #6277
-
#6280 Remove
MRB_ENV_CLOSEDflag -
#6281 Fixes local variables in
mruby-binding. -
#6283 Simplify
uvenv() -
#6288 Detach
envof ci explicitly on atexit -
#6289 Simplify
OP_RETURN_BLKandOP_BREAK -
#6290 Allow to change the output directory name of the
libmrubyfile -
#6293 Changed the instruction table in
opcode.md -
#6294 Optimise
mrb_iv_get -
#6302 Minor cleanup in mrb_str_init
-
#6303 mrb_str_aset_m() should return replace instead of str
-
#6305 Protect keyword arguments in
prepare_missing() -
#6308 Assume that
MRB_CATCH()hasmrb->excset -
#6310 Doubling the call stack when extending it
-
#6311 Added fast-path for positional arguments less than 15 in
OP_SEND -
#6312 Omit error checking at
OP_RETURN,OP_RETURN_BLKandOP_BREAK -
#6313 Fix wrong column number in opcode.md
-
#6314 Optimize even?/odd? for big integers
-
#6318 Shrink variables in
mrb_vm_exec() -
#6320 Shrinking the code in
OP_BREAKandOP_RETURN_BLK -
#6321 Avoid warnings in
lib/*/.rb -
#6322 Fix mrb_ro_data_p on Intel Mac
-
#6324 Remove
localjump_error() -
#6327 fix ncurses linking issues
-
#6328 Fix use-after-free in
obj_free()for env objects -
#6329 Fix use-after-free in
mrb_obj_alloc() -
#6330 Add a precondition to call
mrb_env_unshare(). -
#6331 Restore the GC arena with tests
-
#6332 Must not depend on the “host” build to generate
mruby-compiler/core/y.tab.c -
#6333 Reduce the number of branch instructions in the
heap_p() -
#6335 Add
return_ciinCHECKPOINT_MAIN()ofOP_RETURN -
#6338 Need to place static proc objects into 8-byte alignments
-
#6340 Fix use-after-free for
Array#<=> -
#6341 Need to restore the GC arena after some function calls
-
#6344 prefer using
mrb_yieldto call block arguments -
#6347 codegen.c,parse.y: remove flattening of
yieldarguments; fix #6346 -
#6348 Cancel the warning disablement
-
#6349 Perform GC before deleting directories
-
#6350 Fixed character encoding conversion function mismatch
-
#6351 Remove unnecessary
mrb_gc_arena_restore() -
#6353 Fix use-after-free in
mrb_ary_delete() -
#6356 Making splat argument objects invisible from Ruby side
-
#6373 Add build config for Milk-V Duo (RISC-V Linux) board
-
#6382 Make array objects invisible in
mrb_gc_register() -
#6385 Small improvements for
mrb_gc_register() -
#6386 Avoid calling
mrb_gv_set()frommrb_gc_unregister() -
#6387 Small improvements for
mrb_gc_unregister() -
#6390 Fix use-after-free by
mrb_gc_unregistor() -
#6391 Fixed argument forwarding in
instance_exec -
#6392 Fix argument forwarding in
mrb_exec_irep() -
#6393 Follow-up to #6391
-
#6395 Storing method-id inside Symbol#to_proc
-
#6396 Milk-V Build Config: update GPIO gem URL
-
#6397 boxing_no.h: rename BOXNIX_SET_VALUE -> BOXNO_SET_VALUE
-
#6399 Add macOS 15 to the build
-
#6405
io_read: use%iinstead of%din call tomrb_raisef -
#6407 Allow to exclude specific files in
rake install -
#6408 Improve compliance with C++ standards
-
#6410 Put
#include <stdlib.h>inparse.y -
#6412 Distinguish the call frame of the generator with
OP_RETURN_BLK -
#6413 Add links to documentation in
README.md -
#6415 Fix numbered parameters when used as a singleton
-
#6416 Optimize the “new” method’s iseq
-
#6419 Follow Ruby’s behavior for numbered parameters in -> {}
-
#6420 Update
labeler.yml: add label for thetoolsdirectory -
#6422 Add annotations for function names defined in the preprocessor
-
#6423 Adding a serialized test task
-
#6427 Need to update
civariable after re-entry to VM -
#6428 Change the limits of OP_ADDI and OP_SUBI from 0-127 to 0-255.
-
#6429 Fix numbered parameters when used as hash keys
-
#6432 Moving code in macro arguments out of macros
-
#6434 Added document “Layout of the mruby filesystem”
-
#6436 Make
rake doc:update-indexprettier friendly -
#6437 Add more details to the pre-commit config
-
#6438 Remove unused
MRuby::Build#list_install_excludesmethod -
#6440 Fix
redokeyword -
#6442 Fixed wrong range condition in
OP_JMPUW -
#6443 Fix NODE_NEGATE for bigints
-
#6444 Add test cases for bigints
-
#6446 Omit the
_WIN64definition check -
#6447 Fixed
File.expand_path -
#6448 Suppress presym in
mruby/ext/io.hfile -
#6449 Using presym in the
mruby-io/src/file_test.cfile -
#6450 Change
MRB_WITH_IO_PREAD_PWRITEconfiguration name -
#6454 mruby-bigint: handle rhs bigint in int_mod and int_divmod functions
-
#6455 mruby-bigint: fix rounding behavior in mpz_mdiv and mpz_mdivmod functions
-
#6457 bigint: fix bug with division of a small number by a bigint
-
#6459
FileTestis a module -
#6461 To create a release package file in draft
-
#6462 Properly cast the return value of
memchr() -
#6463 Add
levelargument toFile.dirname -
#6465 Add initial playstation portable crossbuild support
-
#6468 Fixed missing changes to
IB_FIND_BY_KEY()parameter names -
#6469 Add more
constqualifier forRProc -
#6472 Moved tests for
Integer#quo -
#6473 Hide
mpz_and()symbol -
#6473 Hide mpz_and() symbol
-
#6474 Avoid array object creation with “unknown keyword” error
-
#6475 Don’t include deleted mruby-print
-
#6478 Fixed buffer overrun in function
chars2bytes() -
#6479 Reimplementation of
File.expand_pathmethod -
#6482 Add
File.absolute_path?method -
#6487 Add Emscripten toolchain & build_config