Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
2421 lines (2248 sloc) 110 KB
See for the draft changelog
since the previous release.
New in 2018.05
+ Correct op name in exception message for ctxcallerskipthunks
+ Remove explicit temp rooting in 'slice' interp op
+ Fix warning about missing cast
+ Improve debug helper for p6opaque dumping
+ Sort hashes before serialization for more reproducible builds
+ Add CPPStruct/CUnion-reprs where it was forgotten
+ Implement one dimensional inlined shaped CArrays
+ Fix missing bounds check in NFA results push
+ Change multidim implementation exception message
+ Make error msg lowercase; match overall msg style
+ Add 'slice' positional op for VMArray
+ For NFAs with many codepoints, use binary search
+ Add instructions to the release guide about gpg signing
+ Push error string argument in the right place
+ Check we have a concrete OS handle in IO ops
+ Remove repeated MVMROOT
+ Root correct object when pushing host/port info
+ Close server socket handle when client side closes
+ Add new slice op
+ Randomly seed a hash secret to mitigate ease of DOS attack. For more
information see
+ Check hash value before str eq in hash buckets. 15% faster hash lookups and insertion
+ Make sure hashing function never returns 0 to prevent cached_hash_code from being regenerated each time in those cases
+ In string index, avoid checking for concreteness multiple times
+ Make sure `getstrfromname` will resolve generated names
+ Use `<private-use-XXXX>` and `<surrogate-XXXX>` for as Unicode names for private
use and surrogates as recommended by Unicode
+ Use all uppercase for Hangul Syllable names
+ Fix CJK Unified Ideograph and other derived Unicode names to match Unicode spec
+ Add a new MVMhashv type for representing the hash value
+ Implement memmem_two_uint32(), up to 45% faster index of short (2-3 grapheme) needles in a flat 32 bit haystack
+ Implement an optimized memmem for 32 bit string search 4-15x faster for flat 32 bit haystacks
+ Add getlexcaller, sp_getstringfrom, iterkey_s, iterval, splice, slice, cmp_i,
string cmp, lexprimspec, ctxlexpad, captureposarg, inf, neginf, currentthread,
unless_s, if_s, threadlockcount, capturenamedshash JIT expr templates
+ Implement 'SAVE_RV' JIT node as RV mode
+ Fix ctxlexpad
+ captureexistsnamed
+ Disable ctxlexpad inlining
+ Enable ctxlexpad and hllizefor (with constant argument)
+ Put jit templates in same order as ops in interp.c
+ Add bytecode size to inline log
+ Fix format string parameters
+ Put sizes of spesh graphs into the spesh log
+ Don't leak CUUID/name
+ Log graph of inlinee prior to inlining
+ Wrap debug printing
+ Set type facts on a resolved method
+ Specialize isnull
+ Extract recursion loop for smaller stack frames
+ Don't uninstrument any more
+ Store the size we malloc and use it with strncpy
+ Fix off-by-one in profile's GC dumping
+ Insert prof_allocated in the exact right place
+ Add missing break statement
+ Fix optional parameter allocations
Debug Server:
+ Don't use %b in format string
+ Fix mixed usage of malloc and FSA
+ Use official API for thread lock count
+ Allow unrecognized fields in messages
+ Throw out superfluous debugspam
+ Add a "handle equivalence class" command
+ Bump minor protocol version to 1.1 for new messagetype
+ Add `update-changelog.p6` tool for faster categorization of commits into the ChangeLog
+ Move uthash.h from 3rdparty to src/strings since it is heavily modified and
cannot be substituted for the generic version of the library
+ Make jit-comparify break on 'ret'
+ Ensure `make realclean` cleans 3rdparty/cmp
+ Fix off by one issue in
+ Fix Makefile indentation
+ Report time spent on JIT in spesh-time.p6 tool
New in 2018.04.1
+ Fix denormals and precision issues in Num parser
New in 2018.04
+ Speed up collapse_strands 4x by rewriting to target compiler auto vectorization
+ Vectorize turn_32bit_into_8bit_unchecked, 10% speedup for string_escape()
+ Vectorize string flip operation for flat strings, ~25% speedup
+ Speed up string cmp by 3-5x in the general case and by 6-10x if both strings are flat
+ Speed up string index by 1.5x for a flat haystack and a needle of a differing type
+ Add support for the windows-932 variant of the ShiftJIS encoding
+ Fix bug in windows-1252 and windows-1252 decodestream with replacement when a replacement occurs in the last position of the input stream
+ Inline simple cu string access into exprjit template
+ Rename ^spesh_slot to ^spesh_slot_addr and add ^spesh_slot_value
+ JIT expr templates for getstringfrom and getwvalfrom
+ JIT floor_n, continuationinvoke, ctx
+ JIT a few ops that ThreadPoolScheduler uses
+ Measure and report time spent on JIT compilation
Garbage Collection/Memory:
+ Ensure memory blocks in the nursery are aligned where necessary
+ Suspend other threads during global destruction
+ Spot use of an item already put in a gen2 freelist
+ Register sig_hash as an Instance root
+ Fix drift in Num->Str roundtrip; As a side effect effect div_In op becomes 14x slower
+ Use Grisu3 algorithm for stringifying Num's, makes Num stringification 2x faster
+ Fix handling of denormals in div_In op
+ Generalize mp_get_double()
+ Log getrusage in the profile
+ Add getsignals op, queries for valid signals
+ Patch libtommath to fix build on Solaris
+ Add libatomic_ops as a submodule instead of in-tree
+ Make tryfindmeth not throw in some cases it did
+ Add missing write barrier enforcement in CPPStruct, CStruct
+ Fix missing GC mark of deserializer contexts list
+ Use Fixed Size Allocator for all_scs list
+ Rename sc_weakhash mutex for more clarity over what it covers
+ Fix segfault on concurrent array access while resizing
+ Mark thread blocked around getaddrinfo
+ Make getrusage op modify an existing array instead of allocating one in the op itself
+ Convey the process ID of a started child
+ Guard against negative and zero signals in MVM_io_signal_handle
+ Populate valid_sigs flag set handler function if not set
+ Create bit-flag to indicate signals found on host
+ Keep wvals if only dep needs changing
+ Fix fixing of wvals during inline
+ Fix negated spesh of known type
+ Add optimize_unbox
+ Optimize known values for istrue
+ Remove object boolification from optimize_iffy
+ Discover type of getrusage in spesh
+ Fix optimization of zombie conditional causing segfault
+ Insert null-out-instructions before prof_enter
Debug Server
+ Cut module names out of filenames
+ Only suspend on actually must-suspend breakpoints
+ Add metadata for ReentrantMutex and Semaphore
+ Fix loading bytecode on big endian systems
+ Move libatomic_ops module to a different directory
+ Tell user to delete folder if submodule dir already exists
+ Don't build specify -D_FILE_OFFSET_BITS for dyncall
+ Fix Solaris 32-bit build: don't build specify -D_FILE_OFFSET_BITS for dyncall
+ Fix --asan flag on clang
+ Add --show-autovect --show-autovect-failed flags to
+ Use to generate vectorization defines on clang, so we get a warning
if vectorization fails for specific loops
+ Fix confused pointer offsetting in FSA_SIZE_DEBUG
+ Fix memory corruption when running with FSA_SIZE_DEBUG set
+ Correct lazy static lexical deserialization
+ Fix small integer return values of libffi callbacks
+ Fix bytecodedump to understand inlines
New in 2018.03
+ Add remote debugging support, optionally enabled with the --debug-port option
to MoarVM. This uses the MessagePack and allows:
+ Suspending and resuming all threads, or individual threads
+ Enumerating threads and, when they are suspended, getting their stack traces
+ Reading the lexical variables of a callframe
+ Setting breakpoints and getting notified if they are hit (and, optionally, suspending execution)
+ Stepping
+ Fetching object attributes, array elements, and hash keys/values
+ Add getppid op. Allows a child process to get the parent process id, and thus
guess if it has become orphaned.
+ Panic when Dyncall fails to allocate native callbacks
+ Use uv_fs_copyfile API in MVM_file_copy
+ Make IO signal handlers cancellable
+ Add an tryfindmethod op which evaluates to null in the event that the method
cannot be found
+ Ignore libuv-caused "fake" empty datagrams
+ Expose both hostname and port of received datagrams
+ Change arguments for windows1252/1 decodestream ops
+ Add proper support for replacements in decodestream for windows1252/1
+ Add ops for strict decoding of windows-1251/1252, decoderepconfig, encodeconfig,
decodeconfig and encoderepconfig
+ Add support for replacements with more than one character for windows-1251 and windows-1252
+ Add some string consts in MVMStringConsts for MVMDecodeStream
+ optimize eq_s and ne_s against empty string in spesh
+ Bump libuv version 1.19.2
+ Move tool into proper folder. Add more release guide info
+ Add CMP library to ./3rdparty which is used for supporting the debug server
+ Add debug server protocol documentation
+ Add JIT template for ne_s, const_n64, not_i, is(int|num|str|list), existskey,
eqat_s, concat_s, isnull_s, isfalse, istrue, ishash
+ Enable box_i and box_s templates
+ Release only spill slots without active overlap
+ Warn for things that should be a size but may not be in the expr JIT compiler
+ Create store_write_barrier macro
+ Support for threaded profiling has been added, although it is not fully stable yet
+ Record thread id in profile data
+ Record if a thread is responsible for a gc
+ Count spesh time properly
+ Record when gc happens (msecs since start)
+ Fix for gigantic and wrong spesh time in profiles
New in 2018.02
+ Clean up one-shot timers after firing
+ Fix SEGV in profiler by testing the current thread's frame in heap snapshot
+ Fix missing argument to syncsocket error message
+ Fix EOF detection on zero-size files
+ Add windows-1251 (Cyrillic) decode/encode support
+ Refactor so code is shared between windows-1251 & 1252
+ Fix a bug causing encoding of ›, ˜, œ, ž, Ÿ, ™ and š with windows-1252 (Latin)
to throw or fail encoding
+ Make MVM_spesh_manipulate_remove_handler_successors() public
+ Move annotations to istrue when split from if_o
+ Always split if_o into istrue and if_i
+ Fix MVM_spesh_log_decont not logging anything
+ Don't spesh log if we have a spesh_cand
+ Don't optimize getattr unless known concrete
+ Implement unmanaged_size in MVMSpeshLog repr
+ Run basic facts discovery on inlined code
+ Clean up handler successors after throwish ops become non-throwing
+ Put inlined blocks between their caller and its successor
+ Fix an off-by-one in uninline
+ Remove superfluous DEOPT_ONE_INS annotation on some deconts
+ Work around a segfault caused by type tuple without type information
+ Revive removal of dead instructions after the first inlined function
+ Fix SEGV when opening MVM_*_LOG files
+ Add JIT templates for more than 44 ops
+ Disable getlexstatic_o for the time being for stability reasons
+ Fix segfault in JIT bytecode dumper on code without static frame
+ Add NOOP expr JIT operator
+ Don't output PHI in expr JIT log
+ Better error in boxed ref for repr_id mismatch
+ Add tiles for binary XOR and NOT
+ Fix a miscompile in sp_p6ogetvt_o
+ Only BAIL on DEOPT_ONE annotations on actual guard ops in expr JIT
+ Merge non-control-flow basic blocks so expr JIT has more code to optimize
+ Update with info on generating releases.html
+ Add script that generates
+ Edit the ChangeLog to include the original release
+ Add script to generate Windows-1251 and 1252 codetables
New in 2018.01
+ Refuse to `make release` with dirty work tree
+ Fix off-by-one error when checking inline boundaries in MVM_frame_find_contextual_by_name()
+ Make it more clear where new ops are meant to go to in src/core/optlist
+ Fix leak when args bind error would unwind rather than return
+ On Windows (not using Visual Studio), print size_t with %Iu.
+ Fix crash in TTY flushing on WSL (Bash on Win10)
+ Do less work in zeroing out VMArray
+ Zero out cut off elements when downsizing VMarray
+ Fix incorrect EOF detection on seek'ed handles
+ Fix White_Space/space Unicode property and several other property aliases
+ code cleanup and refactoring
+ jit isprime_I
+ Un-bitrot tools/parse_jitgraph.p6
+ Refactor search_frame_handlers_lex for readability
+ Implement tile for OR operator
+ Mark sp_rebless as :noinline
+ Fix off-by-one error in uninline
+ Pay attention to return op in cross-HLL inlines
+ Optimize not_i when its input is a known value
+ Add some missing fact dependencies
+ Remove bogus comment and known value fact tweak
+ Make instruction deletion within dead BBs a no-op
+ Make log facts tolerate the odd outlier
+ Place facts on a `clone` op
+ New tool
+ Fix OSR of thread entry frame
+ Allow some cross-HLL inlining, this means we can inline bits of NQP
(usually guts like Block.clone) into Perl 6 routines that call them.
Garbage Collection/Memory:
+ Fix memory leaks reported by ASAN
+ The string stream decoder separator specification buffer(s)
+ The static frame spesh body statistics buffer
+ The spesh plan type stats buffer
+ The spesh plan, when the static frame could not be added
+ In MVM_unicode_name_to_property_value_code()
+ Debug log fixes:
+ Fix spelling typos in GC debug log
+ Remove strange segfault-inducing debug code
New in 2017.12
+ Fix ASAN flags for Darwin platform
+ Fix implementation of the new inline boundary indicators to set action
+ Fix it so Line_Break property returns XX as the default value, instead of
incorrectly returning BK
+ Fix it so Numeric_Type property doesn't return an empty string for codepoints
with the Digit property value
+ Make Bidi_Mirrored_Glyph an enum instead of storing the full codepoint value
in the bitfield
+ Make error messages consistent which refer to synthetic codepoints
+ Many, many fixes and changes to, which generates the Unicode database.
Most changes are not user visible but will be the foundation for making sure
we return the correct property values for codepoints not in UnicodeData.txt
(Primary Unicode Data source file)
+ Note, we have the correct values for most of these other codepoints, but
the goal is the get even these currently reserved characters working. Main
pluses for this are: 1. Correctness 2. Unicode sometimes sets properties for
codepoints based on likely future usage. This would allow better correctness
if an older version of MoarVM is used with codepoints from a future versions
of Unicode codepoints (as could be the case with OS distributions lagging
behind current releases)
+ Lexical handler lookups no longer prevent a lot of inlines
+ now uses MVM_SPESH_LIMIT when trying to find pesky spesh bugs
+ Fixed issue with taking a pointer-pointer to a moving object and don't read a NULL struct
+ Extend to use MVM_SPESH_LIMIT
New in 2017.11
+ Show the actual type when "no such attribute" errors occur
+ In MVM_fixed_size_free and MVM_fixed_size_free_at_safepoint debug/error messages
use %lu instead of %d, put in missing output in one case
+ Harden event loop against fast cancellations
+ Remove dependency on Perl 5 autodie for compilation (expression engine)
+ Remove duplicate env variable usage line from moar --help
+ Update our internal release guide to include steps for signing tags
+ Profiler: Fix integer literal form for 1LL << 32
+ Add support for a block noinline flag. Used to indicate that a block
may never be inlined; will bet set by Rakudo upon spotting uses of things that
need the dispatcher
+ Fix occasional old reads in ConcBlockingQueue
+ Put coerce_II op in same order relative to oplist
+ Retry in certain cases of EINTR in mvm_fileno, read_bytes,
read_one_packet, socket_write_bytes, socket_connect and socket_accept
+ Fix uppercase letters not giving Lu for the General_Category
+ collapse_strands with memcpy if all strands are same type (4x faster for strands of same type)
+ Fix bug causing utf8-c8 synthetics to combine with other codepoints
+ Optimize MVM_string_concat when the RHS is a single strand that's equal to the LHS's final strand
+ Fix+add comments for strand concat optimization
+ Speed up join of longer strings by a significant amount by concating multiple
times if there are more than 300 graphemes per string on average or there are
less than 4 pieces and more than 150 graphemes per string.
+ join: factor code into join_get_str_from_pos() function
+ Make sure General_Category 'Cn' codepoints match with C enum
+ Resolve unassigned codepoints as the default property values in MVM_unicode_get_property_str
+ Add an additional check that the "bases" of the strands are the same length
before checking if they're equal in string_from_strand_at_index.
+ Error message improvements to MVM_DEBUG_NFG #ifdef for synthetics
+ JIT compile getarg_*, trunc_i16, param_rp_s, getrusage, coerce_II op,
+ Fix labeling off-by-one causing try/catch on some frames to fail
+ Mark nativeinvoke_* noinline to enable JIT compilation
+ Treat NULL strings correctly in JIT compiled native subs
+ JIT compile native calls with up to 3 UTF-8 string arguments
+ JIT compile native calls with integer rw arguments
+ Don't segfault when MVM_iter on type object
+ Handle unsigned types to switch in MVM_iter()
+ Fix spesh dropping MVM_SPESH_ANN_DEOPT_ONE_INS annotations
+ Include reason when we cannot inline in the debug output
+ If dividing by 1 in MVM_bigint_div, just return the numerator
+ Make sure both objects are the same type when short-cutting division by 1 in MVM_bigint_div
+ Move assignment after MVMROOT in MVM_bigint_from_bigint
+ Use uv_fs_copyfile in MVM_file_copy instead of manually opening a handle and
using and using uv_fs_sendfile to copy
+ Bump libuv to version 1.15.0
+ Make sure to close uv_timer handles after they are canceled
Garbage Collection/Memory
+ Fix unneeded GC blocking in loop
+ Fix pointer arithmetic in MVM_fixed_size_realloc_at_safepoint with a cast
+ Convert realloc plus memset 0 to recalloc in MVM_sc_set_object
+ FSA size debug: cooperate better with valgrind
+ Support FSA_SIZE_DEBUG in MVM_fixed_size_realloc and *realloc_at_safepoint
+ Add MVMROOT2..MVMROOT5 macros to make rooting multiple variables easier
+ Add a missing MVMROOT to MVM_bigint_from_bigint
+ Fix HLL representations of CArray elements out of sync after native calls
+ Add missing MVMROOTs to MVM_bytecode_finish_frame and prepare_and_verify_static_frame
+ Add missing MVMROOTs around managed mutex acquire in MVM_serialization_demand_code,
MVM_serialization_finish_deserialize_method_cache, MVM_serialization_demand_object
and MVM_serialization_finish_deserialize_method_cache
New in 2017.10
+ Unix socket support has been added
+ Add new DynASM version as submodule
+ Removal of --lua and --has-dynasm options, compiling with these
included 3rdparty libs is now required
+ Remove build dependency on Perl 5 Test::Exception module
+ Make a fast path for VMArray splice using memcpy
+ Add a few missing casts to MVMObject *
+ Cache the ENV var hash after first access
+ Improve MVM_dir_cwd() error message
+ Fix missing rooting/barriering in C[PP]Struct
+ Fix missing MVMROOTs in type parameterization handling
+ Fix returned tcp port values for async sockets (ntohs). See RT#132135.
+ Probe for gcc -Werror=* support. This allows building MoarVM on older GCCs.
+ Fix issues with FreeBSD build, including adding new libuv file to
+ Protect parameterization additions with a mutex and fix for parametric type race
+ Bump libuv to ver. 1.14.1
+ Add MVM_fixed_size_realloc() and MVM_fixed_size_realloc_at_safepoint()
+ Fix a segfault when trying to bind a p6bigint to a matching attribute in a p6opaque
+ Include the type of unhandled register in error messages
+ Factor out callback thread finding so code is now shared between libffi and dyncall backends
+ Make native callback thread finding more robust
+ Stash native thread ID after GC unblock
+ Many NativeCall functions can now be JIT'd
+ JIT compile native calls with VMArray arguments
+ Basic JIT of lock/unlock
+ Support unsigned ints when JIT compiling native calls
+ Move null check into getdynlex func and remove bare null from getlexrel and getlexreldyn
+ Don't allow low-level null from getdynlex
+ Remove duplicate typedef for MVMJitCompiler
+ getlex_o now returns VNMull rather than null
+ Merge the 'expression tree' JIT compiler backend.
+ Document the expression template syntax and IR structure
+ Document tiles
+ Add jit-bisect tool to help us bisect JIT issues
+ Add jit-dump tool to compare JIT output between runs
+ Process annotations on PHI nodes
+ Ensure ->caller/->static_info can't get outdated
+ Check caller chain before promotion
+ Set frame->caller up earlier
+ Add missing MVMROOT of outer/code_ref
+ Set frame->static_info in allocate_frame
+ Skip stats for frames beyond spesh max bytecode size
+ Don't generate log entries for huge frames
+ Fix possible access to moved object body
+ Add missing MVMROOT of return value for spesh logging
+ Don't give internal workers a spesh log
+ Make "Can't find nc_site value on spesh ins" non-fatal
+ Add more GC debug checks to help find ->caller bug
+ Add debug assert in remove_one_frame
+ GC block pow_I thread due to it potentially being an expensive call
+ Mark thread GC blocked when locking file
+ Update GC debug code for growing nurseries
+ Avoid a thread yield loop in mark_thread_unlocked
+ Catch frame worklist adds with NULL static_info
+ Make thread GC nurseries scale to need
+ Sort the flags for MAST::Ops before generating them
+ join: factor the concat stability checks into their own function and simplify conditionals
+ join: special case 8bit flat pieces/separator. 3x faster for joining 8bit flat strings
+ join: If only one item is to be joined, just return it
+ join: When everything to be joined is made up of strands, copy strands instead of making one flat string
+ Fix quaternary collation level's. Fixes RT#132216
+ collation: simplify quaternary and use define's for the bitmask
+ Speed up codes op by 10% for synthetic graphemes
+ In KMP based index set max stack alloca to 3000 bytes (used to be 4096)
+ Deduplicate the while loops into a #define in KMP based index
+ Fix utfc-c8 encoding for values > 0x10FFFF and unicode surrogates
+ Fix concat bug with utf8c8 strings, flattening utf8c8 synths
+ Use the FSA for a temp alloc in MVM_string_join
+ Use FSA to allocate memory in NFA
+ Change realloc condition in MVM_string_utf8_decode to avoid unneeded reallocs
+ Add hex digits to the end of non-unique Unicode names (i.e. <CJK Ideograph-6183>)
+ Update Unicode Emoji to version 5
+ Download all emoji files and generate UCD for Emoji 4 and onward
+ Since Emoji names in Unicode are not guaranteed to be 100% stable, we read from
version 4 onward to ensure full compatibility with older MoarVM versions and
Emoji versions
+ Add info about planned features to Collation docs (Language/natural sort)
+ Fix ->seekable detection on TTY handles
+ Fix definition of MIN causing Windows issue
+ Pass user32 lib to build on Windows
+ #include ws2tcpip.h in syncsocket.c
+ Only include libuv posix-hrtime on *BSD not Darwin, was causing some versions
of MacOS not to build
+ Fix seekability detection on MacOS
+ Solaris doesn't have memmem() so use the 3rdparty/FreeBSD one
+ Fix segfault on Solaris due to the undefined behavior of passing NULL to print
+ + Fix getaddrinfo failing with EAI_HINTS on FreeBSD
New in 2017.09.1
+ Assign variable in optimize_bb loop on its own line for clarity
+ Revert "Fix errors when running `make realclean" to unbreak build
using nmake
New in 2017.09
+ Allocate async process read buffer based on amount last read, with a
minimum size limit
+ Implement the Knuth-Morris-Pratt string search algorithm
+ Add error string to 'failed to resolve' exception
+ Fix usage of ARG5 in JIT on Windows to use stack instead
+ JIT param_rp_i and param_rp_o
+ Fix calculation for maximum array size
+ Correct ==/= mistake in container optimization
+ Ensure strings created with MVM_string_repeat are in NFG form
+ Avoid evaluating arguments to MVM_ASSERT_NOT_FROMSPACE when it's disabled
+ Add up to date string documentation
+ Remove old strings.markdown documentation file
+ Speed up `index` 9x when Haystack is strand, needle is 1 long
+ Add new cached grapheme iterator
+ Always cache even for flat haystacks with KMP
+ Generate stacktraces on Travis CI when getting a segfault
+ Add MVM_DEBUG_NFG in more places
+ MVM_string_utf8_decodestream: free the buffer on malformed UTF-8
+ Only run NFG_CHECK on concat result that *should* be normalized
+ Revise some comments in MVM_string_is_control_full()
+ Make sure MVMROOT'd pointer is initialized as NULL
+ Align MVM_TELEMETRY_LOG usage statement
+ Align --tracing usage statement
+ Update Unicode database for Unicode 10
+ MVM_IS_32BIT_INT(i) with explicit casts
+ JIT eqat(ic|im|icim)
+ Building .dasc files depends on dynasm version
+ Add minimal 'dynamic array' library using macros
+ Make the JIT Graph use dynamic arrays
+ Cleanup JIT graph after use
+ Replace explicit JIT function return frame check
+ Wrap dasm_State in MVMJitComiler structure
+ Fix unlikely but possible stack overflow from user input
+ Allow MVM_string_get_grapheme_at_nocheck to be inlined
+ Make `eqat` 1.7x-2.5x faster
+ Fix indentation of switch in substrings_equal_nocheck
+ Use PRIi64 macro instead of %lld in MVM_coerce_i_s
+ Replace all uses of sprintf with snprintf
+ Consistently use MVMuint16 for was_multi
+ Add some explanation of GET_REG and cur_op to interp.c
+ Use < or <= sign for all conditionals in strings/ops.c
+ Rework MVMNFGSynthetic to not store base separately
+ Only use MVMGraphemeIter_cached for strands in KMP index
+ Split out JIT compiler init/deinit
+ Organise architecture-specific JIT source files
+ Check return status of DynASM
+ Remove JIT intermediates in make clean
+ Add 'POP' dynamic array method
+ Flush log on oops
+ Refactor labelling in JIT
+ Add spesh iterator and replace JitGraphBuilder
+ Fix leak of JIT graph
+ Simple fix for duplicated labels
+ Use VECTOR macro arguments only once if possible
+ Add vector SHIFT method
+ Enable JIT breakpoint insertion
+ Use single DynASM build target
+ Compile less with --no-jit
+ Add old-style suffix rule for dynasm compilation
+ Atomic increment not required for JIT sequence nr
+ Move size check into COPY_ARRAY
+ Correct buffer handling in UTF-8 fast->slow path
+ UCD: For sequences, convert from \x{ } to the Unicode codepoints
+ Flush standard handles at exit
+ Flush output buffer where needed
+ Ensure write to unwritable handle fails right off
+ Don't try and sync when flushing is enough
+ Better if_o/unless_o optimization in some cases
+ Do dead BB elimination pass after branch deletion
+ Optimize MVM_string_gi_move_to
+ Don't decont native refs when spesh logging
+ Handle native refs better in spesh stats
+ Support spesh multi resolution involving nativeref
+ Set facts on nativeref deconts
+ A little refactoring of second optimization pass
+ Remove fact copy we most likely don't now need
+ Re-flow and better explain set elimination code
+ Fix bug in gi_move_to if not starting at 0
+ Introduce a binary format for heapsnapshot, wtih snapshots at the beginning
of the file
+ Immediately write heap snapshots to file instead of keeping them around in
+ Write parts of types/static frames/strings incrementally into heap snapshot
+ Add gc_describe functions for new spesh data structures
+ Use grapheme iterator cached for ignorecase/ignoremark index ops
+ Take more care when eliminating set inside inline
+ Re-compute dominance tree before stage 2 opts
+ Add a reliable locals count for inlines
+ Move throw -> goto optimization to second pass
+ Mark GC blocked when acquiring I/O mutex
+ Only use grapheme iter cached if the Haystack is a strand for index*
+ Don't try to duplicate unreachable handlers on inline
+ Ensure gi->start is set to 0 for flat strings in MVM_string_gi_init
+ Fix a leak in CArray REPR
+ Merge Full Unicode Collation Algorithm Implementation
+ Remove unneeded file from UCA implementation
+ Nativecall: fix invalid pointer creation
+ Fix ignoremark with Prepend characters and ordbaseat op
+ For degenerate Synth's with Prepend and Extend set base cp to 1st cp
+ Fix case change when base cp isn't the first cp in synthetic
+ Fix elems of ConcBlockingQueue REPR
+ Implement getrusage op
+ Add documentation on UCA collation implementation
+ Include debug names in some wrong REPR errors
+ Fix MVMROOT in socket port/host code added in last release
+ In README, note that release tarballs won't work out of the box and point to
where to get working ones
+ Expose number of locks held by a thread through an op
+ Add missing concreteness checks in thread ops
+ Fix errors when running `make realclean
+ Store smallint value in 64bit if we negate them later
+ Fix segfault when compiling nqp with musl as libc
+ Avoid recursion in optimize_bb() when only 1 child node
New in 2017.08.1
+ Fix regression in Windows JIT build
+ Remove broken JIT of parameter operations
New in 2017.08
+ Dynamic optimization moved to a worker thread
+ Threads now write sequential logs into a log buffer, and send it to the
worker thread in a concurrent queue
+ Quota of logs to avoid excessive memory use, with a boost when entering
a new compilation unit for the sake of OSR
+ Added MVM_SPESH_BLOCKING environment variable to allow for reproducible
specialization results when debugging
+ Reworked installation of specializations
+ Reworked OSR implementation to account for specialization being done on
a worker thread
+ New statistics model for making better specialization decisions
+ Frames carry a correlation ID to allow reconstruction of call stack and
analysis on the specialization worker thread
+ Produce specializations based upon most common occurring types, not just
those sampled immediately after passing a threshold
+ Megamorphic code gets a non-type specialization and may be JIT-compiled
+ Remove hard limit on spesh candidate count
+ MVM_SPESH_DUMP updated to show statistics and planned specializations
+ Updated log analysis and guard insertion to use the new statistics model
+ New argument guard, based around a tree, which means less checks need to be
performed when deciding on with specialization to run
+ Add dumping of new argument guard structure
+ Log time that specialization work consumes
+ Add a script to sum up logged spesh times
+ Better organization of MVMInstance and MVMThreadContext fields
+ Removed now-unused cur_usecapture field
+ Avoid passing a real NULL as an object argument in stack unwind handling
+ Disable spesh in initial load/deserialize; there's no useful data at this
+ Add thread ID range check to GC debug mode
+ Deduplicate code from MVM_string_indexing_optimized
+ Start off collapsing strands as 8bit instead of 32bit
+ Concatenation improvements
+ When concat needs normalization only normalize one section
+ Don't trigger re_nfg on concat for base character + combiner
+ Add functions for iterating the codepoints of a grapheme
+ Don't re_nfg when last_a or first_b are synthetics in concat
+ Don't take the no re_nfg shortcut if a repetition contains a synthetic
+ Don't do re_nfg shortcut if either a or b are repeats
+ Use MVM_string_graphs_nocheck when able in concat
+ Fix conditional to check first instead of last strand of string b
+ Enable native callbacks on different threads
+ Fix double-decrement of unused args in inlining
+ More detailed dump of spesh slots
+ Don't NULL out spesh slots; they may be re-used
+ Make JIT include SC write barriers
+ Stronger validation of code objects in optimizer
+ Refactor code into iterate_gi_into_string() to reduce code duplication
+ Move collapse_strands() after iterate_gi_into_string()
+ NULL out registers on re-OSR
+ Only devirtualize REPR funcs in JIT when concreteness is known
+ Fix JIT of nqp::ordat and nqp::ordfirst
+ Update TinyMT to version 1.1
+ We always have threads now (thanks to specializer worker), so remove single
threaded VM instance lock avoidance paths
+ Improve GC thread sync-up
+ Simplify handling of the thread list
+ Introduce GC orchestration mutex/condvars, and use them to avoid busy
waiting when synchronizing threads for GC
+ Avoid many array searches for SC code refs
+ JIT param_sp and param_sn
+ Inability to open telemeh log shall not be fatal
+ Output spesh worker info on telemetry channel
+ Size of MVMFrame reduced
+ Eliminate effective_handlers field in MVMFrame
+ Eliminate effective_bytecode field in MVMFrame
+ Add function to encapsulate special return setup
+ Move special return into a frame extras
+ Move continuation tags into frame extras
+ Move invoked_call_capture to frame extras
+ Move dynamic lexical cache to frame extras
+ Eliminate throw_address from frames
+ Force MVMReturnType to be a single byte
+ Toss never-used nameds re-use logic
+ Eliminate need to memset MVMFrame
+ Remove historical, now-unrequired, nullings
+ Use a bit field for named args used when possible
+ Improve NFA memory performance
+ Small optimization to string_equal, remove repeated checks
+ Remove two invoke handler functions we don't need
+ Remove long-unused newlexotic/lexoticresult ops
+ Remove now-dead newlexotic functions
+ Remove now-unused pool_index in MVMStaticFrame
+ Eliminate now-unused Lexotic REPR, lexotic cache
+ Remove a dead field
+ Remove unused gotolexotic function
+ Move spesh data into a separate object from MVMStaticFrame, for less memory
use and better GC performance
+ Break MVM_sc_get_sc into inline and slow path
+ Delete unused var in MVM_string_ascii_encode_substr
+ Avoid range check on every SC object access
+ Delete unused var in MVM_string_latin1_encode_substr
+ Fix MVM_string_compare to support deterministic comparing of synthetics
+ Disable JIT when we're not allowed to make memory executable
+ Have MVM_string_codes iterate the string with codepoint iterator
+ Speed up attribute reads during invocation
+ Document the various op adverbs
+ Reduce duplication and simplify logic in invoke
+ Move checking part of force_to_heap into an inline
+ Allocate frames on heap that tend to need promotion anyway
+ Improve deopt logging output
+ Append, not prepend, moved deopt one annotations
+ Turn decont into a deoptonepoint and insert guards after decont
+ Store deopt one target directly in bytecode rather than calculating it each
+ Implement speculative pre-selection of specializations and inlining based on
guarding against the invocation target
+ When inlining, replace receive instruction instead of send instruction, to
better cope with register re-use
+ JIT pow_I
+ Validate range of branch target in spesh code-gen
+ Anchor inlinee handlers to inliner entry
+ Fix and expand dead basic block removal
+ Remove duplicate use of named arg checking
+ More sophisticated named arg handling in spesh, removing sp_namedarg_used op
+ Make it possible to cancel an async socket reader
+ JIT rand_I and also give it a smallbigint path
+ Ensure that serialized padding bytes are 0
+ Avoid uninitialized bytes in default tables
+ Avoid uninitialized bytes at the end of serialized tables
+ Add -Werror=pointer-arith for gcc
+ Put hard upper limit on bytecode size to optimize
+ Move annotations multiple basic blocks if needed
+ Eliminate "blocked by alias" propagation checks
+ End basic blocks after all throwish/invokish
+ Extra fflush so spesh log is written before crash
+ Ensure frame handler start/ends are BB boundaries
+ Don't explode on spesh dump when no facts
+ Cope with extra successors when inlining
+ Factor out and re-use dead BB elimination
+ Allow for GOTO handler to become unreachable
+ More precise CFGs for control exception handlers
+ Add indexim_s op and improve/fix bugs in eqatim_s
+ Further harden against removed handlers
+ Add debugging aid for spesh preselection
+ Make rebless deopt stack top frame also
+ Bump usage of writers in deopt instructions
+ Start storing/using static frame in inline table
+ Use register holding code ref for deopt purposes
+ Can never inline frames declaring state vars
+ Correct handler order when inlining
+ Implement inlining of basic lexical lookups
+ Tune the inline size
+ The listen callback shall also push socket and peer IP and port
+ Don't set a bit we're meant to be clearing in GC gen2 promotion
+ Harden listen_cancel against dupe calls
+ JIT nativecallcast, trunc_i32, extend_i32
+ Make sure the libffi callback can be reused
+ JIT the create op
+ Check ffi_closure_alloc() return value
+ Implement atomic ops
+ Provide a way to have an int type sized to the architecture's atomic
+ Implement cas for Scalar references and native integer references
+ Implement atomic load and store for Scalar references and native integer
+ Implement atomic increment, decrement, and add for native integer
+ Provide an op for doing a full memory barrier
+ JIT of the new atomic ops
+ Fix a bug in index/eqat(im) and in ord_getbasechar
+ Add nqp::coveragecontrol op
+ Remove two more unneeded strlen from nativecall.c
+ Only foldcase the needle for ignorecase operations
+ Remove impossible less than zero checks on unsigneds
+ Add GC debug check on frame heap promotion
+ Correct an MVM_ASSIGN to barrier the right target in continuation invocation
+ Root thread object while creating thread context
+ Correct invokewithcapture GC handling
+ Extra GC debug checks after frame promotion
+ Blacklist unhandled param ops in spesh args handling
+ Add hostname to failed to resolve error
+ JIT param_rp_o and param_rp_i
+ Introduce NFG_CHECK which checks string is in NFG form
+ Fix concatenation bug when renormalization needed
+ JIT setcodeobj and captureinnerlex
New in 2017.07
+ Full Unicode 9.0 and Emoji 4.0 text segmentation support
+ Improvements to segmentation of Emoji w/ GCB=Other
+ Use GCB instead of HST to avoid property lookup for Hangul
+ Reorder conditional in maybe_hangul() to be more clear
+ Work Hangul grapheme segmentation into GCB switches
+ Don't break after ZWJ for Emoji=True + GCB=Other
+ Make string_index 16% faster for non-identical string types
+ Greatly reduce the cases when string concatenation needs renormalization
+ Use normalize_should_break to decide if concat needs normalization
+ Rename should_break to MVM_unicode_normalize_should_break
+ Fix memory leak in MVM_nfg_is_concat_stable
+ If both last_a and first_b during concat are non-0 CCC, re-NFG
+ Improve the speed of normalization. Improves speed of slurping non-ASCII Unicode files
+ Speed up ccc by making ccc_relative using integer prop lookup
+ Rename is_control_beyond_latin1 to is_control_full
+ Use MVM_string_graphs_nocheck in more places throughout strings/ops.c
+ Rename relative_ccc to MVM_unicode_relative_ccc
+ Remove arbitrary string repeat limit
+ unicmp_s improvements
+ unicmp_s can now reverse any of the collation levels
+ Handle additional possible cases in collation
+ Store collation levels in an array not a single value
+ Handle quaternary collation level being both enabled and reversed
+ Improved instruction and basic block deletion handling to allow further code
+ Only compile in \n -> \r\n on Windows
+ JIT-compile write_fhb and encode ops
+ Include return type facts for the encode op
+ Implement setbuffersize_fh op, which sets up output buffering for synchronous
file handles
+ Fix error message for decodersetlineseps getting non-decoder
+ JIT open_fh, close_fh, read_fhb, decoderaddbytes, fc, chr, getcp_s, and
+ Remove synchronous process support
+ Add new asynchronous permit mechanism, which can be used to provide delayed
starting of reads and back-pressure
+ Implement permits handling for asynchronous processes
+ Convey file descriptors of stdout/stderr pipes when spawning an asynchronous
+ Add debug helpers: MVM_dump_bytecode, MVM_dump_bytecode_stackframe and
+ Add gdb command to give a history of spesh optimization decisions
+ Improve specialization dump: less trailing spaces, chop up facts list by
+ Empty out instruction list of removed basic blocks
+ Eliminate duplicate code in utf8 decoder
+ Fix overflow in uniprop lookups
+ Fix ASCII streaming decode error handling
+ Make illegal synthetic an oops, not a panic
+ Make some fixes to the Unicode data file downloader
+ Use MVMint64 for MVM_string_chr (oplist/function mismatch)
+ Fix an accidental nested redeclaration in process handling
+ Tweak the format of oops messages
+ Improved debug output for serialization errors
+ Fix ARM build
+ Clear cached dynamics when taking continuation
+ Missing MVMROOT during an allocation
+ Remove never-assinged use_mode_frame field from CallCapture
+ Remove now-unused cur_usecapture per thread
+ Eliminate mode flag from CallCapture
+ Fix invokewithcapture to keep the used capture alive
+ Always copy callsite into an MVMCallCapture unless it's interned
+ Remove now-unrequired effective_callsite
+ Add decodertakecharseof op
+ Copy correct length in get_all_in_buffer
+ Fix ctxcode op to not leak a NULL
+ Fix decoder typos
New in 2017.06
+ Make coerce_s_n work more like the Perl 6 Str.Num method
+ Eliminate socket string I/O
+ Re-implement synchronous sockets without using libuv, enabling them to be
passed between threads
+ Add ability to get port from already bind-ed socket
+ Add cpucores op to get the number of CPU cores
+ Fix inconsistency in decode stream take bytes API, so it returns null if
that number of bytes is not available
+ Fix memory leak in syncpipe
+ Removed unsed header file in threads.c
* Remove unused args to bind_stdio_handle
+ Remove char-level I/O ops and the functions they called
+ Remove char-level I/O from synchronous I/O vtables
+ Remove unused encoding option in dir handle
+ Re-implement print/say debug output ops to encode and then use binary I/O
+ Eliminate use of libuv in synchronous file handles
+ Switch standard handles to use the new synchronous file handle code, which
means they can now be safely used from multiple threads also
+ Remove unused ->filename slot of syncfile
+ Debugging aid for introspecting P6opaque objects
+ Support merge_bytes in async proc ops, for reading STDOUT and STDERR
+ Support binding handles to file descriptors in async procs
+ Fix off-by-one in profiler node GC
+ Add string eqat/index ignorecase+ignoremark functions
+ Add new eqaticim_s and indexicim_s ops ignorecase+ignoremark
+ Use norm instead of n for the normalizer variable
+ Add improved support for GCB=Prepend
+ Improve Regional Indicators support during normalization
+ Serialize a Decoder REPR object into null, so incidental file handle
serialization in Perl 6 does not blow up
+ Improve named argument optimization, so we can specialize and throw out
instructions in more cases
+ JIT decodertakeline
+ Fix missed opportunity to run JITted code
+ Have inline log note what couldn't inline also
+ Remove successor when optional named argument is passed, so default code
can be eliminated
+ Flag writers that die when a basic block is eliminated, and disregard them
in PHI node analysis, provide more precise type information
+ Make a basic block elimination pre-pass before the main optimization work
+ Set dead writer when deleting instructions also, to further aid PHI merges
+ Track which basic blocks are part of a jump list
+ Delete pointless goto instructions (those at the end of a basic block that
simply go to the next block)
+ Remove bad Windows quoting option async proc code
+ Actually log inlines to stderr as the comment up top claims
+ Make find_separator only look at the last chars, which is far cheaper
+ Add help text for environment variables to Configure
+ Move NFG initialization into nfg.c
+ Cache CRLF grapheme value
+ Cache maximum separator length, to save recomputing it for every line that
is read
+ Cache a list of final separator graphemes, for faster stopper detection in
streaming decoders
+ Introduce a max final grapheme codepoint filter, for faster stopper
detection in streaming decoders
+ Add a UTF-8 decoding fast-path that doesn't need to go through the full
+ Keep last freed chars buffer handy for re-use in streaming decoder
+ Make a smarter guess at decode result buffer size in streaming decoder
+ Don't copy when we can steal decoder output, saving a memory copy in most
line reading operations
+ Various micro-optimizations to UTF-8 decoding fast path
+ Fix newline translation in various encoding's streaming decoder
New in 2017.05
+ Mark profiler call graphs iteratively instead of recursively
+ Keep around line number annotations in spesh, for more accurate source
position information for coverage data in specialized code
+ Introduce "telemeh", a high-precision-time low-impact logger
+ Fix error reporting in chdir
+ Fix memory leak on error in chdir
+ Travis: readlink doesn't have `-f` on MacOS so make our own solution
+ Fix bug in index ignorecase and equal at ignorecase
+ Fix all known remaining bugs in indexic and eqatic
+ Zero slot when popping a VMArray, to avoid junk reads if it grows again later
+ Add can_fit_into_8bit funct, put logic used many places into one function
+ Use -1 instead of 0 when long right-shifting negative smallints
+ Remove workaround for tommath issue #56, which is now fixed upstream
+ Don't crash on reading a closed dir handle
+ Remove deprecated async string I/O ops
New in 2017.04
+ Shorten the nursery when creating large bigints, to bring GC forward and
resolve excessive memory use
+ Use correct format for repeat/concat errors
+ Fix bug in indexic_s if expanding codepoint is the last codepoint
+ Special case "\r\n" in MVM_nfg_is_concat_stable for performance reasons
+ Further optimize MVM_nfg_is_concat_stable to speed up concatenation
+ Do not set use rpath if installing into proper system locations
+ Optimize passes_quickcheck_and_zero_ccc to be much faster
+ Give this_repr constants more meaningful names to aid debugging
+ Streamline MVM_bigint_radix and MVM_radix for Nd Unicode #'s
+ Fix case-insensitive string compare bug when synthetics are in the haystack
+ Improve description for "should eventually be unreachable" error
+ Correctly detect and handle overflow in mp_get_int64
+ Split into mp_get_int64 and mp_get_uint64
+ Only allocate and normalize for cp's that require it in MVM_string_chr, and
short-circuit Unicode property test for codepoints below 0x300
+ Provide a better error when failing to encode surrogates in UTF-8
+ Add a cast to suppress a compiler warning in strings/ops.c
+ Factor out code from equal_at_ignore_case for use in index_ignore_case also
+ Use both hex and decimal for UTF8 encoding error messages
+ Add parentheses in various places to suppress compiler warnings
+ Use PRIu64 in fprintf's to fix compiler warning about incorrect types
+ Add a check that introspection->is_tty is not NULL, avoiding a crash
+ Mention debug_name in errors about uncomposed repr
+ Add new --coverage option for
+ First prototype of a per-line coverage reporter, enabled by setting
+ Cope with a native type with no nativesize, but signedness
+ Remove two functions in normalize.c that have been superseded
+ Give collapse_strands a 5.4% speed boost under some workloads
+ Add MVM_string_graphs_nocheck funct, use it in places we previously already
+ Have a two-part loop in collapse strands to make loop tighter when possible
+ Implement serialize/deserialize in VMHash REPR.
+ Use memmem in string index. Uses Knuth-Morris-Pratt on glibc, and adds the
FreeBSD memmem.c for use on Windows
+ Fix a join NFG bug when there was an empty string and an empty seperator
+ Reorder MVMStaticFrameBody to save 16 bytes according to pahole; similarly
save 16 bytes in MVMCompUnitBody, 24 bytes in MVMJitCode, 8 bytes in
MVMIOSyncStreamData, SerializationRoot and SerializationReader
+ Remove arbitrary and small length range check for reading bytes from a file
+ Remove unused defines in threadcontext.h
+ Greatly reduce contention in the fixed-size allocator for multi-threaded
programs, giving up to 40% speedup in some cases
+ Add continuous coverage analysis to Travis builds, along with other Travis
+ Mark thread GC blocked when doing synchronous writes
+ Add missing MVMROOT when reading bytes, which could result in occasional
data loss
New in 2017.03
+ Fix some missing variable initializations
+ Set effective_handlers in context-only frame
+ Streamline code in hash computation, hopefully fixing a Coverity warning
+ Detect and throw on over-size array
+ Put in a limit for codepoints in a grapheme, to avoid various overflows
+ Fix a missing NULL check at end of profiling
+ Panic when a new thread context can't create an uv_loop
+ Better handling of out of memory when creating a thread
+ Another attempt at silencing the pthread_yield warnings
+ Missing GC block marking in event loop starting, fixing a deadlock
+ Fix CArray marshalling of type objects
+ Provide a way to put Decoder in nl-translate mode
+ Ensure Decoder REPR never sees concurrent use
+ Debug option to detect concurrent VMArray use
+ Encode strings as UTF-8 in MVM_unicode_string_from_name
+ Reword exception message for read() outside original thread
+ Check that results of repeat/concat fit in an MVMString
+ Fix div_i JIT round to negative infinity
+ Ignore SIGPIPE by default
+ Only start readers if a process spawned OK
+ Remove deprecated char-mode async proc reading
+ Signal error to stdout/stderr on spawn failure
+ Do gen2 sweep before letting stolen threads go, fixing occasional SEGVs
+ Turn libtommath dependency into a submodule, use a MoarVM fork
+ Update libtommath fork to have expmod hang fix
+ Change MVM_string_equal_at_ignore_case to use fc
+ Fix MVM_string_equal_at_ignore_case when folding the haystack changes length
+ MVM_string_equal_at_ignore_case no longer applies a case changing
operation to the entire haystack. It now only changes case for as
much of the haystack length as is needed. ~30%+ or faster depending on on
haystack length.
+ Mention debug name and REPR name in "requires obj with repr X" errors
+ Remove unneeded variable in MVM_string_index
+ Add MVM_string_index_ignore_case function and indexic_s op
+ A range of improvements to the MoarVM GDB plug-in
New in 2017.02
+ Fix format strings that warn during compile
+ Implement missing cleanup of async task handles, fixing a memory leak
+ Make Unicode sequence and codepoint name lookup case-insensitive
+ Add Unicode sequences from NamedSequences.txt in the Unicode database
+ Remove second declaration of MVM_frame_destroy
+ JIT MVM_radix()
+ Make radix and radix_I 50% faster with Unicode Nd
+ Add East_Asian_Width prop
+ Fix memory leaks in synchronous sockets
+ Fix crashes in socket connect error handling
+ Don't leak memory in STable repossession
+ Missing MVMROOT around a lock acquisition
+ Refuse to form an NFA with a zeroed to-state
+ Add data section for JIT code, and use it for extop 'fake' registers
+ Correct typo in NFG trie node struct name
+ Fix overflow in div_i op
+ Implement support for synthetic graphemes in MVM_unicode_string_compare
+ Implement configurable collation_mode for MVM_unicode_string_compare
+ Use LDFLAGS in ld invocations
+ On Windows, create UTF-8 encoded argv upon program entry
+ On Windows, populate environment hash from Unicode environment
+ Some additional heuristics to cut down on cross-thread write log output
+ Fix abs_n op for negative zeros
+ Sort out semantics of closed async sockets
+ Fix overflow on 32-bit systems in is_full_collection()
+ Rename MVMArray file and constant to VMArray
+ Remove bogus indication that MoarVM builds on `cygwin`
+ Use utf8 for unicode_db files
+ Fix invalid read when GC was triggered in the string repeat op
+ Don't call MVM_string_graphs twice in indexing op, plus cleanup
New in 2017.01
+ Extract spesh block allocator from spesh, for wider use
+ Add a number of missing MVMROOTs, which could lead to outdated pointers;
also removed some unrequired MVMROOTs
+ Fix arg_flags allocation sizes
+ Remove an obsolete path from ldrpath
+ Check lexical accesses in GC debug mode 2 also
+ Add a #define to turn on inline logging
+ Fix callstack reset bug, which could corrupt deeply recursing callstacks
+ Don't allow re-compose of a P6opaque
+ Add a new unicmp_s op, which compares using the Unicode Collation Algorithm
+ Make sure we generate all values of the Line_Break property
+ Re-implement utf8-c8 encoding, fixing bugs and ensuring that non-NFC input
will round-trip properly also
+ Implement Bidi_Mirroring_Glyph as an integer property
+ Implement Emoji grapheme breaking and other combined codes
+ Add support for Grapheme_Cluster_Break=Prepend from Unicode 9.0
+ Make sure we break after Prepend if it's a control character
+ Add a script to download the latest version of all of the Unicode data
+ Missing rooting GC in rare exit handler case
+ Implement new setdispatcherfor op and add JIT for it
+ Use much faster atoi function in normalizer; 14% less CPU use when slurping
a file in UTF-8 encoding
+ For Decompose_Type, use int lookup instead of str for better performance
+ Fix heap snapshot crash on eventloop thread
+ Use /usr/bin/env perl for ./
+ Don't break after ZWJ or for MALE SIGN and FEMALE SIGN
+ Take into account actual allocated size of I/O buffers in gen2 promotion
+ Tweak full collection criteria in heap profiling
+ Free up spesh log slots after specialization, avoiding some leaks
+ Removed the getregref_ ops (unused by NQP or Perl 6)
+ Removed the continuationclone op (unused by Perl 6)
+ Enforce one-shot invocation of continuations
+ Greatly simplify handling of call frame working register lifetimes, leading
to consistently shorter lifetimes, less memory pressure, and faster calling
+ Eliminate now-unused `tc` field in MVMFrame, saving a pointer per callframe
+ Simplify args cleanup functions
+ Reduce number of checks in call frame marking, making it faster
+ Implement getstrfromname op, to get named Unicode sequences
+ Fix GC in spesh triggered by managed mutex use
+ Fix data race in inlining extop fixup
+ Fix data race in callsite fixup during inlining
+ Fix data race in string fixup during inlining
+ Fix charname lookups of LINE FEED and CARRIAGE RETURN
+ Remove Unicode 1 names and add Unicode Name Aliases
+ Convert MVM_malloc+memset to MVM_calloc
+ Clean out ancient "remove after rebootstrap" line
+ Fix missing cleanup of managed DecodeStream
+ Have DecodeStrem clean leftover char buffers
+ Fix a typo in decode stream destroy function
New in 2016.12
+ Decode Latin-1 and UTF-8 strings to 8-bit width when possible
+ Teach a few string functions to compress results into 8-bit storage
+ Fix for AIX's INFINITY not being a constant
+ Unlink libmoar before (re)installing it
+ Add configuration for AIX
+ Support Perl older than 5.10 for
+ Use "pkgconfig --libs libffi" additionally to --cflags
+ Fix powerpc detection on AIX (gcc)
+ Make multidim error messages say they are multidim
+ Add comment about where to find UNIDATA
+ Implement captureinnerlex op, for fixing QUIT/LAST phaser scoping in Perl 6
+ Fix mis-sized free in the NFG trie that only showed up in 32-bit
+ Add GC debug helper to "find" a pointer in nurseries/gen2 bins
+ Make ASSERT_NOT_FROMSPACE check fromspaces of all threads
+ Fix missing MVMROOT around an allocation
+ Fix typo in nfg.h comment
+ Fix native callback and GC interaction when embedded
+ Add GC block management functions to the public API
+ Mark throwpayload* as :throwish in oplist
+ Optimize the check for negative bignums
+ Remove useless mp_neg calls
+ Fix premature free of UV socket handles
+ Fix premature handle free in async UDP sockets
+ Add a "check every register access" GC debug mode
+ Provide a #define to disable dynlex caching
+ Provide a #define for deopt logging
+ Invalidate dynlex caches during deopt
+ Fix pow_I when it takes an exponent larger than 2**32
+ Only do MVM_ASSERT_NOT_FROMSPACE in GC debug mode
+ Add a fromspace assertion in finalize
+ Avoid a number of spesh GC invariant violations
+ Panic if we try to GC when speshing/JITing
+ Ensure we don't leak partially deserialized objects
+ Fix unrooted frame around SC object lookup
+ Remove some GC debug code
+ Avoid reading nativerefs in spesh, since it can cause boxing and thus GC
+ Cope with push being used on concurrent queues
+ MVMROOT around putting work on concurrent queue
+ MVMROOT eventloop queue when polling it
+ Do MVM_ASSIGN_REF after block/unblock in concurrent queue
+ Fix more unrooted frame around SC object lookup
New in 2016.11
+ Workaround tommath issue #56 which affects random bigint numbers > 32 bits
+ Fix memory leaks in nqp_nfa_run
+ Fix a sizeof arg that allocated a much-too-big buffer for callsite arg names
+ Add missing breaks in MVMString's copy_to
+ Prevent null deref when calling MVM_string_utf16_encode
+ Corrections to mkdir on Windows
+ Introduce MVM_SPESH_LIMIT, which limits how many specializations will be
performed; this is useful for debugging which specialized block is to blame
for a bug
+ Make sure we never box a NULL filename when creating backtraces
+ Fix the nativecall attribute error messages
+ Remove (non-existent) num16 from error message
+ Make the fixed size allocator provide useful information to Valgrind
+ Implement serialization of SCRef
+ Include file/line of unserializable closure, to aid debugging
+ Add type info when failing to bind an attribute
+ Use ffi_arg type for libffi nativecall return types
+ Handle libffi return type more correctly
+ Work around missing libatomic_ops prototype on s390x
+ Panic when trying to GC a locked mutex
+ Make VM panic output state that a panic occurred
+ Fix JIT code generation bug in nqp::exception
+ Add missing rooting of value pushed to concurrent queue
+ Add src/gc/debug.h dependency to Makefile
+ Mark a thread GC-blocked while it is in native code
+ Have "Cannot * a type object" also outputs the type's debug name
+ Don't reveal partially deserialized method cache
+ Give a bunch of exception ops REPR and debug name output
+ Prevent segfault when null string used as hash key
+ Request POSIX.1.c compliance on solaris
+ Change to use readdir insteal of readdir_r
+ Use GCC on solaris by default
+ give diagnostic output when compiling fails
+ Handle current Solaris compiler not understanding -mt
+ Fixed readdir so it won't check old errno
+ Work around clock_gettime issue on OSX
+ Refactor hashes to no longer need to flatten ropes in string keys
+ Save 8 (64-bit) or 4 (32-bit) bytes per entry in the MVMHash REPR
+ Remove the deprecated flattenropes op
+ Remove now-unused MVM_string_flatten function
+ Don't treat an nread of 0 in libuv read callbacks as an error
+ Bump to latest libatomic_ops
New in 2016.10
+ Fix build without libtommath source
+ Make MVM_file_open_fh() throw if the file we opened was a directory
+ Fix bug and memory leaks in MVM_file_open_fh()
+ Add error message for likely MacOS build failure
+ Don't set inheriting process on inherited pipe, fixing a segfault
+ Update to the Unicode 9 database
+ Die on CStruct without any fields
+ Constant-fold unipropcode and unipvalcode
+ Use PRId64 instead of %d for 64 bit int format string args
+ "Cannot unbox type object" error gets debugname and native type info
+ Fix uninitialized arg_names of an MVMCallsite
+ Handle C++ constructors on libffi
+ Fix CUnion get_attribute treating inlined attrs as pointers
+ Fix 32 bit issue with rw args in NativeCall callbacks
+ Use better throw-away type for void nativecalls
+ Gracefully handle a 0 RSS reported by the Linux kernel
+ Fix "Invalid free()" in empty repossessed arrays
+ Make sure we mean "signed char" when we say "char"
+ Fix calculating structure sizes for arm64 and others
+ Disable JIT on x32, since it has a different calling convention
+ Fix pointer size unit in configure message
+ Use set_uint64 in from_num, otherwise we overflow on x32
+ Rewrite mkdir_p api, no function changes
+ Improve nativecall attribute error messages
+ Include debug_name in crossthreadwritelog and serialization errors
+ Deprecate async string I/O ops
+ Deprecate flattenropes op
+ Implement indexingoptimized op (replaces flattenropes, but is not in-place)
+ Fix memory leadk in ord_basechar_at
+ Ensure errno is grabbed before MVM_free is called
+ Make extra sure unlock only happens if lock happened
New in 2016.09
+ Do not crash when the container configuration can't be read
+ Correctly calculate the work_size when inlining between compilation units
+ Validate indices of param_ ops and require checkarity before param_*
+ Fix tautological comprison; snprintf returns an int, not a size_t
+ Fix tell for files that haven't been read from
+ Don't allow zero alignment in P6opaque storage spec
+ Index check lexicals when reading static flags
+ Add Decoder REPR and a number of ops that provide access to VM-backed
streaming decoding
+ Don't segfault when serializing an uncomposed p6opaque
+ Don't read_int into a size_t which is unsigned
+ Never leak sym_name from nativecall_build
+ Fix a couple of potential leaks in heap snapshots
+ Kick arg_ and argconst_ ops from the correct basic block when inlining
+ Use HASH_FIND_CACHE instead of HASH_FIND in MVMHash
+ Correct wording of named arguments error
+ Bounds check for hints in get_attribute and bind_attribute
+ Use hints for is_attribute_initialized, and null-check repr_data
+ Clean up various unused variables
+ Mark thread GC blocked while accepting a socket to prevent deadlocks
+ now has an explicit use lib "."
+ Fix missing finalization queue cleanup at thread exit
+ Mark SC used in bytecode loading as claimed to avoid keeping them around
for too long
+ Fix an error in multi caching of named arguments that could cause lookups
to fail and the cache to keep growing
New in 2016.08
+ Don't crash in P6opaque on NULL name_to_index_mapping
+ Fix off-by-one in grapheme iterator
+ Block/unblock thread for GC on semaphore wait
+ Mark blocked around some more lock acquisitions
+ Fix various cases of out-dated pointer reads on concurrency control constructs
+ Hold uv_sem_t at a level of indirection, so it won't move in memory
+ Add a flag for PIPE_MERGED_OUT_ERR; fix stdio setup for merge
+ Fix EOF detection when reading files from /proc and similar
+ Fix lost socket listen errors
+ Implement async cancellation completion notifications
+ Add some missing fact dependencies in spesh, fixing some wrong guard eliminations
+ Avoid use of possibly-invalidated decont facts in spesh
+ Remove keep_caller from MVMFrame
+ Correctly NULL-terminate the buffer in MVM_vm_dump_file
New in 2016.07
+ Implement a new multi-dispatch cache, structured as a tree, able to
hold more entries more memory-compactly, and able to cache dispatches
involving named parameters
+ JIT read_fhs op
+ Implement elems REPR function for MVMContext
+ Implement a BB-splitting manipulation function in the optimizer
+ Fix sha1 op to work with null bytes
+ Fix bad interaction between profiling and dead allocation elimination;
the presence of allocation logging would prevent the optimization, leading
to misleading profiler output results
New in 2016.06
+ Serialize the HLL role field of STables
+ Avoid VMNull setup memcpy/loop in specialized frame initialization
+ Stop caching MVMContext on a frame
+ Use frames directly when serializing closures, rather than having to create
an MVMContext wrapper for every one
+ Write SC index when deserializing, repossessing, and preparing to serialize,
saving a huge amount of linear scanning
+ Only used cached SC index if SC itself matches
+ Remove an unrequired memset to clear the args buffer
+ Inline args preparation into interpreter, and JIT it directly instead of
making a call to a tiny function
+ Mark getlexcaller as :noinline
+ Don't lose handlers during multi-level inlines
+ Eliminate loop in P6opaque's get_boxed_ref function, decreasing cost
+ Implement payload throw/handler support
+ Implement callerlex throwing mode
+ Make source-able, instead of only autoloadable
+ Fix inlining causing wrong lexical handler lookup
+ Make build in dir containing space work
+ Allow HLL handler for unhandled lexical exception
+ Add debug_name to "cannot iterate X with Y REPR" message
+ Give "this is not a X iterator" more info, too
New in 2016.05
+ Use MSVC-provided stdint.h and inttypes.h when possible
+ Improved various error messages to include the debug type name
+ Eliminate call frame reference counts, instead using a linear call stack for
frames that never become heap-referenced and using the garbage collector to
manage those that do
+ Tune number of gen2 sized bins
+ Improve error reporting in P6opaque's compose function
+ Improved GC debugging support to catch more problems
+ Fix a race between serialization context resolution and garbage collection
+ Add a missing MVMROOT in shell/spawn
+ Fix segfault when trying to serialize an uncomposed P6opaque type
+ Update the build system to autodetect system provided libs
+ Add missing rooting, since the instrumentation level barrier may allocate
+ Fix cleanup of temp roots at thread exit
+ Add missing rooting of exception message in `die`
+ Fix CUnion layout computation GC issues
+ Fix data race in clearing of "in inter-gen set" flag
+ Various improvements and fixes to the spesh_graph tool
+ Add missing optimization of decont_s and decont_u ops
+ Eliminate duplicate MVMContext creation code
+ Fix full cleanup crash: the NFG uses the FSA, so have to destroy NFG first
+ Close dynvar log filehandle in instance destroy
+ Clean up cross-thread write logging mutex
+ Free debug names in STables
+ Free the string_heap_fast_table in CompUnit bodies
+ Free permroot descriptions
+ Free thread's finalization queue in tc destruction
+ Add docs about MVMROOT
+ Fix crash when GCing an ended thread
+ Implement loadbytecodebuffer and loadbytecodefh ops
+ Speed up initialization of non-specialized frames
+ Use varints to make serialization of various integers more compact, reducing
size of compiled output
+ Ensure we always produce at least one snapshot when heap profiling
+ Remove debug output when taking heap snapshots
New in 2016.04
+ Implement heap snapshots support, exposed through the profiling API
+ Don't mark tc->cur_frame twice during GC
+ Move thread object mark into thread root mark, removing a special case in the
main collector
+ Add API for adding a permanent root together with a description
+ Mark thread blocked for GC when doing synchronous reads
+ Make MVM_bigint_from_num jit-friendly
+ JIT coerce_nI as a call to bigint_from_num
+ Set debug_name on a few more built-in types
+ Add REPR API for getting unmanaged size, implement it for many REPRs
+ Fix compile on FreeBSD 9
+ Handle single-char build directory names by changing capture to lookahead
+ Fix performance of reading very long lines
+ Fix utf8-c8 decode crash caused by off-by-1
+ Fix a full vs. partial collection detection bug
+ Factor unmanaged size into promoted bytes.
+ Enhance scheme for deciding when to do a full collect
+ Bail out if HLL name string index is invalid in bytecode unpack
+ Don't try to set flags beyond num_lexicals when reading in call frames
+ Adjust byte count when UTF-16 BOM marker consumed
+ Fix buffer overrun in utf8-c8 decoding
+ Initialize object registers with VMNull when allocating frames, to avoid a
number of possible segfaults
+ Fix incorrect boolification of "" under mode MODE_UNBOX_STR_NOT_EMPTY_OR_ZERO
+ Utilize debug_name in nativecall error messages
New in 2016.03
+ Fix the build when not bundling libtommath
+ Updates to (MoarVM GDB plug-in)
+ Add serialize and deserialize to CPointer REPR
+ Don't do cross-HLL inlining
+ Fix missing call optimization/inlining of non-multis in some cases
+ Remove dangerous/broken usecapture optimization, fixing a big memory leak
+ Lazily decode the string heap, improving startup time and reducing memory
+ JIT the atposref_* ops
+ All the ref ops now properly set up facts in spesh
+ Fix dyncall on raspberrypi for calls > 4 params
+ Don't allocate a thread's second GC semi-space until needed
+ Don't keep an MVMStaticFrame array in MVMCompUnit, saving memory
+ Fix primary composite table generation, in turn fixing a SEGV
+ Measure slurpy param and param autoboxing allocations in the profiler
+ Implement native descriptor introspection for pipes
+ Further support for function pointers in native calling
+ Add debug_name field to STable struct and setdebugtypename, to allow easier
debugging and analysis
+ Get directory listing in utf8-c8 encoding
+ Fix JIT compiler bug in string le/ge ops
+ Handle nonblocking stdout properly for --dump
+ Fix linelocs buffer overflow in bytecode dumping
+ Include type info of wval/wval_wide referenced objects in spesh log
+ Don't keep around barely-used bytecode maps, saving memory
+ Only allocate instrumentation state if needed, saving memory
+ Boost size of the multi-dispatch cache
New in 2016.02
+ Numerous fixes for places where --full-cleanup leaked
+ Free per-thread NFA evaluation memory and lexotic cache
+ Free SC root objects and dependencies array when freeing SC
+ Free arg_names when interning callsites
+ Free deserialization work index lists
+ Clean up decode stream separators on handles
+ Don't leak a replaced boolification spec
+ Fully clean up callsite re-use hash in assembler
+ Fix leak involving inlining handlers
+ Fix a couple of leaks when decoding strings
+ JITted calls to functions with MVMRegister argument don't want float calling
+ Fix leak in type parameterization.
+ Don't create partly-initialized callsites in nativecall callback handlers
+ Check for NULL in exception payload and return VMNull in getexpayload
+ Fix bug for inlined structures in strutures in nativecall code
+ Fix structure size calculation when other structures are inlined
+ Plug memory leak when shelling out without capturing
+ Fix leak on out-of-bounds multi-dim access
+ Make sure unused continuation tags get freed
New in 2016.01
+ Assorted code cleanups (unreachable code, duplicated includes, etc.)
+ Various update to MacPorts portfile and instructions
+ Only optimize istrue to unbox_i when known concrete
+ Bump libuv to 1.8
+ Add submodule sync before update in
+ Suggest build-essential if no gcc
+ Various fixes/updates to graph_spesh.p6
+ Don't install sha1 and tinymt headers; they're only used internally
+ Only install msinttypes on MS platform
+ Fix a gc bug in string concatenation
+ Add subsecond file time ops stat_time and lstat_time
+ Fix stat CREATETIME return value
+ Note graphs_s will be deprecated; dupe of chars
+ Re-order ops in interp.c to match oplist
+ Add compile-time platform check for JIT support, to handle universal binaries
New in 2015.12
+ Allow the backlog arg for socket listening to be set
+ Resize buffers as needed when taking a UTF-16 substring
+ Context-captured frames should remember caller
+ Re-use MVM_frame_context_wrapper for ctx op, to reduce code duplication
+ Fix bug with dynvar lookups when we fall out of JITted code
+ Clean up callsites in comp unit objects
+ Clean up interned callsites on interpreter shutdown
+ Clean up memory allocated by FSA
+ Copy callsites when inlining
+ Cleanup Unicode property lookups on shutdown
+ When async streams are done, emit sequence number but no data
+ Force SC initialization to allocate in gen2, fixing a deadlock
+ Add a sanity check for gen2 allocation flag
+ Allow NativeRef to spesh assign_i and decont_i
+ Implement sp_deref_bind/get_i64/n in the JIT
+ Handle "is rw" pointers in native routines
+ Teach our guard op generator about NativeRef
+ Fix ordbaseat interaction with synthetics, and end of string semantics
+ make ordfirst and ordat consistent with ordbaseat
+ Add casts to resolve type warnings
+ Add UBSAN support to
+ Support native references to multi-dimensional indexes
+ Implement fileno_fh op
+ Implement async UDP sockets
+ Probe for _Bool, and expose bool/size_t to nativecall
+ Implement input newline translation, and translation on output on Win32
+ Validate lexical types properly
+ Implement truncate/extend ops for sized natives
+ Init cd->arg_flags so callsites_equal wont complain
+ Avoid memcpy(x, NULL, 0) in spesh
+ Ops to introspect type bits/unsignedness
+ Disable unaligned reads under UBSAN
+ Align bytecode sections to 8 bytes
+ Dump "known to be RW container" flag to speshlog
+ Add missing unsigned operand types; clean up unsigned int ops
+ Add box unsigned to REPR boxing API
+ A handful of extra unsigned int related ops
+ Teach assembler about unsigneds
+ JIT captureposprimspec, sized getlexref_, captureposelems, capturehasnameds
+ JIT jit eof_fh, readline[chomp]_fh, replace, gethllsym, objprimbits, say_fhs
+ JIT typeparameters, typeparameterized, typeparameterat
+ Coercion between num and unsigned int
+ Support boxing unsigneds in P6int REPR.
+ Recognize unsigned extop operands
+ Cheating native ref ops for unsigneds
+ Somewhat cheating unsigned parameter ops.
+ Kick out remaining unused arg_*/argconst_* ops after inlining
+ Fix bug that made Win32 throw on deleting nonexistent files
New in 2015.11
+ Fix const warnings about pointers to Unicode case table
+ Elide a few key-values from profiler data for default values
+ All Latin-1 controls are normalization terminators
+ NFG now uses Unicode Grapheme Cluster algorithm; "\r\n" is now one grapheme
+ Fix a canonical composition bug
+ Fix SEGV on nqp::chars on a null string.
+ Support multiple line separators on I/O handles
+ Support multi-grapheme line separators on I/O handles
+ Include \r\n synthetic in default line separators
+ Serialization writes string offsets as 2 bytes if possible
+ Used varints in a few more places in the serialization format
+ Serialize the STable mode flags in a single byte
+ Serialize the STABLE boolification_spec mode in 1 byte
+ Serialize the container and invocation spec flag bits with the bool spec
+ Implement readlinechomp_fh op, for reading lines without line ending
+ Fix moar build on DragonFly BSD
+ Fix join NFG bug when separator is empty
+ Improve normalizer performance on paths needing canonical combining class
+ Boost number of fixed size allocation bins, to handle more allocations
+ Fix encoding/decoding \r\n grapheme in all encodings
+ Make radix ops not blow up over synthetics
+ Fix normalizer to never re-normalize what was already considered
+ Encoders now throw exceptions on unencodeable characters by default
+ Allow specifying a replacement string for unencodeable characters
+ New UTF-8 Clean-8bit encoding for strings we exchange with the OS
+ Make escape handle \r\n properly
+ Handle files where stat falseley reports 0 bytes size
+ Provide a way for NFA to be given synthetics, not just codepoints
+ Teach NFA about ignoremark charrange case
+ Make MVMMultiCache container aware, including spesh/JIT gurd updates
+ isrwcont can now be jit-compiled
+ We can spesh isrwcont into a const now
+ Fix possible SEGV in getlex and bindlex when walking scopes
+ Release mutex in MVM_load_bytecode on exception
+ Allow named flattening args to show up amongst named args in callsites
+ Make later named args that are flattened in override earlier ones
+ Override setjmp to two-argument version on mingw64
+ fix a callsite memory leak
+ Fix ordfist/ordat JIT
+ JIT bigint ops or, and, xor, brshift, blshift and bnot
+ JIT hintfor op
+ Fix native call struct size calculation bug
+ Implement istty_fh op
New in 2015.10
+ Profiling: fix data collection when exiting
+ Profiling: improve timing calculation
+ NFG: Strip BOM from UTF-8
+ NFG: Implement casefolding
+ NFG: handle SpecialCasing
+ JIT: fix devirtualized REPR ops; devirt more ops
+ JIT: improve logging
+ Misc: Improve handling of state when spawning child processes
+ Code: Throw better exceptions in several cases
+ Code: linting, consting, avoid segfaults, etc.
New in 2015.09
+ Fix write to null handle on async socket
+ Add C++ support to native calling functionality
+ Make thread join force a GC run, preventing start/join loops eating memory
+ Remove more config and generated files in distclean target
+ Add MVM_CROSS_THREAD_WRITE_LOG to usage message
+ Try to get PC on valid instruction for cross thread write logging
+ JIT continuationreset and continuationcontrol
+ JIT string comparison ops
+ Don't devirtualize push_n or unshift_n for now
+ Async sockets: handle close,close and close,write
+ Differeniate when nativecasting to intN/uintN
+ Fix data race in frame reference count handling
+ Make findcclass and findnotcclass return one past end of string on non-match
+ Fix buffer overrun in assembler for labelled exception handlers
+ Free STables in a safer place, fixing a parallel finalization data race
+ Fix alignment of inlined structs/unions
New in 2015.08
+ Removed multiple internal data races
+ Add ctxcode op to get the code object of a context
+ Inlining in spesh will now check post-optimization size of code
+ Use a binary search in unicode block lookup
+ Unicode database file now compilable with newer MSVC
+ Lots of fixes for problems reported by linter software
+ Support for parsing Unicode numbers
+ Some potential segfaults fixed
+ New control exceptions "await", "emit" and "done"
+ Trying to unbox a bigint larger than 64 bit now throws
+ Fix "merge facts at phi" opt in spesh forgetting the first argument
+ Many memory leaks fixed
+ Properly close stdin handle when an async process dies
+ Async processes now have a "ready" callback
+ Sleep API now split into sleep and nanosleep
New in 2015.07
+ Support for multi-dimensional arrays
+ Improved support for pipes
+ Updated to Unicode 8
+ Die when we try to accept() or read() outside an originating
thread (used to silently not work)
+ Instrumentation for findings writes without locks to objects
originating from another thread
+ The profiler will now also show natively called functions
+ Support for libffi as an alternative to dyncall
+ exists_pos is no longer part of the REPR API
+ Accessing an object's HOW is now part of the API
+ libuv will now autoquote cmdline arguments on windows
+ Fixed some code object related ops that could segfault
+ New openpipe implementation that allows to read from and write
to stdin/stdout/stderr
+ spesh will now track facts across BB nodes even through PHI
+ Fixed numerous memory leaks when C strings were included in exceptions
+ Implemented "free at next safepoint" mechanism for safely freeing memory
from internal data structures in a threaded context, thus fixing NFG table
growth in multi-threaded applications
+ Fix compile on FreeBSD 8.4 and probably earlier by detecting gcc
+ Fixes for build repeatability
+ Optimization of can op fixed and fully enabled
+ Fix async process handle closing
+ Numerous warning cleanups for various compilers
New in 2015.06
+ No longer use up a full core in some async situations.
+ Errors from nativecall include dlerror() output for clarity.
+ More verbose and aligned output in MVM_SPESH_LOG.
+ Several ops added to the jit.
+ Throwing and resuming ops for exceptions supported in the jit.
+ More places now go through the Int cache.
+ Support for str attributes in CUnion and CStruct.
+ Non-characters now correctly considered valid for UTF-8 encoding.
+ Fix exception handler resolution bug.
+ Introduced MVM_SPESH_NODELAY to set spesh thresholds very low.
+ Support for building with gmake and gcc on windows.
+ Support for GNU/kFreeBSD.
New in 2015.05
+ Add missing C prototype for MVM_string_windows1252_decodestream
+ Fix uniname out of range error reporting.
+ Fix SSA crash when huge number of basic blocks.
+ Implement normalization buffer grwoth handling.
+ Add missing frees on invalid UTF-8 decoding.
+ Integrate NFG with UTF-16 non-stream decode.
+ Remove linenoise/readline
+ Give a decode stream a normalizer.
+ Further integrate normalizer with decode stream.
+ Fix chr for our brave new NFG world.
+ Update macportfile to 2015.04 release
+ Make \n a "normalization terminator".
+ Ensure concatenation is closed under NFG.
+ Don't leak synthetics from ord.
+ Integrate NFG with UTF-8 non-stream decode.
+ Implement NFG for decode stream case of UTF-8.
+ Fix use-after-free in open file error reporting.
+ Display exactly what thread ID was passed.
+ Release allocated resources before returning
+ Free resources for **pieces before returning
+ Release 'signature' before returning from unmarshal_callback()
+ Free leaked resource `buffer` before returning
+ Remove fragile assumption about buffer size.
+ Fix UTF-8 encoder to handle NFG.
+ More robust NULL string checking.
+ Ensure we get NULL-terminated strings if needed.
+ Bytecode file stores Latin-1 when possible.
+ Optimize temporary root handling.
+ Cache and mark the backend config hash.
+ Dual-purpose comp unit string heap as SC one.
+ Re-order bytecode read struct to be smaller.
+ Don't repeatedly calculate limit in bytecode read.
+ Toss some bits of ut_hash we don't use.
+ Toss hash bloom test bits we don't use.
+ Optimize at level 3 by default.
+ Toss even more hash bits we don't use.
+ Re-implement MVMIter on hashes using buckets.
+ Toss HASH_FSCK addition order check.
+ Use a simpler "deleting the last item" check.
+ Eliminate double-linked-list in hashes.
+ Fix use-after-free if hash iter block frees nodes.
+ Be consistent with paren-ing in macro.
+ Eliminate a single-use macro.
+ Correct head replacement logic.
+ Re-implement simple say/print using MoarVM I/O.
+ Thread ID handling cleanup.
+ Fix an ABA bug in the fixed size allocator.
+ At least do a spinlock rather than a mutex.
+ Factor out code to avoid a "magic value" all over.
+ Concurrency control on multi-cache additions.
+ Show line numbers for deopt annotations
+ Give every BB in the spesh log a line number
+ Devirtualize bindkey and bindpos ops
+ Implement MVM_op_elems for devirtualization
+ Implement getattr_* and getattrs_* devirtualization
+ Implement pop_* and shift_* for devirt
+ Implement bindattr and bindattrs ops for devirt
+ Fix a control flow thinko for logging
+ When failing from consume_reprop, do it loudly
+ No longer bail from many unhandled repr ops
+ Devirtualize setelemspos, existspos and existskey
+ Implement ordbaseat and eqatim_s ops for ignoremark
+ Silence warnings about pointer type mismatch
+ Increase stack space for call arguments.
+ More compact jit for add, sub, bor, band and bxor
+ Add lib install dir to rpath
+ Display "Inlined" flag in the spesh log
+ Add a missing barrier in multi-dispatch cache
+ Tweak error reporting of wrong outer frame
+ Include cuuid of invokee in error message.
+ Remove the frame pool
+ Spesh dump shows little words for fact flags
+ Spesh dump coderefs as filename + line number and "(closure)"
+ Handle LTM for ignorecase+ignoremark
+ Fix ref-count management of deserialized contexts.
+ Provide a "never repossess this" mechanism.
+ Fix a GC marking bug in parametric type setup.
+ Implement exception object creation from category.
+ Emit add, sub, bor, band, bxor with constant if possible
+ Kill duplicate getspeshslot ins for the same register
+ Formally bump minimum bytecode version to 5
+ JIT - check if constant value fits in 32 bit
+ Fix format type error in JIT logging
+ Add MVM_oops() function to panic with backtrace, used in spesh and JIT
+ Add op for disclaiming all objects of an serialization context (SC)
+ Check that owning object wasn't disclaimed by an SC.
+ Add support for CUnion repr to use with NativeCall
+ Add support for inlined CStructs and CUnions
New in 2015.04
+ Re-enabled lazy deserialization, decreasing Rakudo startup time and memory
+ Fix a possible buffer-overrun in MVMArray's existspos
+ Fix for ARMv5
+ Configure: add an option --ar
+ Mark existspos op as pure to allow better optimization
+ Tweak dynamic optimization and OSR thresholds to tune startup performance
+ Implement bounded serialization of parameterized types
+ Include file names in some deserialization errors
+ Clean up some unused functions and variables
+ Add __attribute__((format())) where appropriate
+ Correct some format strings
+ Allow nativecast from VMArray e.g. Blob/Buf
+ Output callsites in spesh log
+ Implement unsigned int types for native calls
+ Upgrade Unicode DB to Unicode 7.0
+ Include module that asked for stale dependency in error message
+ Handle 'is rw' params in native calls
+ Make some hot functions at startup time as always being inlined
+ Fix exception message when utf8 string is invalid from the start
+ Implement NFC/NFD/NFKC/NFKD Unicode normalization algorithms
+ Add op to normalize buffers of codepoints
+ Remove unused Unicode database script
+ Support cross-compiling with computed goto
+ Refactor pthread_yield detection
+ Add op "getcodelocation"; gets file and line of a MVMCode
+ Tweak istrue_s; every non-empty string is true now
+ Bump minimum serialization format version; remove code for old versions
+ Implement a more efficient varint serialization format
+ Remove the vestigial serialized 0 that used to be v-table length
+ Re-order struct MVMCollectable to slightly reduce L1 cache misses
+ Store the serialized reference type discriminator in 1 byte, not 2
+ Add missing IS_CONCRETE checks in serialization
+ Make unbox int/num/str functions test IS_CONCRETE always
+ Fix conflict with splice from bits/fcntl-linux.h
+ Fix missing frees of bytecode annotations
+ Serialize object headers more compactly
+ Serialize object references more compactly
+ Split codepoint iterator from grapheme iterator
+ Implement grapheme normalization algorithm (aka. "NFG")
+ Implement encoding of grapheme-level strings to bytes
+ Implement retrieving codepoints in different normal forms from NFG strings
+ Fake POSIX exit codes consequently on windows
+ Remove extra call to uv_run when closing a pipe
+ Loop over waitpid to get correct exit code for closed pipe
+ Basic implementation of case change with NFG
+ Make character class check on NFG synthetic uses base codepoint
+ Make Unicode property checks on NFG synthetics use base codepoint
New in 2015.03
+ Add a macports Portfile
+ Implement nativecallsizeof op
+ Rewrite MVM_file_copy so it handles files larger than 2GB
+ Mostly quiet MSVC warnings when compiling the JIT emitter
+ Chase libuv thread ID API change, and fix thread ID lookup on Windows
+ Teach profiler about native ref taking ops
+ Fix allocating an empty (no members) CStruct
+ JIT compilation for native reference related operations
+ Implement native register references
+ Support references to sized int and num lexicals
+ Fix missing GC rooting of callback object arguments
+ Fix big endian bug in if/unless optimization
+ Simplify known value handling in the optimizer
+ Make graph_spesh.p6 also show the dominance tree
+ Fix bugs in string_index_from_end
+ Bump dyncall revision
+ Fix big endian bug in the P6bigint REPR
+ Fix system detection in triple for cross compilation
+ Stop fiddling with slashes in openpipe on Windows
+ Make index('foo','') return 0, and handle null needle when start > 0
+ Type specialization for the bindattrs_s op
+ Optimize out many set instructions
+ Add helper functions so embedders won't need to poke into MVMInstance so much
+ Use CFLAGS, CPPFLAGS, and LDFLAGS from the environment, if set
+ Re-use allocated PHI node descriptors, to reduce allocations during optimization
+ Improve optimizer memory allocation block scheme to decrease waste
+ Allow STable changes in repossessed objects
+ Fix JIT of bindpos_n
+ Fix bogus pointer casts and libc name clashes to fix MinGW build
+ Fix a bug in iter optimization
+ Better armv6 and v7 detection
New in 2015.02
* Fix memory leak in P6bigint
* -O2 is now the default optimization level in clang/GCC
* Improve performance of SSA form calculation
* Dyncall dependency is now at version 0.9
* Better error messages in NativeCall
* CArrays are now zero-filled by default
* MVMArrays can now be casted and passed to native functions
* Addition of readlink and lstat ops, and general symlink compatibility
* libuv dependency is now at version 1.0.0
* P6int and P6num can now be "C sized"
* Implemented native references to lexicals, attributes, and array elements
* Added native_ref container specification
* Added iscont_[ins] and decont_[ins] ops
* Make multi-dispatch cache aware of native containers
* Mixin prefix test in P6opaque now disregards attribute-free parents
* Fix buffer overflow when trying to inline calls with many args
* Handle argconst_[ins] instructions in inlining
* Fix a crash from trying to unbox type objects passed to native args
* Decrement usage counts in some optimizations, killing more dead code
New in 2015.01
* Decrement usage of class type for setattr ops, enabling wval elimination
* Add missing concreteness checks in concurrency ops
* First operand of sp_guard* is r(obj) not int16
* Make ReentrantMutex not prevent serialization
* Fix various ops that could return real NULL pointers and cause SEGVs
* Spesh gethow (can be spesh slot lookup)
* Start documenting the parametric 6model design
* Implement parametric 6model ops
* Avoid calling MVM_callsite_get_common twice in many situations
* Use labs instead of abs to avoid truncation on 64-bit values
* Fix signed/unsigned warnings in bytecode handling
* Big signed/unsigned cleanup in string/buffer handling
* Fix leak when join returns early
* Fix missing free in args spesh
* Tweak fixed size alloc configuration for a small memory saving
* Improve missing SC code ref error reporting
* Start integrating 6model parametrics with serialization
* Don't delete BBs with handler annotations
* Handle assigning Str to a CArray[Str] slot (to assign NULL)
* Simplify and optimize varint serialization/deserialization
New in 2014.12
+ Various warnings produced by clang fixed
+ Fixed ceil_n and floor_n to return n64, not i64
+ Pass -faddress-sanitizer when --asan is set
+ Eliminate various unneeded set instructions
+ Properly update successors for non-passed optional parameters
+ Optimize can operations
+ When bindlex fails, we should report "bindlex", not "getlex"
+ Mark takeclosure as an popular allocating op in the profiler
+ Expose callsite interning for extops
+ JIT randscale_n
+ Dump lexical names when dumping spesh graph
+ Only look at MVM_NFA_DEB environment variable once, not every NFA run
+ Implement longest literal tie-breaker in NFA
+ JIT cmp_i
+ JIT isnanorinf
+ JIT cmp_n
+ Handle sometimes-allocating ops in the profiler
+ JIT invokewithcapture
+ Count allocs in spesh'd/jitted frames separately in profiler
+ Turn a bunch of can_s ops into can ops instead.
+ Give graph_spesh.p6 a little introduction text
+ Avoid a pointer getting outdated on the stack in environment access
+ Replace quicksort with insertion sort in NFA fate sorting
+ Fix MVMROOT of a non-collectable in state variable handling
+ Detect useless SUBRULE edges in NFA, and trap epsilons to 0
+ Mark callback Str parameters as not to be freed
+ Record size of gen2_roots list after each GC when profiling
+ Do not call srand() if not using rand()
+ Don't use filename to determine EOFness
+ Allow passing of length = -1 to MVM_string_utf16_encode_substr
+ Don't resolve symlinks by hand
+ Avoid some duplicate work in inter-gen root processing
+ Fix a use-after-free in openpipe, which occurred quite often on OSX
+ Don't include PHIs when rendering spesh graph diagrams
New in 2014.11
+ JIT multicacheadd, multicachefind, radix_I, bindpos_n, bindpos_s,
escape, blshift_i, brshift_i, write_fhs, cmp_I
+ Optimize out a bunch of unnecessary "set" instructions
+ Turn a bunch of const_s + findmeth_s into cheaper findmeth
+ Implement nqp::closefh_i which returns the exit code of a pipe
+ Allow nativecasting a CStruct to another CStruct
+ Fix temp register usage in optimize_istrue_isfalse
+ Fix a regression by eagerly deserializing stables/objects
+ Added tool to colorize registers in spesh logs and another
to turn spesh logs into a data-flow and control-flow graph.
+ Let update_ops.p6 also write a perl6 module with ops data
+ Add --bindir, --libdir and --mastdir as Configure options
+ Create pkgconfig file as pkgconfig/moar.pc
New in 2014.10
+ Added op nativecallglobal
+ Update DynASM
+ [Configure] document --asan option,
Implement --has-linenoise, --has-dyncall and --has-dynasm
+ Build and install libatomic_ops conditionally
+ Improve usage, include environment variables.
+ Document bytecode directory environment flag
+ Add beginnings of a manual page in docs/moar.pod
+ Don't mark inlined locals for logging frames.
+ Fix crash upon trying to clone a type object.
+ Fix concreteness test for the reprconv
+ Fix handling of command line args on Win32
+ Build with jit by default, add --no-jit option
+ Prettify --enable-jit obsoletion notice
+ JIT savecapture, usecapture, getobjsc, sin, cos, tan, asin, acos, atan.
atan2_n, time_n, pow_n and sqrt_n, nativecallinvoke and numeric negation
+ Added MVM_calloc function
+ Make "cannot invoke" errors consistent.
+ Improve err msg about oob in io_read_bytes
+ Optimize out non-interned static callsites
+ Attempt interning the callsites we use in nativecall callbacks
+ Implement set_separator for syncfiles
+ Panic if MVM_platform_alloc_pages failed on posix system
New in 2014.09
+ Add an instrumenting profiler, recording profiling information at routine
level and tracking use of specialized/JITted code and inlinings
+ Support profiling allocations and GC runs
+ Use arc4random on platforms that support it
+ Fix numerous warnings
+ JIT more big integer ops: div_I, div_In, mod_I, gcd_I, coerce_In, and bool_I
+ Specialization and JIT-compilation of various iteration-related instructions
+ JIT curcode and getcodeobj
+ Include filename in spesh log
+ Fix negative division in JIT
+ Mark getlexouter as not inlinable
+ Add mechanism for objects to get a persistent ID, used in Perl 6's .WHICH
+ Fix regression on PowerPC
+ Add missing SC write barrier to MVM_repr_bind_attr_*
+ JIT getattrs_* and bindattrs_* ops
+ JIT more string operations: indexat, findcclass, and findnotcclass
+ Add JIT logging of inlines
+ Cleanly panic if allocation fails, rather than crashing
+ Fix the build on ARM 32 + gcc 4.8.2
+ Better style on arg count errors
+ Avoid unaligned reads on ARMv7
+ Conditionally set include dirs and install rules (e.g. --has-libuv)
+ Add type finalizer support to the GC
+ Update libuv from 0.11.18 to 0.11.29
+ Base full collections off promotion rate, often reducing full collections
+ Add force_gc instruction
+ Set up travis continuous integration
+ Fix mis-use of libuv: we are not supposed to open a child's pipe to our stdin
+ Fix pointer to pointer native cast
+ conditionally use/install our libtommath headers
+ Don't try to serialize file handles
New in 2014.08
+ Add support for JIT compilation on x64 (when configured with --enable-jit);
supports basic arithmetic and logical operations, branching, method finding,
invocation with argument passing, basic parameter handling, boxing/unboxing,
attribute access, array and hash access, some big integer operations, some
string operations, type checks, and more. Integrated with deoptimization,
OSR (On Stack Replacement), extension ops, and exception handling.
+ Specialize various cases of istrue/isfalse to remove some indirections
+ Add charrange handling to the NFA evaluator
+ Update Unicode database generation script with latest string API
+ Add char name lookup aliases (LF, FF, CR and NEL) as line separators
+ Update for new structure of MVMString
+ Add Configure support for ASAN
+ Fix multi cache bug for no positionals, some nameds case
+ Make spesh dump show numeric literals and lexicals properly
+ Assorted OSR fixes for frames that deoptimized, then hit OSR points
+ Fix a number of SSA/dominance memory leaks
+ Fix memory leak in inlining
+ Make dead code elimination not cause unrequired guards to be kept
+ Add an API for extops to be involved in fact discovery and specialization
+ Add type and no-container facts for bigint ops
+ Support inlining of frames with handlers
+ Enable inlining of lexotic (return) handlers
+ Allow addition of temporary registers when specializing
+ Specialize boxing and unboxing of args, both named and positional
+ Avoid repeatedly allocating memory for NFAs
+ Cache frame index in MAST assembly, to avoid a linear scan
+ Fix various dynamic variable and inlining interaction bugs
+ Add a dynamic variable lookup cache
+ Devirtualize serialization read/write functions
+ Make full frame deserialization lazy, reducing memory and startup time
+ Handle static lexical values far more efficiently
+ Identify MAST nodes in assembler by exact type, cheapening assembly
+ Specialize smart stringify/numify into simpler ops in some cases
+ MAST::Label works on identify now, not name matching
+ Make "allocate in gen2" mode reentrant
+ Support lazy deserialization of static lexical values, method caches, and
+ Remove some unused fields from STable
+ Optimize some simple control exceptions into gotos
+ Don't redo dead instruction elim on inlinees
+ Make sure inlined args are always marked as used, fixing a bug
+ Add an int -> str cache for 0..^64
+ Add asynchronous process spawning, I/O, and killing
+ Check dll cache before searching through libpath, saving many stats
+ Make a better guess at MAST assembly output buffer sizes
+ Add a mechanism for debugging strand issues
+ Fix bug in string repeat of an already repeated strand
+ Complain properly about missing late-bound methods
+ Clear special return data more eagerly, fixing a double-free
+ Refactor get_storage_spec
+ Fix P6bigint unbox portability bug
New in 2014.07
+ Make default file mode 0666
+ Auto-detect computed goto support and enable it when available
+ Implement On Stack Replacement for hot loops
+ Fix and enable isconcrete optimization
+ Use const_i64_16 in spesh-produced code for more compact output
+ Fix bug where [work|env]_alloc were not cleared, leading to mis-frees
+ Support inlining frames that use with extops
+ Add missing decl in header to quiet warnings
+ Fix logical bug in fixed-size-allocator
+ Fix capturelex race condition
+ Add missing MVMROOT in ConditionVariable setup
+ Don't share cached Lexotics over threads
+ Re-order code to avoid race on event loop startup
+ Add a bunch of missing MVMROOTing in asyncsocket
+ Make exit get out quickly
+ Close async sockets on event loop thread to avoid corruption
+ Make --no-optimize and --no-debug work in Configure
+ Implement (de)serializing of Array[uint]
+ Specialize getlexperinvtype_o (enables better roles optimization)
+ Allow pointer math using CPointer repr
+ Fix typo in CArray.elems error message
+ Add a cast to get rid of a warning in nativecall.c
+ Fix merging of inline table entries
+ Eliminate unused guard instructions at end of specialization
+ Update uthash to latest version
+ Correct computation of lexical vivifications
+ Add nativecallcast operation
+ Fix use-after-free bug with thread entry callsite
+ Cope with cross-deopt-point usage analysis
+ Give ContainerSpec a spesh function, use it for decont
+ Make various spesh things available publicly, for VM extensions
+ Significantly overhaul the strings code, fixing many performance issues
+ Optimize find_cclass and find_not_cclass
New in 2014.06
+ Correct closure semantics of native callbacks
+ Add ops for 2-possibility named parameter handling.
+ Start storing named argument names in callsite objects
+ Start interning callsites with named arguments
+ Specializer can turn named arg resolution to indexed lookups
+ Specializer can optimize named args
+ Specializer adds facts and guards for named args
+ Implement cancelling listening on a socket
+ Implement async bytes reads from sockets
+ Optimize invocation by pre-selecting callee spesh cand if possible
+ Pick a spesh threshold by bytecode size rather than a constant
+ Mark ops that are not suitable for inlining
+ Add an operand type for spesh slots
+ Implement basic inlining
+ Implement deoptimization of inlined calls, which uninlines
+ Make interp trace output more useful; include op
+ Have invoke/return end a basic block
+ Add a thread-safe fixed-size allocator
+ Use fixed-size allocator for frames/work/env.
+ Use fixed-size allocator for hash entries
+ Use fixed-size allocator for named used flags.
+ Don't refuse to spesh if we've a slurpy positional
+ Can do coerce_in of literals at spesh-time
+ Fix spesh frame handler end annotation motion in instruction deletion
+ Fix spesh fact marking bug
New in 2014.05
+ Add a libuv-managed event loop thread
+ Implement timers
+ Implement nqp::signal; support various signals
+ Add async read/write sections to IO op table
+ Implement async socket listen/connect
+ Implement async read/write ops
+ Implement chars case of async socket reads
+ Fix HLL mapping of type objects
+ Implement file watchers
+ Add infrastructure for cancellation
+ Implement cancellation of timers
+ stat the target of a symlink when we query for filesize
+ Dump deopt instruction spesh annotations
+ stat file descriptor in eof() when filename is unset
+ Serialize CStruct repr_data
+ Add MVMNull REPR and a singleton VMNull instance
+ Teach various parts of the VM about VMNull
+ Lazily allocate lexical containers
+ Optimize frame allocation
+ Remove BOM-discarding code from MVM_string_utf8_decode()
+ MVM_string_utf8_decode() should take a MVMuint8 *, not a char *
+ P6opaque now handles C structure member alignment, just like CStruct does
+ Steal P5's unlink magic for Windows; clear readonly flag when needed
+ Add lexical lookup lifetime hinting ops
+ Re-organize spesh to have log/specialize phases
+ Use spesh logging to emit guards into code
+ getlexstatic_o optimization in spesh
+ Better error on handler fixup failure in spesh
+ Implement op execname, which stores the path of the runner
+ Implement all vs. one deopt
+ Fix moving of handler annotations
+ Basic dumping of facts in spesh
+ Cope with annotations being moved to a phi
+ Make sure we don't clobber block handler setting in spesh
+ Iterate to fixed point when finding unused instructions, giving better results
+ Pre-invalidate all deopt target addresses, to catch fixup failures
+ Optimize simple calls and multi-dispatch at spesh time if possible
+ Add Makefile rules to generate pre-processed source
+ Add Makefile rules to generate assembler
+ Support for ARMv6. Don't try to read unaligned doubles or long longs
+ Ensure that MVMCompUnit can correctly free data_start
+ MVMStaticFrame now supports bytecode pointing to a private malloc()ed copy.
+ Do proper endian correction on bytecode
+ Add Ops for 32/16 bit 64 int literals
+ isnonnull op for use in spesh
+ turn islist/... into either isnonnull or a literal 0.
+ Teach spesh_diff.p6 about the new output of spesh dump
+ Teach spesh_diff.p6 about Facts
+ improve run time performance of spesh_diff.p6
+ Avoid using an uninitialized variable.
+ Harvest strings in facts discovery process
+ Specialise can and can_s ops into const_i64 when possible
+ Change the way we store SCs in object headers to allow faster lookups of indexes
+ Fix bigint bitops
+ Ensure spesh_alloc aligns on platforms needing it
+ Include SC identifiers in bytecode dump
+ Make dump_backtrace more widely available.
+ Merge the bodies of MVM_sc_get_{obj,stable}_sc and *_set_*
+ Change serialization context indexes to be unsigned. Use ~0 as a sentinel.
+ Add inline functions to wrap accesses to sc.sc_idx and sc.idx
+ Add struct MVMSerializationIndex to hold large STable indexes
+ Free any allocated MVMSerializationIndex structs
+ Add a probe to determine the pointer size
+ Conditionally compile the MVMSerializationIndex for 32 bit platforms only
+ Allocate a MVMSerializationIndex if sc_idx would overflow in the union
+ Specialize getattr_[ins] on P6opaque
+ Fix bigint upgrade check
+ Optimize object attribute accesses in spesh
+ Spesh indirect form of attr ops with known names
+ Rakudo Bug #121273 fixed - losing a 0 from end of exponent
+ Re-arrange various structures for memory saving
+ Add handler infrastructure for supporting labeled loop exceptions
New in 2014.04
+ Brought thread ops in line with nqp:: op API
+ No longer inherit caller chain when starting a new thread
+ Fix a range of parallel garbage collection bugs
+ Block/unblock threads for GC while sleeping
+ Implement reentrant mutexes
+ Implemented semaphores
+ Implemented concurrent blocking queue support
+ Implement condition variables
+ Main thread has ID 1 now
+ Move nursery corruption check to after inter-thread work passing
+ Fix a gen2roots compaction optimization bug
+ Add flag '--has-sha' option to Configure to use a system SHA-1 library
+ GC orchestration cleanups and extra logging
+ Compact the gen2 overflows list
+ Fix decodestream_bytes_to_buf eating too much data
+ Added some missing MVMROOTs on config setup
+ Removed duplicate gen2 root cleanup call
+ Small cleanups to serialization
+ Avoid an extra level of function call in various REPR allocate functions
+ Add locking for IO handles
+ Add the Configure flags '--has-libuv and '--has-libatomic_ops'
+ Shortcut shr when we have a small lhs but rhs is >= 32
+ Add logic to turn bytecode into SSA form, and from SSA back to bytecode
+ Added infrastructure for "spesh ops", to use in type-specialized bytecode
+ Start interning positional callsites
+ Keep a rough call count per static frame
+ Add bytecdoe specialization infrastructure
+ Optimize simple positional arg fetch in specialized bytecode
+ Resolve methods at specialization time when type is known
+ Add a monomorphic method cache
+ If MVM_SPESH_LOG is in env, log spesh work to it
+ Turn known-unrequired decont into set
+ Make MVM_SPESH_DISABLE env var disable spesh
+ Add :pure annotations to side-effect-free ops; eliminate dead code
+ Add a tool for splitting and diffing spesh log output
+ Add setmultispec mechanism for optimizing away only-star proto
+ Optimize optional positoin arguments in bytecode specialization
+ Optimize out istype for a spesh-time-known value or type
+ Optimize if_i and unless_i for known values
+ Corrected atan2 op signature.
+ Implement de-optimization on mixins
+ Don't lose HLL owner during serialization
+ Optimize away hllize when possible
+ Optimize away assertparamcheck when possible
+ Infrastructure to allow REPRs to participate in spesh
+ Optimize object creation in common cases with known types
+ Small fixes to MVM_string_(latin1|windows1252)_encode_substr
+ Optimize bindattr_o on P6opaque when possible.
+ Change the way lexotic is handled to avoid the need for allocation
+ Specialize empty named slurpy args.
+ Add a way to flag a frame as a "thunk".
+ Add ctx[outer|caller]skipthunks ops.
+ Make backtrace generation ignore thunks.
+ When readline/linenoise see EOF, mark handle EOF
+ Set hint for invokespec and multispec, improving invocation performance
+ Improve the VM exit strategy, so non-app-lifetime threads are waited on
+ Correctly handle temp roots stack in callbacks
+ add sched_yield for NetBSD
+ Fix callsite size calculation in tweak_cs
+ Fix buffer overflow in UTF-16 encoding
+ Trigger repossession on OP(push_*)
+ Fake up a final entry off the end of Unicode, fixing some lookup bugs
New in 2014.03
+ Implement a fast-path for string strand flattening
+ Fix character lookup by name sometimes giving wrong result
+ Control and printable now know about Latin-1 control characters
+ Fix bug in Latin-1 handling
+ Fix and optimize various character property lookups
+ Implement lookup of non-boolean Unicode properties
+ Implement character code to name lookup
+ Implement lookup of enum/stringy Unicode properties
+ Fix memory leak of active handlers in continuations
+ Clear up gen2 memory at exit
+ Clear up frame pool at exit
+ Don't leak static frame instruction offsets
+ Fix memory leak in MVMHash
+ Simplified/optimized frame reference count handling in continuations
+ Fixed missing exception resume reference count decrement
+ Correct "on stack" continuation reference count handling
+ Add missing cleanup in MAST assembler
+ Fixed used named args tracking memory leak
+ Fixed SEGV in eof of non-file-based filehandle
+ Pass STDIN to subprocess in shell()
+ Fixed resolution of IPv6 host names
+ Implemented native calling
+ Implemented CPointer representation
+ Implemented CArray representation
+ Implemented CStruct representation
+ Improve GDB plug-in string usage analysis
+ Make GDB plug-in aware of gen2 overflows
+ Clean-up and optimization of many REPR allocate functions
+ Fixed over-eager / to \ conversion in nqp::shell on Windows
+ Implemented native callbacks
+ Correct copy size of args buffer, avoiding reading unmapped memory
+ Updated to new liblinenoise and re-instated usage of it
+ Bump dyncall to latest version
+ Add --has-libtommath option to Configure for using system libtommath
New in 2014.02
+ Increased precision of num => str coercion
+ Mechanism for per-HLL handling of method resolution errors
+ Gave can the same null-check semantics as findmethod
+ Fixed various "not found" lexical lookup semantics
+ Use a more efficient encoding for integers in the serialization blob
+ Implemented reposession conflict resolution handling for objects
+ Optimized GC worklist processing to avoid unrequired barriers
+ Added a GDB plugin to help analyse VM data structures, heap use, etc.
+ Zeroed memory in a few places, to avoid reading junk and quiet Valgrind
+ Simplified and fixed UTF-16 encoding
+ Implemented unsigned native integer array support
+ Added various missing write barriers on STables
+ Added openpipe functionality, to support qx/qqx in Perl 6
+ Corrected accidental and potentially explosive use of REPR(...) on STables
+ Switched to using flag bits to mark liveness in GC
+ GC forwarder pointer used in nursery now overwrites existing object body,
saving 4 or 8 bytes on every collectable object
+ Added various GC sanity checking asserts to aid debugging
+ Encapsulated all serialization context accesses
+ Defined NDEBUG in optimized builds
+ P6bigint no longer uses libtommath for integers fitting within 32 bits
+ Optimized serialization of P6bigints fitting within 32 bits
+ Implemented link and symlink
+ Fixed mod_n op's behavior on negatives
+ Implemented floating point fallback case of the pow_I op
+ Fixed srand op to also control rand_I
+ Initialize the random seed at startup
+ Properly clean up active handlers that we unwind over
+ Radix parsing now returns an array of integers, not floating point
+ Huge refactor of I/O, fixing many bugs and leading to cleaner code
+ Proper handling of characters split over byte buffer boundaries in I/O
+ Corrected Latin-1 to be Latin-1, and added Windows-1252 encoding
+ Added a constant cache for boxing integers 0 through 15
+ Properly implemented synchronous client and server TCP socket support
+ Better estimate and perhaps shrink string memory for UTF-8 decode
+ Added probing to Configure to learn how the compiler does 'static inline'
+ Switched many macros over to static inline functions
New in 2014.01
The first official MoarVM release! Capable of running the 2014.01 release of Rakudo Perl 6, the first one with MoarVM support. (No change log for this initial release, since it's basically "all the things".)