Fork me on GitHub

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
  • 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

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

Download

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 ./Configure.pl
  • 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 statistics
  • 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 typo in MVM_CALLSTACK_REGIONS_SIZE's name
  • Fix missing cleanup of managed DecodeStream
  • Have DecodeStrem clean leftover char buffers
  • Fix a typo in decode stream destroy function

Download

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 Configure.pl
  • 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

Download

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

Download

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

Download

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
  • Configure.pl 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

Download

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

Download

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

Download

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 moar-gdb.py 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

Download

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

Download

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

Download

2016.03

  • Fix the build when not bundling libtommath
  • Updates to moar-gdb.py (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

Download

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 conventions
  • 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

Download

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 Configure.pl
  • 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

Download

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 Configure.pl
  • 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

Download

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
  • Document ASAN_OPTIONS
  • 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

Download

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.

Download

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

Download

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

Download

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

Download

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

Download

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 growth handling
  • Add missing frees on invalid UTF-8 decoding
  • Integrate NFG with UTF-16 non-stream decode
  • Remove linenoise/readline
  • Integrate normalizer with decode stream
  • Fix chr for our brave new NFG world
  • Make \n a "normalization terminator"
  • Ensure concatenation is closed under NFG
  • Don't leak synthetics from ord
  • Integrate NFG with UTF-8 decoding
  • Fix use-after-free in open file error reporting
  • Display exactly what thread ID was passed in a GC error
  • Fix various memory leaks
  • Remove fragile assumption about buffer size from UTF-8 decoder
  • 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 string heap
  • 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
  • Optimize at level 3 by default
  • Re-implement MVMIter on hashes using buckets
  • Use a simpler "deleting the last item" check in hashes
  • Eliminate double-linked-list in hashes
  • Re-implement simple say/print using MoarVM I/O
  • Thread ID handling cleanup
  • Fix an ABA bug in the fixed size allocator
  • 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
  • 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
  • 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
  • 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

Download

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

Download

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

Download

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

Download

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

Download

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 a 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

Download

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 retuns 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

Download

2014.10

  • Added op nativecallglobal
  • Update DynASM
  • Give Configurepl --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

Download

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

Download

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 moar-gdb.py 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 meta-objects
  • 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

Download

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

Download

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

Download

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
  • 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

Download

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
  • Implement semaphores
  • Implement 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

Download

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

Download

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

Download

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".)

Download