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)- rename
colortogc_color(0e79f6b, 1e36d76) - 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