/
ChangeLog
956 lines (903 loc) · 43.9 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
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 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
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
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
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 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
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 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
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
+ 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
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 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
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 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
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