From 81ef41f5c9bd73f9eb462937b061e12014b5c973 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 23 Dec 2016 18:31:12 -0500 Subject: [PATCH 01/93] Initial file --- tests/debug/ack-gmon-analysis.txt | 2519 +++++++++++++++++++++++++++++ 1 file changed, 2519 insertions(+) create mode 100644 tests/debug/ack-gmon-analysis.txt diff --git a/tests/debug/ack-gmon-analysis.txt b/tests/debug/ack-gmon-analysis.txt new file mode 100644 index 00000000..5b8ded40 --- /dev/null +++ b/tests/debug/ack-gmon-analysis.txt @@ -0,0 +1,2519 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 18.82 16.76 16.76 710694909 0.00 0.00 __lambda_1 + 9.81 25.50 8.74 8950 0.00 0.00 gc_sweep + 9.66 34.10 8.60 1075614 0.00 0.00 gc_minor + 9.26 42.35 8.25 693683336 0.00 0.00 gc_copy_obj + 8.32 49.77 7.42 693927121 0.00 0.00 gc_try_alloc + 7.03 56.03 6.26 2137195779 0.00 0.00 Cyc_num_fast_eq_op + 6.28 61.62 5.60 1370056701 0.00 0.00 gc_allocated_bytes + 4.56 65.68 4.06 693921734 0.00 0.00 gc_alloc + 4.48 69.67 3.99 1424380073 0.00 0.00 Cyc_fast_sub + 3.53 72.81 3.14 710296579 0.00 0.00 Cyc_fast_sum + 3.42 75.86 3.05 693849289 0.00 0.00 gc_move + 3.03 78.56 2.70 711654992 0.00 0.00 __lambda_0 + 2.74 81.00 2.44 693722448 0.00 0.00 gc_fixup_moved_obj + 2.13 82.90 1.90 693922724 0.00 0.00 gc_thr_add_to_move_buffer + 2.04 84.72 1.82 1424649027 0.00 0.00 Cyc_st_add + 1.03 85.64 0.92 dispatch_num_eq + 0.73 86.29 0.65 44 0.01 0.01 cell_get + 0.62 86.84 0.55 1358 0.00 0.00 gc_grow_heap + 0.60 87.37 0.53 1054 0.00 0.00 gc_mark_globals + 0.33 87.66 0.29 __halt + 0.32 87.94 0.29 5 0.06 0.06 gc_thr_grow_move_buffer + 0.30 88.21 0.27 gc_print_stats + 0.28 88.46 0.25 2 0.13 0.13 __lambda_2 + 0.26 88.70 0.24 29559012 0.00 0.00 gc_mark_black + 0.13 88.82 0.12 54145669 0.00 0.00 gc_collector_mark_gray + 0.09 88.90 0.08 32429287 0.00 0.00 ck_pr_md_load_int + 0.07 88.96 0.07 941 0.00 0.00 gc_collector_trace + 0.03 88.99 0.03 29134668 0.00 0.00 vpbuffer_add + 0.02 89.01 0.02 1894577 0.00 0.00 gc_empty_collector_stack + 0.02 89.03 0.02 1076173 0.00 0.00 GC + 0.01 89.04 0.01 1075181 0.00 0.00 gc_sum_pending_writes + 0.01 89.05 0.01 8 0.00 0.00 vpbuffer_realloc + 0.01 89.06 0.01 1 0.01 74.94 Cyc_start_trampoline + 0.01 89.07 0.01 ck_pr_md_load_uint + 0.00 89.07 0.00 2015508 0.00 0.00 gc_mark_gray + 0.00 89.07 0.00 1077265 0.00 0.00 clear_mutations + 0.00 89.07 0.00 1077084 0.00 0.00 do_dispatch + 0.00 89.07 0.00 1076787 0.00 0.00 gc_mut_cooperate + 0.00 89.07 0.00 17613 0.00 0.00 ck_pr_cas_int + 0.00 89.07 0.00 14863 0.00 0.00 gc_is_heap_empty + 0.00 89.07 0.00 9037 0.00 0.00 gc_get_heap + 0.00 89.07 0.00 6882 0.00 0.00 ck_pr_barrier + 0.00 89.07 0.00 6714 0.00 0.00 ck_pr_fence_load + 0.00 89.07 0.00 6379 0.00 0.00 ck_pr_md_load_ptr + 0.00 89.07 0.00 5153 0.00 0.00 gc_heap_free + 0.00 89.07 0.00 2686 0.00 0.00 gc_wait_handshake + 0.00 89.07 0.00 1965 0.00 0.00 gc_handshake + 0.00 89.07 0.00 1960 0.00 0.00 gc_zero_read_write_counts + 0.00 89.07 0.00 1904 0.00 0.00 gc_free_old_thread_data + 0.00 89.07 0.00 1861 0.00 0.00 gc_post_handshake + 0.00 89.07 0.00 1361 0.00 0.00 gc_heap_create + 0.00 89.07 0.00 1080 0.00 0.01 gc_collector + 0.00 89.07 0.00 856 0.00 0.00 MurmurHash64A + 0.00 89.07 0.00 856 0.00 0.00 hs_hash + 0.00 89.07 0.00 472 0.00 0.00 add_symbol + 0.00 89.07 0.00 472 0.00 0.00 set_insert + 0.00 89.07 0.00 400 0.00 0.00 Cyc_is_pair + 0.00 89.07 0.00 384 0.00 0.00 find_or_add_symbol + 0.00 89.07 0.00 384 0.00 0.00 find_symbol_by_name + 0.00 89.07 0.00 384 0.00 0.00 set_get + 0.00 89.07 0.00 343 0.00 0.00 _strdup + 0.00 89.07 0.00 343 0.00 0.00 add_symbol_by_name + 0.00 89.07 0.00 255 0.00 0.00 add_global + 0.00 89.07 0.00 255 0.00 0.00 malloc_make_pair + 0.00 89.07 0.00 255 0.00 0.00 mcvar + 0.00 89.07 0.00 192 0.00 0.00 Cyc_cdr + 0.00 89.07 0.00 128 0.00 0.00 mark_stack_or_heap_obj + 0.00 89.07 0.00 127 0.00 0.00 gc_is_stack_obj + 0.00 89.07 0.00 97 0.00 0.00 Cyc_eq + 0.00 89.07 0.00 82 0.00 0.00 Cyc_is_null + 0.00 89.07 0.00 69 0.00 0.00 Cyc_car + 0.00 89.07 0.00 64 0.00 0.00 equal + 0.00 89.07 0.00 64 0.00 0.00 gc_mut_update + 0.00 89.07 0.00 56 0.00 0.00 equalp + 0.00 89.07 0.00 40 0.00 0.00 add_mutation + 0.00 89.07 0.00 37 0.00 0.00 Cyc_set_car + 0.00 89.07 0.00 32 0.00 0.00 Cyc_is_port + 0.00 89.07 0.00 31 0.00 0.00 Cyc_length + 0.00 89.07 0.00 24 0.00 0.00 Cyc_global_set + 0.00 89.07 0.00 23 0.00 0.00 Cyc_is_string + 0.00 89.07 0.00 23 0.00 0.00 __lambda_19 + 0.00 89.07 0.00 23 0.00 0.00 __lambda_20 + 0.00 89.07 0.00 23 0.00 0.01 __lambda_721 + 0.00 89.07 0.00 21 0.00 0.00 gc_mark_gray2 + 0.00 89.07 0.00 17 0.00 0.00 Cyc_is_number + 0.00 89.07 0.00 17 0.00 0.00 apply + 0.00 89.07 0.00 16 0.00 0.00 Cyc_is_eof_object + 0.00 89.07 0.00 16 0.00 0.00 __lambda_12 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_14 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_250 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_251 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_252 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_253 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_254 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_44 + 0.00 89.07 0.00 16 0.00 0.00 __lambda_45 + 0.00 89.07 0.00 14 0.00 0.00 Cyc_display + 0.00 89.07 0.00 13 0.00 0.00 Cyc_io_read_char + 0.00 89.07 0.00 13 0.00 0.00 __lambda_282 + 0.00 89.07 0.00 13 0.00 0.00 gc_mutator_thread_blocked + 0.00 89.07 0.00 13 0.00 0.00 gc_mutator_thread_runnable + 0.00 89.07 0.00 13 0.00 0.00 memberp + 0.00 89.07 0.00 12 0.00 0.00 Cyc_display_va + 0.00 89.07 0.00 12 0.00 0.00 Cyc_display_va_list + 0.00 89.07 0.00 12 0.00 0.00 Cyc_is_vector + 0.00 89.07 0.00 12 0.00 0.00 Cyc_vector_ref + 0.00 89.07 0.00 12 0.00 0.00 __lambda_0 + 0.00 89.07 0.00 12 0.00 0.00 __lambda_1 + 0.00 89.07 0.00 10 0.00 0.00 Cyc_apply + 0.00 89.07 0.00 9 0.00 0.00 __lambda_241 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_242 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_243 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_244 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_245 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_246 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_247 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_248 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_249 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_281 + 0.00 89.07 0.00 9 0.00 0.00 __lambda_36 + 0.00 89.07 0.00 9 0.00 0.00 _cons + 0.00 89.07 0.00 8 0.00 0.00 __lambda_245 + 0.00 89.07 0.00 8 0.00 0.00 __lambda_246 + 0.00 89.07 0.00 8 0.00 0.00 __lambda_247 + 0.00 89.07 0.00 7 0.00 0.00 Cyc_num_fast_lt_op + 0.00 89.07 0.00 7 0.00 0.00 __lambda_13 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_15 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_16 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_17 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_18 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_43 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_55 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_56 + 0.00 89.07 0.00 7 0.00 0.00 __lambda_57 + 0.00 89.07 0.00 7 0.00 0.00 apply_va + 0.00 89.07 0.00 7 0.00 0.00 dispatch + 0.00 89.07 0.00 5 0.00 0.00 Cyc_string_append + 0.00 89.07 0.00 4 0.00 0.00 Cyc_check_obj + 0.00 89.07 0.00 4 0.00 0.00 Cyc_list2string + 0.00 89.07 0.00 4 0.00 0.00 Cyc_list2vector + 0.00 89.07 0.00 4 0.00 0.00 Cyc_string2number2_ + 0.00 89.07 0.00 4 0.00 0.00 Cyc_string2number_ + 0.00 89.07 0.00 4 0.00 0.00 __lambda_10 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_11 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_15 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_16 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_17 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_19 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_20 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_21 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_24 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_248 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_249 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_250 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_251 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_27 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_28 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_328 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_329 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_330 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_336 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_337 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_35 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_383 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_384 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_387 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_388 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_389 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_390 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_40 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_41 + 0.00 89.07 0.00 4 0.00 0.00 __lambda_42 + 0.00 89.07 0.00 4 0.00 0.03 __lambda_9 + 0.00 89.07 0.00 4 0.00 0.00 assoc + 0.00 89.07 0.00 4 0.00 0.00 str2int + 0.00 89.07 0.00 3 0.00 0.00 Cyc_number2string2 + 0.00 89.07 0.00 3 0.00 0.00 Cyc_set_cell + 0.00 89.07 0.00 3 0.00 0.00 Cyc_write_char + 0.00 89.07 0.00 3 0.00 0.00 __lambda_21 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_22 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_23 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_307 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_308 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_309 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_51 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_718 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_719 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_722 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_723 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_724 + 0.00 89.07 0.00 3 0.00 0.00 __lambda_725 + 0.00 89.07 0.00 2 0.00 0.00 Cyc_fast_div + 0.00 89.07 0.00 2 0.00 0.00 Cyc_io_flush_output_port + 0.00 89.07 0.00 2 0.00 0.00 Cyc_write + 0.00 89.07 0.00 2 0.00 0.00 Cyc_write_va + 0.00 89.07 0.00 2 0.00 0.00 Cyc_write_va_list + 0.00 89.07 0.00 2 0.00 0.00 _Cyc_write + 0.00 89.07 0.00 2 0.00 0.00 __lambda_0 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_1 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_2 + 0.00 89.07 0.00 2 0.00 0.04 __lambda_23 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_3 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_3 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_304 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_327 + 0.00 89.07 0.00 2 0.00 0.00 __lambda_4 + 0.00 89.07 0.00 2 0.00 0.00 double2buffer + 0.00 89.07 0.00 1 0.00 0.00 Cyc_fast_mul + 0.00 89.07 0.00 1 0.00 0.00 Cyc_heap_init + 0.00 89.07 0.00 1 0.00 0.00 Cyc_stderr + 0.00 89.07 0.00 1 0.00 0.00 Cyc_stdin + 0.00 89.07 0.00 1 0.00 0.00 Cyc_stdout + 0.00 89.07 0.00 1 0.00 0.00 __75halt + 0.00 89.07 0.00 1 0.00 0.00 __lambda_0 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_10 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_11 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_12 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_13 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_14 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1544 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1545 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1546 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1547 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1548 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1549 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1550 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1551 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1552 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1553 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1554 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1555 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1556 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1557 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1558 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1559 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1560 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_1561 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_2 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_2 + 0.00 89.07 0.00 1 0.00 0.04 __lambda_22 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_24 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_25 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_26 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_27 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_28 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_29 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_3 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_3 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_30 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_31 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_32 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_33 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_34 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_35 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_36 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_37 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_38 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_39 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_399 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_4 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_4 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_40 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_400 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_41 + 0.00 89.07 0.00 1 0.00 0.04 __lambda_42 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_42 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_43 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_44 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_5 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_5 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_5 + 0.00 89.07 0.00 1 0.00 0.01 __lambda_5 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_50 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_52 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_53 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_54 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_55 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_56 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_57 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_58 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_59 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_6 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_6 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_6 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_60 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_61 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_62 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_63 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_64 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_65 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_66 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_67 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_68 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_69 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_7 + 0.00 89.07 0.00 1 0.00 0.01 __lambda_7 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_765 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_766 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_8 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_8 + 0.00 89.07 0.00 1 0.00 0.00 __lambda_9 + 0.00 89.07 0.00 1 0.00 0.00 c_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_entry_pt_first_lambda + 0.00 89.07 0.00 1 0.00 0.00 c_scheme_char_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_schemebase_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_schemecyclonecommon_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_schemeread_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_schemetime_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 c_schemewrite_entry_pt + 0.00 89.07 0.00 1 0.00 0.00 gc_add_mutator + 0.00 89.07 0.00 1 0.00 0.00 gc_init_heap + 0.00 89.07 0.00 1 0.00 0.00 gc_initialize + 0.00 89.07 0.00 1 0.00 0.00 gc_start_collector + 0.00 89.07 0.00 1 0.00 0.06 gc_thread_data_init + 0.00 89.07 0.00 1 0.00 0.00 set_env_variables + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2015 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 0.01% of 89.07 seconds + +index % time self children called name + +[1] 84.2 0.00 75.00 main [1] + 0.01 74.93 1/1 Cyc_start_trampoline [2] + 0.00 0.06 1/1 gc_thread_data_init [38] + 0.00 0.00 1/1 gc_initialize [49] + 0.00 0.00 1/1 set_env_variables [213] + 0.00 0.00 1/1 gc_add_mutator [210] + 0.00 0.00 1/1 Cyc_heap_init [198] +----------------------------------------------- + 0.01 74.93 1/1 main [1] +[2] 84.1 0.01 74.93 1 Cyc_start_trampoline [2] + 19.71 55.22 1077077/1077078 do_dispatch [133] +----------------------------------------------- +[3] 84.1 19.71 55.22 1077078+1422350722 [3] + 16.76 39.98 710694909+713501311 __lambda_1 [4] + 2.70 14.59 711654992 __lambda_0 [10] + 0.00 0.34 23 __lambda_721 [29] + 0.25 0.00 2 __lambda_2 [33] + 0.00 0.10 4 __lambda_9 [35] + 0.00 0.09 2 __lambda_23 [36] + 0.00 0.04 1 __lambda_42 [39] + 0.00 0.04 1 __lambda_22 [40] + 0.00 0.01 1 __lambda_7 [44] + 0.00 0.01 1 __lambda_5 [43] + 0.00 0.00 23 __lambda_19 [57] + 0.00 0.00 16 __lambda_253 [59] + 0.00 0.00 7 __lambda_17 [61] + 0.00 0.00 7 __lambda_15 [60] + 0.00 0.00 7 __lambda_57 [62] + 0.00 0.00 23 __lambda_20 [63] + 0.00 0.00 16 __lambda_254 [68] + 0.00 0.00 16 __lambda_14 [67] + 0.00 0.00 16 __lambda_12 [66] + 0.00 0.00 13 __lambda_282 [69] + 0.00 0.00 12 __lambda_1 [70] + 0.00 0.00 9 __lambda_36 [71] + 0.00 0.00 8 __lambda_247 [72] + 0.00 0.00 7 __lambda_13 [73] + 0.00 0.00 7 __lambda_18 [75] + 0.00 0.00 7 __lambda_16 [74] + 0.00 0.00 7 __lambda_43 [76] + 0.00 0.00 1 __lambda_1561 [77] + 0.00 0.00 1 __lambda_5 [80] + 0.00 0.00 1 __lambda_42 [79] + 0.00 0.00 1 __lambda_400 [78] + 0.00 0.00 1 __lambda_52 [82] + 0.00 0.00 1 __lambda_8 [84] + 0.00 0.00 1 __lambda_65 [83] + 0.00 0.00 5 Cyc_string_append [85] + 0.00 0.00 1 __lambda_3 [101] + 0.00 0.00 1 __lambda_2 [100] + 0.00 0.00 1 __lambda_0 [86] + 0.00 0.00 1 __lambda_1559 [99] + 0.00 0.00 1 __lambda_1557 [98] + 0.00 0.00 1 __lambda_1555 [97] + 0.00 0.00 1 __lambda_1554 [96] + 0.00 0.00 1 __lambda_1553 [95] + 0.00 0.00 1 __lambda_1552 [94] + 0.00 0.00 1 __lambda_1551 [93] + 0.00 0.00 1 __lambda_1550 [92] + 0.00 0.00 1 __lambda_1549 [91] + 0.00 0.00 1 __lambda_1548 [90] + 0.00 0.00 1 __lambda_1547 [89] + 0.00 0.00 1 __lambda_1546 [88] + 0.00 0.00 1 __lambda_1544 [87] + 0.00 0.00 1 __lambda_4 [103] + 0.00 0.00 1 __lambda_399 [102] + 0.00 0.00 1 __lambda_6 [105] + 0.00 0.00 4 __lambda_390 [116] + 0.00 0.00 4 __lambda_11 [106] + 0.00 0.00 4 __lambda_28 [110] + 0.00 0.00 4 __lambda_383 [114] + 0.00 0.00 4 __lambda_21 [107] + 0.00 0.00 4 __lambda_251 [109] + 0.00 0.00 4 __lambda_384 [115] + 0.00 0.00 4 __lambda_337 [112] + 0.00 0.00 4 __lambda_329 [111] + 0.00 0.00 4 __lambda_35 [113] + 0.00 0.00 4 __lambda_24 [108] + 0.00 0.00 3 __lambda_725 [120] + 0.00 0.00 3 __lambda_23 [117] + 0.00 0.00 3 __lambda_308 [118] + 0.00 0.00 3 __lambda_309 [119] + 0.00 0.00 1 __lambda_5 [121] + 0.00 0.00 1 __lambda_43 [122] + 0.00 0.00 2 __lambda_327 [125] + 0.00 0.00 2 __lambda_304 [124] + 0.00 0.00 2 __lambda_3 [123] + 0.00 0.00 1 __lambda_69 [131] + 0.00 0.00 1 __lambda_4 [128] + 0.00 0.00 1 __lambda_3 [127] + 0.00 0.00 1 __lambda_14 [126] + 0.00 0.00 1 __lambda_6 [129] + 0.00 0.00 1 __lambda_67 [130] + 0.00 0.00 1077084 do_dispatch [133] + 0.00 0.00 17 apply [167] + 0.00 0.00 16 __lambda_252 [830] + 0.00 0.00 16 __lambda_45 [832] + 0.00 0.00 16 __lambda_44 [831] + 0.00 0.00 16 __lambda_251 [829] + 0.00 0.00 16 __lambda_250 [828] + 0.00 0.00 13 Cyc_io_read_char [170] + 0.00 0.00 13 gc_mutator_thread_runnable [172] + 0.00 0.00 12 __lambda_0 [833] + 0.00 0.00 10 Cyc_apply [178] + 0.00 0.00 9 __lambda_249 [842] + 0.00 0.00 9 __lambda_248 [841] + 0.00 0.00 9 __lambda_247 [840] + 0.00 0.00 9 __lambda_246 [839] + 0.00 0.00 9 __lambda_245 [838] + 0.00 0.00 9 __lambda_244 [837] + 0.00 0.00 9 __lambda_243 [836] + 0.00 0.00 9 __lambda_242 [835] + 0.00 0.00 9 __lambda_241 [834] + 0.00 0.00 9 _cons [844] + 0.00 0.00 9 __lambda_281 [843] + 0.00 0.00 8 __lambda_245 [845] + 0.00 0.00 8 __lambda_246 [846] + 0.00 0.00 7 __lambda_56 [848] + 0.00 0.00 7 dispatch [181] + 0.00 0.00 7 apply_va [180] + 0.00 0.00 7 __lambda_55 [847] + 0.00 0.00 4 __lambda_387 [862] + 0.00 0.00 4 __lambda_389 [864] + 0.00 0.00 4 __lambda_10 [849] + 0.00 0.00 4 __lambda_388 [863] + 0.00 0.00 4 __lambda_42 [867] + 0.00 0.00 4 __lambda_20 [854] + 0.00 0.00 4 __lambda_250 [857] + 0.00 0.00 4 __lambda_248 [855] + 0.00 0.00 4 __lambda_249 [856] + 0.00 0.00 4 __lambda_19 [853] + 0.00 0.00 4 Cyc_list2vector [184] + 0.00 0.00 4 __lambda_17 [852] + 0.00 0.00 4 __lambda_15 [850] + 0.00 0.00 4 __lambda_16 [851] + 0.00 0.00 4 __lambda_27 [858] + 0.00 0.00 4 __lambda_328 [859] + 0.00 0.00 4 __lambda_336 [861] + 0.00 0.00 4 Cyc_list2string [183] + 0.00 0.00 4 __lambda_330 [860] + 0.00 0.00 4 Cyc_string2number2_ [185] + 0.00 0.00 4 Cyc_string2number_ [186] + 0.00 0.00 4 __lambda_41 [866] + 0.00 0.00 4 __lambda_40 [865] + 0.00 0.00 3 __lambda_719 [873] + 0.00 0.00 3 __lambda_724 [876] + 0.00 0.00 3 __lambda_718 [872] + 0.00 0.00 3 __lambda_723 [875] + 0.00 0.00 3 __lambda_722 [874] + 0.00 0.00 3 __lambda_22 [869] + 0.00 0.00 3 __lambda_21 [868] + 0.00 0.00 3 __lambda_51 [871] + 0.00 0.00 3 Cyc_number2string2 [189] + 0.00 0.00 3 __lambda_307 [870] + 0.00 0.00 2 __lambda_3 [881] + 0.00 0.00 2 __lambda_1 [879] + 0.00 0.00 2 __lambda_0 [878] + 0.00 0.00 2 __lambda_4 [882] + 0.00 0.00 2 __lambda_2 [880] + 0.00 0.00 1 __lambda_68 [928] + 0.00 0.00 1 __lambda_1 [884] + 0.00 0.00 1 c_schemebase_entry_pt [205] + 0.00 0.00 1 __lambda_1560 [892] + 0.00 0.00 1 __lambda_1558 [891] + 0.00 0.00 1 __lambda_1556 [890] + 0.00 0.00 1 __lambda_1545 [889] + 0.00 0.00 1 c_schemetime_entry_pt [208] + 0.00 0.00 1 c_schemewrite_entry_pt [209] + 0.00 0.00 1 c_scheme_char_entry_pt [204] + 0.00 0.00 1 c_schemeread_entry_pt [207] + 0.00 0.00 1 c_entry_pt_first_lambda [203] + 0.00 0.00 1 __lambda_50 [913] + 0.00 0.00 1 __lambda_54 [915] + 0.00 0.00 1 __lambda_53 [914] + 0.00 0.00 1 __lambda_44 [912] + 0.00 0.00 1 __lambda_55 [916] + 0.00 0.00 1 __lambda_766 [931] + 0.00 0.00 1 __lambda_64 [926] + 0.00 0.00 1 __lambda_765 [930] + 0.00 0.00 1 __lambda_63 [925] + 0.00 0.00 1 __lambda_41 [911] + 0.00 0.00 1 c_entry_pt [202] + 0.00 0.00 1 c_schemecyclonecommon_entry_pt [206] + 0.00 0.00 1 __lambda_13 [888] + 0.00 0.00 1 __lambda_12 [887] + 0.00 0.00 1 __lambda_11 [886] + 0.00 0.00 1 __lambda_10 [885] + 0.00 0.00 1 __lambda_9 [933] + 0.00 0.00 1 __lambda_8 [932] + 0.00 0.00 1 __lambda_7 [929] + 0.00 0.00 1 __lambda_58 [919] + 0.00 0.00 1 __lambda_57 [918] + 0.00 0.00 1 __lambda_2 [893] + 0.00 0.00 1 __lambda_56 [917] + 0.00 0.00 1 __lambda_24 [894] + 0.00 0.00 1 __lambda_39 [909] + 0.00 0.00 1 __lambda_37 [907] + 0.00 0.00 1 __lambda_61 [923] + 0.00 0.00 1 __lambda_60 [922] + 0.00 0.00 1 __lambda_40 [910] + 0.00 0.00 1 __lambda_38 [908] + 0.00 0.00 1 __lambda_36 [906] + 0.00 0.00 1 __lambda_35 [905] + 0.00 0.00 1 __lambda_33 [903] + 0.00 0.00 1 __lambda_31 [901] + 0.00 0.00 1 __lambda_30 [900] + 0.00 0.00 1 __lambda_29 [899] + 0.00 0.00 1 __lambda_28 [898] + 0.00 0.00 1 __lambda_27 [897] + 0.00 0.00 1 __lambda_59 [920] + 0.00 0.00 1 __lambda_34 [904] + 0.00 0.00 1 __lambda_26 [896] + 0.00 0.00 1 __lambda_25 [895] + 0.00 0.00 1 __lambda_6 [921] + 0.00 0.00 1 __lambda_66 [927] + 0.00 0.00 1 __lambda_62 [924] + 0.00 0.00 1 __lambda_32 [902] +----------------------------------------------- + 713501311 __lambda_1 [4] + 2 __lambda_2 [33] + 826498 do_dispatch [133] + 709868409 __lambda_0 [10] +[4] 63.7 16.76 39.98 710694909+713501311 __lambda_1 [4] + 0.01 26.74 731595/1076173 GC [5] + 6.26 0.00 2137195778/2137195779 Cyc_num_fast_eq_op [15] + 3.14 0.00 710296554/710296579 Cyc_fast_sum [19] + 2.00 0.00 714276442/1424380073 Cyc_fast_sub [18] + 1.82 0.00 1424648814/1424649027 Cyc_st_add [21] + 711405239 __lambda_0 [10] + 2 __lambda_23 [36] + 713501311 __lambda_1 [4] +----------------------------------------------- + 0.01 12.60 344578/1076173 __lambda_0 [10] + 0.01 26.74 731595/1076173 __lambda_1 [4] +[5] 44.2 0.02 39.34 1076173 GC [5] + 8.60 30.72 1075614/1075614 gc_minor [6] + 0.00 0.02 1076787/1076787 gc_mut_cooperate [42] +----------------------------------------------- + 8.60 30.72 1075614/1075614 GC [5] +[6] 44.1 8.60 30.72 1075614 gc_minor [6] + 3.05 27.67 693849289/693849289 gc_move [7] + 0.00 0.00 1077265/1077265 clear_mutations [132] +----------------------------------------------- + 3.05 27.67 693849289/693849289 gc_minor [6] +[7] 34.5 3.05 27.67 693849289 gc_move [7] + 4.06 19.05 693921734/693921734 gc_alloc [8] + 2.44 2.12 693722448/693722448 gc_fixup_moved_obj [17] +----------------------------------------------- + 4.06 19.05 693921734/693921734 gc_move [7] +[8] 25.9 4.06 19.05 693921734 gc_alloc [8] + 7.42 11.08 693927121/693927121 gc_try_alloc [9] + 0.55 0.00 1357/1358 gc_grow_heap [24] +----------------------------------------------- + 7.42 11.08 693927121/693927121 gc_alloc [8] +[9] 20.8 7.42 11.08 693927121 gc_try_alloc [9] + 8.25 0.00 693683336/693683336 gc_copy_obj [14] + 2.83 0.00 693783511/1370056701 gc_allocated_bytes [16] +----------------------------------------------- + 249753 do_dispatch [133] + 711405239 __lambda_1 [4] +[10] 19.4 2.70 14.59 711654992 __lambda_0 [10] + 0.01 12.60 344578/1076173 GC [5] + 1.99 0.00 710103629/1424380073 Cyc_fast_sub [18] + 709868409 __lambda_1 [4] +----------------------------------------------- + +[11] 14.1 0.00 12.58 collector_main [11] + 0.00 12.58 1080/1080 gc_collector [12] + 0.00 0.00 1671/32429287 ck_pr_md_load_int [37] +----------------------------------------------- + 0.00 12.58 1080/1080 collector_main [11] +[12] 14.1 0.00 12.58 1080 gc_collector [12] + 8.74 2.76 8950/8950 gc_sweep [13] + 0.07 0.48 941/941 gc_collector_trace [25] + 0.53 0.00 1054/1054 gc_mark_globals [26] + 0.00 0.00 1/1358 gc_grow_heap [24] + 0.00 0.00 1965/1965 gc_handshake [52] + 0.00 0.00 752/2686 gc_wait_handshake [51] + 0.00 0.00 1097/32429287 ck_pr_md_load_int [37] + 0.00 0.00 519/1861 gc_post_handshake [53] + 0.00 0.00 9037/9037 gc_get_heap [136] + 0.00 0.00 7556/17613 ck_pr_cas_int [134] + 0.00 0.00 1904/1904 gc_free_old_thread_data [142] +----------------------------------------------- + 8.74 2.76 8950/8950 gc_collector [12] +[13] 12.9 8.74 2.76 8950 gc_sweep [13] + 2.76 0.00 676273190/1370056701 gc_allocated_bytes [16] + 0.00 0.00 14863/14863 gc_is_heap_empty [135] + 0.00 0.00 5153/5153 gc_heap_free [140] +----------------------------------------------- + 8.25 0.00 693683336/693683336 gc_try_alloc [9] +[14] 9.3 8.25 0.00 693683336 gc_copy_obj [14] +----------------------------------------------- + 0.00 0.00 1/2137195779 __lambda_5 [121] + 6.26 0.00 2137195778/2137195779 __lambda_1 [4] +[15] 7.0 6.26 0.00 2137195779 Cyc_num_fast_eq_op [15] +----------------------------------------------- + 2.76 0.00 676273190/1370056701 gc_sweep [13] + 2.83 0.00 693783511/1370056701 gc_try_alloc [9] +[16] 6.3 5.60 0.00 1370056701 gc_allocated_bytes [16] +----------------------------------------------- + 2.44 2.12 693722448/693722448 gc_move [7] +[17] 5.1 2.44 2.12 693722448 gc_fixup_moved_obj [17] + 1.90 0.23 693922724/693922724 gc_thr_add_to_move_buffer [20] + 0.00 0.00 21/21 gc_mark_gray2 [64] +----------------------------------------------- + 0.00 0.00 1/1424380073 __lambda_43 [122] + 0.00 0.00 1/1424380073 __lambda_42 [39] + 1.99 0.00 710103629/1424380073 __lambda_0 [10] + 2.00 0.00 714276442/1424380073 __lambda_1 [4] +[18] 4.5 3.99 0.00 1424380073 Cyc_fast_sub [18] +----------------------------------------------- + 0.00 0.00 2/710296579 __lambda_23 [36] + 0.00 0.00 7/710296579 __lambda_57 [62] + 0.00 0.00 16/710296579 __lambda_253 [59] + 3.14 0.00 710296554/710296579 __lambda_1 [4] +[19] 3.5 3.14 0.00 710296579 Cyc_fast_sum [19] +----------------------------------------------- + 1.90 0.23 693922724/693922724 gc_fixup_moved_obj [17] +[20] 2.4 1.90 0.23 693922724 gc_thr_add_to_move_buffer [20] + 0.23 0.00 4/5 gc_thr_grow_move_buffer [31] +----------------------------------------------- + 0.00 0.00 1/1424649027 __lambda_69 [131] + 0.00 0.00 1/1424649027 __lambda_67 [130] + 0.00 0.00 1/1424649027 __lambda_14 [126] + 0.00 0.00 1/1424649027 __lambda_6 [129] + 0.00 0.00 1/1424649027 __lambda_1561 [77] + 0.00 0.00 1/1424649027 __lambda_4 [128] + 0.00 0.00 1/1424649027 __lambda_3 [127] + 0.00 0.00 1/1424649027 __lambda_5 [80] + 0.00 0.00 1/1424649027 __lambda_42 [79] + 0.00 0.00 1/1424649027 __lambda_400 [78] + 0.00 0.00 2/1424649027 __lambda_327 [125] + 0.00 0.00 2/1424649027 __lambda_304 [124] + 0.00 0.00 2/1424649027 __lambda_3 [123] + 0.00 0.00 3/1424649027 __lambda_725 [120] + 0.00 0.00 3/1424649027 __lambda_309 [119] + 0.00 0.00 3/1424649027 __lambda_308 [118] + 0.00 0.00 3/1424649027 __lambda_23 [117] + 0.00 0.00 4/1424649027 __lambda_21 [107] + 0.00 0.00 4/1424649027 __lambda_384 [115] + 0.00 0.00 4/1424649027 __lambda_383 [114] + 0.00 0.00 4/1424649027 __lambda_251 [109] + 0.00 0.00 4/1424649027 __lambda_35 [113] + 0.00 0.00 4/1424649027 __lambda_390 [116] + 0.00 0.00 4/1424649027 __lambda_337 [112] + 0.00 0.00 4/1424649027 __lambda_329 [111] + 0.00 0.00 4/1424649027 __lambda_28 [110] + 0.00 0.00 4/1424649027 __lambda_24 [108] + 0.00 0.00 4/1424649027 __lambda_11 [106] + 0.00 0.00 7/1424649027 __lambda_43 [76] + 0.00 0.00 7/1424649027 __lambda_18 [75] + 0.00 0.00 7/1424649027 __lambda_16 [74] + 0.00 0.00 7/1424649027 __lambda_13 [73] + 0.00 0.00 8/1424649027 __lambda_247 [72] + 0.00 0.00 9/1424649027 __lambda_36 [71] + 0.00 0.00 12/1424649027 __lambda_1 [70] + 0.00 0.00 13/1424649027 __lambda_282 [69] + 0.00 0.00 16/1424649027 __lambda_254 [68] + 0.00 0.00 16/1424649027 __lambda_14 [67] + 0.00 0.00 16/1424649027 __lambda_12 [66] + 0.00 0.00 23/1424649027 __lambda_20 [63] + 1.82 0.00 1424648814/1424649027 __lambda_1 [4] +[21] 2.0 1.82 0.00 1424649027 Cyc_st_add [21] +----------------------------------------------- + +[22] 1.0 0.92 0.00 dispatch_num_eq [22] +----------------------------------------------- + 0.01 0.00 1/44 __lambda_7 [44] + 0.01 0.00 1/44 __lambda_5 [43] + 0.04 0.00 3/44 __lambda_42 [39] + 0.04 0.00 3/44 __lambda_22 [40] + 0.09 0.00 6/44 __lambda_23 [36] + 0.10 0.00 7/44 __lambda_9 [35] + 0.34 0.00 23/44 __lambda_721 [29] +[23] 0.7 0.65 0.00 44 cell_get [23] +----------------------------------------------- + 0.00 0.00 1/1358 gc_collector [12] + 0.55 0.00 1357/1358 gc_alloc [8] +[24] 0.6 0.55 0.00 1358 gc_grow_heap [24] + 0.00 0.00 1356/1361 gc_heap_create [143] +----------------------------------------------- + 0.07 0.48 941/941 gc_collector [12] +[25] 0.6 0.07 0.48 941 gc_collector_trace [25] + 0.02 0.43 1894577/1894577 gc_empty_collector_stack [28] + 0.02 0.01 1894581/29559012 gc_mark_black [27] + 0.00 0.00 2723/6714 ck_pr_fence_load [138] + 0.00 0.00 2447/6379 ck_pr_md_load_ptr [139] +----------------------------------------------- + 0.53 0.00 1054/1054 gc_collector [12] +[26] 0.6 0.53 0.00 1054 gc_mark_globals [26] + 0.00 0.00 197181/29559012 gc_mark_black [27] +----------------------------------------------- + 0.00 0.00 197181/29559012 gc_mark_globals [26] + 0.02 0.01 1894581/29559012 gc_collector_trace [25] + 0.22 0.21 27467250/29559012 gc_empty_collector_stack [28] +[27] 0.5 0.24 0.23 29559012 gc_mark_black [27] + 0.12 0.03 54145669/54145669 gc_collector_mark_gray [34] + 0.07 0.00 29182751/32429287 ck_pr_md_load_int [37] +----------------------------------------------- + 0.02 0.43 1894577/1894577 gc_collector_trace [25] +[28] 0.5 0.02 0.43 1894577 gc_empty_collector_stack [28] + 0.22 0.21 27467250/29559012 gc_mark_black [27] +----------------------------------------------- + 1 __lambda_59 [920] + 1 __lambda_26 [896] + 2 __lambda_3 [123] + 3 __lambda_308 [118] + 4 __lambda_387 [862] + 12 __lambda_1 [70] +[29] 0.4 0.00 0.34 23 __lambda_721 [29] + 0.34 0.00 23/44 cell_get [23] + 0.00 0.00 23/82 Cyc_is_null [159] + 12 __lambda_0 [833] + 4 __lambda_389 [864] + 3 __lambda_307 [870] + 2 __lambda_2 [880] + 1 __lambda_25 [895] + 1 __lambda_58 [919] +----------------------------------------------- + +[30] 0.3 0.29 0.00 __halt [30] +----------------------------------------------- + 0.06 0.00 1/5 gc_thread_data_init [38] + 0.23 0.00 4/5 gc_thr_add_to_move_buffer [20] +[31] 0.3 0.29 0.00 5 gc_thr_grow_move_buffer [31] +----------------------------------------------- + +[32] 0.3 0.27 0.00 gc_print_stats [32] +----------------------------------------------- + 2 __lambda_246 [846] +[33] 0.3 0.25 0.00 2 __lambda_2 [33] + 2 __lambda_1 [4] +----------------------------------------------- + 0.12 0.03 54145669/54145669 gc_mark_black [27] +[34] 0.2 0.12 0.03 54145669 gc_collector_mark_gray [34] + 0.03 0.01 27124522/29134668 vpbuffer_add [41] +----------------------------------------------- + 4 __lambda_10 [849] +[35] 0.1 0.00 0.10 4 __lambda_9 [35] + 0.10 0.00 7/44 cell_get [23] + 3 __lambda_388 [863] + 1 __lambda_327 [125] +----------------------------------------------- + 2 __lambda_1 [4] +[36] 0.1 0.00 0.09 2 __lambda_23 [36] + 0.09 0.00 6/44 cell_get [23] + 0.00 0.00 2/710296579 Cyc_fast_sum [19] + 2 __lambda_51 [871] +----------------------------------------------- + 0.00 0.00 2/32429287 gc_thread_data_init [38] + 0.00 0.00 128/32429287 gc_mut_update [54] + 0.00 0.00 1097/32429287 gc_collector [12] + 0.00 0.00 1671/32429287 collector_main [11] + 0.00 0.00 2072/32429287 gc_post_handshake [53] + 0.00 0.00 12187/32429287 gc_wait_handshake [51] + 0.01 0.00 3229379/32429287 gc_mut_cooperate [42] + 0.07 0.00 29182751/32429287 gc_mark_black [27] +[37] 0.1 0.08 0.00 32429287 ck_pr_md_load_int [37] +----------------------------------------------- + 0.00 0.06 1/1 main [1] +[38] 0.1 0.00 0.06 1 gc_thread_data_init [38] + 0.06 0.00 1/5 gc_thr_grow_move_buffer [31] + 0.00 0.00 2/8 vpbuffer_realloc [47] + 0.00 0.00 2/32429287 ck_pr_md_load_int [37] +----------------------------------------------- + 1 __lambda_766 [931] +[39] 0.0 0.00 0.04 1 __lambda_42 [39] + 0.04 0.00 3/44 cell_get [23] + 0.00 0.00 1/1424380073 Cyc_fast_sub [18] + 1 __lambda_64 [926] +----------------------------------------------- + 1 __lambda_52 [82] +[40] 0.0 0.00 0.04 1 __lambda_22 [40] + 0.04 0.00 3/44 cell_get [23] + 1 __lambda_51 [871] +----------------------------------------------- + 0.00 0.00 6/29134668 add_mutation [81] + 0.00 0.00 21/29134668 gc_mark_gray2 [64] + 0.00 0.00 2010119/29134668 gc_mark_gray [48] + 0.03 0.01 27124522/29134668 gc_collector_mark_gray [34] +[41] 0.0 0.03 0.01 29134668 vpbuffer_add [41] + 0.01 0.00 5/8 vpbuffer_realloc [47] +----------------------------------------------- + 0.00 0.02 1076787/1076787 GC [5] +[42] 0.0 0.00 0.02 1076787 gc_mut_cooperate [42] + 0.01 0.00 1075181/1075181 gc_sum_pending_writes [45] + 0.01 0.00 3229379/32429287 ck_pr_md_load_int [37] + 0.00 0.00 2015403/2015508 gc_mark_gray [48] + 0.00 0.00 7811/17613 ck_pr_cas_int [134] + 0.00 0.00 1960/1960 gc_zero_read_write_counts [141] +----------------------------------------------- + 1 __lambda_6 [105] +[43] 0.0 0.00 0.01 1 __lambda_5 [43] + 0.01 0.00 1/44 cell_get [23] + 1 __lambda_388 [863] +----------------------------------------------- + 1 __lambda_8 [84] +[44] 0.0 0.00 0.01 1 __lambda_7 [44] + 0.01 0.00 1/44 cell_get [23] + 1 __lambda_6 [105] +----------------------------------------------- + 0.01 0.00 1075181/1075181 gc_mut_cooperate [42] +[45] 0.0 0.01 0.00 1075181 gc_sum_pending_writes [45] +----------------------------------------------- + +[46] 0.0 0.01 0.00 ck_pr_md_load_uint [46] +----------------------------------------------- + 0.00 0.00 1/8 gc_initialize [49] + 0.00 0.00 2/8 gc_thread_data_init [38] + 0.01 0.00 5/8 vpbuffer_add [41] +[47] 0.0 0.01 0.00 8 vpbuffer_realloc [47] +----------------------------------------------- + 0.00 0.00 105/2015508 mark_stack_or_heap_obj [58] + 0.00 0.00 2015403/2015508 gc_mut_cooperate [42] +[48] 0.0 0.00 0.00 2015508 gc_mark_gray [48] + 0.00 0.00 2010119/29134668 vpbuffer_add [41] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[49] 0.0 0.00 0.00 1 gc_initialize [49] + 0.00 0.00 1/8 vpbuffer_realloc [47] +----------------------------------------------- + +[50] 0.0 0.00 0.00 __lambda_4 [50] + 0.00 0.00 1/1077078 Cyc_string_append [85] +----------------------------------------------- + 0.00 0.00 752/2686 gc_collector [12] + 0.00 0.00 1934/2686 gc_handshake [52] +[51] 0.0 0.00 0.00 2686 gc_wait_handshake [51] + 0.00 0.00 12187/32429287 ck_pr_md_load_int [37] + 0.00 0.00 2085/6714 ck_pr_fence_load [138] + 0.00 0.00 2018/6379 ck_pr_md_load_ptr [139] +----------------------------------------------- + 0.00 0.00 1965/1965 gc_collector [12] +[52] 0.0 0.00 0.00 1965 gc_handshake [52] + 0.00 0.00 1934/2686 gc_wait_handshake [51] + 0.00 0.00 1342/1861 gc_post_handshake [53] +----------------------------------------------- + 0.00 0.00 519/1861 gc_collector [12] + 0.00 0.00 1342/1861 gc_handshake [52] +[53] 0.0 0.00 0.00 1861 gc_post_handshake [53] + 0.00 0.00 2072/32429287 ck_pr_md_load_int [37] + 0.00 0.00 2220/17613 ck_pr_cas_int [134] +----------------------------------------------- + 0.00 0.00 3/64 Cyc_set_cell [65] + 0.00 0.00 24/64 Cyc_global_set [56] + 0.00 0.00 37/64 Cyc_set_car [55] +[54] 0.0 0.00 0.00 64 gc_mut_update [54] + 0.00 0.00 128/32429287 ck_pr_md_load_int [37] + 0.00 0.00 128/128 mark_stack_or_heap_obj [58] +----------------------------------------------- + 0.00 0.00 7/37 __lambda_17 [61] + 0.00 0.00 7/37 __lambda_15 [60] + 0.00 0.00 23/37 __lambda_19 [57] +[55] 0.0 0.00 0.00 37 Cyc_set_car [55] + 0.00 0.00 37/64 gc_mut_update [54] + 0.00 0.00 37/40 add_mutation [81] + 0.00 0.00 37/400 Cyc_is_pair [148] +----------------------------------------------- + 0.00 0.00 1/24 __lambda_5 [104] + 0.00 0.00 1/24 __lambda_3 [101] + 0.00 0.00 1/24 __lambda_2 [100] + 0.00 0.00 1/24 __lambda_0 [86] + 0.00 0.00 1/24 __lambda_1561 [77] + 0.00 0.00 1/24 __lambda_1559 [99] + 0.00 0.00 1/24 __lambda_1557 [98] + 0.00 0.00 1/24 __lambda_1555 [97] + 0.00 0.00 1/24 __lambda_1554 [96] + 0.00 0.00 1/24 __lambda_1553 [95] + 0.00 0.00 1/24 __lambda_1552 [94] + 0.00 0.00 1/24 __lambda_1551 [93] + 0.00 0.00 1/24 __lambda_1550 [92] + 0.00 0.00 1/24 __lambda_1549 [91] + 0.00 0.00 1/24 __lambda_1548 [90] + 0.00 0.00 1/24 __lambda_1547 [89] + 0.00 0.00 1/24 __lambda_1546 [88] + 0.00 0.00 1/24 __lambda_1544 [87] + 0.00 0.00 1/24 __lambda_5 [80] + 0.00 0.00 1/24 __lambda_4 [103] + 0.00 0.00 1/24 __lambda_42 [79] + 0.00 0.00 1/24 __lambda_400 [78] + 0.00 0.00 1/24 __lambda_399 [102] + 0.00 0.00 1/24 __lambda_6 [105] +[56] 0.0 0.00 0.00 24 Cyc_global_set [56] + 0.00 0.00 24/64 gc_mut_update [54] +----------------------------------------------- + 23 __lambda_20 [63] +[57] 0.0 0.00 0.00 23 __lambda_19 [57] + 0.00 0.00 23/37 Cyc_set_car [55] + 16 __lambda_252 [830] + 7 __lambda_55 [847] +----------------------------------------------- + 0.00 0.00 128/128 gc_mut_update [54] +[58] 0.0 0.00 0.00 128 mark_stack_or_heap_obj [58] + 0.00 0.00 105/2015508 gc_mark_gray [48] + 0.00 0.00 127/127 gc_is_stack_obj [157] +----------------------------------------------- + 16 __lambda_14 [67] +[59] 0.0 0.00 0.00 16 __lambda_253 [59] + 0.00 0.00 16/710296579 Cyc_fast_sum [19] + 16 __lambda_20 [63] +----------------------------------------------- + 7 __lambda_16 [74] +[60] 0.0 0.00 0.00 7 __lambda_15 [60] + 0.00 0.00 7/37 Cyc_set_car [55] + 4 __lambda_42 [867] + 3 __lambda_21 [868] +----------------------------------------------- + 7 __lambda_18 [75] +[61] 0.0 0.00 0.00 7 __lambda_17 [61] + 0.00 0.00 7/37 Cyc_set_car [55] + 7 __lambda_56 [848] +----------------------------------------------- + 7 __lambda_13 [73] +[62] 0.0 0.00 0.00 7 __lambda_57 [62] + 0.00 0.00 7/710296579 Cyc_fast_sum [19] + 7 __lambda_18 [75] +----------------------------------------------- + 7 __lambda_56 [848] + 16 __lambda_253 [59] +[63] 0.0 0.00 0.00 23 __lambda_20 [63] + 0.00 0.00 23/1424649027 Cyc_st_add [21] + 0.00 0.00 69/192 Cyc_cdr [156] + 23 __lambda_19 [57] +----------------------------------------------- + 0.00 0.00 21/21 gc_fixup_moved_obj [17] +[64] 0.0 0.00 0.00 21 gc_mark_gray2 [64] + 0.00 0.00 21/29134668 vpbuffer_add [41] +----------------------------------------------- + 0.00 0.00 1/3 __lambda_65 [83] + 0.00 0.00 1/3 __lambda_52 [82] + 0.00 0.00 1/3 __lambda_8 [84] +[65] 0.0 0.00 0.00 3 Cyc_set_cell [65] + 0.00 0.00 3/64 gc_mut_update [54] + 0.00 0.00 3/40 add_mutation [81] +----------------------------------------------- + 16 __lambda_45 [832] +[66] 0.0 0.00 0.00 16 __lambda_12 [66] + 0.00 0.00 16/1424649027 Cyc_st_add [21] + 0.00 0.00 16/192 Cyc_cdr [156] + 0.00 0.00 16/69 Cyc_car [160] + 16 __lambda_44 [831] +----------------------------------------------- + 16 __lambda_254 [68] +[67] 0.0 0.00 0.00 16 __lambda_14 [67] + 0.00 0.00 16/1424649027 Cyc_st_add [21] + 0.00 0.00 48/192 Cyc_cdr [156] + 0.00 0.00 16/69 Cyc_car [160] + 16 __lambda_253 [59] +----------------------------------------------- + 3 __lambda_43 [76] + 4 __lambda_388 [863] + 9 __lambda_241 [834] +[68] 0.0 0.00 0.00 16 __lambda_254 [68] + 0.00 0.00 16/1424649027 Cyc_st_add [21] + 16 __lambda_14 [67] +----------------------------------------------- + 4 __lambda_383 [114] + 9 __lambda_281 [843] +[69] 0.0 0.00 0.00 13 __lambda_282 [69] + 0.00 0.00 13/1424649027 Cyc_st_add [21] + 0.00 0.00 13/82 Cyc_is_null [159] + 0.00 0.00 9/69 Cyc_car [160] + 9 Cyc_apply [178] + 4 __lambda_27 [858] +----------------------------------------------- + 1 __lambda_62 [924] + 1 __lambda_61 [923] + 1 __lambda_41 [911] + 1 __lambda_39 [909] + 1 __lambda_37 [907] + 1 __lambda_36 [906] + 1 __lambda_34 [904] + 1 __lambda_32 [902] + 1 __lambda_31 [901] + 1 __lambda_30 [900] + 1 __lambda_29 [899] + 1 __lambda_28 [898] +[70] 0.0 0.00 0.00 12 __lambda_1 [70] + 0.00 0.00 12/1424649027 Cyc_st_add [21] + 0.00 0.00 12/82 Cyc_is_null [159] + 12 __lambda_721 [29] +----------------------------------------------- + 9 __lambda_250 [828] +[71] 0.0 0.00 0.00 9 __lambda_36 [71] + 0.00 0.00 9/1424649027 Cyc_st_add [21] + 0.00 0.00 9/13 memberp [173] + 9 __lambda_249 [842] +----------------------------------------------- + 4 __lambda_20 [854] + 4 __lambda_16 [851] +[72] 0.0 0.00 0.00 8 __lambda_247 [72] + 0.00 0.00 8/1424649027 Cyc_st_add [21] + 8 __lambda_245 [845] +----------------------------------------------- + 7 __lambda_250 [828] +[73] 0.0 0.00 0.00 7 __lambda_13 [73] + 0.00 0.00 7/1424649027 Cyc_st_add [21] + 0.00 0.00 14/192 Cyc_cdr [156] + 0.00 0.00 7/69 Cyc_car [160] + 7 __lambda_57 [62] +----------------------------------------------- + 3 __lambda_22 [869] + 4 __lambda_43 [76] +[74] 0.0 0.00 0.00 7 __lambda_16 [74] + 0.00 0.00 7/1424649027 Cyc_st_add [21] + 0.00 0.00 7/192 Cyc_cdr [156] + 7 __lambda_15 [60] +----------------------------------------------- + 7 __lambda_57 [62] +[75] 0.0 0.00 0.00 7 __lambda_18 [75] + 0.00 0.00 7/1424649027 Cyc_st_add [21] + 0.00 0.00 14/192 Cyc_cdr [156] + 7 __lambda_17 [61] +----------------------------------------------- + 7 __lambda_55 [847] +[76] 0.0 0.00 0.00 7 __lambda_43 [76] + 0.00 0.00 7/1424649027 Cyc_st_add [21] + 0.00 0.00 7/82 Cyc_is_null [159] + 4 __lambda_16 [74] + 3 __lambda_254 [68] +----------------------------------------------- + 1 c_schemebase_entry_pt [205] +[77] 0.0 0.00 0.00 1 __lambda_1561 [77] + 0.00 0.00 1/24 Cyc_global_set [56] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_1560 [892] +----------------------------------------------- + 1 c_schemeread_entry_pt [207] +[78] 0.0 0.00 0.00 1 __lambda_400 [78] + 0.00 0.00 1/24 Cyc_global_set [56] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_399 [102] +----------------------------------------------- + 1 c_scheme_char_entry_pt [204] +[79] 0.0 0.00 0.00 1 __lambda_42 [79] + 0.00 0.00 1/24 Cyc_global_set [56] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 c_schemeread_entry_pt [207] +----------------------------------------------- + 1 c_schemewrite_entry_pt [209] +[80] 0.0 0.00 0.00 1 __lambda_5 [80] + 0.00 0.00 1/24 Cyc_global_set [56] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_4 [103] +----------------------------------------------- + 0.00 0.00 3/40 Cyc_set_cell [65] + 0.00 0.00 37/40 Cyc_set_car [55] +[81] 0.0 0.00 0.00 40 add_mutation [81] + 0.00 0.00 6/29134668 vpbuffer_add [41] +----------------------------------------------- + 1 __lambda_53 [914] +[82] 0.0 0.00 0.00 1 __lambda_52 [82] + 0.00 0.00 1/3 Cyc_set_cell [65] + 1 __lambda_22 [40] +----------------------------------------------- + 1 __lambda_66 [927] +[83] 0.0 0.00 0.00 1 __lambda_65 [83] + 0.00 0.00 1/3 Cyc_set_cell [65] + 1 __lambda_62 [924] +----------------------------------------------- + 1 __lambda_327 [125] +[84] 0.0 0.00 0.00 1 __lambda_8 [84] + 0.00 0.00 1/3 Cyc_set_cell [65] + 1 __lambda_7 [44] +----------------------------------------------- + 1 __lambda_68 [928] + 1 __lambda_7 [929] + 1 __lambda_6 [129] + 1 __lambda_1 [884] + 0.00 0.00 1/1077078 __lambda_4 [50] +[85] 0.0 0.00 0.00 5 Cyc_string_append [85] + 0.00 0.00 1/1 __lambda_5 [104] + 0.00 0.00 19/23 Cyc_is_string [165] + 1 __lambda_32 [902] + 1 __lambda_6 [921] + 1 __lambda_0 [86] + 1 __lambda_3 [101] +----------------------------------------------- + 1 Cyc_string_append [85] +[86] 0.0 0.00 0.00 1 __lambda_0 [86] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 c_schemebase_entry_pt [205] +----------------------------------------------- + 1 __lambda_327 [125] +[87] 0.0 0.00 0.00 1 __lambda_1544 [87] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 c_schemetime_entry_pt [208] +----------------------------------------------- + 1 __lambda_1547 [89] +[88] 0.0 0.00 0.00 1 __lambda_1546 [88] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1545 [889] +----------------------------------------------- + 1 __lambda_1548 [90] +[89] 0.0 0.00 0.00 1 __lambda_1547 [89] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1546 [88] +----------------------------------------------- + 1 __lambda_1549 [91] +[90] 0.0 0.00 0.00 1 __lambda_1548 [90] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1547 [89] +----------------------------------------------- + 1 __lambda_1550 [92] +[91] 0.0 0.00 0.00 1 __lambda_1549 [91] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1548 [90] +----------------------------------------------- + 1 __lambda_1551 [93] +[92] 0.0 0.00 0.00 1 __lambda_1550 [92] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1549 [91] +----------------------------------------------- + 1 __lambda_1552 [94] +[93] 0.0 0.00 0.00 1 __lambda_1551 [93] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1550 [92] +----------------------------------------------- + 1 __lambda_1553 [95] +[94] 0.0 0.00 0.00 1 __lambda_1552 [94] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1551 [93] +----------------------------------------------- + 1 __lambda_1554 [96] +[95] 0.0 0.00 0.00 1 __lambda_1553 [95] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1552 [94] +----------------------------------------------- + 1 __lambda_1555 [97] +[96] 0.0 0.00 0.00 1 __lambda_1554 [96] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1553 [95] +----------------------------------------------- + 1 __lambda_722 [874] +[97] 0.0 0.00 0.00 1 __lambda_1555 [97] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1554 [96] +----------------------------------------------- + 1 __lambda_722 [874] +[98] 0.0 0.00 0.00 1 __lambda_1557 [98] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1556 [890] +----------------------------------------------- + 1 __lambda_722 [874] +[99] 0.0 0.00 0.00 1 __lambda_1559 [99] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1558 [891] +----------------------------------------------- + 1 __lambda_3 [101] +[100] 0.0 0.00 0.00 1 __lambda_2 [100] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_1 [884] +----------------------------------------------- + 1 Cyc_string_append [85] +[101] 0.0 0.00 0.00 1 __lambda_3 [101] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_2 [100] +----------------------------------------------- + 1 __lambda_400 [78] +[102] 0.0 0.00 0.00 1 __lambda_399 [102] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 c_entry_pt_first_lambda [203] +----------------------------------------------- + 1 __lambda_5 [80] +[103] 0.0 0.00 0.00 1 __lambda_4 [103] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 c_scheme_char_entry_pt [204] +----------------------------------------------- + 0.00 0.00 1/1 Cyc_string_append [85] +[104] 0.0 0.00 0.00 1 __lambda_5 [104] + 0.00 0.00 1/24 Cyc_global_set [56] +----------------------------------------------- + 1 __lambda_7 [44] +[105] 0.0 0.00 0.00 1 __lambda_6 [105] + 0.00 0.00 1/24 Cyc_global_set [56] + 1 __lambda_5 [43] +----------------------------------------------- + 4 __lambda_389 [864] +[106] 0.0 0.00 0.00 4 __lambda_11 [106] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 0.00 0.00 4/4 assoc [187] + 4 __lambda_10 [849] +----------------------------------------------- + 2 __lambda_4 [882] + 2 __lambda_3 [881] +[107] 0.0 0.00 0.00 4 __lambda_21 [107] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_251 [109] +----------------------------------------------- + 4 __lambda_41 [866] +[108] 0.0 0.00 0.00 4 __lambda_24 [108] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_40 [865] +----------------------------------------------- + 4 __lambda_21 [107] +[109] 0.0 0.00 0.00 4 __lambda_251 [109] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_19 [853] +----------------------------------------------- + 4 __lambda_42 [867] +[110] 0.0 0.00 0.00 4 __lambda_28 [110] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_383 [114] +----------------------------------------------- + 4 __lambda_337 [112] +[111] 0.0 0.00 0.00 4 __lambda_329 [111] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 0.00 0.00 4/69 Cyc_car [160] + 4 __lambda_35 [113] +----------------------------------------------- + 4 __lambda_27 [858] +[112] 0.0 0.00 0.00 4 __lambda_337 [112] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_329 [111] +----------------------------------------------- + 4 __lambda_329 [111] +[113] 0.0 0.00 0.00 4 __lambda_35 [113] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 0.00 0.00 4/13 memberp [173] + 4 __lambda_328 [859] +----------------------------------------------- + 4 __lambda_28 [110] +[114] 0.0 0.00 0.00 4 __lambda_383 [114] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_282 [69] +----------------------------------------------- + 4 __lambda_19 [853] +[115] 0.0 0.00 0.00 4 __lambda_384 [115] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 Cyc_list2vector [184] +----------------------------------------------- + 1 __lambda_14 [126] + 1 __lambda_13 [888] + 1 __lambda_12 [887] + 1 __lambda_11 [886] +[116] 0.0 0.00 0.00 4 __lambda_390 [116] + 0.00 0.00 4/1424649027 Cyc_st_add [21] + 4 __lambda_387 [862] +----------------------------------------------- + 3 __lambda_44 [831] +[117] 0.0 0.00 0.00 3 __lambda_23 [117] + 0.00 0.00 3/1424649027 Cyc_st_add [21] + 0.00 0.00 3/192 Cyc_cdr [156] + 0.00 0.00 3/69 Cyc_car [160] + 3 __lambda_22 [869] +----------------------------------------------- + 3 do_dispatch [133] +[118] 0.0 0.00 0.00 3 __lambda_308 [118] + 0.00 0.00 3/1424649027 Cyc_st_add [21] + 0.00 0.00 3/82 Cyc_is_null [159] + 3 __lambda_721 [29] +----------------------------------------------- + 1 __lambda_60 [922] + 1 __lambda_35 [905] + 1 __lambda_27 [897] +[119] 0.0 0.00 0.00 3 __lambda_309 [119] + 0.00 0.00 3/1424649027 Cyc_st_add [21] + 3 apply_va [180] +----------------------------------------------- + 1 __lambda_1560 [892] + 1 __lambda_1558 [891] + 1 __lambda_1556 [890] +[120] 0.0 0.00 0.00 3 __lambda_725 [120] + 0.00 0.00 3/1424649027 Cyc_st_add [21] + 3 __lambda_719 [873] +----------------------------------------------- + 1 __lambda_51 [871] +[121] 0.0 0.00 0.00 1 __lambda_5 [121] + 0.00 0.00 1/2137195779 Cyc_num_fast_eq_op [15] + 1 __lambda_50 [913] +----------------------------------------------- + 1 __lambda_0 [878] +[122] 0.0 0.00 0.00 1 __lambda_43 [122] + 0.00 0.00 1/1424380073 Cyc_fast_sub [18] + 0.00 0.00 1/2 Cyc_fast_div [191] + 1 __lambda_766 [931] +----------------------------------------------- + 1 __lambda_40 [910] + 1 __lambda_38 [908] +[123] 0.0 0.00 0.00 2 __lambda_3 [123] + 0.00 0.00 2/1424649027 Cyc_st_add [21] + 0.00 0.00 2/82 Cyc_is_null [159] + 2 __lambda_721 [29] +----------------------------------------------- + 1 __lambda_58 [919] + 1 __lambda_25 [895] +[124] 0.0 0.00 0.00 2 __lambda_304 [124] + 0.00 0.00 2/1424649027 Cyc_st_add [21] + 0.00 0.00 2/82 Cyc_is_null [159] + 0.00 0.00 2/69 Cyc_car [160] + 0.00 0.00 2/2 Cyc_io_flush_output_port [192] + 1 __lambda_24 [894] + 1 __lambda_57 [918] +----------------------------------------------- + 1 __lambda_1545 [889] + 1 __lambda_9 [35] +[125] 0.0 0.00 0.00 2 __lambda_327 [125] + 0.00 0.00 2/1424649027 Cyc_st_add [21] + 1 __lambda_8 [84] + 1 __lambda_1544 [87] +----------------------------------------------- + 1 c_entry_pt_first_lambda [203] +[126] 0.0 0.00 0.00 1 __lambda_14 [126] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_390 [116] +----------------------------------------------- + 1 c_schemetime_entry_pt [208] +[127] 0.0 0.00 0.00 1 __lambda_3 [127] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 c_schemewrite_entry_pt [209] +----------------------------------------------- + 1 __lambda_69 [131] +[128] 0.0 0.00 0.00 1 __lambda_4 [128] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_68 [928] +----------------------------------------------- + 1 c_schemecyclonecommon_entry_pt [206] +[129] 0.0 0.00 0.00 1 __lambda_6 [129] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 Cyc_string_append [85] +----------------------------------------------- + 1 __lambda_6 [921] +[130] 0.0 0.00 0.00 1 __lambda_67 [130] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_66 [927] +----------------------------------------------- + 1 __lambda_33 [903] +[131] 0.0 0.00 0.00 1 __lambda_69 [131] + 0.00 0.00 1/1424649027 Cyc_st_add [21] + 1 __lambda_4 [128] +----------------------------------------------- + 0.00 0.00 1077265/1077265 gc_minor [6] +[132] 0.0 0.00 0.00 1077265 clear_mutations [132] +----------------------------------------------- + 7 dispatch [181] + 19.71 55.22 1077077/1077078 Cyc_start_trampoline [2] +[133] 0.0 0.00 0.00 1077084 do_dispatch [133] + 826498 __lambda_1 [4] + 249753 __lambda_0 [10] + 4 __lambda_20 [854] + 3 __lambda_308 [118] + 1 c_entry_pt [202] +----------------------------------------------- + 0.00 0.00 13/17613 gc_mutator_thread_blocked [171] + 0.00 0.00 13/17613 gc_mutator_thread_runnable [172] + 0.00 0.00 2220/17613 gc_post_handshake [53] + 0.00 0.00 7556/17613 gc_collector [12] + 0.00 0.00 7811/17613 gc_mut_cooperate [42] +[134] 0.0 0.00 0.00 17613 ck_pr_cas_int [134] +----------------------------------------------- + 0.00 0.00 14863/14863 gc_sweep [13] +[135] 0.0 0.00 0.00 14863 gc_is_heap_empty [135] +----------------------------------------------- + 0.00 0.00 9037/9037 gc_collector [12] +[136] 0.0 0.00 0.00 9037 gc_get_heap [136] +----------------------------------------------- + 0.00 0.00 6882/6882 ck_pr_fence_load [138] +[137] 0.0 0.00 0.00 6882 ck_pr_barrier [137] +----------------------------------------------- + 0.00 0.00 1906/6714 gc_free_old_thread_data [142] + 0.00 0.00 2085/6714 gc_wait_handshake [51] + 0.00 0.00 2723/6714 gc_collector_trace [25] +[138] 0.0 0.00 0.00 6714 ck_pr_fence_load [138] + 0.00 0.00 6882/6882 ck_pr_barrier [137] +----------------------------------------------- + 0.00 0.00 1914/6379 gc_free_old_thread_data [142] + 0.00 0.00 2018/6379 gc_wait_handshake [51] + 0.00 0.00 2447/6379 gc_collector_trace [25] +[139] 0.0 0.00 0.00 6379 ck_pr_md_load_ptr [139] +----------------------------------------------- + 0.00 0.00 5153/5153 gc_sweep [13] +[140] 0.0 0.00 0.00 5153 gc_heap_free [140] +----------------------------------------------- + 0.00 0.00 1960/1960 gc_mut_cooperate [42] +[141] 0.0 0.00 0.00 1960 gc_zero_read_write_counts [141] +----------------------------------------------- + 0.00 0.00 1904/1904 gc_collector [12] +[142] 0.0 0.00 0.00 1904 gc_free_old_thread_data [142] + 0.00 0.00 1914/6379 ck_pr_md_load_ptr [139] + 0.00 0.00 1906/6714 ck_pr_fence_load [138] +----------------------------------------------- + 0.00 0.00 5/1361 gc_init_heap [211] + 0.00 0.00 1356/1361 gc_grow_heap [24] +[143] 0.0 0.00 0.00 1361 gc_heap_create [143] +----------------------------------------------- + 0.00 0.00 856/856 hs_hash [145] +[144] 0.0 0.00 0.00 856 MurmurHash64A [144] +----------------------------------------------- + 0.00 0.00 384/856 set_get [151] + 0.00 0.00 472/856 set_insert [147] +[145] 0.0 0.00 0.00 856 hs_hash [145] + 0.00 0.00 856/856 MurmurHash64A [144] +----------------------------------------------- + 0.00 0.00 6/472 c_schemeread_entry_pt [207] + 0.00 0.00 123/472 c_schemebase_entry_pt [205] + 0.00 0.00 343/472 add_symbol_by_name [152] +[146] 0.0 0.00 0.00 472 add_symbol [146] + 0.00 0.00 472/472 set_insert [147] +----------------------------------------------- + 0.00 0.00 472/472 add_symbol [146] +[147] 0.0 0.00 0.00 472 set_insert [147] + 0.00 0.00 472/856 hs_hash [145] +----------------------------------------------- + 0.00 0.00 3/400 __lambda_719 [873] + 0.00 0.00 3/400 assoc [187] + 0.00 0.00 4/400 __lambda_248 [855] + 0.00 0.00 4/400 Cyc_list2string [183] + 0.00 0.00 4/400 Cyc_list2vector [184] + 0.00 0.00 7/400 apply_va [180] + 0.00 0.00 13/400 memberp [173] + 0.00 0.00 37/400 Cyc_set_car [55] + 0.00 0.00 64/400 equalp [162] + 0.00 0.00 69/400 Cyc_car [160] + 0.00 0.00 192/400 Cyc_cdr [156] +[148] 0.0 0.00 0.00 400 Cyc_is_pair [148] +----------------------------------------------- + 0.00 0.00 4/384 c_schemetime_entry_pt [208] + 0.00 0.00 5/384 c_entry_pt [202] + 0.00 0.00 5/384 c_schemewrite_entry_pt [209] + 0.00 0.00 7/384 c_schemecyclonecommon_entry_pt [206] + 0.00 0.00 23/384 c_scheme_char_entry_pt [204] + 0.00 0.00 44/384 c_schemeread_entry_pt [207] + 0.00 0.00 296/384 c_schemebase_entry_pt [205] +[149] 0.0 0.00 0.00 384 find_or_add_symbol [149] + 0.00 0.00 384/384 find_symbol_by_name [150] + 0.00 0.00 343/343 add_symbol_by_name [152] +----------------------------------------------- + 0.00 0.00 384/384 find_or_add_symbol [149] +[150] 0.0 0.00 0.00 384 find_symbol_by_name [150] + 0.00 0.00 384/384 set_get [151] +----------------------------------------------- + 0.00 0.00 384/384 find_symbol_by_name [150] +[151] 0.0 0.00 0.00 384 set_get [151] + 0.00 0.00 384/856 hs_hash [145] +----------------------------------------------- + 0.00 0.00 343/343 find_or_add_symbol [149] +[152] 0.0 0.00 0.00 343 add_symbol_by_name [152] + 0.00 0.00 343/343 _strdup [827] + 0.00 0.00 343/472 add_symbol [146] +----------------------------------------------- + 0.00 0.00 4/255 c_schemetime_entry_pt [208] + 0.00 0.00 5/255 c_entry_pt [202] + 0.00 0.00 5/255 c_schemewrite_entry_pt [209] + 0.00 0.00 7/255 c_schemecyclonecommon_entry_pt [206] + 0.00 0.00 23/255 c_scheme_char_entry_pt [204] + 0.00 0.00 38/255 c_schemeread_entry_pt [207] + 0.00 0.00 173/255 c_schemebase_entry_pt [205] +[153] 0.0 0.00 0.00 255 add_global [153] + 0.00 0.00 255/255 mcvar [155] + 0.00 0.00 255/255 malloc_make_pair [154] +----------------------------------------------- + 0.00 0.00 255/255 add_global [153] +[154] 0.0 0.00 0.00 255 malloc_make_pair [154] +----------------------------------------------- + 0.00 0.00 255/255 add_global [153] +[155] 0.0 0.00 0.00 255 mcvar [155] +----------------------------------------------- + 0.00 0.00 3/192 __lambda_23 [117] + 0.00 0.00 4/192 __lambda_249 [856] + 0.00 0.00 7/192 __lambda_16 [74] + 0.00 0.00 8/192 __lambda_245 [845] + 0.00 0.00 9/192 __lambda_281 [843] + 0.00 0.00 14/192 __lambda_18 [75] + 0.00 0.00 14/192 __lambda_13 [73] + 0.00 0.00 16/192 __lambda_12 [66] + 0.00 0.00 48/192 __lambda_14 [67] + 0.00 0.00 69/192 __lambda_20 [63] +[156] 0.0 0.00 0.00 192 Cyc_cdr [156] + 0.00 0.00 192/400 Cyc_is_pair [148] +----------------------------------------------- + 0.00 0.00 127/127 mark_stack_or_heap_obj [58] +[157] 0.0 0.00 0.00 127 gc_is_stack_obj [157] +----------------------------------------------- + 0.00 0.00 9/97 __lambda_249 [842] + 0.00 0.00 9/97 __lambda_248 [841] + 0.00 0.00 9/97 __lambda_247 [840] + 0.00 0.00 9/97 __lambda_246 [839] + 0.00 0.00 9/97 __lambda_245 [838] + 0.00 0.00 9/97 __lambda_244 [837] + 0.00 0.00 9/97 __lambda_243 [836] + 0.00 0.00 9/97 __lambda_242 [835] + 0.00 0.00 9/97 __lambda_241 [834] + 0.00 0.00 16/97 __lambda_251 [829] +[158] 0.0 0.00 0.00 97 Cyc_eq [158] +----------------------------------------------- + 0.00 0.00 2/82 __lambda_304 [124] + 0.00 0.00 2/82 __lambda_3 [123] + 0.00 0.00 3/82 __lambda_308 [118] + 0.00 0.00 4/82 __lambda_387 [862] + 0.00 0.00 7/82 __lambda_43 [76] + 0.00 0.00 12/82 __lambda_1 [70] + 0.00 0.00 13/82 __lambda_282 [69] + 0.00 0.00 16/82 __lambda_245 [845] + 0.00 0.00 23/82 __lambda_721 [29] +[159] 0.0 0.00 0.00 82 Cyc_is_null [159] +----------------------------------------------- + 0.00 0.00 2/69 __lambda_304 [124] + 0.00 0.00 3/69 __lambda_23 [117] + 0.00 0.00 4/69 __lambda_248 [855] + 0.00 0.00 4/69 __lambda_246 [846] + 0.00 0.00 4/69 __lambda_329 [111] + 0.00 0.00 4/69 __lambda_40 [865] + 0.00 0.00 7/69 __lambda_13 [73] + 0.00 0.00 9/69 __lambda_282 [69] + 0.00 0.00 16/69 __lambda_14 [67] + 0.00 0.00 16/69 __lambda_12 [66] +[160] 0.0 0.00 0.00 69 Cyc_car [160] + 0.00 0.00 69/400 Cyc_is_pair [148] +----------------------------------------------- + 0.00 0.00 64/64 equalp [162] +[161] 0.0 0.00 0.00 64 equal [161] +----------------------------------------------- + 4 equalp [162] + 0.00 0.00 3/56 assoc [187] + 0.00 0.00 4/56 __lambda_248 [855] + 0.00 0.00 49/56 memberp [173] +[162] 0.0 0.00 0.00 56+4 equalp [162] + 0.00 0.00 64/400 Cyc_is_pair [148] + 0.00 0.00 64/64 equal [161] + 4 equalp [162] +----------------------------------------------- + 0.00 0.00 2/32 Cyc_write_va_list [195] + 0.00 0.00 2/32 Cyc_io_flush_output_port [192] + 0.00 0.00 3/32 Cyc_write_char [190] + 0.00 0.00 12/32 Cyc_display_va_list [175] + 0.00 0.00 13/32 Cyc_io_read_char [170] +[163] 0.0 0.00 0.00 32 Cyc_is_port [163] +----------------------------------------------- + 0.00 0.00 4/31 Cyc_list2string [183] + 0.00 0.00 4/31 Cyc_list2vector [184] + 0.00 0.00 9/31 _cons [844] + 0.00 0.00 14/31 apply [167] +[164] 0.0 0.00 0.00 31 Cyc_length [164] +----------------------------------------------- + 0.00 0.00 4/23 Cyc_string2number_ [186] + 0.00 0.00 19/23 Cyc_string_append [85] +[165] 0.0 0.00 0.00 23 Cyc_is_string [165] +----------------------------------------------- + 0.00 0.00 1/17 __lambda_766 [931] + 0.00 0.00 1/17 __lambda_765 [930] + 0.00 0.00 3/17 Cyc_number2string2 [189] + 0.00 0.00 12/17 Cyc_vector_ref [177] +[166] 0.0 0.00 0.00 17 Cyc_is_number [166] +----------------------------------------------- + 7 apply_va [180] + 10 Cyc_apply [178] +[167] 0.0 0.00 0.00 17 apply [167] + 0.00 0.00 14/31 Cyc_length [164] + 0.00 0.00 1/1 __75halt [883] + 9 _cons [844] + 7 dispatch [181] +----------------------------------------------- + 0.00 0.00 16/16 __lambda_251 [829] +[168] 0.0 0.00 0.00 16 Cyc_is_eof_object [168] +----------------------------------------------- + 0.00 0.00 2/14 _Cyc_write [877] + 0.00 0.00 12/14 Cyc_display_va_list [175] +[169] 0.0 0.00 0.00 14 Cyc_display [169] + 0.00 0.00 2/2 double2buffer [196] +----------------------------------------------- + 13 __lambda_44 [831] +[170] 0.0 0.00 0.00 13 Cyc_io_read_char [170] + 0.00 0.00 13/32 Cyc_is_port [163] + 0.00 0.00 13/13 gc_mutator_thread_blocked [171] + 13 gc_mutator_thread_runnable [172] +----------------------------------------------- + 0.00 0.00 13/13 Cyc_io_read_char [170] +[171] 0.0 0.00 0.00 13 gc_mutator_thread_blocked [171] + 0.00 0.00 13/17613 ck_pr_cas_int [134] +----------------------------------------------- + 13 Cyc_io_read_char [170] +[172] 0.0 0.00 0.00 13 gc_mutator_thread_runnable [172] + 0.00 0.00 13/17613 ck_pr_cas_int [134] + 13 __lambda_251 [829] +----------------------------------------------- + 0.00 0.00 4/13 __lambda_35 [113] + 0.00 0.00 9/13 __lambda_36 [71] +[173] 0.0 0.00 0.00 13 memberp [173] + 0.00 0.00 49/56 equalp [162] + 0.00 0.00 13/400 Cyc_is_pair [148] +----------------------------------------------- + 0.00 0.00 12/12 __lambda_0 [833] +[174] 0.0 0.00 0.00 12 Cyc_display_va [174] + 0.00 0.00 12/12 Cyc_display_va_list [175] +----------------------------------------------- + 0.00 0.00 12/12 Cyc_display_va [174] +[175] 0.0 0.00 0.00 12 Cyc_display_va_list [175] + 0.00 0.00 12/32 Cyc_is_port [163] + 0.00 0.00 12/14 Cyc_display [169] +----------------------------------------------- + 0.00 0.00 12/12 Cyc_vector_ref [177] +[176] 0.0 0.00 0.00 12 Cyc_is_vector [176] +----------------------------------------------- + 0.00 0.00 12/12 __lambda_20 [854] +[177] 0.0 0.00 0.00 12 Cyc_vector_ref [177] + 0.00 0.00 12/12 Cyc_is_vector [176] + 0.00 0.00 12/17 Cyc_is_number [166] +----------------------------------------------- + 1 __lambda_24 [894] + 9 __lambda_282 [69] +[178] 0.0 0.00 0.00 10 Cyc_apply [178] + 10 apply [167] +----------------------------------------------- + 0.00 0.00 3/7 __lambda_51 [871] + 0.00 0.00 4/7 __lambda_15 [850] +[179] 0.0 0.00 0.00 7 Cyc_num_fast_lt_op [179] +----------------------------------------------- + 3 __lambda_309 [119] + 4 __lambda_249 [856] +[180] 0.0 0.00 0.00 7 apply_va [180] + 0.00 0.00 7/400 Cyc_is_pair [148] + 7 apply [167] +----------------------------------------------- + 7 apply [167] +[181] 0.0 0.00 0.00 7 dispatch [181] + 7 do_dispatch [133] +----------------------------------------------- + 0.00 0.00 4/4 Cyc_string2number_ [186] +[182] 0.0 0.00 0.00 4 Cyc_check_obj [182] +----------------------------------------------- + 4 __lambda_336 [861] +[183] 0.0 0.00 0.00 4 Cyc_list2string [183] + 0.00 0.00 4/400 Cyc_is_pair [148] + 0.00 0.00 4/31 Cyc_length [164] + 4 __lambda_330 [860] +----------------------------------------------- + 4 __lambda_384 [115] +[184] 0.0 0.00 0.00 4 Cyc_list2vector [184] + 0.00 0.00 4/400 Cyc_is_pair [148] + 0.00 0.00 4/31 Cyc_length [164] + 4 __lambda_17 [852] +----------------------------------------------- + 4 __lambda_330 [860] +[185] 0.0 0.00 0.00 4 Cyc_string2number2_ [185] + 4 Cyc_string2number_ [186] +----------------------------------------------- + 4 Cyc_string2number2_ [185] +[186] 0.0 0.00 0.00 4 Cyc_string2number_ [186] + 0.00 0.00 4/4 Cyc_check_obj [182] + 0.00 0.00 4/23 Cyc_is_string [165] + 0.00 0.00 4/4 str2int [188] + 4 __lambda_41 [866] +----------------------------------------------- + 0.00 0.00 4/4 __lambda_11 [106] +[187] 0.0 0.00 0.00 4 assoc [187] + 0.00 0.00 3/400 Cyc_is_pair [148] + 0.00 0.00 3/56 equalp [162] +----------------------------------------------- + 0.00 0.00 4/4 Cyc_string2number_ [186] +[188] 0.0 0.00 0.00 4 str2int [188] +----------------------------------------------- + 1 __lambda_10 [885] + 1 __lambda_9 [933] + 1 __lambda_8 [932] +[189] 0.0 0.00 0.00 3 Cyc_number2string2 [189] + 0.00 0.00 3/17 Cyc_is_number [166] + 1 __lambda_7 [929] + 1 __lambda_8 [932] + 1 __lambda_9 [933] +----------------------------------------------- + 0.00 0.00 3/3 __lambda_307 [870] +[190] 0.0 0.00 0.00 3 Cyc_write_char [190] + 0.00 0.00 3/32 Cyc_is_port [163] +----------------------------------------------- + 0.00 0.00 1/2 __lambda_63 [925] + 0.00 0.00 1/2 __lambda_43 [122] +[191] 0.0 0.00 0.00 2 Cyc_fast_div [191] +----------------------------------------------- + 0.00 0.00 2/2 __lambda_304 [124] +[192] 0.0 0.00 0.00 2 Cyc_io_flush_output_port [192] + 0.00 0.00 2/32 Cyc_is_port [163] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write_va_list [195] +[193] 0.0 0.00 0.00 2 Cyc_write [193] + 0.00 0.00 2/2 _Cyc_write [877] +----------------------------------------------- + 0.00 0.00 2/2 __lambda_2 [880] +[194] 0.0 0.00 0.00 2 Cyc_write_va [194] + 0.00 0.00 2/2 Cyc_write_va_list [195] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write_va [194] +[195] 0.0 0.00 0.00 2 Cyc_write_va_list [195] + 0.00 0.00 2/32 Cyc_is_port [163] + 0.00 0.00 2/2 Cyc_write [193] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_display [169] +[196] 0.0 0.00 0.00 2 double2buffer [196] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_64 [926] +[197] 0.0 0.00 0.00 1 Cyc_fast_mul [197] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[198] 0.0 0.00 0.00 1 Cyc_heap_init [198] + 0.00 0.00 1/1 gc_start_collector [212] + 0.00 0.00 1/1 gc_init_heap [211] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1556 [890] +[199] 0.0 0.00 0.00 1 Cyc_stderr [199] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1558 [891] +[200] 0.0 0.00 0.00 1 Cyc_stdin [200] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1560 [892] +[201] 0.0 0.00 0.00 1 Cyc_stdout [201] +----------------------------------------------- + 1 do_dispatch [133] +[202] 0.0 0.00 0.00 1 c_entry_pt [202] + 0.00 0.00 5/255 add_global [153] + 0.00 0.00 5/384 find_or_add_symbol [149] + 1 c_schemecyclonecommon_entry_pt [206] +----------------------------------------------- + 1 __lambda_399 [102] +[203] 0.0 0.00 0.00 1 c_entry_pt_first_lambda [203] + 1 __lambda_14 [126] +----------------------------------------------- + 1 __lambda_4 [103] +[204] 0.0 0.00 0.00 1 c_scheme_char_entry_pt [204] + 0.00 0.00 23/255 add_global [153] + 0.00 0.00 23/384 find_or_add_symbol [149] + 1 __lambda_42 [79] +----------------------------------------------- + 1 __lambda_0 [86] +[205] 0.0 0.00 0.00 1 c_schemebase_entry_pt [205] + 0.00 0.00 296/384 find_or_add_symbol [149] + 0.00 0.00 173/255 add_global [153] + 0.00 0.00 123/472 add_symbol [146] + 1 __lambda_1561 [77] +----------------------------------------------- + 1 c_entry_pt [202] +[206] 0.0 0.00 0.00 1 c_schemecyclonecommon_entry_pt [206] + 0.00 0.00 7/255 add_global [153] + 0.00 0.00 7/384 find_or_add_symbol [149] + 1 __lambda_6 [129] +----------------------------------------------- + 1 __lambda_42 [79] +[207] 0.0 0.00 0.00 1 c_schemeread_entry_pt [207] + 0.00 0.00 44/384 find_or_add_symbol [149] + 0.00 0.00 38/255 add_global [153] + 0.00 0.00 6/472 add_symbol [146] + 1 __lambda_400 [78] +----------------------------------------------- + 1 __lambda_1544 [87] +[208] 0.0 0.00 0.00 1 c_schemetime_entry_pt [208] + 0.00 0.00 4/255 add_global [153] + 0.00 0.00 4/384 find_or_add_symbol [149] + 1 __lambda_3 [127] +----------------------------------------------- + 1 __lambda_3 [127] +[209] 0.0 0.00 0.00 1 c_schemewrite_entry_pt [209] + 0.00 0.00 5/255 add_global [153] + 0.00 0.00 5/384 find_or_add_symbol [149] + 1 __lambda_5 [80] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[210] 0.0 0.00 0.00 1 gc_add_mutator [210] +----------------------------------------------- + 0.00 0.00 1/1 Cyc_heap_init [198] +[211] 0.0 0.00 0.00 1 gc_init_heap [211] + 0.00 0.00 5/1361 gc_heap_create [143] +----------------------------------------------- + 0.00 0.00 1/1 Cyc_heap_init [198] +[212] 0.0 0.00 0.00 1 gc_start_collector [212] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[213] 0.0 0.00 0.00 1 set_env_variables [213] +----------------------------------------------- + 0.00 0.00 343/343 add_symbol_by_name [152] +[827] 0.0 0.00 0.00 343 _strdup [827] +----------------------------------------------- + 16 __lambda_251 [829] +[828] 0.0 0.00 0.00 16 __lambda_250 [828] + 9 __lambda_36 [71] + 7 __lambda_13 [73] +----------------------------------------------- + 3 __lambda_21 [868] + 13 gc_mutator_thread_runnable [172] +[829] 0.0 0.00 0.00 16 __lambda_251 [829] + 0.00 0.00 16/16 Cyc_is_eof_object [168] + 0.00 0.00 16/97 Cyc_eq [158] + 16 __lambda_250 [828] +----------------------------------------------- + 16 __lambda_19 [57] +[830] 0.0 0.00 0.00 16 __lambda_252 [830] + 16 __lambda_45 [832] +----------------------------------------------- + 16 __lambda_12 [66] +[831] 0.0 0.00 0.00 16 __lambda_44 [831] + 13 Cyc_io_read_char [170] + 3 __lambda_23 [117] +----------------------------------------------- + 16 __lambda_252 [830] +[832] 0.0 0.00 0.00 16 __lambda_45 [832] + 16 __lambda_12 [66] +----------------------------------------------- + 12 __lambda_721 [29] +[833] 0.0 0.00 0.00 12 __lambda_0 [833] + 0.00 0.00 12/12 Cyc_display_va [174] + 1 __lambda_27 [897] + 1 __lambda_28 [898] + 1 __lambda_29 [899] + 1 __lambda_30 [900] + 1 __lambda_31 [901] + 1 __lambda_33 [903] + 1 __lambda_35 [905] + 1 __lambda_36 [906] + 1 __lambda_38 [908] + 1 __lambda_40 [910] + 1 __lambda_60 [922] + 1 __lambda_61 [923] +----------------------------------------------- + 9 __lambda_242 [835] +[834] 0.0 0.00 0.00 9 __lambda_241 [834] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_254 [68] +----------------------------------------------- + 9 __lambda_243 [836] +[835] 0.0 0.00 0.00 9 __lambda_242 [835] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_241 [834] +----------------------------------------------- + 9 __lambda_244 [837] +[836] 0.0 0.00 0.00 9 __lambda_243 [836] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_242 [835] +----------------------------------------------- + 9 __lambda_245 [838] +[837] 0.0 0.00 0.00 9 __lambda_244 [837] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_243 [836] +----------------------------------------------- + 9 __lambda_246 [839] +[838] 0.0 0.00 0.00 9 __lambda_245 [838] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_244 [837] +----------------------------------------------- + 9 __lambda_247 [840] +[839] 0.0 0.00 0.00 9 __lambda_246 [839] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_245 [838] +----------------------------------------------- + 9 __lambda_248 [841] +[840] 0.0 0.00 0.00 9 __lambda_247 [840] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_246 [839] +----------------------------------------------- + 9 __lambda_249 [842] +[841] 0.0 0.00 0.00 9 __lambda_248 [841] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_247 [840] +----------------------------------------------- + 9 __lambda_36 [71] +[842] 0.0 0.00 0.00 9 __lambda_249 [842] + 0.00 0.00 9/97 Cyc_eq [158] + 9 __lambda_248 [841] +----------------------------------------------- + 9 _cons [844] +[843] 0.0 0.00 0.00 9 __lambda_281 [843] + 0.00 0.00 9/192 Cyc_cdr [156] + 9 __lambda_282 [69] +----------------------------------------------- + 9 apply [167] +[844] 0.0 0.00 0.00 9 _cons [844] + 0.00 0.00 9/31 Cyc_length [164] + 9 __lambda_281 [843] +----------------------------------------------- + 8 __lambda_247 [72] +[845] 0.0 0.00 0.00 8 __lambda_245 [845] + 0.00 0.00 16/82 Cyc_is_null [159] + 0.00 0.00 8/192 Cyc_cdr [156] + 8 __lambda_246 [846] +----------------------------------------------- + 8 __lambda_245 [845] +[846] 0.0 0.00 0.00 8 __lambda_246 [846] + 0.00 0.00 4/69 Cyc_car [160] + 4 __lambda_250 [857] + 2 __lambda_2 [33] + 2 __lambda_3 [881] +----------------------------------------------- + 7 __lambda_19 [57] +[847] 0.0 0.00 0.00 7 __lambda_55 [847] + 7 __lambda_43 [76] +----------------------------------------------- + 7 __lambda_17 [61] +[848] 0.0 0.00 0.00 7 __lambda_56 [848] + 7 __lambda_20 [63] +----------------------------------------------- + 4 __lambda_11 [106] +[849] 0.0 0.00 0.00 4 __lambda_10 [849] + 4 __lambda_9 [35] +----------------------------------------------- + 4 __lambda_17 [852] +[850] 0.0 0.00 0.00 4 __lambda_15 [850] + 0.00 0.00 4/7 Cyc_num_fast_lt_op [179] + 4 __lambda_16 [851] +----------------------------------------------- + 4 __lambda_15 [850] +[851] 0.0 0.00 0.00 4 __lambda_16 [851] + 4 __lambda_247 [72] +----------------------------------------------- + 4 Cyc_list2vector [184] +[852] 0.0 0.00 0.00 4 __lambda_17 [852] + 4 __lambda_15 [850] +----------------------------------------------- + 4 __lambda_251 [109] +[853] 0.0 0.00 0.00 4 __lambda_19 [853] + 4 __lambda_384 [115] +----------------------------------------------- + 4 do_dispatch [133] +[854] 0.0 0.00 0.00 4 __lambda_20 [854] + 0.00 0.00 12/12 Cyc_vector_ref [177] + 4 __lambda_247 [72] +----------------------------------------------- + 4 __lambda_250 [857] +[855] 0.0 0.00 0.00 4 __lambda_248 [855] + 0.00 0.00 4/400 Cyc_is_pair [148] + 0.00 0.00 4/69 Cyc_car [160] + 0.00 0.00 4/56 equalp [162] + 4 __lambda_249 [856] +----------------------------------------------- + 4 __lambda_248 [855] +[856] 0.0 0.00 0.00 4 __lambda_249 [856] + 0.00 0.00 4/192 Cyc_cdr [156] + 4 apply_va [180] +----------------------------------------------- + 4 __lambda_246 [846] +[857] 0.0 0.00 0.00 4 __lambda_250 [857] + 4 __lambda_248 [855] +----------------------------------------------- + 4 __lambda_282 [69] +[858] 0.0 0.00 0.00 4 __lambda_27 [858] + 4 __lambda_337 [112] +----------------------------------------------- + 4 __lambda_35 [113] +[859] 0.0 0.00 0.00 4 __lambda_328 [859] + 4 __lambda_336 [861] +----------------------------------------------- + 4 Cyc_list2string [183] +[860] 0.0 0.00 0.00 4 __lambda_330 [860] + 4 Cyc_string2number2_ [185] +----------------------------------------------- + 4 __lambda_328 [859] +[861] 0.0 0.00 0.00 4 __lambda_336 [861] + 4 Cyc_list2string [183] +----------------------------------------------- + 4 __lambda_390 [116] +[862] 0.0 0.00 0.00 4 __lambda_387 [862] + 0.00 0.00 4/82 Cyc_is_null [159] + 4 __lambda_721 [29] +----------------------------------------------- + 1 __lambda_5 [43] + 3 __lambda_9 [35] +[863] 0.0 0.00 0.00 4 __lambda_388 [863] + 4 __lambda_254 [68] +----------------------------------------------- + 4 __lambda_721 [29] +[864] 0.0 0.00 0.00 4 __lambda_389 [864] + 4 __lambda_11 [106] +----------------------------------------------- + 4 __lambda_24 [108] +[865] 0.0 0.00 0.00 4 __lambda_40 [865] + 0.00 0.00 4/69 Cyc_car [160] + 1 __lambda_10 [885] + 1 __lambda_11 [886] + 1 __lambda_12 [887] + 1 __lambda_13 [888] +----------------------------------------------- + 4 Cyc_string2number_ [186] +[866] 0.0 0.00 0.00 4 __lambda_41 [866] + 4 __lambda_24 [108] +----------------------------------------------- + 4 __lambda_15 [60] +[867] 0.0 0.00 0.00 4 __lambda_42 [867] + 4 __lambda_28 [110] +----------------------------------------------- + 3 __lambda_15 [60] +[868] 0.0 0.00 0.00 3 __lambda_21 [868] + 3 __lambda_251 [829] +----------------------------------------------- + 3 __lambda_23 [117] +[869] 0.0 0.00 0.00 3 __lambda_22 [869] + 3 __lambda_16 [74] +----------------------------------------------- + 3 __lambda_721 [29] +[870] 0.0 0.00 0.00 3 __lambda_307 [870] + 0.00 0.00 3/3 Cyc_write_char [190] + 1 __lambda_26 [896] + 1 __lambda_34 [904] + 1 __lambda_59 [920] +----------------------------------------------- + 1 __lambda_22 [40] + 2 __lambda_23 [36] +[871] 0.0 0.00 0.00 3 __lambda_51 [871] + 0.00 0.00 3/7 Cyc_num_fast_lt_op [179] + 2 __lambda_4 [882] + 1 __lambda_5 [121] +----------------------------------------------- + 3 __lambda_724 [876] +[872] 0.0 0.00 0.00 3 __lambda_718 [872] + 3 __lambda_723 [875] +----------------------------------------------- + 3 __lambda_725 [120] +[873] 0.0 0.00 0.00 3 __lambda_719 [873] + 0.00 0.00 3/400 Cyc_is_pair [148] + 3 __lambda_724 [876] +----------------------------------------------- + 3 __lambda_723 [875] +[874] 0.0 0.00 0.00 3 __lambda_722 [874] + 1 __lambda_1555 [97] + 1 __lambda_1557 [98] + 1 __lambda_1559 [99] +----------------------------------------------- + 3 __lambda_718 [872] +[875] 0.0 0.00 0.00 3 __lambda_723 [875] + 3 __lambda_722 [874] +----------------------------------------------- + 3 __lambda_719 [873] +[876] 0.0 0.00 0.00 3 __lambda_724 [876] + 3 __lambda_718 [872] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write [193] +[877] 0.0 0.00 0.00 2 _Cyc_write [877] + 0.00 0.00 2/14 Cyc_display [169] +----------------------------------------------- + 1 __lambda_56 [917] + 1 __lambda_44 [912] +[878] 0.0 0.00 0.00 2 __lambda_0 [878] + 1 __lambda_43 [122] + 1 __lambda_55 [916] +----------------------------------------------- + 1 __lambda_55 [916] + 1 __lambda_50 [913] +[879] 0.0 0.00 0.00 2 __lambda_1 [879] + 1 __lambda_44 [912] + 1 __lambda_54 [915] +----------------------------------------------- + 2 __lambda_721 [29] +[880] 0.0 0.00 0.00 2 __lambda_2 [880] + 0.00 0.00 2/2 Cyc_write_va [194] + 1 __lambda_37 [907] + 1 __lambda_39 [909] +----------------------------------------------- + 2 __lambda_246 [846] +[881] 0.0 0.00 0.00 2 __lambda_3 [881] + 2 __lambda_21 [107] +----------------------------------------------- + 2 __lambda_51 [871] +[882] 0.0 0.00 0.00 2 __lambda_4 [882] + 2 __lambda_21 [107] +----------------------------------------------- + 0.00 0.00 1/1 apply [167] +[883] 0.0 0.00 0.00 1 __75halt [883] +----------------------------------------------- + 1 __lambda_2 [100] +[884] 0.0 0.00 0.00 1 __lambda_1 [884] + 1 Cyc_string_append [85] +----------------------------------------------- + 1 __lambda_40 [865] +[885] 0.0 0.00 0.00 1 __lambda_10 [885] + 1 Cyc_number2string2 [189] +----------------------------------------------- + 1 __lambda_40 [865] +[886] 0.0 0.00 0.00 1 __lambda_11 [886] + 1 __lambda_390 [116] +----------------------------------------------- + 1 __lambda_40 [865] +[887] 0.0 0.00 0.00 1 __lambda_12 [887] + 1 __lambda_390 [116] +----------------------------------------------- + 1 __lambda_40 [865] +[888] 0.0 0.00 0.00 1 __lambda_13 [888] + 1 __lambda_390 [116] +----------------------------------------------- + 1 __lambda_1546 [88] +[889] 0.0 0.00 0.00 1 __lambda_1545 [889] + 1 __lambda_327 [125] +----------------------------------------------- + 1 __lambda_1557 [98] +[890] 0.0 0.00 0.00 1 __lambda_1556 [890] + 0.00 0.00 1/1 Cyc_stderr [199] + 1 __lambda_725 [120] +----------------------------------------------- + 1 __lambda_1559 [99] +[891] 0.0 0.00 0.00 1 __lambda_1558 [891] + 0.00 0.00 1/1 Cyc_stdin [200] + 1 __lambda_725 [120] +----------------------------------------------- + 1 __lambda_1561 [77] +[892] 0.0 0.00 0.00 1 __lambda_1560 [892] + 0.00 0.00 1/1 Cyc_stdout [201] + 1 __lambda_725 [120] +----------------------------------------------- + 1 __lambda_57 [918] +[893] 0.0 0.00 0.00 1 __lambda_2 [893] + 1 __lambda_56 [917] +----------------------------------------------- + 1 __lambda_304 [124] +[894] 0.0 0.00 0.00 1 __lambda_24 [894] + 1 Cyc_apply [178] +----------------------------------------------- + 1 __lambda_721 [29] +[895] 0.0 0.00 0.00 1 __lambda_25 [895] + 1 __lambda_304 [124] +----------------------------------------------- + 1 __lambda_307 [870] +[896] 0.0 0.00 0.00 1 __lambda_26 [896] + 1 __lambda_721 [29] +----------------------------------------------- + 1 __lambda_0 [833] +[897] 0.0 0.00 0.00 1 __lambda_27 [897] + 1 __lambda_309 [119] +----------------------------------------------- + 1 __lambda_0 [833] +[898] 0.0 0.00 0.00 1 __lambda_28 [898] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[899] 0.0 0.00 0.00 1 __lambda_29 [899] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[900] 0.0 0.00 0.00 1 __lambda_30 [900] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[901] 0.0 0.00 0.00 1 __lambda_31 [901] + 1 __lambda_1 [70] +----------------------------------------------- + 1 Cyc_string_append [85] +[902] 0.0 0.00 0.00 1 __lambda_32 [902] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[903] 0.0 0.00 0.00 1 __lambda_33 [903] + 1 __lambda_69 [131] +----------------------------------------------- + 1 __lambda_307 [870] +[904] 0.0 0.00 0.00 1 __lambda_34 [904] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[905] 0.0 0.00 0.00 1 __lambda_35 [905] + 1 __lambda_309 [119] +----------------------------------------------- + 1 __lambda_0 [833] +[906] 0.0 0.00 0.00 1 __lambda_36 [906] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_2 [880] +[907] 0.0 0.00 0.00 1 __lambda_37 [907] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[908] 0.0 0.00 0.00 1 __lambda_38 [908] + 1 __lambda_3 [123] +----------------------------------------------- + 1 __lambda_2 [880] +[909] 0.0 0.00 0.00 1 __lambda_39 [909] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_0 [833] +[910] 0.0 0.00 0.00 1 __lambda_40 [910] + 1 __lambda_3 [123] +----------------------------------------------- + 1 __lambda_63 [925] +[911] 0.0 0.00 0.00 1 __lambda_41 [911] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_1 [879] +[912] 0.0 0.00 0.00 1 __lambda_44 [912] + 1 __lambda_0 [878] +----------------------------------------------- + 1 __lambda_5 [121] +[913] 0.0 0.00 0.00 1 __lambda_50 [913] + 1 __lambda_1 [879] +----------------------------------------------- + 1 __lambda_54 [915] +[914] 0.0 0.00 0.00 1 __lambda_53 [914] + 1 __lambda_52 [82] +----------------------------------------------- + 1 __lambda_1 [879] +[915] 0.0 0.00 0.00 1 __lambda_54 [915] + 1 __lambda_53 [914] +----------------------------------------------- + 1 __lambda_0 [878] +[916] 0.0 0.00 0.00 1 __lambda_55 [916] + 1 __lambda_1 [879] +----------------------------------------------- + 1 __lambda_2 [893] +[917] 0.0 0.00 0.00 1 __lambda_56 [917] + 1 __lambda_0 [878] +----------------------------------------------- + 1 __lambda_304 [124] +[918] 0.0 0.00 0.00 1 __lambda_57 [918] + 1 __lambda_2 [893] +----------------------------------------------- + 1 __lambda_721 [29] +[919] 0.0 0.00 0.00 1 __lambda_58 [919] + 1 __lambda_304 [124] +----------------------------------------------- + 1 __lambda_307 [870] +[920] 0.0 0.00 0.00 1 __lambda_59 [920] + 1 __lambda_721 [29] +----------------------------------------------- + 1 Cyc_string_append [85] +[921] 0.0 0.00 0.00 1 __lambda_6 [921] + 1 __lambda_67 [130] +----------------------------------------------- + 1 __lambda_0 [833] +[922] 0.0 0.00 0.00 1 __lambda_60 [922] + 1 __lambda_309 [119] +----------------------------------------------- + 1 __lambda_0 [833] +[923] 0.0 0.00 0.00 1 __lambda_61 [923] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_65 [83] +[924] 0.0 0.00 0.00 1 __lambda_62 [924] + 1 __lambda_1 [70] +----------------------------------------------- + 1 __lambda_765 [930] +[925] 0.0 0.00 0.00 1 __lambda_63 [925] + 0.00 0.00 1/2 Cyc_fast_div [191] + 1 __lambda_41 [911] +----------------------------------------------- + 1 __lambda_42 [39] +[926] 0.0 0.00 0.00 1 __lambda_64 [926] + 0.00 0.00 1/1 Cyc_fast_mul [197] + 1 __lambda_765 [930] +----------------------------------------------- + 1 __lambda_67 [130] +[927] 0.0 0.00 0.00 1 __lambda_66 [927] + 1 __lambda_65 [83] +----------------------------------------------- + 1 __lambda_4 [128] +[928] 0.0 0.00 0.00 1 __lambda_68 [928] + 1 Cyc_string_append [85] +----------------------------------------------- + 1 Cyc_number2string2 [189] +[929] 0.0 0.00 0.00 1 __lambda_7 [929] + 1 Cyc_string_append [85] +----------------------------------------------- + 1 __lambda_64 [926] +[930] 0.0 0.00 0.00 1 __lambda_765 [930] + 0.00 0.00 1/17 Cyc_is_number [166] + 1 __lambda_63 [925] +----------------------------------------------- + 1 __lambda_43 [122] +[931] 0.0 0.00 0.00 1 __lambda_766 [931] + 0.00 0.00 1/17 Cyc_is_number [166] + 1 __lambda_42 [39] +----------------------------------------------- + 1 Cyc_number2string2 [189] +[932] 0.0 0.00 0.00 1 __lambda_8 [932] + 1 Cyc_number2string2 [189] +----------------------------------------------- + 1 Cyc_number2string2 [189] +[933] 0.0 0.00 0.00 1 __lambda_9 [933] + 1 Cyc_number2string2 [189] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2015 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [178] Cyc_apply [894] __lambda_24 (ack.c) [83] __lambda_65 (ack.c) + [160] Cyc_car [108] __lambda_24 (read.c) [927] __lambda_66 (ack.c) + [156] Cyc_cdr [834] __lambda_241 (read.c) [130] __lambda_67 (ack.c) + [182] Cyc_check_obj [835] __lambda_242 (read.c) [928] __lambda_68 (ack.c) + [169] Cyc_display [836] __lambda_243 (read.c) [131] __lambda_69 (ack.c) + [174] Cyc_display_va [837] __lambda_244 (read.c) [929] __lambda_7 (ack.c) + [175] Cyc_display_va_list [845] __lambda_245 (base.c) [44] __lambda_7 (read.c) + [158] Cyc_eq [838] __lambda_245 (read.c) [872] __lambda_718 (base.c) + [191] Cyc_fast_div [846] __lambda_246 (base.c) [873] __lambda_719 (base.c) + [197] Cyc_fast_mul [839] __lambda_246 (read.c) [29] __lambda_721 (base.c) + [18] Cyc_fast_sub [72] __lambda_247 (base.c) [874] __lambda_722 (base.c) + [19] Cyc_fast_sum [840] __lambda_247 (read.c) [875] __lambda_723 (base.c) + [56] Cyc_global_set [855] __lambda_248 (base.c) [876] __lambda_724 (base.c) + [198] Cyc_heap_init (runtime-main.h) [841] __lambda_248 (read.c) [120] __lambda_725 (base.c) + [192] Cyc_io_flush_output_port [856] __lambda_249 (base.c) [930] __lambda_765 (base.c) + [170] Cyc_io_read_char [842] __lambda_249 (read.c) [931] __lambda_766 (base.c) + [168] Cyc_is_eof_object [895] __lambda_25 (ack.c) [932] __lambda_8 (ack.c) + [159] Cyc_is_null [857] __lambda_250 (base.c) [84] __lambda_8 (read.c) + [166] Cyc_is_number [828] __lambda_250 (read.c) [933] __lambda_9 (ack.c) + [148] Cyc_is_pair [109] __lambda_251 (base.c) [35] __lambda_9 (read.c) + [163] Cyc_is_port [829] __lambda_251 (read.c) [844] _cons + [165] Cyc_is_string [830] __lambda_252 (read.c) [827] _strdup + [176] Cyc_is_vector [59] __lambda_253 (read.c) [153] add_global + [164] Cyc_length [68] __lambda_254 (read.c) [81] add_mutation + [183] Cyc_list2string [896] __lambda_26 (ack.c) [146] add_symbol + [184] Cyc_list2vector [897] __lambda_27 (ack.c) [152] add_symbol_by_name + [15] Cyc_num_fast_eq_op [858] __lambda_27 (read.c) [167] apply + [179] Cyc_num_fast_lt_op [898] __lambda_28 (ack.c) [180] apply_va + [189] Cyc_number2string2 [110] __lambda_28 (read.c) [187] assoc + [55] Cyc_set_car [843] __lambda_281 (base.c) [202] c_entry_pt (ack.c) + [65] Cyc_set_cell [69] __lambda_282 (base.c) [203] c_entry_pt_first_lambda (ack.c) + [21] Cyc_st_add [899] __lambda_29 (ack.c) [204] c_scheme_char_entry_pt + [2] Cyc_start_trampoline [881] __lambda_3 (ack.c) [205] c_schemebase_entry_pt + [199] Cyc_stderr [101] __lambda_3 (common.c) [206] c_schemecyclonecommon_entry_pt + [200] Cyc_stdin [127] __lambda_3 (time.c) [207] c_schemeread_entry_pt + [201] Cyc_stdout [123] __lambda_3 (write.c) [208] c_schemetime_entry_pt + [185] Cyc_string2number2_ [900] __lambda_30 (ack.c) [209] c_schemewrite_entry_pt + [186] Cyc_string2number_ [124] __lambda_304 (base.c) [23] cell_get + [85] Cyc_string_append [870] __lambda_307 (base.c) [137] ck_pr_barrier (ck_pr.h) + [177] Cyc_vector_ref [118] __lambda_308 (base.c) [134] ck_pr_cas_int (ck_pr.h) + [193] Cyc_write [119] __lambda_309 (base.c) [138] ck_pr_fence_load (ck_pr.h) + [190] Cyc_write_char [901] __lambda_31 (ack.c) [37] ck_pr_md_load_int (ck_pr.h) + [194] Cyc_write_va [902] __lambda_32 (ack.c) [139] ck_pr_md_load_ptr (ck_pr.h) + [195] Cyc_write_va_list [125] __lambda_327 (base.c) [46] ck_pr_md_load_uint (ck_pr.h) + [5] GC [859] __lambda_328 (read.c) [132] clear_mutations + [144] MurmurHash64A (ck_ht_hash.h) [111] __lambda_329 (read.c) [181] dispatch + [877] _Cyc_write (runtime.c) [903] __lambda_33 (ack.c) [22] dispatch_num_eq + [883] __75halt [860] __lambda_330 (read.c) [133] do_dispatch + [30] __halt [861] __lambda_336 (read.c) [196] double2buffer + [10] __lambda_0 (ack.c) [112] __lambda_337 (read.c) [161] equal + [86] __lambda_0 (common.c) [904] __lambda_34 (ack.c) [162] equalp + [878] __lambda_0 (time.c) [905] __lambda_35 (ack.c) [149] find_or_add_symbol + [833] __lambda_0 (write.c) [113] __lambda_35 (char.c) [150] find_symbol_by_name + [4] __lambda_1 (ack.c) [906] __lambda_36 (ack.c) [210] gc_add_mutator + [884] __lambda_1 (common.c) [71] __lambda_36 (char.c) [8] gc_alloc + [879] __lambda_1 (time.c) [907] __lambda_37 (ack.c) [16] gc_allocated_bytes + [70] __lambda_1 (write.c) [908] __lambda_38 (ack.c) [12] gc_collector + [885] __lambda_10 (ack.c) [114] __lambda_383 (base.c) [34] gc_collector_mark_gray (gc.c) + [849] __lambda_10 (read.c) [115] __lambda_384 (base.c) [25] gc_collector_trace + [886] __lambda_11 (ack.c) [862] __lambda_387 (read.c) [14] gc_copy_obj + [106] __lambda_11 (read.c) [863] __lambda_388 (read.c) [28] gc_empty_collector_stack + [887] __lambda_12 (ack.c) [864] __lambda_389 (read.c) [17] gc_fixup_moved_obj + [66] __lambda_12 (read.c) [909] __lambda_39 (ack.c) [142] gc_free_old_thread_data + [888] __lambda_13 (ack.c) [116] __lambda_390 (read.c) [136] gc_get_heap + [73] __lambda_13 (read.c) [102] __lambda_399 (read.c) [24] gc_grow_heap + [126] __lambda_14 (ack.c) [882] __lambda_4 (ack.c) [52] gc_handshake + [67] __lambda_14 (read.c) [128] __lambda_4 (base.c) [143] gc_heap_create + [850] __lambda_15 (ack.c) [103] __lambda_4 (write.c) [140] gc_heap_free + [60] __lambda_15 (read.c) [910] __lambda_40 (ack.c) [211] gc_init_heap + [87] __lambda_1544 (base.c) [865] __lambda_40 (read.c) [49] gc_initialize + [889] __lambda_1545 (base.c) [78] __lambda_400 (read.c) [135] gc_is_heap_empty + [88] __lambda_1546 (base.c) [911] __lambda_41 (ack.c) [157] gc_is_stack_obj + [89] __lambda_1547 (base.c) [866] __lambda_41 (read.c) [27] gc_mark_black + [90] __lambda_1548 (base.c) [39] __lambda_42 (ack.c) [26] gc_mark_globals + [91] __lambda_1549 (base.c) [79] __lambda_42 (char.c) [48] gc_mark_gray + [92] __lambda_1550 (base.c) [867] __lambda_42 (read.c) [64] gc_mark_gray2 + [93] __lambda_1551 (base.c) [122] __lambda_43 (ack.c) [6] gc_minor + [94] __lambda_1552 (base.c) [76] __lambda_43 (read.c) [7] gc_move + [95] __lambda_1553 (base.c) [912] __lambda_44 (ack.c) [42] gc_mut_cooperate + [96] __lambda_1554 (base.c) [831] __lambda_44 (read.c) [54] gc_mut_update + [97] __lambda_1555 (base.c) [832] __lambda_45 (read.c) [171] gc_mutator_thread_blocked + [890] __lambda_1556 (base.c) [121] __lambda_5 (ack.c) [172] gc_mutator_thread_runnable + [98] __lambda_1557 (base.c) [104] __lambda_5 (common.c) [53] gc_post_handshake + [891] __lambda_1558 (base.c) [80] __lambda_5 (write.c) [32] gc_print_stats + [99] __lambda_1559 (base.c) [43] __lambda_5 (read.c) [212] gc_start_collector + [892] __lambda_1560 (base.c) [913] __lambda_50 (ack.c) [45] gc_sum_pending_writes + [77] __lambda_1561 (base.c) [871] __lambda_51 (ack.c) [13] gc_sweep + [851] __lambda_16 (ack.c) [82] __lambda_52 (ack.c) [20] gc_thr_add_to_move_buffer + [74] __lambda_16 (read.c) [914] __lambda_53 (ack.c) [31] gc_thr_grow_move_buffer + [852] __lambda_17 (ack.c) [915] __lambda_54 (ack.c) [38] gc_thread_data_init + [61] __lambda_17 (read.c) [916] __lambda_55 (ack.c) [9] gc_try_alloc + [75] __lambda_18 (read.c) [847] __lambda_55 (read.c) [51] gc_wait_handshake + [853] __lambda_19 (ack.c) [917] __lambda_56 (ack.c) [141] gc_zero_read_write_counts + [57] __lambda_19 (read.c) [848] __lambda_56 (read.c) [145] hs_hash (runtime.c) + [33] __lambda_2 (ack.c) [918] __lambda_57 (ack.c) [154] malloc_make_pair + [100] __lambda_2 (common.c) [62] __lambda_57 (read.c) [58] mark_stack_or_heap_obj (gc.c) + [893] __lambda_2 (time.c) [919] __lambda_58 (ack.c) [155] mcvar + [880] __lambda_2 (write.c) [920] __lambda_59 (ack.c) [173] memberp + [854] __lambda_20 (ack.c) [921] __lambda_6 (ack.c) [213] set_env_variables + [63] __lambda_20 (read.c) [129] __lambda_6 (common.c) [151] set_get (runtime.c) + [107] __lambda_21 (ack.c) [105] __lambda_6 (read.c) [147] set_insert (runtime.c) + [868] __lambda_21 (read.c) [922] __lambda_60 (ack.c) [188] str2int + [40] __lambda_22 (ack.c) [923] __lambda_61 (ack.c) [41] vpbuffer_add + [869] __lambda_22 (read.c) [924] __lambda_62 (ack.c) [47] vpbuffer_realloc + [36] __lambda_23 (ack.c) [925] __lambda_63 (ack.c) [3] + [117] __lambda_23 (read.c) [926] __lambda_64 (ack.c) From 869c7dfe5e4167d1cbcdc85e7fc1001bd2e3241a Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 29 Dec 2016 20:03:42 -0500 Subject: [PATCH 02/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 242 ++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md new file mode 100644 index 00000000..edcf43ac --- /dev/null +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -0,0 +1,242 @@ +# Writing the Cyclone Scheme Compiler (Revision 1) + +###### by [Justin Ethier](https://github.com/justinethier) + +This document covers some of the background on how Cyclone was written, including aspects of the compiler and runtime system. This is a revision of the [original document](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago when the compiler was self hosting but before the new garbage collector was written. This document + +Before we get started, I want to give a big **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the latest revision of the Scheme language, developed by the large community, and wherever possible existing code from the community was reused or repurposed for this project instead of starting from scratch. + +At the end of this document is a list of online resources that were the most helpful and influential. Without quality Scheme resources like these it would not have been possible to write Cyclone. + +In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to build Cyclone. In fact, the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes at this point. Maybe if there is greater interest from the community some of this can be ported back to that project. + +## Table of Contents + +- [Overview](#overview) +- [Source-to-Source Transformations](#source-to-source-transformations) +- [C Code Generation](#c-code-generation) +- [Garbage Collector](#garbage-collector) +- [C Runtime](#c-runtime) +- [Data Types](#data-types) +- [Interpreter](#interpreter) +- [Macros](#macros) +- [Scheme Standards](#scheme-standards) +- [Future](#future) +- [Conclusion](#conclusion) +- [References](#references) + +## Overview + +Cyclone has a similar architecture to other modern compilers: + +flowchart of cyclone compiler + +First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. + +The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. + +## Source-to-Source Transformations + +### Overview + +My primary inspiration for Cyclone was Marc Feeley's [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf) (also [video](https://www.youtube.com/watch?v=TxOM9Y5YrCs) and [code](https://github.com/justinethier/nugget/tree/master/90-min-scc)). Over the course of 90 minutes, Feeley demonstrates how to compile Scheme to C code using source-to-source transformations, including closure and continuation-passing-style (CPS) conversions. + +As outlined in the presentation, some of the difficulties in compiling to C are: + +> Scheme has, and C does not have +> +> - tail-calls a.k.a. tail-recursion optimization +> - first-class continuations +> - closures of indefinite extent +> - automatic memory management i.e. garbage collection (GC) +> +> Implications +> +> - cannot translate (all) Scheme calls into C calls +> - have to implement continuations +> - have to implement closures +> - have to organize things to allow GC +> +> The rest is easy! + +To overcome these difficulties a series of source-to-source transformations are used to remove powerful features not provided by C, add constructs required by the C code, and restructure/relabel the code in preparation for generating C. The final code may be compiled direcly to C. Cyclone also includes many other intermediate transformations, including: + +- Macro expansion +- Processing of globals +- [Alpha conversion](https://wiki.haskell.org/Alpha_conversion) +- [CPS conversion](https://en.wikipedia.org/wiki/Continuation-passing_style) +- [Closure conversion](http://matt.might.net/articles/closure-conversion/) + +The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. + +### CPS Conversion + +TODO: what is CPS, why we need it (cheney on mta requires it) + +### CPS Optimizations + +TODO: CPS conversion generates too much code, need to optimize it to make the compiler practical + +types of optimizations - inlining is the key (explain with examples), what else? + +ideas from chicken - analysis pass, analysis DB + + A custom AST is used to represent some object during CPS optimizations though + +TODO: +Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could be applied to Cyclone. + +## C Code Generation + +The compiler's code generation phase takes a single pass over the transformed Scheme code and outputs C code to the current output port (usually a `.c` file). + +During this phase C code is sometimes returned for later use instead of being output directly. For example, when compiling a vector literal or a series of function arguments. In this case, the code is returned as a list of strings that separates variable declarations from C code in the "body" of the generated function. + +The C code is carefully generated so that a Scheme library (`.sld` file) is compiled into a C module. Functions and variables exported from the library become C globals in the generated code. + +## Garbage Collector + +### Background: Cheney on the MTA +A runtime based on Henry Baker's paper [CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.](http://www.pipeline.com/~hbaker1/CheneyMTA.html) was used as it allows for fast code that meets all of the fundamental requirements for a Scheme runtime: tail calls, garbage collection, and continuations. + +Baker explains how it works: + +> We propose to compile Scheme by converting it into continuation-passing style (CPS), and then compile the resulting lambda expressions into individual C functions. Arguments are passed as normal C arguments, and function calls are normal C calls. Continuation closures and closure environments are passed as extra C arguments. Such a Scheme never executes a C return, so the stack will grow and grow ... eventually, the C "stack" will overflow the space assigned to it, and we must perform garbage collection. + +Cheney on the M.T.A. uses a copying garbage collector. By using static roots and the current continuation closure, the GC is able to copy objects from the stack to a pre-allocated heap without having to know the format of C stack frames. To quote Baker: + +> the entire C "stack" is effectively the youngest generation in a generational garbage collector! + +After GC is finished, the C stack pointer is reset using [`longjmp`](http://man7.org/linux/man-pages/man3/longjmp.3.html) and the GC calls its continuation. + +Here is a snippet demonstrating how C functions may be written using Baker's approach: + + object Cyc_make_vector(object cont, object len, object fill) { + object v = NULL; + int i; + Cyc_check_int(len); + + // Memory for vector can be allocated directly on the stack + v = alloca(sizeof(vector_type)); + + // Populate vector object + ((vector)v)->tag = vector_tag; + ... + + // Check if GC is needed, then call into continuation with the new vector + return_closcall1(cont, v); + } + +[CHICKEN](http://www.call-cc.org/) was the first Scheme compiler to use Baker's approach. + +### Cyclone's Hybrid Collector + +Cyclone uses generational garbage collection (GC) to automatically free allocated memory using two types of collection. In practice, most allocations consist of short-lived objects such as temporary variables. Minor GC is done frequently to clean up most of these short-lived objects. Some objects will survive this collection because they are still referenced in memory. A major collection runs less often to free longer-lived objects that are no longer being used by the application. + +Cheney on the MTA, is used to implement the first generation of our garbage collector. Objects are allocated directly on the stack using `alloca` so allocations are very fast, do not cause fragmentation, and do not require a special pass to free unused objects. + +Baker's technique uses a copying collector for both the minor and major generations of collection. One of the drawbacks of using a copying collector for major GC is that it relocates all the live objects during collection. This is problematic for supporting native threads because an object can be relocated at any time, invalidating any references to the object. To prevent this either all threads must be stopped while major GC is running or a read barrier must be used each time an object is accessed. Both options add a potentially significant overhead so instead another type of collector is used for the second generation. + +Cyclone supports native threads by using a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. An advantage of this approach is that objects are not relocated once they are placed on the heap. In addition, major GC executes asynchronously so threads can continue to run concurrently even during collections. + +More details are available in a separate [Garbage Collector](Garbage-collector.md) document. + +### Native Thread Support + + +### Data Structures + +TODO: code from Chibi scheme +TODO: not really related to this paper, but can allocation speedup for Cyclone be ported back to Chibi? Should look into that + +## C Runtime +TODO: anything else to say about the C runtime??? + +yes, find that paper from Dybvig about writing Chez scheme, about how they made the runtime nice and fast. same applies here as well + +here it is: +https://www.cs.indiana.edu/~dyb/pubs/hocs.pdf + +The "money" quote is: + +> My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. + +## Data Types + +### Objects + +Most Scheme data types are represented as allocated "objects" that contain a tag to identify the object type. For example: + + typedef struct {tag_type tag; double value;} double_type; + +### Value Types + +On the other hand, some data types can be represented using 30 bits or less and can be stored as value types using a technique from Lisp in Small Pieces. On many machines, addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): + +> The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. + +Due to the tag field, all Cyclone objects will have (at least) 4-byte alignment. + +Cyclone uses this technique to store characters. The nice thing about value types is they do not have to be garbage collected because no extra data is allocated for them. + +## Interpreter + +The [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) was used as a starting point for `eval`. + +TODO: explain analysis phase, and how this is a nice speedup + +## Macros + +[Explicit renaming](http://wiki.call-cc.org/explicit-renaming-macros) (ER) macros provide a simple, low-level macro system without requiring much more than `eval`. Many ER macros from [Chibi Scheme](https://github.com/ashinn/chibi-scheme) are used to implement the built-in macros in Cyclone. + +TODO: syntax-rules ER macro from Chibi is used to provide support for this macro system + +## Scheme Standards + +Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library (C module) support is the most important but there are also exceptions, system interfaces, and a more consistent API. + +## Future + +- Implement more of r7rs-large, have started on data structures +- implement more libraries (industria??) +- way to support eggs or other libraries? is that even worth the effort? +- benchmark + +## Conclusion + +TODO: this section is completely out of date, a better reference would be benchmark results from r7rs-benchmarks + +From Feeley's presentation: + +> Performance is not so bad with NO optimizations (about 6 times slower than Gambit-C with full optimization) + +Compared to a similar compiler (CHICKEN), Cyclone's performance is worse but also "not so bad": + + $ time cyclone -d transforms.sld + + real 0m6.802s + user 0m4.444s + sys 0m1.512s + + $ time csc -t transforms.scm + + real 0m1.084s + user 0m0.512s + sys 0m0.380s + +Thanks for reading! + +Want to give Cyclone a try? Install a copy using [cyclone-bootstrap](https://github.com/justinethier/cyclone-bootstrap). + + +## References + +- [CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.](http://www.pipeline.com/~hbaker1/CheneyMTA.html), by Henry Baker +- [CHICKEN Scheme](http://www.call-cc.org/) +- [Chibi Scheme](https://github.com/ashinn/chibi-scheme) +- [Compiling Scheme to C with closure conversion](http://matt.might.net/articles/compiling-scheme-to-c/), by Matt Might +- [Lisp in Small Pieces](http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html), by Christian Queinnec +- [R5RS Scheme Specification](http://www.schemers.org/Documents/Standards/R5RS/HTML/) +- [R7RS Scheme Specification](http://trac.sacrideo.us/wg/wiki) +- [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html), by Harold Abelson and Gerald Jay Sussman +- [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf), by Marc Feeley From d92cb1a27c9854e1e9ee769b013cd90a2fb82f14 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 30 Dec 2016 17:37:26 -0500 Subject: [PATCH 03/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 58 ++++++++++++++----- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index edcf43ac..eb80cb44 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -2,13 +2,11 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This document covers some of the background on how Cyclone was written, including aspects of the compiler and runtime system. This is a revision of the [original document](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago when the compiler was self hosting but before the new garbage collector was written. This document +This document covers some of the background on how Cyclone was written, including aspects of the compiler and runtime system. This is a revision of the [original document](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. Basically this is an update that includes everything that has happened since then. -Before we get started, I want to give a big **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the latest revision of the Scheme language, developed by the large community, and wherever possible existing code from the community was reused or repurposed for this project instead of starting from scratch. +Before we get started, I want to give a big **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code from the community was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. -At the end of this document is a list of online resources that were the most helpful and influential. Without quality Scheme resources like these it would not have been possible to write Cyclone. - -In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to build Cyclone. In fact, the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes at this point. Maybe if there is greater interest from the community some of this can be ported back to that project. +In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Maybe if there is greater interest from the community some of this work can be ported back to that project. ## Table of Contents @@ -69,13 +67,53 @@ To overcome these difficulties a series of source-to-source transformations are The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. +## Macro Expansion + +Macro expansion is one of the first transformations. Any macros the compiler knows about are loaded as functions into a macro environment, and a single pass is made over the code. When the compiler finds a macro the code is expanded by calling the macro. The compiler then inspects the resulting code again in case the macro expanded into another macro. + +At the lowest level, [explicit renaming](http://wiki.call-cc.org/explicit-renaming-macros) (ER) macros provide a simple, low-level macro system without requiring much more than `eval`. Many ER macros from [Chibi Scheme](https://github.com/ashinn/chibi-scheme) are used to implement the built-in macros in Cyclone. + +Cyclone also supports the high-level `syntax-rules` system from the Scheme reports. Syntax rules is implemented as a huge ER macro ported from Chibi Scheme. + +As a simple example the `let` macro below: + + (let ((square (lambda (x) (* x x)))) + (write (+ (square 10) 1))) + +is expanded to: + + (((lambda (square) (write (+ (square 10) 1))) + (lambda (x) (* x x)))) + ### CPS Conversion -TODO: what is CPS, why we need it (cheney on mta requires it) +The conversion to continuation passing style (CPS) makes continuations explicit in the compiled code. This is a critical step to make the Scheme code simple enough that it can be represented by C. As we will see later, the runtime's garbage collector also requires code in CPS form. + +The basic idea is that each expression will produce a value that is consumed by the continuation of the expression. Continuations will be represented using functions. All of the code must be rewritten to accept a new continuation parameter `k` that will be called with the result of the expression. For example, considering the previous `let` example: + + (((lambda (square) (write (+ (square 10) 1))) + (lambda (x) (* x x)))) + +the code in CPS form becomes: + + ((lambda (r$4) + ((lambda (square$2) + (square$2 + (lambda (r$6) + ((lambda (r$5) (write r$5)) + (+ r$6 1))) + 10)) + r$4)) + (lambda (k$7 x$1) (k$7 (* x$1 x$1)))) ### CPS Optimizations -TODO: CPS conversion generates too much code, need to optimize it to make the compiler practical +CPS conversion generates too much code and is inefficient for functions such as primitives that can return a result directly instead of calling into a continuation. So we need to optimize it to make the compiler practical. For example, the previous CPS code can be simplified to: + + ((lambda (k$7 x$1) (k$7 (* x$1 x$1))) + (lambda (r$6) + (write (+ r$6 1))) + 10) types of optimizations - inlining is the key (explain with examples), what else? @@ -185,12 +223,6 @@ The [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z TODO: explain analysis phase, and how this is a nice speedup -## Macros - -[Explicit renaming](http://wiki.call-cc.org/explicit-renaming-macros) (ER) macros provide a simple, low-level macro system without requiring much more than `eval`. Many ER macros from [Chibi Scheme](https://github.com/ashinn/chibi-scheme) are used to implement the built-in macros in Cyclone. - -TODO: syntax-rules ER macro from Chibi is used to provide support for this macro system - ## Scheme Standards Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library (C module) support is the most important but there are also exceptions, system interfaces, and a more consistent API. From 8967fe4b6ded89b20cc40b1ee0b0f701f26eeb9b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 30 Dec 2016 18:06:21 -0500 Subject: [PATCH 04/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index eb80cb44..b20ad77e 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -96,23 +96,23 @@ The basic idea is that each expression will produce a value that is consumed by the code in CPS form becomes: - ((lambda (r$4) - ((lambda (square$2) - (square$2 - (lambda (r$6) - ((lambda (r$5) (write r$5)) - (+ r$6 1))) + ((lambda (r) + ((lambda (square) + (square + (lambda (r) + ((lambda (r) (write r)) + (+ r 1))) 10)) - r$4)) - (lambda (k$7 x$1) (k$7 (* x$1 x$1)))) + r)) + (lambda (k x) (k (* x x)))) ### CPS Optimizations CPS conversion generates too much code and is inefficient for functions such as primitives that can return a result directly instead of calling into a continuation. So we need to optimize it to make the compiler practical. For example, the previous CPS code can be simplified to: - ((lambda (k$7 x$1) (k$7 (* x$1 x$1))) - (lambda (r$6) - (write (+ r$6 1))) + ((lambda (k x) (k (* x x))) + (lambda (r) + (write (+ r 1))) 10) types of optimizations - inlining is the key (explain with examples), what else? @@ -128,7 +128,7 @@ Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.s The compiler's code generation phase takes a single pass over the transformed Scheme code and outputs C code to the current output port (usually a `.c` file). -During this phase C code is sometimes returned for later use instead of being output directly. For example, when compiling a vector literal or a series of function arguments. In this case, the code is returned as a list of strings that separates variable declarations from C code in the "body" of the generated function. +During this phase C code is sometimes saved for later use instead of being output directly. For example, when compiling a vector literal or a series of function arguments, the code is returned as a list of strings that separates variable declarations from C code in the "body" of the generated function. The C code is carefully generated so that a Scheme library (`.sld` file) is compiled into a C module. Functions and variables exported from the library become C globals in the generated code. @@ -169,18 +169,15 @@ Here is a snippet demonstrating how C functions may be written using Baker's app ### Cyclone's Hybrid Collector -Cyclone uses generational garbage collection (GC) to automatically free allocated memory using two types of collection. In practice, most allocations consist of short-lived objects such as temporary variables. Minor GC is done frequently to clean up most of these short-lived objects. Some objects will survive this collection because they are still referenced in memory. A major collection runs less often to free longer-lived objects that are no longer being used by the application. +Baker's technique uses a copying collector for both the minor and major generations of collection. One of the drawbacks of using a copying collector for major GC is that it relocates all the live objects during collection. This is problematic for supporting native threads because an object can be relocated at any time, invalidating any references to the object. To prevent this either all threads must be stopped while major GC is running or a read barrier must be used each time an object is accessed. Both options add a potentially significant overhead so instead Cyclone uses another type of collector for the second generation. -Cheney on the MTA, is used to implement the first generation of our garbage collector. Objects are allocated directly on the stack using `alloca` so allocations are very fast, do not cause fragmentation, and do not require a special pass to free unused objects. - -Baker's technique uses a copying collector for both the minor and major generations of collection. One of the drawbacks of using a copying collector for major GC is that it relocates all the live objects during collection. This is problematic for supporting native threads because an object can be relocated at any time, invalidating any references to the object. To prevent this either all threads must be stopped while major GC is running or a read barrier must be used each time an object is accessed. Both options add a potentially significant overhead so instead another type of collector is used for the second generation. - -Cyclone supports native threads by using a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. An advantage of this approach is that objects are not relocated once they are placed on the heap. In addition, major GC executes asynchronously so threads can continue to run concurrently even during collections. +Cyclone supports native threads by using a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. Each thread contains its own stack that is collected using Cheney on the MTA during minor GC. Each object that survives a minor collection is copied from the stack to a newly-allocated slot on the heap. An advantage of this approach is that objects are not relocated once they are placed on the heap. In addition, major GC executes asynchronously so threads can continue to run concurrently even during collections. More details are available in a separate [Garbage Collector](Garbage-collector.md) document. ### Native Thread Support +Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied a single time during minor GC. In order for an object to be shared among threads the application must guarantee that the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible to initiate a minor GC for the calling thread to guarantee an object will henceforth not be relocated. ### Data Structures From fd560945032718a42f96af673a96216b070fa27c Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 31 Dec 2016 21:51:21 -0500 Subject: [PATCH 05/93] Reduce width --- docs/images/compiler.dia | Bin 2313 -> 2402 bytes docs/images/compiler.png | Bin 20261 -> 21448 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/compiler.dia b/docs/images/compiler.dia index f3b823183d893ed5f0a78feef20d2afaa7a27cb0..c9338a64b2bda806fea638c1becead610f953245 100644 GIT binary patch literal 2402 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 U@^2D*v%B8^0px%$(Tkk`0L+@gzyJUM literal 2313 zcmV+k3HJ6MiwFP!000021MOW~Z{xTXe)q2sJTEPf(7fuhv&o_pbhZT+?Eo`<4rq(9 z)sZDbl9S0k^tYF?6<=h@7txd>4-F)UZH7mrc)s&}M@Q7Jzx|ko*0V^`Adc?(2*AE2 zqEYMz(fF?apKqUU-TrU)yKcX~$ch{d}+3c6W;N|57gs&;j;sk`j z9He6KKOTmBAR7((_dUzn?7-(4&p#_Zl!+9pGh)=~`f5=DQ$4NYo{Qk04(QXun zabi95@UH*iY4Pe0if#s5{p{&`#>Zlq2>!jkYbaly*QD#2NXp$#XK@UjsOjY;@UzL|4^7jx?EO_!@6SOR3`0?M^g)!J zt^3#WbYDI@3j|;PyW(nC_EsArd{;2RP7e{|dEkrmz%tuzQ`6I=Xf`-B>*aRGPR#P7 zQovrA2>Gi>itazHL$y_$-~w?hKFWgUw|5(J5)c0?Mp-e~uNjYgp7_?S^(p?*U-J;j zLIVG;|8KZGS>@r$&Lj@*%+@SkFDd&51IH~-z%G2$bw3=Idr#!?^JpB3!U6*x%Z-qa zgaF8HC~%R(npqT~m_Cl;B--T(=Ni<)!~#lo2eyI{N1^YD2*#6aPv^jM9R}Ag(#+T} zPJEFZ8VUrcFoUQE5wa0hGPey4mHZJg($Gc_MY>I-llbMaf?^-$4%Ij}SUdF*Uj9cA zi3&GIs%}ni9E~ncau2tGOX8KNxH9%8Bd^%0{y#Cr0V<^ap|MOUUV zxYAC<(j()XH{^(SGR}PyKe7!+LxrOeWk+)X(;DiK40A9Kb`(lygMdiKbEM~CMc^}Z!MN}u9nYN47W*&bzCm!^oLtjccwx%I@SLHH^U zPulHUY4)1Kxdhhbzy3pn&ms#(d^3)pegr#SU+J7K+JseV#TWh+w(sF_lDfaV$R zH&%fFgNSs7SbX70T3c~o=*9Wy1vFx+qx6DZMoc;H9{Cmq3fO~2Oc}JhYP5p}?evK$ zR~78At5r>5XCY}YM_1;Kz4ggbhb>R*Ox z=%yOP2&=AA4fis_3c+`efn=?$h*4Gs?yei|pn8TWh#O;h!2LKqgu3N2_*PuyGc1EqsP=6V@u3T4&ZN0F^Hp#x*qFmn|SmiZS!}G6< z=a=2^B)#rlNUtjwtrDX5@&ev)VZx+dM_xNFygjgr?{nz_k@4ee^J7;f?RJ@(B&1w{ zN%e|-x)%G?ZA0u+Vv3TC*w-NTmCOGq(=7HW0S+N=RY}wV*tWY{kx<6oeNbadG8+w*{U*WY0Fe58N9n%yn_bsn&aK?BAyC)j3Wtn zUqtehfAbI|qfk^pA6DNBRIAp4E2+iQl$M+lehBpZV3cXy08OWiqwi0~g+U}*6LAY; zIbO{V?DDydVyBpR3c~OR6Sg-L*nJl|ao=1m!el-0!JSl5<%ZZN&0iSI9w%`U{3(Mr z5BCnPv_tvHW+c+(Azz!3bUw_taToo@lXM>Lij~Vu_2#@0a1g>P?h3G*Z`#lm0snP0 z5mV9oETy|)vf69xTcNSr4>>Wi{R}mM@bWZPxm1@yz1Ix9HIb#=XR^&_%TQTEWet@z zRJIDlm8-lN*2-lW1k_zso-zU$T2!8PgUc3|pnSt-TVb=?Ythiz?$B9$nF>^_TzXGk zz1N_ejq){#g)Kg^#ob@NCh4fDT)VakR7a(Bt>nYFrANLf7m*XDRfaC=Jd4t`R-XCN zd_2bpMcb6F{iLO9SiRO;Z?Ggbz-YCZj0YT-bx0}rqW8OyD~sm{X|#g&%(rVQ*1D+` zF0@H8cHTSutu_*LO|6>2xvRxFXmCzzPDK3<1-)DF(9JD)XubtczIjzEIgtZf@Z@(X zQP13(dwpB*sBEQmsS?8Jo>qvK_fHBmG zs-<|IjKpmg-!A{MRy!jv^jzBe%fpwiH`YTKr}IQu4{=nSuNzBbqrVy+)WZHG)oa;Y zCTf)uoh9i@;2Dy>7&wljKl3ZiVCU_&WeQxRJNc_Ju46L5Nat2%2;|#E9O!vx3#42g*G|;@tgnvf1i?G diff --git a/docs/images/compiler.png b/docs/images/compiler.png index 3b6bbdb206f843bafeed2d245ad9534867f65040..efc66273c040f732b02f0de833e2c86377cfca63 100644 GIT binary patch literal 21448 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

Xl6tT?0JEyEx|u^Bcp^SNv~H> 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�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 z zl|d1*&b5<$3uB2aA=|Y?*5Zyql(MuKYl*RByRyqP*^Pb6&F{4RUa$Fc=6U9PpL5Q0 z&gb*~oCT9gE0x*W!fM4)Rkt5DLT5KZSDddSk- z(_nFTYFQ-?E^C>!%*F=D7q8(edvE+lk|(hLt*opd`Og-%D%3q6>77*v!iR|~u&C6` zOh+4oE=1!&*zx+{ZFg9d*r&VJc}ByJUo<~G%wlbw#th6*Trc9*cfL+X53Ii1#>U`~ zI#Q}?vZfd@6XPR0nCepWOOT?QN`re4W9~x>)r2Y7@_}1d^ zZ;+W`PR@rQg$&w)PoTZHIxNb2en2v?j&E}#U%0`d`&z8 z0qXYZPrwgXy=h(})nJ^Sy|T4c^X%Dg;lT?FEsDWw0gXci=%_8JOdbAgxbWmIfhH(Vx2GPKfFQ zCgz+)9WcvzwRwTR^G)zo-Cqi=Uk(aFJjj(3;Sd9%hry>mX}W9@$q_)VOjEn7a6Ca! z$P6PMvAM~57^-m}mpUkyG43qn;pf-kX2Do{hCR5dJ!nvnW4atuwhPGv@EfcP%h2$j z1lX&f&C;5h8XW}XkD0Pk+g&_!1;WWs08&y`?ka0njWRBRcXxMFGv(OBKNLKaOS*J| z_hBDL-NOg#4RLR52n2AwL%-lm?)P&Wz}{z4CBPWH-RNPjy^&5kCKJu#s~YMq$Odg* zNp|SwhbM&~2m*0eiRM}wv*~Z8X;2f}w+Y}S@vpBRS&}`nDK<8? zpx23*I6HlZ#nAG832iv#W)+6IMyG=DTK0=>Ek!6O^bHIc$wZhRrhJyjAft2U-{26T z{)+4nRz>Bg5OznYQ_*x$CT2ERUzLI3tKo!R;%HDI^`oC-$yiBT~9|8C}2(Yh= zWu>I=0B!P~r?+=U*EbQr0<=0=j%)aSXpj>&aKSuYb7fjH(POd>b#m>En2kafg+c)? z8yg!Nto##(G34j#3j}YVKu<3&azd=__CpS5zXY~5toNAg*cOx{x;M?*CD`ABA#^Oh z^#lw|5wajflb4qVt2p$1{EDWJ)CUI;2%^KUBCmXU1F+;Zb$jhb3UB zNN_zaB;=faBkwU5;EaZ+rltbeQ@TbB+9{;Wfc%yR=!1ZSXuZorqtPxuWBnNOEdR^r z`)GyiZItJH@j?BmBao_^g52~Ke228Z89CXa*-in7@D2V;H;7fYzn5TMT2L?-JX#3} zi6lYH)?7acn=wnZR+U}G39XB!D#8BI`tPZdyzv}mj{X5Xw}c4c6PZ*8 zL+#nvmXE+Oe`+d|q63r%V+GUf8xmd@no2%2J$%VMuBm zIldMsny;P99DFP$e;a(+x4BA&S_Opz%VltI&`2tsO0TG_yr6eYTra&*qk5u3R?86i zpo_NpLh0TlBQ94naj!dJuXPvaX;_Hg<_rDiwWl$vQGJ5^ciC7ReW{HS^H2a9x<(Mr%^p zot&E_?}y_4RNLbh6dZgp4K{LR}Pp;GjE5R|~IMp>7lLKRe9vMF0Q* From 6bb11682080659c0676e11a2aef183fd4dc1cae8 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 31 Dec 2016 22:08:01 -0500 Subject: [PATCH 06/93] Clear background --- docs/images/compiler.png | Bin 21448 -> 19729 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/compiler.png b/docs/images/compiler.png index efc66273c040f732b02f0de833e2c86377cfca63..5f2d2b5c3bb712558992adbd4acb6bd82e04ad81 100644 GIT binary patch literal 19729 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

Xl6tT?0JEyEx|u^Bcp^SNv~H> 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�wa(g_)=uhirQOC12iB%22x|pAAYMK1L`B70IW{{Ip)Rh+kSr8YF>hzQTtU*j6{MmX%?~{n6s}yI%iY( zJN-f@tJ(dSybM?9J14&3{uxnSgosA}xkni&SaiCVS>0>gcePomGdEh!aqv$D_U64A zz5aC~@V5qAktwA>Vq4evq*vkhx!fb~5j;|TN{|Y_5hKfE;$#jFfsICUI zPqt%P1cx4Lljo;$JC{1DzER`e$~JB^%N*U_o_qPrst(A^SISf+B%UYmDTOF519JvpkgANSAkg1QH|QkxFCm zF-Rl8_YH|J-2k4Klbb6lDCm>^=i6?6jiY66aYD)_ig=U{|K_R|5*c?~lT(j14-YO) zR#w&)Fn;MyN00IJuwo|!FbO9}d4b0uqwd?K)+H^WW~S;$I~Eoe*XoQp?uLeqB4TPy za4BPVYwkgs7;D5w3uotkKTYsygXD4|kyuxE2GUGTx4W9rX6t$3h*=<#aU zC+1Hf$nxhm1q}^ZbRXdTJX^i<{Js7C{u)9@578J=H=F{wD7@OKjL@}~L{!n?8eOsT z8K%3tWNm@&%h2(enHx>c<{WJj_g*%+!j>M>Yip*};8_D|-jngWr^F*U;so+6@M>AW zb$#atcc66meRc}(pRj~G%w26hIo*>{E#cwe^NT7|?!1rvrdy&wC}kFdt5=`wTYNOT z{v|wd@=pBScM#oDn}qoIv%W)Iz^I;L&*CO8509z2`4QbD>22ym<@c3KCZs zSPslq$&hGOR;BR<5)d4p(OagHqS<8fFw2l97>;;A6n@CEZu<ZCduCO8@2>I;!HaVHA;VT=27(B$zd;&L{@j=}w4{9de zOgN!*^a4U%T~zyiO6v_^SiGjNpulAyN1I3gkgge_g*~)lYEHkDeKNC&sxmOB%h3kt znzRw-GGPV=sA7Ff`--1Esqzrrjo6J2Rcx5H=FgkI97nP2mjjCn#dV<9xrVL+ zD1K~g?Bg{K2$#w)8mhSKY;qg^mf)@DZq^hdg z)YRm8y;QSh72)a{q7v81`cf=pb9v$yO$*Tu(Y3d?cW}ruD2Sbm2O+{?uj7BxtYqX( zMmSuo`K{Et1Ij5oowK{(XiDz>l6k-RR?Y{#7~yfCoiHmgF-utS$4=-Yp7ps}myH2; z+(1beZmQ!)Qfi4^1{g{tiFC6cxfhcs01-1H*4NjUmB}ajih+xk$(*=#@8ZRa=H})y zTN-*&J-Z%t(y7bIMk6f)?kTw<^c;0;&{WP}ukB*RVupu@0lfe=^9&0&+#Zd@bO;Iw zm6w&NWc4i@CL4Bb=trfNMtvWh$EhZ&{<_oP>$5g(CB*kv6j1YP`!1Zy6%{oM_^%6t zb!f5NaByHJ1pLIxqmFOQ- zz!6ti$mH8FnQ`=(j(U)PlOzmJ9cu-GhgtE%g@oW;^)@?WLK1R&*H9CmE*Oeuq+lI#W66Uq z{}^A$-8Ih3Ec`vpIVVG|Sagxq4;l$uHr7%2Q_=1a=VN_K8;^sBzO=NoXa~4k*24iX zD=}#nD=RTq=KP2A99LN_L#1oFf|Z`W0jqGTf|tPp1-cTidyoSg?;x{50U4oh&(6*& zq{C-wwL+PnAy42xP8nJGw@(9teQ|laIyHmY2&Z^gnVaAUpuF zs!|(wMCRV!{Zd3urP9BKQ!IJ>)@Ry*)BAdRL1-5J2FeX$bv32J!4`wzwapf~f Date: Sun, 1 Jan 2017 21:35:26 -0500 Subject: [PATCH 07/93] Updates --- docs/images/compiler.png | Bin 19729 -> 25254 bytes docs/images/cyclone-contribs.png | Bin 0 -> 10070 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/cyclone-contribs.png diff --git a/docs/images/compiler.png b/docs/images/compiler.png index 5f2d2b5c3bb712558992adbd4acb6bd82e04ad81..4d651d75bfdb98fe64eb902280da458f4e92748b 100644 GIT binary patch literal 25254 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

EktO3 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 BsMr7i literal 19729 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 e04Nr7(EkS~ie8MgTQ)fW0000f~ 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 literal 0 HcmV?d00001 From a3b6f9dccea85a683cad2a4adb82c1ef3d4b4052 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 1 Jan 2017 22:31:48 -0500 Subject: [PATCH 08/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index b20ad77e..c00db22d 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -2,7 +2,7 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This document covers some of the background on how Cyclone was written, including aspects of the compiler and runtime system. This is a revision of the [original document](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. Basically this is an update that includes everything that has happened since then. +This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. This version includes everything that has happened since then, and attempts to provide a constructive background on how Cyclone was written. Before we get started, I want to give a big **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code from the community was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. @@ -67,7 +67,35 @@ To overcome these difficulties a series of source-to-source transformations are The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. -## Macro Expansion +### The Basic Pattern - Make Many Small Passes + +Most of the transformations follow a similar pattern. A single function is used to recursively examine all of the code's AST, examining each piece of code a single time. This is efficient as long as code is only visited a single time. + +This is a simple example, although instead of doing a straightforward transformation it calls `mark-mutable` to track mutations for a later phase: + + (define (analyze-mutable-variables exp) + (cond + ((const? exp) (void)) + ((prim? exp) (void)) + ((ref? exp) (void)) + ((quote? exp) (void)) + ((lambda? exp) + (map analyze-mutable-variables (lambda->exp exp)) + (void)) + ((set!? exp) + (mark-mutable (set!->var exp)) + (analyze-mutable-variables (set!->exp exp))) + ((if? exp) + (analyze-mutable-variables (if->condition exp)) + (analyze-mutable-variables (if->then exp)) + (analyze-mutable-variables (if->else exp))) + ((app? exp) + (map analyze-mutable-variables exp) + (void)) + (else + (error "unknown expression type: " exp)))) + +### Macro Expansion Macro expansion is one of the first transformations. Any macros the compiler knows about are loaded as functions into a macro environment, and a single pass is made over the code. When the compiler finds a macro the code is expanded by calling the macro. The compiler then inspects the resulting code again in case the macro expanded into another macro. @@ -115,14 +143,13 @@ CPS conversion generates too much code and is inefficient for functions such as (write (+ r 1))) 10) -types of optimizations - inlining is the key (explain with examples), what else? +One of the most effective optimizations is inlining of primitives. That is, some runtime functions can be called directly, so an enclosing `lambda` is not needed to evaluate them. This can greatly reduce the amount of generated code. -ideas from chicken - analysis pass, analysis DB +There is also a contraction phase that eliminates other unnecessary `lambda`'s. There are a few other miscellaneous optimizations such as constant folding, which evaluates certain primitives at compile time if the parameters are constants. - A custom AST is used to represent some object during CPS optimizations though +To more efficiently identify optimizations an analysis pass is made over the code to build up a "database" of various attributes that determine which optimizations can be performed. The DB is a hash table of records with an entry for each variable and function. This idea was borrowed from CHICKEN. -TODO: -Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could be applied to Cyclone. +In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. ## C Code Generation @@ -175,6 +202,9 @@ Cyclone supports native threads by using a tri-color tracing collector based on More details are available in a separate [Garbage Collector](Garbage-collector.md) document. +TODO: + + ### Native Thread Support Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied a single time during minor GC. In order for an object to be shared among threads the application must guarantee that the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible to initiate a minor GC for the calling thread to guarantee an object will henceforth not be relocated. @@ -231,6 +261,8 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus - way to support eggs or other libraries? is that even worth the effort? - benchmark +Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could be applied to Cyclone. + ## Conclusion TODO: this section is completely out of date, a better reference would be benchmark results from r7rs-benchmarks From 719e8cac1e875ebcfd8a7bc8898de5369396c8ad Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 2 Jan 2017 18:22:59 -0500 Subject: [PATCH 09/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 82 ++++++++++--------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index c00db22d..e79cdf5c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -2,9 +2,9 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. This version includes everything that has happened since then, and attempts to provide a constructive background on how Cyclone was written. +This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. This version includes everything that has happened since then and attempts to provide a constructive background on how Cyclone was written. -Before we get started, I want to give a big **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code from the community was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. +Before we get started, I want to say **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code from the community was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Maybe if there is greater interest from the community some of this work can be ported back to that project. @@ -67,41 +67,39 @@ To overcome these difficulties a series of source-to-source transformations are The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. -### The Basic Pattern - Make Many Small Passes +### Many Small Passes -Most of the transformations follow a similar pattern. A single function is used to recursively examine all of the code's AST, examining each piece of code a single time. This is efficient as long as code is only visited a single time. +Most of the transformations follow a similar pattern. A single function is used to recursively examine all of the code's AST, examining each piece of code within an expression. This is efficient as long as each sub-expression is only visited a single time. -This is a simple example, although instead of doing a straightforward transformation it calls `mark-mutable` to track mutations for a later phase: +This is a short example that searches for free variables. The point is not to show exactly what is going on here, but rather to present the pattern used by each of the transformations: - (define (analyze-mutable-variables exp) - (cond - ((const? exp) (void)) - ((prim? exp) (void)) - ((ref? exp) (void)) - ((quote? exp) (void)) + (define (search exp) + (cond + ((const? exp) '()) + ((prim? exp) '()) + ((quote? exp) '()) + ((ref? exp) (if bound-only? '() (list exp))) ((lambda? exp) - (map analyze-mutable-variables (lambda->exp exp)) - (void)) - ((set!? exp) - (mark-mutable (set!->var exp)) - (analyze-mutable-variables (set!->exp exp))) - ((if? exp) - (analyze-mutable-variables (if->condition exp)) - (analyze-mutable-variables (if->then exp)) - (analyze-mutable-variables (if->else exp))) - ((app? exp) - (map analyze-mutable-variables exp) - (void)) - (else - (error "unknown expression type: " exp)))) + (difference (reduce union (map search (lambda->exp exp)) '()) + (lambda-formals->list exp))) + ((if-syntax? exp) (union (search (if->condition exp)) + (union (search (if->then exp)) + (search (if->else exp))))) + ((define? exp) (union (list (define->var exp)) + (search (define->exp exp)))) + ((define-c? exp) (list (define->var exp))) + ((set!? exp) (union (list (set!->var exp)) + (search (set!->exp exp)))) + ((app? exp) (reduce union (map search exp) '())) + (else (error "unknown expression: " exp)))) ### Macro Expansion Macro expansion is one of the first transformations. Any macros the compiler knows about are loaded as functions into a macro environment, and a single pass is made over the code. When the compiler finds a macro the code is expanded by calling the macro. The compiler then inspects the resulting code again in case the macro expanded into another macro. -At the lowest level, [explicit renaming](http://wiki.call-cc.org/explicit-renaming-macros) (ER) macros provide a simple, low-level macro system without requiring much more than `eval`. Many ER macros from [Chibi Scheme](https://github.com/ashinn/chibi-scheme) are used to implement the built-in macros in Cyclone. +At the lowest level, Cyclone's [explicit renaming](http://wiki.call-cc.org/explicit-renaming-macros) (ER) macros provide a simple, low-level macro system that does not require much more than `eval`. Many ER macros from [Chibi Scheme](https://github.com/ashinn/chibi-scheme) are used to implement the built-in macros in Cyclone. -Cyclone also supports the high-level `syntax-rules` system from the Scheme reports. Syntax rules is implemented as a huge ER macro ported from Chibi Scheme. +Cyclone also supports the high-level `syntax-rules` system from the Scheme reports. Syntax rules is implemented as [a huge ER macro](https://github.com/justinethier/cyclone/blob/v0.3.3/scheme/base.sld#L1242) ported from Chibi Scheme. As a simple example the `let` macro below: @@ -145,11 +143,11 @@ CPS conversion generates too much code and is inefficient for functions such as One of the most effective optimizations is inlining of primitives. That is, some runtime functions can be called directly, so an enclosing `lambda` is not needed to evaluate them. This can greatly reduce the amount of generated code. -There is also a contraction phase that eliminates other unnecessary `lambda`'s. There are a few other miscellaneous optimizations such as constant folding, which evaluates certain primitives at compile time if the parameters are constants. +A contraction phase is also used to eliminate other unnecessary `lambda`'s. There are a few other miscellaneous optimizations such as constant folding, which evaluates certain primitives at compile time if the parameters are constants. -To more efficiently identify optimizations an analysis pass is made over the code to build up a "database" of various attributes that determine which optimizations can be performed. The DB is a hash table of records with an entry for each variable and function. This idea was borrowed from CHICKEN. +To more efficiently identify optimizations Cyclone first makes a code pass to build up an hash table-based analysis database (DB) of various attributes. This is the same strategy employed by CHICKEN, although we record different attributes. The DB contains a table of records with an entry for each variable (indexed by symbol) and each function (indexed by unique ID). -In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. +In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. After optimizations are complete, the lambdas are converted back into regular S-expressions. ## C Code Generation @@ -198,18 +196,17 @@ Here is a snippet demonstrating how C functions may be written using Baker's app Baker's technique uses a copying collector for both the minor and major generations of collection. One of the drawbacks of using a copying collector for major GC is that it relocates all the live objects during collection. This is problematic for supporting native threads because an object can be relocated at any time, invalidating any references to the object. To prevent this either all threads must be stopped while major GC is running or a read barrier must be used each time an object is accessed. Both options add a potentially significant overhead so instead Cyclone uses another type of collector for the second generation. -Cyclone supports native threads by using a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. Each thread contains its own stack that is collected using Cheney on the MTA during minor GC. Each object that survives a minor collection is copied from the stack to a newly-allocated slot on the heap. An advantage of this approach is that objects are not relocated once they are placed on the heap. In addition, major GC executes asynchronously so threads can continue to run concurrently even during collections. +To that end, Cyclone supports uses a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. The DLG algorithm was selected in part because many state-of-the-art collectors are built on top of DLG such as Chicken, Clover, and Schism. So this may allow for enhancements down the road. + +TODO: + +Under Cyclone's runtime each thread contains its own stack that is used for private thread allocations. Thread stacks are managed independently using Cheney on the MTA. Each object that survives one of these minor collections is copied from the stack to a newly-allocated slot on the heap. + +Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. More details are available in a separate [Garbage Collector](Garbage-collector.md) document. -TODO: - - -### Native Thread Support - -Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied a single time during minor GC. In order for an object to be shared among threads the application must guarantee that the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible to initiate a minor GC for the calling thread to guarantee an object will henceforth not be relocated. - -### Data Structures +### Heap Data Structures TODO: code from Chibi scheme TODO: not really related to this paper, but can allocation speedup for Cyclone be ported back to Chibi? Should look into that @@ -226,6 +223,12 @@ The "money" quote is: > My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. +## Native Thread Support + +A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. + +Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. + ## Data Types ### Objects @@ -294,6 +297,7 @@ Want to give Cyclone a try? Install a copy using [cyclone-bootstrap](https://git - [CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.](http://www.pipeline.com/~hbaker1/CheneyMTA.html), by Henry Baker - [CHICKEN Scheme](http://www.call-cc.org/) +- [CHICKEN Scheme - Internals](https://wiki.call-cc.org/Internals) - [Chibi Scheme](https://github.com/ashinn/chibi-scheme) - [Compiling Scheme to C with closure conversion](http://matt.might.net/articles/compiling-scheme-to-c/), by Matt Might - [Lisp in Small Pieces](http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html), by Christian Queinnec From 05292026cc50bc4b9c209c802f1042f96cdf5291 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 2 Jan 2017 18:36:36 -0500 Subject: [PATCH 10/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index e79cdf5c..d8f855c9 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -212,7 +212,8 @@ TODO: code from Chibi scheme TODO: not really related to this paper, but can allocation speedup for Cyclone be ported back to Chibi? Should look into that ## C Runtime -TODO: anything else to say about the C runtime??? + +The C runtime supports compiled Scheme programs by providing a set of primitive functions called into by the compiled code and functions for various supporting features such as call history, exception handling, and garbage collection. yes, find that paper from Dybvig about writing Chez scheme, about how they made the runtime nice and fast. same applies here as well @@ -295,13 +296,15 @@ Want to give Cyclone a try? Install a copy using [cyclone-bootstrap](https://git ## References -- [CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.](http://www.pipeline.com/~hbaker1/CheneyMTA.html), by Henry Baker -- [CHICKEN Scheme](http://www.call-cc.org/) -- [CHICKEN Scheme - Internals](https://wiki.call-cc.org/Internals) -- [Chibi Scheme](https://github.com/ashinn/chibi-scheme) -- [Compiling Scheme to C with closure conversion](http://matt.might.net/articles/compiling-scheme-to-c/), by Matt Might -- [Lisp in Small Pieces](http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html), by Christian Queinnec -- [R5RS Scheme Specification](http://www.schemers.org/Documents/Standards/R5RS/HTML/) -- [R7RS Scheme Specification](http://trac.sacrideo.us/wg/wiki) -- [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html), by Harold Abelson and Gerald Jay Sussman -- [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf), by Marc Feeley +1. [CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.](http://www.pipeline.com/~hbaker1/CheneyMTA.html), by Henry Baker +2. [CHICKEN Scheme](http://www.call-cc.org/) +3. [CHICKEN Scheme - Internals](https://wiki.call-cc.org/Internals) +4. [Chibi Scheme](https://github.com/ashinn/chibi-scheme) +5. [Compiling Scheme to C with closure conversion](http://matt.might.net/articles/compiling-scheme-to-c/), by Matt Might +6. [Lisp in Small Pieces](http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html), by Christian Queinnec +7. [R5RS Scheme Specification](http://www.schemers.org/Documents/Standards/R5RS/HTML/) +8. [R7RS Scheme Specification](http://trac.sacrideo.us/wg/wiki) +9. [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html), by Harold Abelson and Gerald Jay Sussman +10. [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf), by Marc Feeley +11. [The Development of Chez Scheme](https://www.cs.indiana.edu/~dyb/pubs/hocs.pdf), by R. Kent Dybvig + From 893578e31baac3486d7ef3cb18466fc0176edd19 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 2 Jan 2017 18:56:11 -0500 Subject: [PATCH 11/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index d8f855c9..9012ae45 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -208,19 +208,21 @@ More details are available in a separate [Garbage Collector](Garbage-collector.m ### Heap Data Structures -TODO: code from Chibi scheme +Cyclone allocates heap data one page at a time. Each page is several megabytes in size and can store multiple Scheme objects. Cyclone will start with a small initial page size (say 2 MB) and gradually allocate larger pages using the Fibonnaci Sequence until reaching a maximum size (say 16 MB). + +Each page contains a linked list of free objects that is used to find the next available slot for an allocation. An entry on the free list will be split if it is larger than necessary for an allocation; the remaining space will remain in the free list for the next allocation. + +Cyclone allocates smaller objects in fixed size heaps to minimize allocation time and prevent heap fragmentation. + +The heap data structures and associated algorithms are based on code from Chibi scheme. + TODO: not really related to this paper, but can allocation speedup for Cyclone be ported back to Chibi? Should look into that ## C Runtime The C runtime supports compiled Scheme programs by providing a set of primitive functions called into by the compiled code and functions for various supporting features such as call history, exception handling, and garbage collection. -yes, find that paper from Dybvig about writing Chez scheme, about how they made the runtime nice and fast. same applies here as well - -here it is: -https://www.cs.indiana.edu/~dyb/pubs/hocs.pdf - -The "money" quote is: +An interesting observation from R. Kent Dybvig that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: > My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. @@ -236,10 +238,14 @@ Cyclone attempts to support multithreading in an efficient way that minimizes th Most Scheme data types are represented as allocated "objects" that contain a tag to identify the object type. For example: +TODO: update this, maybe whole section + typedef struct {tag_type tag; double value;} double_type; ### Value Types +TODO: revise this whole section: + On the other hand, some data types can be represented using 30 bits or less and can be stored as value types using a technique from Lisp in Small Pieces. On many machines, addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): > The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. From 82782b6b28f06ad8ea03b1012d7a0f83323a21c4 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 20:33:52 -0500 Subject: [PATCH 12/93] Revised first section --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 9012ae45..ced16ca2 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -2,11 +2,11 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. This version includes everything that has happened since then and attempts to provide a constructive background on how Cyclone was written. +This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sort for everything that has happened in the last year and half. Again, this write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. -Before we get started, I want to say **Thank You** to everyone that has contributed to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code from the community was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. +Before we get started, I want to say **Thank You** to all of the contributors to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. -In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Maybe if there is greater interest from the community some of this work can be ported back to that project. +In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Maybe if there is an interest from the community some of this work can be ported back to that project. ## Table of Contents From a3debd82b52cd32679c9ab3537ecfa7136258af6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 23:47:57 -0500 Subject: [PATCH 13/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index ced16ca2..a07a65ef 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -220,7 +220,7 @@ TODO: not really related to this paper, but can allocation speedup for Cyclone b ## C Runtime -The C runtime supports compiled Scheme programs by providing a set of primitive functions called into by the compiled code and functions for various supporting features such as call history, exception handling, and garbage collection. +The C runtime provides supporting features to compiled Scheme programs including a set of primitive functions, call history, exception handling, and garbage collection. An interesting observation from R. Kent Dybvig that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: @@ -236,29 +236,30 @@ Cyclone attempts to support multithreading in an efficient way that minimizes th ### Objects -Most Scheme data types are represented as allocated "objects" that contain a tag to identify the object type. For example: +Most Scheme data types are represented as heap/stack allocated objects that contain a tag to identify the object type. For example: -TODO: update this, maybe whole section + typedef struct { + gc_header_type hdr; + tag_type tag; + object pair_car; + object pair_cdr; + } pair_type; - typedef struct {tag_type tag; double value;} double_type; +The `gc_header_type` field contains marking information for the garbage collector. ### Value Types -TODO: revise this whole section: +On the other hand, some data types can be represented using 30 bits or less and can be stored as value types. Cyclone uses this technique to store characters and integers. The nice thing about value types is they do not have to be garbage collected because no extra data is allocated for them. -On the other hand, some data types can be represented using 30 bits or less and can be stored as value types using a technique from Lisp in Small Pieces. On many machines, addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): +Value types are stored using a technique from Lisp in Small Pieces. On many machines addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): > The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. -Due to the tag field, all Cyclone objects will have (at least) 4-byte alignment. - -Cyclone uses this technique to store characters. The nice thing about value types is they do not have to be garbage collected because no extra data is allocated for them. - ## Interpreter The [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) was used as a starting point for `eval`. -TODO: explain analysis phase, and how this is a nice speedup +The interpreter itself is straightforward but there is nice speed up to be had by separating syntactic analysis from execution. It would be interesting see what kind of performance improvements could be obtained by compiling to VM bytecodes or even using a JIT compiler. ## Scheme Standards From c7563d394cd8a87d1273af3b28ca726431f58bff Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 23:50:37 -0500 Subject: [PATCH 14/93] WIP --- ...iting-the-Cyclone-Scheme-Compiler-Revision-1.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index a07a65ef..5eb2abc9 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -263,16 +263,18 @@ The interpreter itself is straightforward but there is nice speed up to be had b ## Scheme Standards -Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library (C module) support is the most important but there are also exceptions, system interfaces, and a more consistent API. +Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library support is the most important new feature but there are also exceptions, system interfaces, and a more consistent API. ## Future -- Implement more of r7rs-large, have started on data structures -- implement more libraries (industria??) -- way to support eggs or other libraries? is that even worth the effort? -- benchmark +Some items to consider in the future are: -Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could be applied to Cyclone. +- Implement more of r7rs-large, have started on data structures +- Implement more libraries (TODO: industria for r7rs??) +- Way to support eggs or other existing libraries? Is that possible or even worth the effort? +- Additional optimizations + + Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could still be applied to Cyclone. ## Conclusion From d1f604475e717880dbd6ae301b79a6883c7f139c Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:04:44 -0500 Subject: [PATCH 15/93] Updated pic --- docs/images/cyclone-contribs.png | Bin 10070 -> 18590 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/cyclone-contribs.png b/docs/images/cyclone-contribs.png index 8dfc0b448bb60f5724e0d321216c6803e520e69b..7a4b1a9abb8372bb8e6d6e29fdb3fa498d9b5d12 100644 GIT binary patch literal 18590 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 literal 10070 zcmeHtcTm&W_h=ABQ3TfpQe_oTM2a9tN3kPCI?@SEx|D!m0xT+`0yaRptkMz)gh-7c zAOcc@Qj!pgf}w;!fRF?TAwO_8toxn!-n@A;znS-D-XAIFb3gZf~ z?gjt=d#_!+Xbu4IGB^Hr@8a9|juKnc*!bZIF~4#F0Phx`-T=0Hoi{!Y03ee0thw&k zfcb;2+JyiBf=!zrp4Px3_l<`~LND2dS_FEAhPwuP0D@d^2ZSmHc!VBRQ&d(|QB~u$ zj|2c@TdrL^ZyDhO_g}-Q zxu&fz8nrB4c{bsgiOGHy_i{liv!A1HR_=xg9C@0*oBt=+zOoW_ViWv}i~kS)KO_x& z5ixvj>>lYbGKF|>ELlT101`Q7V&XYRS?%^m;u&*;r@anq-=RGbW7dp!Bu@?dKn`a*c&T|>hASH?QoY`w!;A)K`}fz3A> z&daBjG-1mO+guc^8q`0aC)ZoDiC{(2s8=)7OpKbtF$0r-T6}}q^4~^{FY5BC zX0c)Hr|j{Gp)L?2U3*k#&W(sVRgIs06HPvBqoh5B(LB6~1Hk+JZ`mCE37(kzKL($6 zQR~;**#4~W6^)}0bDiT~G}=OAHdj@a70!(g=FpljwIn6|b_}n|+M3oYffn-}+c!pI zR8|Tzqeo?!6W=k;kjG+09e=ZIusK)ciM|db(wLIiH3n(OWOCu+ z9fK447(tmhgeA|WI9wDI(v@VH5A#>N|M(Xve5s#U3FwvCCMsz>b{|*2+cu^&h^#H) zgwE7*`kf)iq=fFz|E->Vn`E>!Kvqp;m{n2rkvjW6{)@mksetIyFQb~k%>SUAH>GdV zudO~(&@AOw5}wteFwv>kz}=}7*d&kDzd}*5_WN|F|KR{?dF|y5@{>MV4D??z=u7c0 zNMq4P=YE95%Kv+WO>4DC?-6D*zB3nV4G#Uvs{z^a3^kK;?_};C%YPZbyUtW1%zdP_ zAhL*Sc?O&OUnL;27dNo~2aZ=(gp>MSnE0|J9`W&CE$3ZHyUB`XCdsB1ki@m~4M8qV z3MJlaSk)=oB+R$Q}6iFop_zV5)@=x{n?`s>DA=kJwW><6Fl8Ac0 zp~62pHejw-u~~}gOzmuS);mcdK#!kUUzt(z%~qaYF@~1;(d1Z}k%EA4QS0(W@{;SU zo05A@{6g&1K%N~di`^ypHfIkY;*@*gTGrlOML-^pU#J;|e*MjZAqjw{Z^&%s%b7mJ zqhG`}Wu4-fosQla<8uMRr?erve+`;^M(3>^Rt1RLfHHff8RB6IZ=U{R4{x-kJFaj@ zy$+JRfccNs=ZaU6yEhp9#h4AkFL=FP9*zQ>qhO;^FT=bJ`9b5&{?TSk0RBu=f1?6& zjdbO%0>Holo$(fO>DL7`AoR4+&w`#ui1$n-_5k)VRU! z3L0PV_7|m(>a98H?KB8!hc^OkGlT#cP*ua8ofmd(>F}v@$`QlM@K})DA8 z=FT3%rBoI*7KE=b4eNTaoMsww*AMU-DoeI*B44s3am_Slp(1_x*>LSFg7QX4t!(b0 zsU{qIry@n7Bx~EpenQ8)M=3Xp+W#Tp&>7#{O_xdDaWtoHz^#0tw+8Q$So*m<#JBn~ zqHNo~g5p>U_0yNEwp1fh*ki}~-E(K`MBfU(j+B^wV*H@c1GH(3^7>iJopHWJ+(6Qx z=w~fA_rpD~lF(cgjtkI?O6XDw7<$VT2hcZzQpE!F4?@%%P2GoyQak1h8a^mi zV^J0tDo*^Kxhi}PUYxxcQZ;xJEok=RZ{fHI*PG611e|q7q1YUKw06jonfQ;RJbhm- z#k_7`A@QtrA+9XsKDJBoF=lmlbzVu^lM0slUlH&5S7f&VMxAp00hKz30^vg4(i( zScFB{jvrh{q>h=N!pl&TS!Ovo@`3Ir+a^8A#D^Dy*4g13a)>G;+&FlPV2{#=?BTqZ-y|CTc3Rk6=A}CGt$Pt zZnuiFFIa?H)XM5NxNsn~HX7w8WuU++RyZpv(UH0g!|?<;P?W62dq1_9=H@^~(#e8f zT0MKBm&=?xCi{Oo)9XDdp>Dce&^Nen?RQV=&6dCIsDUwzg59lGh@Mjna7s=0r^1KE z`o;Bo4z*~lkIGZ57Wz!)v;f6^7xkD#@?%N zQ%Hh>XuK7s0O*=~MMcJ*qi4iyxnIlM>1<$#pEB=#-^fFWN}erjeBhi?bnOeQn3!0n z8P)kV^rcitw6f}>m;vkP!bhX%_s43(la4` z`okI%q;D#j;)8DWCSUT_vk}PXQZ`-CB58$pJe`klmHXBs14K(Pq!X{O9KIi_8Mc?3+n;`}JBPYr0Jj zw9M(d#cd-;NQ>BB5~fs%b5LINhJBc5>9~}zFH)DDb46t^TJrUMOHz<(VgV3zK7*U)ak32tTd7>TC9a|rE);eg^~cv*4>RQk>2)p*&d^=^enyN z;3|(tR4MjWoSb@@$d?vY^-#-AN6pbs;lLkzmzBdD1*;^)%wU-gNivOPs=m$#gE?S} zQ&0-)U6PPmUVEj=I}kcq&vY29p)ASup>5y_J2|U_!}&UHJ{V~>N-5e04IKK^Y1Vsn zUd75-p-J#2$P{GJMiSw>l?j!D34-vzJ{s_j(ZNBpFc0iAzSng%d%v^-#Df1>k-s?0 z!v2MKwiXAX>?@-1#U{B7=#6AtI==k+&jQa!hDC%ZSUfaz5LThp6`g3QmhCNNG@rRn zF;1~pjxm#F!iDmUsXnT@QeaULZXA!*!wZ;QZJo5e((ct-9d)eqO9erc6>ftxVQ6_I z=BE_49eFL?Jt+JjOT$F~T5{DVqo23=j5sXbEx#@#N~|rW(g>mD_8rWO``6wi+0w`-wSBIDLyINhxLH{2BqoIk06nW`!AoZ& zCE9bXwzsrv)ssa<4)|itMayT#)f3e1wBL@%?fW?BL1$|fP>F`CaNrS_xPR6aZOaWF zchHcwIs^+-I}Mkl`XXJSNO7F#;IpVjmhGzj&b_}6deUS3-3XJVN3CY^`sl-rLSGnu zkvQ{Jipq_!13&aw<%UH-3(=vAG;VObh!X4)xe+F-y0i{AEC~ThMEJTWNDE3Rdjsv# ztr+CW3xueX#A8R@j{?2Ti6XyEm&<%v-*163sdKuJ-tLnj`>tH4e~{mb(MLzCiB4DO zT^x>VUp+y_JBnP8Fmm=B{0C9Hd|vTzH83F}ld1c#oc3qC?G-WoF1I+5fk%UW?+`>m zb5ltLev4eGeKUCZ)E+ApL`%k1$*-4n2j3&$@5-?`1jA3>ZZGo7e4|fu8%X8xz^zfc~z$EX_(VkLDPE0LsBo-k;?OXaS5E}wxn{tzvcM#61_mq1yjT^%R_DR9{vv$eq{(fT9Cyj;7fkPQt z?ub|`x~RYC*YzXnuVL+v7HHga!fa6n#n_br`HYksSh4UBJllK(1y_y}$}c6}^HW!o zwUZbFc-lP7a7pq%hBnObX;lvJ?~DxBEXVzT#>v{U-nJ+Fve+&=d7ne6S}nHXD5)w_ z_1=PZai7PkAV&liRHPa=Wtv&NVrwq4nk_bi9<~y=!+`j}im%S!EGTX4QN)BB-g=P> zTy)LgvMPQm^IG}iPOaOHO5kb}ldCd=tzQe^@02sGs)Hp5y%$9gO9wAG_MMW3K}))A zT3^4&s{~qz`$;zj<~q)RSV@)FWFN5LrJeqzZisOx&aY{o+)X^w?Vt6JRbH&?xQun` zh-RNL%%Xc=m^ymJnLHw@^6ASD6;amiw0gp1W?;}1vYYZu3*i{HNI}DJOu~2{tXRrU}ghUud7GSdr)$U{HK5UH7)v}p>oSQOIp1=0PKl6T(DFR<_5DQW4j$a zR+DO;_uu=-osltgN}|GgPqM#*Y%$xEt$|M8zsmSNqa7cCe|bilO|>M_R&R{enY@FQ zP_DV|L+&xGyWLlBa8MY~ z;#!eJ>*cwA-|Dsz8(hMBw3A(h8vWu|98;-bX+h$MXcWiL?$UEDu_4$hSoCWd3co@< zBOQSBms~7CPcIJKuNNoxnx1WB{%vDHH=slD1O{6r3}h_TF_n8(zBml-w$sL3?9)|8 z%F#{{+dp&Urd42ZgDxJ^6|U47o0EcJF6JdOgPx=OoDlNgQ54}v28;79kN@SSUqCKC_7#Sx!O+Vqu&*X&3>tL(L6}+^9IuOOG^Eof!R4 z_O*NO?f&b+Tb8^B2Iv{VZTm|xpo*EiwbB4U?YJXbl~=i=ovI$7XF zwYYWUc34iNP%*5|HPkr_;=G0TNzc2A#G6&Jmu-MMB`KQLh`}8bQoUNujt-$Gtv+4% zCh07(8a8$VC-S|g369v4@ZGmhHBR0#GR5JFEAK$XEi@`k!X;8)X&|n*ul_+^mNqZp z%%TSR8XgY2y>SA5Zc$%wVed<^5I>VoTG=x4OP__6aX(u0rBCfl;zt|!JzU4Lsxj5I zJgI2T>kwr%>6DOm*g}o3o*IQFpJ&?Bj zk^Lj_oHcohICMNQk-KLC&Eyb**)ldI$Ul=Dae3*WD6|%}cJ8y!bBWfZLMJ(^=A@Y%SHmBR0`NuzyAeuOmQ7ph6U~n%Lw*+1HF#+!MSJ09@fT@Yk=Hb z`I|^zsRDU!(N^w@UW=kK%53qA@mW#fru~a`*;Ex-M#1&wPd9FIS_WdoeP3AssrdmC z2kOr7j{}Y9LNYPdJBud2mFw-lryU)?dd=E&>FiVwqruGk&nsXJL2%cI&8#6F*lvwG z`@GjO{kTy&R}{s*KKvGxW^b%Tt5K}uHv~1RBms@!IYiHSLVoJ==Mk%Ji|Z{By8YMY z?UItSz{v`2N{Xa>!6cj18$>Vrtc&H?`fdZC{`x<%o#|^;@3ZlfPzIui+VVD;zWhnXJnjBp1!}4yYBU`@xK^Qk^qL6&|WUabmP_T28QRheAs`y zAfU1p2ITR6D08$b&sERX4P0FDqhWB(@YD%G{@G*wj+gALY!cALFMgPfCYsuedH`{D z6qiC>Y%rjAsr|WD+#iPA+T#X3adh>=)9$jUF4D3i@=0BLRJFT&XsGffk7H#(Eo$)$ z@cxI}79t9}ug#afJ@Y_|@2c@sn7Ar`4yE~9Bx5pJbt;1^ z!IQqe?~(1^y|xE*qMX$;s2JxbduzAdjuWMnTkRnurcB!tuVnwm?6aJv^nBUzuyl3? zpATOok&+QecH{+}E~1UR$}3x)8B?9w%I{A4(j;YOf{5m4IYze= zyDeWhumlQHdxY)sEp?bJe2_li7b&r4i&zW!f*O_ayhaPL8%UG#NWqxzEUp8pW=)E^YD7X>7UG!_f){GOHGka!#56IaT)bzQ_01)a#{IUQ5fok0cp;0d0dOs?BI2g3iTrnA18*9;h+$#R3i9Fy0xa-?XJTCwcTKMFe1osfg zTKJEeQ>kQO@k@R{JpNHY8YVWd>_dtfZ})g{zWn<4AV{v;O$s3K8Lm-WzlA(KG z=jABPux&hV_Ey=wl%X&VoK*+7@bWar@&NCMoioF3^e_#Weh0b>(#ZczPur*@u{rVG zL;Cvq8;b(~LC@M{X1KNgaw(y?$OT3Yi;j*IzwmxxM@vu;q%bZ-cW>6@!nk;{)MSL{ zIqYX{4IiI2JDg&lH5jn+S4C$`WtU;IYCzWL^fw1n-pRXb=UT^GHFNm7Rkx1hZaPH~ zEr~R3iL9C1-*h$?+<2+C;qK*b?xFYT&O_LmJO2x;j~3pH9nt8fh6ce4V`(~&tnm%f zHqaf>`2$P^WPS&K95A*QW)x=q>M6sHLy8lQt^%WO+lA&JkKS^ zRk1(ZnWR~S2Ul>4u}_5NI;{1ppj|$51I*Pxk(}1#G*)h;?j0m8F>0t;YPhR;D0`6U z2AY6Vt5B^Y^{Ajp*n`ZwxTW!~2bt7l#OnO%B-guwF-2Qz)7w^rXH|asB z19ladZZ{?5`GF&yV*{VFN{3b`?lub_Wck$eZb$elR|rPCUjD3~tPXr%(~j9wJr@j_ z3-IaQ_ckYf=7Dw;bE;V%oh8O%W)k8au=EKSXU}D4cz+pDJ3Kq=f|HwS^@n=m-re|G zjBPF|z1dVafIWRXoH9FHY43?!nOhOoP*VNGVB2M*E*;h$)I8r&MX1#d!P%kjVRBF; z+1!)z_vAn$vP>bI-NzayYPaj1R4HCs5b1CSb56xK*K1OPwHyn&E36*^qfu6?B6Z6q zZ>ROn4=NJxI@EUQ1>orLoG$F!y<;Au57HWk(nBD-KaI8P zQZ}U4IkXb5WM^0r=3L=U4W)n2f3Ddjn%kN-`Ep2ZqVmAaoS|rNBsFy<{CjV{y~9Yo zuAo*p#_92q4}sa|#j-M;@7+V*;LtxzL{|%5U@&K2%EZ`RIW{8_U@f;%n#I`fo%hRb zU9n=I%k7#<#v=leDD2#L^BAcTNllg!3Kv*f>h_$%4k+=eF=zT`?lKN+*RRF2?QdxA z_XpJ@BXzY~h;|TxX8%<262FEP>w&Jt#(v(}MMX%4E<}Gh4M%(5v7zd;Q76MwPUwe29U;191dM;Me^n&s%nWDk8NC%bL*(00QrflZ!bH_%Gw%*a z_9~ig?YviG6167YKGH^lw|x)WS1nep6E#^Mk-g&u>(d9&?@7m*cC8B@*Q(jfr-WFZ z8car7_mJ>`6$h0G4jTfVP}Eyp(5`lJs7Yq9BP^6CUfZ28`lCs4aP)D~6B@h3xBzdb zqaL!+2S;dA%c4*9@rpcF$Qz|5JhQK_K6G~Hpoe~rbKxdWr8dbjOr^Fz_pa(VWP4mY z3JZt~k0wpXs4}6BiUYX7nYkMb$8%9k5~_+3;7?bdT|CI$#vgr0J{+SAcbsuRcF89Y zNQIQq4LuK&3gxQVs~=ETyg>^KsP2!x&6nhU=TZNvJsQ5hlol~D0w&bWrU}j6lkFa# z&DTabplBpI71I}&{AT9hX#urW>C6j5p3#ptTJgB~YOu(L zgMc~`+3XIGeh8!oH0PR}b-;Ve2x9a^Xxpm<=e>xs{JBzZ^l-(Z`pgNYAci4+3ev0?NQ@>$+x=jHzNTJJR0JGC^W z4#Lpq#B+oLGUfHuF;c2C25?4l*9@KNw3B_e)@p9{^f?x(MrgxSUa-`_I7Q;OAqeLs zAstm-M=+g3RuSR8M7ilML{ILdeRxV`sS>j*w}wC6{Kd5CX{Xf4A zRbq7LuPY!QNRzz?_i}z{&rgoNJ;=R+la4bs|LdYvOz|RZLiY2~pJP|!1valr0AfP_ gJ04ipL@#p$t%mME_|TiT<^b0&nOuZlaQWlE0BSvvKL7v# From 7657d334c52542d7e49267772899aa84123ac351 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:06:35 -0500 Subject: [PATCH 16/93] WIP --- docs/images/cyclone-contribs.png | Bin 18590 -> 15841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/cyclone-contribs.png b/docs/images/cyclone-contribs.png index 7a4b1a9abb8372bb8e6d6e29fdb3fa498d9b5d12..2cbbd3dabf1426cf3b06ce520ac3fe22f3b2756a 100644 GIT binary patch literal 15841 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 PGT`({%M*FWU2gv`tM4Fi literal 18590 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 From e530c42ee54afea6372c6013bc26d714a6e501da Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:11:55 -0500 Subject: [PATCH 17/93] Explain graphs --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 5eb2abc9..5a07f076 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -198,13 +198,15 @@ Baker's technique uses a copying collector for both the minor and major generati To that end, Cyclone supports uses a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. The DLG algorithm was selected in part because many state-of-the-art collectors are built on top of DLG such as Chicken, Clover, and Schism. So this may allow for enhancements down the road. -TODO: - Under Cyclone's runtime each thread contains its own stack that is used for private thread allocations. Thread stacks are managed independently using Cheney on the MTA. Each object that survives one of these minor collections is copied from the stack to a newly-allocated slot on the heap. Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. -More details are available in a separate [Garbage Collector](Garbage-collector.md) document. +It took a long time to research and plan out all of this before it could be implemented. There is a nice lull in Github contributions during that time: + + + +Anyway, more details are available in a separate [Garbage Collector](Garbage-collector.md) document. ### Heap Data Structures From 8a3392971a97ef5218724774f0468402e3a22743 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:16:37 -0500 Subject: [PATCH 18/93] Fix link --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 5a07f076..12a6f440 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -206,7 +206,7 @@ It took a long time to research and plan out all of this before it could be impl -Anyway, more details are available in a separate [Garbage Collector](Garbage-collector.md) document. +Anyway, more details are available in a separate [Garbage Collector](Garbage-Collector.md) document. ### Heap Data Structures From 6d0e6d674524717dc2965361e96fa9924d29e041 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:17:26 -0500 Subject: [PATCH 19/93] Add cyclone logo to top --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 12a6f440..f9a98e2b 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -1,3 +1,5 @@ +[cyclone-scheme](http://github.com/justinethier/cyclone) + # Writing the Cyclone Scheme Compiler (Revision 1) ###### by [Justin Ethier](https://github.com/justinethier) From cb04b86347e049de73873362d54d5fff266238a5 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:18:15 -0500 Subject: [PATCH 20/93] Added TODO --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index f9a98e2b..29fbc2b8 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -12,6 +12,8 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) ## Table of Contents +TODO: sync all of this up with the sections (subsections?) below + - [Overview](#overview) - [Source-to-Source Transformations](#source-to-source-transformations) - [C Code Generation](#c-code-generation) From f67737f8d4db03dc2dddef63de4ebff6ad3c7fbd Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 00:23:34 -0500 Subject: [PATCH 21/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 29fbc2b8..eec68de1 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -218,7 +218,7 @@ Cyclone allocates heap data one page at a time. Each page is several megabytes i Each page contains a linked list of free objects that is used to find the next available slot for an allocation. An entry on the free list will be split if it is larger than necessary for an allocation; the remaining space will remain in the free list for the next allocation. -Cyclone allocates smaller objects in fixed size heaps to minimize allocation time and prevent heap fragmentation. +Cyclone allocates smaller objects in fixed size heaps to minimize allocation time and prevent heap fragmentation. The runtime also remembers the last page of the heap that was able to allocate memory, greatly reducing allocation time on larger heaps. The heap data structures and associated algorithms are based on code from Chibi scheme. From a473beeb76aee0f2d888f7a58b4e184ae59dc470 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 04:10:12 -0500 Subject: [PATCH 22/93] Added more sections, revised as needed --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 54 +++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index eec68de1..7ccf6b4d 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -4,7 +4,7 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sort for everything that has happened in the last year and half. Again, this write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. +This write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. It is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sort for everything that has happened in the last year and half. Before we get started, I want to say **Thank You** to all of the contributors to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. @@ -226,21 +226,17 @@ TODO: not really related to this paper, but can allocation speedup for Cyclone b ## C Runtime +### Overview + The C runtime provides supporting features to compiled Scheme programs including a set of primitive functions, call history, exception handling, and garbage collection. An interesting observation from R. Kent Dybvig that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: > My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. -## Native Thread Support +### Data Types -A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. - -Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. - -## Data Types - -### Objects +#### Objects Most Scheme data types are represented as heap/stack allocated objects that contain a tag to identify the object type. For example: @@ -253,7 +249,7 @@ Most Scheme data types are represented as heap/stack allocated objects that cont The `gc_header_type` field contains marking information for the garbage collector. -### Value Types +#### Value Types On the other hand, some data types can be represented using 30 bits or less and can be stored as value types. Cyclone uses this technique to store characters and integers. The nice thing about value types is they do not have to be garbage collected because no extra data is allocated for them. @@ -261,12 +257,48 @@ Value types are stored using a technique from Lisp in Small Pieces. On many mach > The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. +### Thread Data Parameter + +At runtime Cyclone passes the current continuation, number of arguments, and a thread data parameter to each compiled C function. The continuation and arguments are used by the application code to call into its next function with a result. Thread data is a structure that contains all of the necessary information to perform collections, including: + +- Thread state +- Stack boundaries +- Jump buffer +- List of mutated objects detected by the minor GC write barrier +- Major GC parameters - mark buffer, last read/write, etc (see next sections) +- Call history buffer +- Exception handler stack + +Each thread has its own instance of the thread data structure and its own stack (assigned by the C runtime/compiler). + +### Call History + +Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer consists of an array of pointers-to-strings and the compiler generates calls to `Cyc_st_add` to perform runtime updates. This function needs to be fast as this function is called all the time! So it does the bare minimum and adds a call by updating the pointer at the current buffer index and incrementing that index. + +### Exception Handling + +A family of `Cyc_rt_raise` functions is provided to allow an exception to be raised for the current thread. These functions gather the required arguments and use `apply` to call the thread's current exception handler. The handler is part of the thread data parameter, so any functions that raise an exception must receive that parameter. + +## Native Thread Support + +A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. + +Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. + +## Reader + +Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either discarded - if it is whitespace, part of a comment, etc - or added to the current token. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. + +The full implementation is written in Scheme and located in the `(scheme read)` library. + ## Interpreter -The [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) was used as a starting point for `eval`. +The `eval` function is written in Scheme, using code from the [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) as a starting point. The interpreter itself is straightforward but there is nice speed up to be had by separating syntactic analysis from execution. It would be interesting see what kind of performance improvements could be obtained by compiling to VM bytecodes or even using a JIT compiler. +The interpreter's full implementation is available in the `(scheme eval)` library, and the `icyc` executable is provided for convenient access to a REPL. + ## Scheme Standards Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library support is the most important new feature but there are also exceptions, system interfaces, and a more consistent API. From 0452310d22d0d60d3688643a88f6cd1d779c1790 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 04:11:38 -0500 Subject: [PATCH 23/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 7ccf6b4d..30fe1687 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -206,7 +206,7 @@ Under Cyclone's runtime each thread contains its own stack that is used for priv Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. -It took a long time to research and plan out all of this before it could be implemented. There is a nice lull in Github contributions during that time: +It took a long time to research and plan out all of this before it could be implemented. There was a noticeable lull in Github contributions during that time: From 65e50708060eaf55fb34d5c74be115db684de160 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 04:20:22 -0500 Subject: [PATCH 24/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 30fe1687..32a64f13 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -37,6 +37,12 @@ First, an input file containing Scheme code is received on the command line and The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. +## Reader + +Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either discarded - if it is whitespace, part of a comment, etc - or added to the current token. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. + +The full implementation is written in Scheme and located in the `(scheme read)` library. + ## Source-to-Source Transformations ### Overview @@ -153,7 +159,17 @@ To more efficiently identify optimizations Cyclone first makes a code pass to bu In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. After optimizations are complete, the lambdas are converted back into regular S-expressions. -## C Code Generation +## Closure Conversion + +TODO: briefly explain concept, flat closures (EG: vector) + +TODO: need to wrap any mutable variables in cells before closure conversion can happen! + +TODO: short example?? + +## C Back-End + +### Code Generation The compiler's code generation phase takes a single pass over the transformed Scheme code and outputs C code to the current output port (usually a `.c` file). @@ -161,6 +177,10 @@ During this phase C code is sometimes saved for later use instead of being outpu The C code is carefully generated so that a Scheme library (`.sld` file) is compiled into a C module. Functions and variables exported from the library become C globals in the generated code. +### Compilation + +The C compiler is invoked to generate machine code for the Scheme module, and to also create an executable if a Scheme program is being compiled. + ## Garbage Collector ### Background: Cheney on the MTA @@ -285,12 +305,6 @@ A multithreading API is provided based on [SRFI 18](http://justinethier.github.i Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. -## Reader - -Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either discarded - if it is whitespace, part of a comment, etc - or added to the current token. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. - -The full implementation is written in Scheme and located in the `(scheme read)` library. - ## Interpreter The `eval` function is written in Scheme, using code from the [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) as a starting point. From 0c6b78c1c7c494abbe71aa3303e329b67a3759cb Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 17:26:03 -0500 Subject: [PATCH 25/93] Fixup table of contents --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 32a64f13..adfa3645 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -12,16 +12,28 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) ## Table of Contents -TODO: sync all of this up with the sections (subsections?) below - - [Overview](#overview) +- [Reader](#reader) - [Source-to-Source Transformations](#source-to-source-transformations) -- [C Code Generation](#c-code-generation) + - [Basic Pattern of Many Small Passes](#basic-pattern-of-many-small-passes) + - [Macro Expansion](#macro-expansion) + - [CPS Conversion](#cps-conversion) + - [CPS Optimizations](#cps-optimizations) + - [Closure Conversion](#closure-conversion) +- [C Back-End](c-back-end) + - [Code Generation](#code-generation) + - [Compilation](#compilation) - [Garbage Collector](#garbage-collector) + - [Background: Cheney on the MTA](#background-cheney-on-the-mta) + - [Cyclone's Hybrid Collector](#cyclones-hybrid-collector) + - [Heap Data Structures](#heap-data-structures) - [C Runtime](#c-runtime) -- [Data Types](#data-types) + - [Data Types](#data-types) + - [Thread Data Parameter](#thread-data-parameter) + - [Call History](#call-history) + - [Exception Handling](#exception-handling) +- [Native Thread Support](#native-thread-support) - [Interpreter](#interpreter) -- [Macros](#macros) - [Scheme Standards](#scheme-standards) - [Future](#future) - [Conclusion](#conclusion) @@ -77,7 +89,7 @@ To overcome these difficulties a series of source-to-source transformations are The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. -### Many Small Passes +### Basic Pattern of Many Small Passes Most of the transformations follow a similar pattern. A single function is used to recursively examine all of the code's AST, examining each piece of code within an expression. This is efficient as long as each sub-expression is only visited a single time. @@ -159,7 +171,7 @@ To more efficiently identify optimizations Cyclone first makes a code pass to bu In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. After optimizations are complete, the lambdas are converted back into regular S-expressions. -## Closure Conversion +### Closure Conversion TODO: briefly explain concept, flat closures (EG: vector) From 0f65631cdf680afa3c1ec7131e7b342001085b14 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 18:57:53 -0500 Subject: [PATCH 26/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index adfa3645..90c28d11 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -13,14 +13,13 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) ## Table of Contents - [Overview](#overview) -- [Reader](#reader) - [Source-to-Source Transformations](#source-to-source-transformations) - [Basic Pattern of Many Small Passes](#basic-pattern-of-many-small-passes) - [Macro Expansion](#macro-expansion) - [CPS Conversion](#cps-conversion) - [CPS Optimizations](#cps-optimizations) - [Closure Conversion](#closure-conversion) -- [C Back-End](c-back-end) +- [C Back-End](#c-back-end) - [Code Generation](#code-generation) - [Compilation](#compilation) - [Garbage Collector](#garbage-collector) @@ -33,6 +32,7 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) - [Call History](#call-history) - [Exception Handling](#exception-handling) - [Native Thread Support](#native-thread-support) +- [Reader](#reader) - [Interpreter](#interpreter) - [Scheme Standards](#scheme-standards) - [Future](#future) @@ -49,12 +49,6 @@ First, an input file containing Scheme code is received on the command line and The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. -## Reader - -Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either discarded - if it is whitespace, part of a comment, etc - or added to the current token. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. - -The full implementation is written in Scheme and located in the `(scheme read)` library. - ## Source-to-Source Transformations ### Overview @@ -91,9 +85,9 @@ The 90-minute compiler ultimately compiles the code down to a single function an ### Basic Pattern of Many Small Passes -Most of the transformations follow a similar pattern. A single function is used to recursively examine all of the code's AST, examining each piece of code within an expression. This is efficient as long as each sub-expression is only visited a single time. +To make Cyclone easier to maintain a separate pass is made for each transformation. This allows Cyclone's code to be as simple as possible and minimizes dependencies so there is less chance of changes to one transformation breaking the code for another. -This is a short example that searches for free variables. The point is not to show exactly what is going on here, but rather to present the pattern used by each of the transformations: +Most of the transformations follow a similar pattern of recursively examining an expression. This is efficient as long as each sub-expression is only visited a single time. Here is a short example that searches for free variables. The point is not to show exactly what is going on here, but rather to present the pattern used by each of the transformations: (define (search exp) (cond @@ -246,7 +240,7 @@ Anyway, more details are available in a separate [Garbage Collector](Garbage-Col ### Heap Data Structures -Cyclone allocates heap data one page at a time. Each page is several megabytes in size and can store multiple Scheme objects. Cyclone will start with a small initial page size (say 2 MB) and gradually allocate larger pages using the Fibonnaci Sequence until reaching a maximum size (say 16 MB). +Cyclone allocates heap data one page at a time. Each page is several megabytes in size and can store multiple Scheme objects. Cyclone will start with a small initial page size and gradually allocate larger pages using the Fibonnaci Sequence until reaching a maximum size. Each page contains a linked list of free objects that is used to find the next available slot for an allocation. An entry on the free list will be split if it is larger than necessary for an allocation; the remaining space will remain in the free list for the next allocation. @@ -317,6 +311,12 @@ A multithreading API is provided based on [SRFI 18](http://justinethier.github.i Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. +## Reader + +Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either added to the current token or discarded if it is whitespace, part of a comment, etc. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. + +The full implementation is written in Scheme and located in the `(scheme read)` library. + ## Interpreter The `eval` function is written in Scheme, using code from the [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) as a starting point. From 27538b454c7f9a5a43ca868138c01c783b05b9b0 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 19:01:24 -0500 Subject: [PATCH 27/93] Added TODO --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 90c28d11..0af4149b 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -109,6 +109,8 @@ Most of the transformations follow a similar pattern of recursively examining an ((app? exp) (reduce union (map search exp) '())) (else (error "unknown expression: " exp)))) +TODO: mention nanopass, which seems to be a better approach but is R6RS so not really an option for this project :( + ### Macro Expansion Macro expansion is one of the first transformations. Any macros the compiler knows about are loaded as functions into a macro environment, and a single pass is made over the code. When the compiler finds a macro the code is expanded by calling the macro. The compiler then inspects the resulting code again in case the macro expanded into another macro. From c143f74341a2c44f97f2df340f22d88045c7a59e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 3 Jan 2017 19:03:26 -0500 Subject: [PATCH 28/93] Added more TODO's --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 0af4149b..5005497c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -301,10 +301,14 @@ Each thread has its own instance of the thread data structure and its own stack ### Call History +TODO: this is kind of a mess, need to rewrite this paragraph: + Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer consists of an array of pointers-to-strings and the compiler generates calls to `Cyc_st_add` to perform runtime updates. This function needs to be fast as this function is called all the time! So it does the bare minimum and adds a call by updating the pointer at the current buffer index and incrementing that index. ### Exception Handling +TODO: revise this paragraph? + A family of `Cyc_rt_raise` functions is provided to allow an exception to be raised for the current thread. These functions gather the required arguments and use `apply` to call the thread's current exception handler. The handler is part of the thread data parameter, so any functions that raise an exception must receive that parameter. ## Native Thread Support From 43f5049649ff8c33fb119e7ef433a18bbc85ae9a Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 16:48:29 -0500 Subject: [PATCH 29/93] Update for 2017 --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 4 +++- scheme/cyclone/common.sld | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 5005497c..3fcd4ced 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -1,6 +1,8 @@ [cyclone-scheme](http://github.com/justinethier/cyclone) -# Writing the Cyclone Scheme Compiler (Revision 1) +# Writing the Cyclone Scheme Compiler + +## Revised for 2017 ###### by [Justin Ethier](https://github.com/justinethier) diff --git a/scheme/cyclone/common.sld b/scheme/cyclone/common.sld index 450648eb..0c608de9 100644 --- a/scheme/cyclone/common.sld +++ b/scheme/cyclone/common.sld @@ -29,7 +29,7 @@ @@ @@ Cyclone Scheme->C compiler ,@ http://justinethier.github.io/cyclone/ '@ - .@ (c) 2014-2016 Justin Ethier + .@ (c) 2014-2017 Justin Ethier @@ #@ Version " *version* " `@@@#@@@. #@@@@@ From b2fceeeaa87d4561e19d2a97826b4a751bf01fd9 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 21:07:48 -0500 Subject: [PATCH 30/93] Added TODO's --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 5005497c..520ce1fa 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -236,8 +236,11 @@ Heap objects are not relocated, making it easier for the runtime to support nati It took a long time to research and plan out all of this before it could be implemented. There was a noticeable lull in Github contributions during that time: +TODO: get rid of top graph +TODO: create a development section with 7 phases of compiler dev + Anyway, more details are available in a separate [Garbage Collector](Garbage-Collector.md) document. ### Heap Data Structures @@ -339,6 +342,8 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus Some items to consider in the future are: +TODO: gambit GC (parallel with multiple collector threads) + - Implement more of r7rs-large, have started on data structures - Implement more libraries (TODO: industria for r7rs??) - Way to support eggs or other existing libraries? Is that possible or even worth the effort? From cfef93fd2a872a0003082530b95c874180357b01 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 22:38:16 -0500 Subject: [PATCH 31/93] Updated image --- docs/images/cyclone-contribs.png | Bin 15841 -> 3703 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/cyclone-contribs.png b/docs/images/cyclone-contribs.png index 2cbbd3dabf1426cf3b06ce520ac3fe22f3b2756a..357ff3f1002cfd01ce1ecd798409800ae40ed175 100644 GIT binary patch literal 3703 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 arMD*w5dd&!i@@J8;HHVSagCv8%0B^Ta1$5+ literal 15841 zcmeHuX)P!tYU+Owbi{ND4P5AQi&&If-t_r0cTUF(1SuWPM!dGDO1 z`Nj=9Hvj;Dji*nYxBvjGVgLXu0@ke+f6=MBk|%zw2)~(o?cxwG^tA(%%9W_KG8&1O_E^b|v_t36uo5hb2t1GL;kGVv-6#&3Z;fs^vmuKMr z(;~8wkY5Xy0}J_k#qDqGFAO>YrtH-~o1Kyn_u8Vdv$KVMdNsslziBC@1YpGMSKCe0uHFBXq%KJd0GN2Q+)~SK>P4Av$4WqR-u0@y zy&7JHYgf$uxyI^geUipMD((pWw|O+!1;ph`1DYTFYP;({N|LDIEY_>_vId+B`%VXc zSD<5Sq@($j29J#^XMPv!HCbbE0sda`@X)`_BL&|p?WzQLrtqunG28zniK=}S08o^( zycSg+?-GX!JtYB0E8fhOClsaB?OZ)_M$Y7#raj>w6}=kl{;ttO-bAJMMu4OGzuHFU z|0hYT2$BE2b^MPDo`U~ZjoNd*`3Ej^h87eTIF2`bb)In2(xYJ1n$o-WYxZ`iaqByU zz3KF6v#(9tQrn!*%U z=FT3%OxPhJY<)WM!l6b5myIUj(=l=$Vq{Lhz_snPX$z7XRS1UuG$Ref>fgt-{*ZVsaCr zs=XX?BaZLRT!TFl{2z_zf5Mz^xG)97WN(~uHtLwdzX0sVQue)d1{pceYhgq*vW=)b z86=JTWy3P>BaCAp0Db{~f(gQ`=1egH@?KJIo%}^E60SsG$Ml+;+V^gPHZuC1c_b^0 z1o9VuEV01bl!mpOsZk{2kN;e3`$3U&-By1q+Vk&i7l~ne1%rYR9J7__2zK54%P`-i zaYENI0QY;eFb;oImsh-RAuKK3in$+TAzsjD%Fk{ zU&@zF+5M0}FlH_4niM5gtsVM1b1YKKP3_Y8i3#0TRwpSiu2G8lFNR!XS1~r;rlf}i zm%Sbdr#MNlf6ePBr@Az_y@JVo$$mZzgef)rgVwj_AbLcgjU)JOj|9DcDjXtD%0#c3 zc{5&o2=!~)OZ6#ZWRgOcBtcg-g&Tr7K=o{0}caL7BCKYU$y&^!awI%WC<+#{X^H@7xS8p65a_*{YB5dZIzI zxhsI)dM?IWyY=ortiv-!IL7jdSZOyHv!&0YH8q5~4f>GMD>L@X(0-bUj){e(=745x z2Mo|W@7?uMtml8}?WZH(fi4Yq2%S#RE)n-;A)W(g(JGk|kY6BKtSR>7Ihmu452e~x ze>_sgH>|&NPVN_mRlYmes+~hmoJY-q0c9`2U3&Fe{`t%7_tS)&H?n6|lC3H|nQIP( zdM~UVx(0%A4B%F;mhtLhLcbo=z}^6tDcJU%p<}Z~H}MasJ_e|K;wD4H2>e9{+vCQ) z)RRfX$Dk6mAK`(HB3t<3+@YjBVvkYyI{_zcy8)T+> zD;H=mkyENC8j3qvMc-thU+Bcgs<))J~*;75q7Aju@)L2QXQ zY>+Zl03O}#e<7I&&QUXSw8b?$5Kw7xG<$F5Wo~15Z)CNU2eGk);TvK?eU2o|7 zARPkyQ!gH6k}tz4)-JyKNi5Q`9b&V?O^+wrJQdGc%uZPdu7cMZn}4@>(o&t4b6pz-wz62*;-3UbaTpPRE9I#z^wC-e^>RTqD> zB6yZpt^aKTiOdKzrT8xF{8Q4~2S&PHk@pl~_)?8;tE$0OgBtOeb~1WMxXYVv5b`iSe6XPskG)i=K+p|A~-$a$Rsv zZqr>=(rcM)p8?A$yxWU2ROz%AKbPa3rsBqEFzLK64Ry{bmQ&q7C2QP89<3Z@h3kCG=R7nsiT zMt&&HL(jUCODo@=b=sCzdU;&P{~4jMT&Lff$dwg1cy*ZS;GNtSL+*w63Mucdug^P2 z!r}9C&iiWS6leufcu(Wv`%Z*?q$XEsjc-ZXZr46hO3yFv6Y6JD)#kRR%jl>{?o-BD|dPMjR*D>uC_r~5`l z=V|CSbKV{}p96{m3c2IKjhRhXW1ELSW&WwnCwkbp-EdKPX_>=gq^HNSf{hL!)h;8*_=ntpa!__&v<=PZUT$&JbM)rUiiSTs!; zz3g->nI=n|=wJ+e=H%z^qkHrfC7%5rD`&yrzNl6-&R{c2GOZ(6zTiIcf#WOK`Oh@J5F{I(jd10Pp_6^cE0D~P?8xJBiddsG2ui16Ibsgre`>0j9*ko`o@JN89~9I z(U=3b-Q|tDuV!|JzI@QEOv@T4#{CBJ=DY~K{9_Lq60qZ4euBZ1go*L~99;68KDKjX za?-5Yj=;0`Qm@wp0+SG_dw1wGDP66u%-|Ibgvoa*?{0~Cz5mjZ%lkOpIH^b(^HYp& zXEjc)V;K2#klnpG`!xg}_|bbo>d0`>%kX6PHcR7X&+mKTGbNY%=^f9T%K3V_^<$%x z(Y=t)LrijIl{s~Ws8L~CgI%IdyF7z}*G_@X#jX|{_%T!9kt8qY(&864nbr}YJe{D(I z*K|M*D0*{vTi}i%rE=O!+t3bLjlnPFr9nIqzSY-bLk<@a;;L)we5g%(=-CnJJ=o({9XRm8({8KHx#9h~ zeo}jxJ_l>gX;yL|1-JW`g8YYrhCUL9Um9LDE!8nnyDhe|CZALCdtx<{;HzJW*vX=d z_DH@A8K*oCXURi_FZq}N;oymR0T?W-)lK=czABNCH`-Xe$Hg*Wot%6XeWk7a?kIKB zKJSgQABsnz?ycLUtz`Ys2#)rh;Qg6NNkMLkmmIiz7mNv!tJkoXGi~NIzDm+a zTCiV8f=e!OBtK{KujpWqWD!Cq|>q{*f@T#=Y)EFvzf+|*yBsP zvWJ7Ox)M#k_1@Df>R3gP@@sI^UmX=?cND{6P6`ih%&ycY7&0JQF-?29))uP-=d{d1 zUGD-b-LI&uG|sl8&Qxn=yM6^GPyW#+ueSZ=60qA^XA(L-uWI2oerWnqlnuE{l=a&& zH`S~+sn9&M39mh?B1DM}Y#g!H#sMW?D{jANi*hL(M4mNn>WuItQx&-<(YiGiM@zE&ZDk_btdimShYK8Q>bw=h20ZdkQ_d*n z3%ac!J@s4U)e1@O)Mj&ONLEwf*!z^W+LS2Amy!h}Lxw>2t7q@YkB*@dwhn-XPNmxh z{$2=n`D>^7aUJuGj!SgR7%H08D7d9jA>q=iCSZg<1Ns4_8uu9YI)efWtM00&ct3|O z>N;h?vgWkcOsqLBEaug^4nKcX;L5JrZCudp_G_f=fnV2&xsKD-gf~19! zLTpHNLHpWrBi_=m!#9ygk-ykq8J)hgO<0^Xo@1FL=Jxvz@S zZ}mH`ZNnJ*1e~IV|8^#=3mqECcs>w3vSd0Ast_4!edoIm(#AfxJV-m=rWopu_5?Hc zZ|Kd5ZEBe(r;|=skC(?kRIV1`Z-5vi5nH6~NN~K{Khr_@OaMjO%C);A9s!}_Nf2LP z{TpRylIxTHz@Ekm#}atPL9TwzAtP;WeFu&7%9=m!>bS}${rpDvrzMyrdb;7LTehX- zWBzbU(dW#{kz;zH%G#^-gh_F@DoYGr{c~vAeh-Y#2%XskYPpt{ul2Gnjq|!-esT^h zWLMWwsGjxD-ca(Dli-g6_sf&%!8K9E6iErwHX9TY64YII{A+nUbNo3igP?iI0#SF> zx(I&D|8Y|em8IX7>hZctvq}2cGEkn6u2oib>=39wf8hFv?UeE0Ax0y5U4|nkD)&=s zbE2*isPv8ezF0SOzOv~%{EZ6BJ+CmWsh}LDc>Hbc1HY9&SUA{YM}_wPW@a#$6qtZd za8qfiDLbPef9mpqSC-^LpMjN*m9=l+LQlv%=XKr59LW6q@+Q4hb7;L~YsLfQRd!59 zU2A#!yVkNT3dUdczyYlXl|9}(b=ZH;1w)kJG|Ez|JAtrW{=?SBQQgK(O26e)p)k<& z5{)EpPJqvs)AE9Q;nb6rUZG&H+%FkV=A9x0CdQN&CJ}ji+*TQk#yftMFEeN!dYlho zxaJwZdDq+>>hX@P&X_ywADGP>XHy?(bX65?YwxNA{DF8nspd{>Gn}>mRtnx1_#Ul6 z%KK1$AE{g5WQr~EOqkAb-*F87=9-m{I>uTCd$Az5wj9l!jMW~m70iRoKZ5*r)IxJC zRUI7+>YSX-yYy`x*8GcX&=92XYn=|%jMZCEjdYsf2iODG`=y=JV&7~_HVVE$5BA1o zm8pkO3;e+Ya+zxiDR#A+hOjmo<%oMouMUBZbfAOb>tvv%rMzK*VkSZJ*^zC#`(Fgd zEFNbk8F<%s0_(QFA20VQZ|d42cwhdcugJ1o&n#5^Y3AkS&_5^d0lKF>kOK4c zeH^DnHUlv?l|iJ&E_yre&|h7p#BQ>a`7D`!r`LKb`zxMe+qS7XB86vJ#`xOu!HrJ8 z7Q^l6$5$z^?@21EDlrGbly60aZap!NNZ%~2`Z`!EeVrj29o>+b!%iwEGFb2?C(770 zqvy{zS{O46;YaN=-Q6q3g6t>lm+UM@Q+j`geD-Vp^CKI_S!4%}Y@C6C{z7-QqlUAD zH|IE(?alnM#}#R5|;LAlv>VSI;d5MLTcW)Rj^4USM)x`_4+A zOneJUT9Cy4xvy)=gh=-5HXhM+T+4agVkSo}`wRIe!@Gkv@On3DM5+D;f63|FbQI>D zrIziTFhXCl#Fbh{UstrH1G+iy@~jG?yp!MkHS0O?>9)7*=fmlD`mCogDkAr}CqrVK z?tXn3Y<(`S|4pz{(W$$()I)U8?FfThb}dkz+Gdhj_tf_ChK1C z$IYMIN^Of94W8W}jK3P$r0u+r>r`|Xf&rptJ>TK)SugA;(TgQfJ|#^we*hg(DA*#u zD!uakRC>r}WA%sv4a;fD&YreQ&d1;f6?RTM|2AiT*#*VCkeYcf`FCLrp=2;)nZ6%G zHvi^suA=(Hb(`Ln&cm>04@3#G@5zN8;$iqZO035n1AO?f?bB(TvuW6xJI(xX%t#=U z?XmOfzJzEzu`h5%UhZb^Y)7f9*Z0?sx0A?1O|yLlaobTNXB(=Lk+xaLPW&*1@oFic zu-@i;dt7p*U%ZlKOgzETEG*!&A>(2WwW4=uikE-gRmm3qIlSP$^nJb9>Wb2)O=-GM zeU)?g!7mw#?Kwa1;T){}XV&E8=H^#jCo)8nlejMwZ7p$2`M?#sjE8g1obx{A=0Sc= z95=;eM?K}wLp0x#z0-t$oaFMGmyTFU-!uqrwNfwJ%H({hP)2xjd0Gd>H-I@;AKe(} zez-ec@)Wx}OhXftTfMb=yXPSR{*kuZ5dz!y>-E+1?Fn5wALmOgGsQu6tt-d#U9j@! z3L#k^_2s6?R#wGS2dy_&d|Qfr6Mp-_v!;h9*ZD=T%L-6i?g=`j0{6q0t!aNA!9#7E zt%luHTAMRXWOeP7^6l*}Y1}EEo%l+^)_U`WLN+N8OHXsEIiPv4b^S9McmfY**K)p-bx?5>py}_wzf|#=(SL%$GGP z@tzl;A1q7)o>Y%4YxQJQqWop&)L?2hy`(-a6fZv35jy>jUBwu~x>nyd%JDTyhV9fG zP!&E`HH2wOxIH1K@j5=QXE9SGRjP-wTV8bWJ?|whD>y##kt;`IFE-8@$QS79@^%k> zu8o`zI$Qr-6Nk0jO7@McFhlcLj~u|ZTzMqzE61zdq4O7Q+^eZ zEfhfs$i`GFZ)LFK;+S6`wixr(^9Tg9E%6Xy7D-c-oZY>0u8g8-6{VvIgUgHW>~8X6 zICqq0uwdZ4=;uk~J298#}x-lATQGK?dc&?t2&Gou%i3U9GsDvIHZXXh&LV(SS!UVbBBE{u&Er zgo*17xBzkb4Cv1mapBb9C5sU!X}ld>ihvjMKP+vQ_N$Be8|BMVZL^A3P#BJ%NMHC? z&@wL9*5s@fIzU@I9B$063*LSoPyO7IN*>}`3bzwsoDr|UvTjRCx>`DIza}l>Lgi_+ z4XuSfG!$Bp2&(C;jJVX@ZiL7e>gR1U#z~LiLUHn`iI{^u;=6T2{_8KQP@H@lp(Osn zCvGJPIy_=r6kackNKr(Y_csjWF0da?fN2Nv{FEnA1K!VZ2&c#r47fy@0n5@gP!{o* zF78=T3m{@yIKRiRC@?cDh;RF2(&j2RALB`|-1f@IvJg^Ox``7qF}h!tYC{z|mHF#w z%0qchR-r-xju&5%Tp#_e$7YnRsyb<}kIWu*zi26a`O|PoyaK99txXig>ghqobp`Dh z*VB^ck<_Ala?;%@<`cRRK)A)M2;aqynoVzSSN8{j_|i(PJGRyiJlaIHu_?n5D+{c< z+u?yX-pw~6-FP)#1>pm%^@7W_1H~=;uzB|ad^(P{P^%w5VXu`SB>iCgj##_j1?0)% zMN^X}=jP_pn~>EJisLw%y45884Q1AiF*Fb@8}}-}S&h&{ek^*DzBo1GE9SK_8v^eH zz_RCgGvE5_9=NePC;N{LLjpz9mjiv~h|lB;9ylQ`jb4MnOG-;2*bpnY(t*pG*)+#=}k^W3KXKP zuXES_CO z?I1}ef!H#@8ef+k?D-6axZjvi8y+yx6gmqmBUn>=5zrBH;sEQkE08cckWuwRkpmC# zI!-h#O%-$`X+Ly}eM^qJ2uGX?W=~TDPsT1goM1W zd-u7{6w91`Cd(+5ib<9q?a$a|+%?!_LLj?ybncT0#-rLArks`z%sRtJbs;d^M0%dZ zPod9u|)6gkk`~Ez5R2ZZbi=heUpLsJo-#x5aU`}q8S7m_Fu&R0Vx-cSAjVmw1 zdpD?80mRebi03K^aU6qp-3AW00Q6s7b3+1GsMLqkwFB+?0S;;)lyd3<^HX9)ko|lm zR;;bOa@QVK*bQ`Vr9*evgiD`*q&9NT11qXcwI*IyO zVL|hnZK9AaQZQ>*`-Cq>t%OzWN}b8(viLFiLi*)E)`(m8tsg{?aHQ$eUD?uTwWyYy z$T-y-kE0iQ8*_t(FXkE>+8!`xjKm~HXC}r)%aT(L&(f)6dZ&Mud2$oHiWnF~nQMrE z1q^-bi>@8$3o7B~O#{UjVA-V(RF%iHICnuzo!}Dsj24%q*4A@5oE~KW&MWt~V%Q&!eMmS!>ZDWqZ;A^(8{PU_$mm)W&e>?fuC3g+{RS> z_*z^&$E3r%R#>qJkyq8>dHU$TM4bNmo5sS_)*=OTLNmd<}sQw+H?lkciBm7Hn za6zeZFy@UbJm`7Y)h+=XFs&-90ZzJtP9`gG6scw>BS3$k5VhFW)PRLH$* zugPm^lg>VH2?M(^Eh-O-3^q~;iqN_()0Lr`t%P!?Ijk*aB$nZZk>787!x9Eq8|Et8 z(Z11#p%0r9YHPV=3ALu|p}Ji9bj^(almeNo5ZC2#E!1*uwtn*mlnM$3tg?%eLDyFC zV+I1tCNZ=gP{w4seG~hxgss zt8lZ|I@U%|qO`o9+Xiv2Dxfc9sn?a_x9psyBpC6F!SZ3D_~pM98~pc%nrER9XB8F`PJH^%Uk0 zr1;lS#FstdM>D2qabh#78jF)yIQ@UMNOhLm6@Uz=nq3R9E%c_KAIJ61he-jjq@t92 zvT^zWy#RpHJ@){P_}hKcD-9pkS6hJ>Rs%v#*h<`F{ej#e&Z8_B?+4z7Ws&cTQ#pIK zP*=EAesMDs7yGYg01i1_(-tSR9xV|EtJ`r!DVwP)p4p4T-uvQQSaDicvxc~Rjhcp+ zxOgN<+7%gJY7y_DAe~v>n#7d3>q#peoilIzZjbf>iMI|C5I0z78@nhI0=VKtZ zly0sNOS?E3FI`vQU$+*ry`5j;R^7}K%e^?Q!*BAPIz@QVWfzHOHa~~FuYrwQH_oaY z=K%73m%eFZtriw#<^gVc{#1`wgDY^|_^Nc-%$8rEXcJ;BVr#w)>V;$w{NRNx0Z87h4Ty_W-V@E_dD0yHHJg;kV+g$#NA2 ztHmEsbaJ`>70`HzXKQ{=U>#%Q<6AxH^cA)-OMOHHPi~dT--CwRP2!ksUk2~kE)PCi zcG2XhgcHbk!`HxS$|m0Ca6y}hd&=QNBex}YZkCczYdwyy|0r6Nz&dcQlB^%e+tCST)0>1DCf&Jnq#!V*GHD zN?D3WuXnmvNxw5$Orf@TAqHfxvOap%exM*Iw>tc>Sa@A=V)Xk6fm@h2w`2u2GiB{e zZ5-)I!x82;vw&60t*R6Qzg$-~&d+lbapP!C2gT__RxR+p6!F3zm0iTM*7*i^#H{*) z@s3O=IY-rbtIQ-#Yce@hS(F!ML!~WDGU)x$(Vfvf*<_wdrF87EqZF|%{A}Cip)3&V zAED;XF67VEtCH(W21ztwGQD2Hc`FP&AwCA~K2R0OBJf9hnDMw!<-bIERnl|6Kf_px zQ?#F+65AY6ArPN6&h*4O$vMLb_K|`XCl)yx7f(~7@-UH?Be}(+vQlsHTIR+Q!~@G3 znmj@ID}4OJ4L%Ldv15^Yd4r_-d?C44P|K~_uN=vlUJ#ka?W^t%5IVA)5kh>3irLQ* zpX_s85c}Wg647k#jK}r;Tv3}SkKfOVo(b@ligGsT={XRp3{(?BrbXJ$@De_Eik0k4 zcGvPk%hbyY8dZce@EM+6+C&^u)b_csAt8N{HWtl(2Ft6aR6O|1^E@ZQ^69BcgcMTcNwTw2&wAm}ZWqnTwW88? zL#zdJ6Q)YJb87lY*@%WLb;Zqni%i7qpdj?h9$nbGrfeTtT|_2rg9I1)cs0S_*H+4YMZvh5rHot+b9i% zp0Kx7URJVe5ZmxsUOV#%s#j(C;|jqnWgkXWkOmmal!;!#;oQ_hDMykx{x&AHW+Q6( zYkYIPbf(ZKW~ zT-W1s*TwwxLj}%oZB%P>n5|y{bDHgw^Q&Lrhh~1MX$ax$&Hks|9Sib^KmFUVYnKJ* z=xsjP-DKV zf$r|R(sDE7XH0v{m+c^Zlk46jN5a`#GCRha{#xqSsCItdo2=q5Ob?%Uc(0;7VBx)E zkD=Hj{V<;NvoVkAHqDC3ynaW`2`!`SWi1V#CGita2UL_z-2c??5JDVD6Eot^MrP8{ z6|U3RtYk{}=k%K8sXeigl0?sxDjcL7R9h7hi5fV5i3^OwFRw;RJVxXjG>{7h&0CZ^ zxtv484?Jtxxujo6((Z^J)ccCE$r<&RejlLPRf(~sEqcqvMw@}mVNs-x3Lk}HN=~Ue zMpEd4AOJOJDIb*N@mNC3k>&2z zP7H%nXYO0ZwVJ=e98s96&=u%^m>L^5^scKSrS%Wu>k4HXb}UmWWP1|dkvY01{!IsR z^+i?3{Eq}wMrwlwiX`d}*oV#<= zd$J|fD`W`|+{H&C=44)LTi_e_F3N0>Cu{7V<)aG6q{DS?oHv=Mra;bu z(XuI`(d;1m_PL@kr(7odfHaSrx!TId0@ce8K7?H2!P%iM@vemrV%y zVT0!TZ&d*r8Mro9N30f1|E3?Y0uf{O)DpEk|nyZ=AH~E zI7$@@!*be7Zxom6+Yux(l?eVM=AE8+u}WeURJK)omK06$JU@b+9eRL5CmCFmbS8M+ zZRZ{hT7{J2XCHnjE>dQ%!cOs_LDyhV_x`qb?{w1cU)o>Y9RlnohKSe2R9z6vZ0q># z8%>xmp|9Ab_X(m~u@P8V-hNK-C_Jp#fg6y+iDoXa>+b$}hTJoZ7o=9#CIG=)sEzk~ z0bA#5?c4zjY_x@LhYfZm2LH5WEX)=GPM&Xe#X*&+YO3X`>2Irg)T&QGdWUa8!6$I7 zS@hoe0mvs$wg88;B77RWteLtls+M|2efZOK6mRN}z|meNidg%?8@|&>8n&H8gkJNq zopRmuBzz;JQUgt^xZuDaInUChic=#D$FqQham2w@v(#F0TPttYrOTkoV$?3ci#JwN z2V{&2M_=TF@Fe4LJCY4G!7uuE`3vPsRCXnfb6Tcfm7JJ)Wp$a(DbdtLmQIAbYB0nb z*3A2q*e=c+hJv?R(LD$eI`a#e^no)f+hnX#qT!pUCHrpa!Xm$Z^4zIkHaGIwirlLz zAFtM$!P*RRgOeYQmr#&h_M0zxDQl4@Z5`#?fBj0aBNO4N@X5m`baP zyc8L6EmNu&tk`XESQ%zFYDeRj@{JHt2Eka@qB70nK!=NIi0k)!xL`+ zpFpG;Evb(hsnW5|B=u-=H9hmeh(+gqO?V_{=hL^9;8tBsYhV$APnQ>#b0bjpC z0%ePG|MXTr zy(OwjYA|tkC768YajxuSNaO2IeWCgOZXJ$>4x!9=T94YQ9@mBW$I<7MfeagPRmeGT z#H4`tspNsq4N!%nuf-4vqg4XzGCLgT`fZ?k(8kC)FB-;7?iau$)711pv*p-@bK_B4 zdACc?b%R3Be-qIAUpRrF1DU)Q=*t*R)6eZJo(g0j!vuw4H;Sd?W5+|yUA7kuRQKIF zx$LS`cq0R&iaa*C=5a+Fuq5QTt%|OzQs+;A{10!F|9|)Yc82gIfV7|od;|a_4RqkW z2X`BQHCF)`8XD-|EO*imf&uvsfsZO96xRZ3_Wr*(fcf8?13AYd*rHYQ=pfqe9&)O< PGT`({%M*FWU2gv`tM4Fi From 451a2bbabb90bb74defeb54986289c451a773467 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 22:40:04 -0500 Subject: [PATCH 32/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 520ce1fa..93a5729c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -236,10 +236,17 @@ Heap objects are not relocated, making it easier for the runtime to support nati It took a long time to research and plan out all of this before it could be implemented. There was a noticeable lull in Github contributions during that time: -TODO: get rid of top graph TODO: create a development section with 7 phases of compiler dev +Phase 1 (gc-dev) - Add gc.h, make sure it compiles. +Phase 2 (gc-dev2) - Change how strings are allocated, to clean up the code and be compatible with a new GC algorithm. +Phase 3 (gc-dev3) - Change from using a Cheney-style copying collector to a naive mark&sweep algorithm. +Phase 4 (gc-dev4) - Integrating new tracing GC algorithm, added new thread data argument to runtime. +Phase 5 (gc-dev5) - Require pthreads library, stand cyclone back up using new GC algorithm. +Phase 6 (gc-dev6) - Multiple mutators (application threads) +Phase 7 (TBD) - Sharing of variables between threads (ideally without limitation, but that might not be realistic) + Anyway, more details are available in a separate [Garbage Collector](Garbage-Collector.md) document. From 14d62f57b02092d45c7a4d4c8c62e8bb6d29cf15 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 00:32:29 -0500 Subject: [PATCH 33/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 93a5729c..0662f6ff 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -311,9 +311,7 @@ Each thread has its own instance of the thread data structure and its own stack ### Call History -TODO: this is kind of a mess, need to rewrite this paragraph: - -Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer consists of an array of pointers-to-strings and the compiler generates calls to `Cyc_st_add` to perform runtime updates. This function needs to be fast as this function is called all the time! So it does the bare minimum and adds a call by updating the pointer at the current buffer index and incrementing that index. +Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer itself consists of an array of pointers-to-strings. Cyclone generates calls to runtime function `Cyc_st_add` as part of the compiled code to populate the buffer. This function must be fast as it is called all the time! So it does the bare minimum: update the pointer at the current buffer index and increment the index. ### Exception Handling From c770a21645da2c87b360a716f1550dc5899be70d Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 02:31:56 -0500 Subject: [PATCH 34/93] cleanup --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 0662f6ff..fc8ff271 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -301,9 +301,9 @@ At runtime Cyclone passes the current continuation, number of arguments, and a t - Thread state - Stack boundaries -- Jump buffer +- Cheney on the MTA jump buffer - List of mutated objects detected by the minor GC write barrier -- Major GC parameters - mark buffer, last read/write, etc (see next sections) +- Parameters for major GC - Call history buffer - Exception handler stack From 2d7c9ae0aa841b776ad379c7ace59585a1e125aa Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 02:36:52 -0500 Subject: [PATCH 35/93] Mention nanopass --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index fc8ff271..a9c3b6b1 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -109,7 +109,7 @@ Most of the transformations follow a similar pattern of recursively examining an ((app? exp) (reduce union (map search exp) '())) (else (error "unknown expression: " exp)))) -TODO: mention nanopass, which seems to be a better approach but is R6RS so not really an option for this project :( +The [Nanopass Framework](https://github.com/nanopass/nanopass-framework-scheme) was created to make it easier to write this type of code. Unfortunately Nanopass is written in R6RS and could not be used for this project. ### Macro Expansion From a56a32d02a4626ec4679a1d8fdd165ef2b345c01 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 02:42:05 -0500 Subject: [PATCH 36/93] Revisions --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index a9c3b6b1..56cf7ddd 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -87,7 +87,7 @@ The 90-minute compiler ultimately compiles the code down to a single function an To make Cyclone easier to maintain a separate pass is made for each transformation. This allows Cyclone's code to be as simple as possible and minimizes dependencies so there is less chance of changes to one transformation breaking the code for another. -Most of the transformations follow a similar pattern of recursively examining an expression. This is efficient as long as each sub-expression is only visited a single time. Here is a short example that searches for free variables. The point is not to show exactly what is going on here, but rather to present the pattern used by each of the transformations: +Most of the transformations follow a similar pattern of recursively examining an expression, which is efficient as long as each sub-expression is only visited a single time. Here is a short example that demonstrates the code structure: (define (search exp) (cond From ca5b0c8e80e6b2ea3ec7f8c29c0a27799042832e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:13:03 -0500 Subject: [PATCH 37/93] Revisions --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 56cf7ddd..7081949b 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -228,7 +228,7 @@ Here is a snippet demonstrating how C functions may be written using Baker's app Baker's technique uses a copying collector for both the minor and major generations of collection. One of the drawbacks of using a copying collector for major GC is that it relocates all the live objects during collection. This is problematic for supporting native threads because an object can be relocated at any time, invalidating any references to the object. To prevent this either all threads must be stopped while major GC is running or a read barrier must be used each time an object is accessed. Both options add a potentially significant overhead so instead Cyclone uses another type of collector for the second generation. -To that end, Cyclone supports uses a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. The DLG algorithm was selected in part because many state-of-the-art collectors are built on top of DLG such as Chicken, Clover, and Schism. So this may allow for enhancements down the road. +To that end, Cyclone supports uses a tri-color tracing collector based on the Doligez-Leroy-Gonthier (DLG) algorithm for major collections. The DLG algorithm was selected in part because many state-of-the-art collectors are built on top of DLG such as Chicken, Clover, and Schism. So this may allow for further enhancements down the road. Under Cyclone's runtime each thread contains its own stack that is used for private thread allocations. Thread stacks are managed independently using Cheney on the MTA. Each object that survives one of these minor collections is copied from the stack to a newly-allocated slot on the heap. @@ -238,17 +238,17 @@ It took a long time to research and plan out all of this before it could be impl -TODO: create a development section with 7 phases of compiler dev -Phase 1 (gc-dev) - Add gc.h, make sure it compiles. -Phase 2 (gc-dev2) - Change how strings are allocated, to clean up the code and be compatible with a new GC algorithm. -Phase 3 (gc-dev3) - Change from using a Cheney-style copying collector to a naive mark&sweep algorithm. -Phase 4 (gc-dev4) - Integrating new tracing GC algorithm, added new thread data argument to runtime. -Phase 5 (gc-dev5) - Require pthreads library, stand cyclone back up using new GC algorithm. -Phase 6 (gc-dev6) - Multiple mutators (application threads) -Phase 7 (TBD) - Sharing of variables between threads (ideally without limitation, but that might not be realistic) +The actual development consisted of several distinct phases: +- Phase - Started with a runtime using a basic Cheney-style copying collector. +- Phase 1 - Added new definitions via `gc.h` and make sure everything compiles. +- Phase 2 - Changed how strings are allocated to clean up the code and be compatible with the new GC algorithm. This was mainly just an exercise in cleaning up cruft in the old Cyclone implementation. +- Phase 3 - Changed from using a Cheney-style copying collector to a naive mark&sweep algorithm. The new algorithm was based on code from Chibi Scheme, so it was already debugged and a solid foundation for future work. +- Phase 4 - Integrated a new tracing GC algorithm but do not activate it yet. Added a new thread data argument to all of the necessary runtime functions. +- Phase 5 - Required the pthreads library, and stood Cyclone back up using new GC algorithm. +- Phase 6 - Added SRFI 18 to support multiple application threads. -Anyway, more details are available in a separate [Garbage Collector](Garbage-Collector.md) document. +More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. ### Heap Data Structures From 6736f5513718a2d235837f10522bd5f00d0b0547 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:15:55 -0500 Subject: [PATCH 38/93] Added new subsection --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 7081949b..9ccd6694 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -25,6 +25,7 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) - [Garbage Collector](#garbage-collector) - [Background: Cheney on the MTA](#background-cheney-on-the-mta) - [Cyclone's Hybrid Collector](#cyclones-hybrid-collector) + - [Developing the New Collector](#developing-the-new-collector) - [Heap Data Structures](#heap-data-structures) - [C Runtime](#c-runtime) - [Data Types](#data-types) @@ -234,7 +235,11 @@ Under Cyclone's runtime each thread contains its own stack that is used for priv Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. -It took a long time to research and plan out all of this before it could be implemented. There was a noticeable lull in Github contributions during that time: +More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. + +### Developing the New Collector + +It took a long time to research and plan out the new GC before it could be implemented. There was a noticeable lull in Github contributions during that time: @@ -248,8 +253,6 @@ The actual development consisted of several distinct phases: - Phase 5 - Required the pthreads library, and stood Cyclone back up using new GC algorithm. - Phase 6 - Added SRFI 18 to support multiple application threads. -More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. - ### Heap Data Structures Cyclone allocates heap data one page at a time. Each page is several megabytes in size and can store multiple Scheme objects. Cyclone will start with a small initial page size and gradually allocate larger pages using the Fibonnaci Sequence until reaching a maximum size. From c988950feccc8c63b8bcb6d9a8af734d0e0dc909 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:16:31 -0500 Subject: [PATCH 39/93] Start at 0 --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 9ccd6694..eb204f9f 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -245,7 +245,7 @@ It took a long time to research and plan out the new GC before it could be imple The actual development consisted of several distinct phases: -- Phase - Started with a runtime using a basic Cheney-style copying collector. +- Phase 0 - Started with a runtime using a basic Cheney-style copying collector. - Phase 1 - Added new definitions via `gc.h` and make sure everything compiles. - Phase 2 - Changed how strings are allocated to clean up the code and be compatible with the new GC algorithm. This was mainly just an exercise in cleaning up cruft in the old Cyclone implementation. - Phase 3 - Changed from using a Cheney-style copying collector to a naive mark&sweep algorithm. The new algorithm was based on code from Chibi Scheme, so it was already debugged and a solid foundation for future work. From 341881ef03abe876287cb65489e99fa1d35910f8 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:18:24 -0500 Subject: [PATCH 40/93] Revisions --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index eb204f9f..055489e7 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -246,11 +246,11 @@ It took a long time to research and plan out the new GC before it could be imple The actual development consisted of several distinct phases: - Phase 0 - Started with a runtime using a basic Cheney-style copying collector. -- Phase 1 - Added new definitions via `gc.h` and make sure everything compiles. +- Phase 1 - Added new definitions via `gc.h` and made sure everything compiles. - Phase 2 - Changed how strings are allocated to clean up the code and be compatible with the new GC algorithm. This was mainly just an exercise in cleaning up cruft in the old Cyclone implementation. -- Phase 3 - Changed from using a Cheney-style copying collector to a naive mark&sweep algorithm. The new algorithm was based on code from Chibi Scheme, so it was already debugged and a solid foundation for future work. +- Phase 3 - Changed from using a Cheney-style copying collector to a naive mark-and-sweep algorithm. The new algorithm was based on code from Chibi Scheme, so it was already debugged and a solid foundation for future work. - Phase 4 - Integrated a new tracing GC algorithm but do not activate it yet. Added a new thread data argument to all of the necessary runtime functions. -- Phase 5 - Required the pthreads library, and stood Cyclone back up using new GC algorithm. +- Phase 5 - Required the pthreads library, and stood Cyclone back up using the new GC algorithm for the first time. - Phase 6 - Added SRFI 18 to support multiple application threads. ### Heap Data Structures From 62aba2798c12ed1605e82e288310f854e5b6e490 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:19:52 -0500 Subject: [PATCH 41/93] Relocated paragraph --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 055489e7..3d71cfa0 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -8,8 +8,6 @@ This write-up is an attempt to provide a constructive background on the various Before we get started, I want to say **Thank You** to all of the contributors to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. -In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Maybe if there is an interest from the community some of this work can be ported back to that project. - ## Table of Contents - [Overview](#overview) @@ -359,6 +357,8 @@ TODO: gambit GC (parallel with multiple collector threads) Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could still be applied to Cyclone. +In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) helped me gather much of the knowledge that would later be used to create Cyclone. In fact the primary motivation in building Cyclone was to go a step further and understand how to build a full, free-standing Scheme system. At this point Cyclone has eclipsed the speed and functionality of Husk and it is not clear if Husk will receive much more than bug fixes going forward. Perhaps if there is interest from the community some of this work can be ported back to that project. + ## Conclusion TODO: this section is completely out of date, a better reference would be benchmark results from r7rs-benchmarks From 979bc7b2c2f7f04f1e03a29c2582db9f7351c83a Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 04:21:00 -0500 Subject: [PATCH 42/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 3d71cfa0..7a991b04 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -4,7 +4,7 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. It is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sort for everything that has happened in the last year and half. +This write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. It is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sorts for everything that has happened in the last year and half. Before we get started, I want to say **Thank You** to all of the contributors to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. From 84ec637843083afe7ed433f7f594aec605cac973 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 17:34:23 -0500 Subject: [PATCH 43/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 64fb8762..13c82561 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -40,6 +40,10 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Conclusion](#conclusion) - [References](#references) +TODO: Terms section + +free variables - variables that are referenced within the body of a function but that are not bound within the function + ## Overview Cyclone has a similar architecture to other modern compilers: @@ -170,11 +174,13 @@ In order to support the analysis DB a custom AST is used to represent functions ### Closure Conversion -TODO: briefly explain concept, flat closures (EG: vector) +Free variables passed to a nested function must be captured in a closure so they can be referenced at runtime. The closure conversion transformation modifies lambda definitions as necessary to create new closures and replaces free variable references with lookups from the current closure. -TODO: need to wrap any mutable variables in cells before closure conversion can happen! +Cyclone uses flat closures - objects that contain a single function reference and a vector of free variables. This is a more efficient representation than an environment as only a single vector lookup is required to read any of the free variables. -TODO: short example?? +Mutated variables must be added to a pair (called a "cell") by a separate compilation pass executed prior to closure conversion. + +Cyclone's closure conversion is based on code from Marc Feeley's 90 minute Scheme->C compiler and Matt Might's Scheme->C compiler. ## C Back-End @@ -318,8 +324,6 @@ Each thread maintains a circular buffer of call history that is used to provide ### Exception Handling -TODO: revise this paragraph? - A family of `Cyc_rt_raise` functions is provided to allow an exception to be raised for the current thread. These functions gather the required arguments and use `apply` to call the thread's current exception handler. The handler is part of the thread data parameter, so any functions that raise an exception must receive that parameter. ## Native Thread Support @@ -348,14 +352,13 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus ## Future -Some items to consider in the future are: +Some goals for the future are: -TODO: gambit GC (parallel with multiple collector threads) - -- Implement more of r7rs-large, have started on data structures -- Implement more libraries (TODO: industria for r7rs??) -- Way to support eggs or other existing libraries? Is that possible or even worth the effort? -- Additional optimizations +- Implement more of r7rs-large; work has already started on the data structures side. +- Implement more libraries (for example, by porting some of [industria](https://github.com/weinholt/industria) to r7rs). +- Is there a way to support CHICKEN eggs or other existing libraries? Is that possible or even worth the effort? +- Improve the garbage collector. Possibly by allowing more than one collector thread (Per gambit's parallel GC). +- Perform additional optimizations, EG: Andrew Appel used a similar runtime for [Standard ML of New Jersey](http://www.smlnj.org/) which is referenced by Baker's paper. Appel's book [Compiling with Continuations](http://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X) includes a section on how to implement compiler optimizations - many of which could still be applied to Cyclone. From b73644cab4bf6fd062d042e53bef8616944f6fbf Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 4 Jan 2017 18:25:58 -0500 Subject: [PATCH 44/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 13c82561..1632cc98 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -178,7 +178,7 @@ Free variables passed to a nested function must be captured in a closure so they Cyclone uses flat closures - objects that contain a single function reference and a vector of free variables. This is a more efficient representation than an environment as only a single vector lookup is required to read any of the free variables. -Mutated variables must be added to a pair (called a "cell") by a separate compilation pass executed prior to closure conversion. +Mutated variables are not directly supported by flat closures and must be added to a pair (called a "cell") by a separate compilation pass prior to closure conversion. Cyclone's closure conversion is based on code from Marc Feeley's 90 minute Scheme->C compiler and Matt Might's Scheme->C compiler. From e69df87225cbed4f0a05cc8067fcc82355fc52c6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 6 Jan 2017 03:53:24 -0500 Subject: [PATCH 45/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 1632cc98..5c7d5cec 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -14,7 +14,7 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Overview](#overview) - [Source-to-Source Transformations](#source-to-source-transformations) - - [Basic Pattern of Many Small Passes](#basic-pattern-of-many-small-passes) + - [Just Make Many Small Passes](#just-make-many-small-passes) - [Macro Expansion](#macro-expansion) - [CPS Conversion](#cps-conversion) - [CPS Optimizations](#cps-optimizations) @@ -88,11 +88,11 @@ To overcome these difficulties a series of source-to-source transformations are The 90-minute compiler ultimately compiles the code down to a single function and uses jumps to support continuations. This is a bit too limiting for a production compiler, so that part was not used. -### Basic Pattern of Many Small Passes +### Just Make Many Small Passes To make Cyclone easier to maintain a separate pass is made for each transformation. This allows Cyclone's code to be as simple as possible and minimizes dependencies so there is less chance of changes to one transformation breaking the code for another. -Most of the transformations follow a similar pattern of recursively examining an expression, which is efficient as long as each sub-expression is only visited a single time. Here is a short example that demonstrates the code structure: +Most of the transformations follow a similar pattern of recursively examining an expression. Here is a short example that demonstrates the code structure: (define (search exp) (cond @@ -114,7 +114,7 @@ Most of the transformations follow a similar pattern of recursively examining an ((app? exp) (reduce union (map search exp) '())) (else (error "unknown expression: " exp)))) -The [Nanopass Framework](https://github.com/nanopass/nanopass-framework-scheme) was created to make it easier to write this type of code. Unfortunately Nanopass is written in R6RS and could not be used for this project. +The [Nanopass Framework](https://github.com/nanopass/nanopass-framework-scheme) was created to make it easier to write a compiler using this type of pattern. Unfortunately Nanopass itself is written in R6RS and could not be used for this project. ### Macro Expansion From ed5f772fe86f591ef3a2ab7d7cebfb7ea9612106 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 6 Jan 2017 03:54:32 -0500 Subject: [PATCH 46/93] Added TODO --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 5c7d5cec..ed9b8ba3 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -48,6 +48,8 @@ free variables - variables that are referenced within the body of a function but Cyclone has a similar architecture to other modern compilers: +TODO: this is hard to read. let's revisit original diagram and make that less wide so the exported PNG is not as wide either + flowchart of cyclone compiler First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. From 432258e079379099f6f635b24912705f25dd913d Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 6 Jan 2017 03:58:34 -0500 Subject: [PATCH 47/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index ed9b8ba3..136848dc 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -116,7 +116,7 @@ Most of the transformations follow a similar pattern of recursively examining an ((app? exp) (reduce union (map search exp) '())) (else (error "unknown expression: " exp)))) -The [Nanopass Framework](https://github.com/nanopass/nanopass-framework-scheme) was created to make it easier to write a compiler using this type of pattern. Unfortunately Nanopass itself is written in R6RS and could not be used for this project. +The [Nanopass Framework](https://github.com/nanopass/nanopass-framework-scheme) was created to make it easier to write a compiler that makes many small passes over the code. Unfortunately Nanopass itself is written in R6RS and could not be used for this project. ### Macro Expansion From 37efb944b182d31d4ed89f8ef7c1df524b20a845 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 6 Jan 2017 04:04:53 -0500 Subject: [PATCH 48/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 136848dc..2d37aad6 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -306,6 +306,8 @@ Value types are stored using a technique from Lisp in Small Pieces. On many mach > The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. +TODO: explain how chars and ints are tagged then, and how to box/unbox them + ### Thread Data Parameter At runtime Cyclone passes the current continuation, number of arguments, and a thread data parameter to each compiled C function. The continuation and arguments are used by the application code to call into its next function with a result. Thread data is a structure that contains all of the necessary information to perform collections, including: @@ -332,7 +334,7 @@ A family of `Cyc_rt_raise` functions is provided to allow an exception to be rai A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. -Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. This can be done by using synchronization primitives (such as a mutex) to coordinate access. It is also possible for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. +Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. One solution is for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. ## Reader @@ -356,9 +358,8 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus Some goals for the future are: -- Implement more of r7rs-large; work has already started on the data structures side. +- Implement more of R7RS-large; work has already started on the data structures side. - Implement more libraries (for example, by porting some of [industria](https://github.com/weinholt/industria) to r7rs). -- Is there a way to support CHICKEN eggs or other existing libraries? Is that possible or even worth the effort? - Improve the garbage collector. Possibly by allowing more than one collector thread (Per gambit's parallel GC). - Perform additional optimizations, EG: From 203a7fe6d7958b618afa753b7fd0800ee1bbd27a Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 21:48:37 -0500 Subject: [PATCH 49/93] Make text easier to read --- docs/images/compiler.dia | Bin 2402 -> 2393 bytes docs/images/compiler.png | Bin 25254 -> 19344 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/compiler.dia b/docs/images/compiler.dia index c9338a64b2bda806fea638c1becead610f953245..902754f3d75f783c800f56dca913741db9604fba 100644 GIT binary patch literal 2393 zcmV-f38wZRiwFP!000021MOW~kK#BMe&<(2^vkY98Q+pP(^ECtE^W`QG@5Ctd!I{& zxFFjhK}o3Unuq=E>x581NVp_85XMM#0gO*v$$FuCvl=iBEy*8k<9_p|HqpXARZ;xj{jB8byx_x)*-%zqjVUteE={}%HkjDYVg zKrDv;^tJp|o+ObsS|q{<_)OgQM|}K!5`~Mv?JrB^<;I~O zM#c;G@B1H~vqyiJS2NtIXHVU8J`tlx@bA@CL-}x=I#tg_RIGM34`WXjN#5o=MJnn^ ze{Yn@OU1HKFnRd!n@AE7eOO*r{^Gj6vWu-Wl+1WE@q%4jvVZ(#XJB9wCw*9mnFL~+ ztor42bE9_6`R$sE+BN6JPxCNJBJL%-CP!iD3mz=3CecFFw-b-KFNfH^W}*7EKYK|M z9=QHz?#IV8VEOX9$DQiElgM-TJMUJBidtShH<>>DP}E(^+TRq_{^G^n$QNZ-?*+-( zs((9A^~G-|L-6&-8;*u$ZIx4m%Y-S+)2E2Z!gED@V3=)}sie4KbMt7jX15{~{W#!24TuL%!a9=XPy@hSY#U-J;j zLOl1r{|DUetYY(IWfBK>dTSo8hmPMqu?UB5G9!z|ZTQGrRrbfs| zLI5-e6fk6)^(+cs%$~+!6zuYZb2Tb6kwM9B!`@-UZcz7Bc#~GPey4rTh_@q^1oo2vnPhr{U{U3B^9l9m;WTxOVCzy!avfus9rX~&o%#jw-FI$c%Iq>5h z-(J0AOr@)&lc@BJB$S?k=*{JGHa^3gZ7QFz zsr>a3qjbV{ zi>fN?46#V1lmY_BVfKnu5Fo#4(ivj$g-3B^{(`0#=c5-`OQ}wh3-dBk%D#5g!z;kU zT107-yIGWj8s*eUDAp9@FjFd_u>G!~mZ>DFHB|lf=#?q0p{m)0)6~%jR2-Pa444*U zIjJBRP?9l=F0M`eu8D?fqEQ@=T2OU{YOu=)Dg>_{12Y3T07AVurQz!(R+hs15m^8s#3bUSDZHw4cj>k(m81vSI&Js1(sm2+4SGt}Zee+u zwB^B#^L8;(E7{QI!z2%L{nJg^4Nk zdP{PByIm#kr^=;%zM6L9YjtDRB+jL} zjkEu#+WC?qfC*WpBvA@%%j!-_(!Yb3@VhX2kH(|4;Q4x!hkD^piI)A{l>PRFl9HTj z$3U`zKcdr-G|t^D&OwcH^>OZ35zd6X#<2vtFCuzQ-+A<+u`fy>55qI;o3G2YkKZ_- zo$i_m41P zIU|ADRY=5reU;6X)%XW@qC};~X`j@8zBhlGhLQKDoVmHbw{eB@%}+KX0WY2Rl^KZ_ zqx2AX(XZV}=b^6nEN8@0wFfhpOzL+;Rwpx1WTiGcqTs)dr(!00pQU!cAf;uyoc8Wh z=)1SNe;LshnC_iIRvOgIsVy}D>N>M+)?b?3YI3W|ttPi+ zP)?f1Wix1^YS*WTWsw!XO&6%r<*Lr`+k9Qh)eN`Q&~0&CYLeR>l8Y~sor>uhmZ?(sWizg%LvU6-g4SVa;x7So#dvI-1Z2G=1JkU+N5w3VDx_K3?`C^^V>Ae-6+mMjdMx^B#rknq%wz6 zM=jVf;5gDoz6CH{J+myQr9FVV?JJ3tqt5% zei$zzVLXOG{(TJ$k&OSYmycRI+N69$>s6#yNzz%uzyzKl42*$o+v;P%(u@SSe9JQh z45kN?NGGDixw(U3Vrj@EY9rB2OkC&9$s6ZuQz&8IwrkUg zV>JpP(hjmEe@P{ZWlMLrF|oT4knVkw-}>D@16T8rmeN^D#-yeqor%{Fc#-vQg3quA zQ4$14^)5tdgXWtMCFjAm>KpjhZ_}lh!8PO2jHk$W$QgF1$=QVwwV@jbFtIYu!{iW7 z_o>+y$yg7uy0cHs=zWePC(-1m)!k}4!&8%=?vS6x$$!h|K7SL@LvQ&+{!Ai1d+7Zi L`{d{BNuB@z(4xpC literal 2402 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 U@^2D*v%B8^0px%$(Tkk`0L+@gzyJUM diff --git a/docs/images/compiler.png b/docs/images/compiler.png index 4d651d75bfdb98fe64eb902280da458f4e92748b..76aa0aad44d1614347340475e3dd331d0bcd76a8 100644 GIT binary patch literal 19344 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 Y8LI5kvl{Z|!VVZE@x9e<_`E<^TWy literal 25254 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

EktO3 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 BsMr7i From cd1c2ecb561bf3862c7d85f4e762e43d2a71eefe Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 22:51:24 -0500 Subject: [PATCH 50/93] WIP --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 2d37aad6..e5b2ce39 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -38,18 +38,13 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Scheme Standards](#scheme-standards) - [Future](#future) - [Conclusion](#conclusion) +- [Terms](#terms) - [References](#references) -TODO: Terms section - -free variables - variables that are referenced within the body of a function but that are not bound within the function - ## Overview Cyclone has a similar architecture to other modern compilers: -TODO: this is hard to read. let's revisit original diagram and make that less wide so the exported PNG is not as wide either - flowchart of cyclone compiler First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. @@ -287,7 +282,7 @@ An interesting observation from R. Kent Dybvig that I have tried to keep in mind #### Objects -Most Scheme data types are represented as heap/stack allocated objects that contain a tag to identify the object type. For example: +Most Scheme data types are represented as objects that are allocated in heap/stack memory. Each type of object has a corresponding C structure that defines its fields: typedef struct { gc_header_type hdr; @@ -296,17 +291,28 @@ Most Scheme data types are represented as heap/stack allocated objects that cont object pair_cdr; } pair_type; -The `gc_header_type` field contains marking information for the garbage collector. +All objects have: + +- A `gc_header_type` field that contains marking information for the garbage collector. +- A tag to identify the object type. +- One or more additional fields that contain the actual object data. #### Value Types -On the other hand, some data types can be represented using 30 bits or less and can be stored as value types. Cyclone uses this technique to store characters and integers. The nice thing about value types is they do not have to be garbage collected because no extra data is allocated for them. +On the other hand, some data types can be represented using 30 bits or less and can be stored as value types. The great thing about value types is they do not have to be garbage collected because no extra data is allocated for them. This makes them super efficient for commonly-used data types. -Value types are stored using a technique from Lisp in Small Pieces. On many machines addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): +Value types are stored using a common technique that is described in Lisp in Small Pieces (among other places). On many machines addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): > The reason why most pointers are aligned to at least 4 bytes is that most pointers are pointers to objects or basic types that themselves are aligned to at least 4 bytes. Things that have 4 byte alignment include (for most systems): int, float, bool (yes, really), any pointer type, and any basic type their size or larger. -TODO: explain how chars and ints are tagged then, and how to box/unbox them +In Cyclone the two least significant bits are used to indicate the following data types: + +Binary Bit Pattern | Data Type +00 | Pointer (an object type) +01 | Integer +10 | Character + +Booleans are potentially another good candidate for values types. But for the time being they are represented in the runtime using pointers to the constants `boolean_t` and `boolean_f`. ### Thread Data Parameter @@ -393,6 +399,12 @@ Thanks for reading! Want to give Cyclone a try? Install a copy using [cyclone-bootstrap](https://github.com/justinethier/cyclone-bootstrap). +## Terms + +- Abstract Syntax Tree (AST) - A tree representation of the syntactic structor of source code written in a programming language. Sometimes S-expressions can be used as an AST and sometimes a representation that retains more information is required. +- Free Variables - Variables that are referenced within the body of a function but that are not bound within the function. +- Garbage Collector (GC) - A form of automatic memory management that frees memory allocated by objects that are no longer used by the program. +- REPL - Read Eval Print Loop; basically a command prompt for interactively evaluating code. ## References From 310f9ea97e721bec1fd11b3dbd648c76ab92823e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 23:01:18 -0500 Subject: [PATCH 51/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index e5b2ce39..3b738faf 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -308,6 +308,7 @@ Value types are stored using a common technique that is described in Lisp in Sma In Cyclone the two least significant bits are used to indicate the following data types: Binary Bit Pattern | Data Type +------------------ | --------- 00 | Pointer (an object type) 01 | Integer 10 | Character From d0eba44d65a14198be645bf7cad448abcd70a931 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 5 Jan 2017 23:05:38 -0500 Subject: [PATCH 52/93] Video link --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 3b738faf..da4a6cdf 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -55,7 +55,7 @@ The code is represented internally as an AST of regular Scheme objects. Since S ### Overview -My primary inspiration for Cyclone was Marc Feeley's [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf) (also [video](https://www.youtube.com/watch?v=TxOM9Y5YrCs) and [code](https://github.com/justinethier/nugget/tree/master/90-min-scc)). Over the course of 90 minutes, Feeley demonstrates how to compile Scheme to C code using source-to-source transformations, including closure and continuation-passing-style (CPS) conversions. +My primary inspiration for Cyclone was Marc Feeley's [The 90 minute Scheme to C compiler](http://churchturing.org/y/90-min-scc.pdf) (also [video 1](https://www.youtube.com/watch?v=HIr9eO1kB8g), [video 2](https://www.youtube.com/watch?v=TxOM9Y5YrCs), and [code](https://github.com/justinethier/nugget/tree/master/90-min-scc)). Over the course of 90 minutes, Feeley demonstrates how to compile Scheme to C code using source-to-source transformations, including closure and continuation-passing-style (CPS) conversions. As outlined in the presentation, some of the difficulties in compiling to C are: From 77186527120b48333a83fcf8c1492fe320493d94 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 01:56:37 -0500 Subject: [PATCH 53/93] Revs --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index da4a6cdf..2c2fc2f0 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -165,15 +165,15 @@ One of the most effective optimizations is inlining of primitives. That is, some A contraction phase is also used to eliminate other unnecessary `lambda`'s. There are a few other miscellaneous optimizations such as constant folding, which evaluates certain primitives at compile time if the parameters are constants. -To more efficiently identify optimizations Cyclone first makes a code pass to build up an hash table-based analysis database (DB) of various attributes. This is the same strategy employed by CHICKEN, although we record different attributes. The DB contains a table of records with an entry for each variable (indexed by symbol) and each function (indexed by unique ID). +To more efficiently identify optimizations Cyclone first makes a code pass to build up an hash table-based analysis database (DB) of various attributes. This is the same strategy employed by CHICKEN, although each compiler records different attributes. The DB contains a table of records with an entry for each variable (indexed by symbol) and each function (indexed by unique ID). In order to support the analysis DB a custom AST is used to represent functions during this phase, so that each one can be tagged with a unique identification number. After optimizations are complete, the lambdas are converted back into regular S-expressions. ### Closure Conversion -Free variables passed to a nested function must be captured in a closure so they can be referenced at runtime. The closure conversion transformation modifies lambda definitions as necessary to create new closures and replaces free variable references with lookups from the current closure. +Free variables passed to a nested function must be captured in a closure so they can be referenced at runtime. The closure conversion transformation modifies lambda definitions as necessary to create new closures. It also replaces free variable references with lookups from the current closure. -Cyclone uses flat closures - objects that contain a single function reference and a vector of free variables. This is a more efficient representation than an environment as only a single vector lookup is required to read any of the free variables. +Cyclone uses flat closures: objects that contain a single function reference and a vector of free variables. This is a more efficient representation than an environment as only a single vector lookup is required to read any of the free variables. Mutated variables are not directly supported by flat closures and must be added to a pair (called a "cell") by a separate compilation pass prior to closure conversion. From a9692586d76cee2b09cfa097c6a3a8281b7f20a1 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 22:10:11 -0500 Subject: [PATCH 54/93] Initial file --- docs/images/benchmark-tests-finished.png | Bin 0 -> 17661 bytes docs/images/benchmark-total-runtimes.png | Bin 0 -> 10529 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/benchmark-tests-finished.png create mode 100644 docs/images/benchmark-total-runtimes.png diff --git a/docs/images/benchmark-tests-finished.png b/docs/images/benchmark-tests-finished.png new file mode 100644 index 0000000000000000000000000000000000000000..53257910b6f33def34e4c5c6a449ba318fbd8a72 GIT binary patch literal 17661 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 e2XYh=mjGz#e(%Ay_wVT6kjY9aN#woI_4zOC{d Date: Sat, 7 Jan 2017 22:12:05 -0500 Subject: [PATCH 55/93] Link new images --- ...Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 2c2fc2f0..1e08a77a 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -384,17 +384,9 @@ From Feeley's presentation: Compared to a similar compiler (CHICKEN), Cyclone's performance is worse but also "not so bad": - $ time cyclone -d transforms.sld - - real 0m6.802s - user 0m4.444s - sys 0m1.512s + - $ time csc -t transforms.scm - - real 0m1.084s - user 0m0.512s - sys 0m0.380s + Thanks for reading! From 3f4809c68cb11682f6fe64b76e4e0930d5a6000c Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 22:30:16 -0500 Subject: [PATCH 56/93] Added benchmark section --- ...-the-Cyclone-Scheme-Compiler-Revision-1.md | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 1e08a77a..9daded53 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -36,6 +36,7 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Reader](#reader) - [Interpreter](#interpreter) - [Scheme Standards](#scheme-standards) +- [Benchmarks](#benchmarks) - [Future](#future) - [Conclusion](#conclusion) - [Terms](#terms) @@ -361,6 +362,28 @@ The interpreter's full implementation is available in the `(scheme eval)` librar Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library support is the most important new feature but there are also exceptions, system interfaces, and a more consistent API. +## Benchmarks + +[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html). These are the typical Scheme benchmarks that many implementations use but the remarkable thing about this suite is all of the major implementations are supported. This allows an apples-to-apples comparison of all of the major implementations. + +Over the past year Cyclone has matured to the point where almost all of the 56 benchmarks will run: + + + +The remaining ones are: + +- `compiler` passes but returns the wrong result. This is going to be fun to track down since the program takes so long to compile... +- `mbrotZ` fails because Cyclone does not support complex numbers. +- `pi` does not work because Cyclone does not support bignums yet. + +Regarding performance, from Feeley's presentation: + +> Performance is not so bad with NO optimizations (about 6 times slower than Gambit-C with full optimization) + +But Cyclone has some optimizations now, doesn't it? The following is a chart of total runtime (in minutes) for the benchmarks that each Scheme passes successfully. Cyclone performs well against all of the interpreters but still has a long ways to go to match top-tier compilers. Then again, most of these compilers have been around for a decade or longer: + + + ## Future Some goals for the future are: @@ -376,18 +399,6 @@ In addition, developing [Husk Scheme](http://justinethier.github.io/husk-scheme) ## Conclusion -TODO: this section is completely out of date, a better reference would be benchmark results from r7rs-benchmarks - -From Feeley's presentation: - -> Performance is not so bad with NO optimizations (about 6 times slower than Gambit-C with full optimization) - -Compared to a similar compiler (CHICKEN), Cyclone's performance is worse but also "not so bad": - - - - - Thanks for reading! Want to give Cyclone a try? Install a copy using [cyclone-bootstrap](https://github.com/justinethier/cyclone-bootstrap). From 3fe479bacef012ec220da3de27c6476d1cd501bf Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 22:32:01 -0500 Subject: [PATCH 57/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 9daded53..d6cbb426 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -364,7 +364,7 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus ## Benchmarks -[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html). These are the typical Scheme benchmarks that many implementations use but the remarkable thing about this suite is all of the major implementations are supported. This allows an apples-to-apples comparison of all of the major implementations. +[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) based on the ones from the Larceny project. These are the typical benchmarks that many implementations have used over the years, but the remarkable thing about this suite is all of the major implementations are supported. This allows an apples-to-apples comparison of all of the major implementations. Over the past year Cyclone has matured to the point where almost all of the 56 benchmarks will run: From 9b5963ac8cefd2c6726f44d4f97fa930787fc714 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 22:39:33 -0500 Subject: [PATCH 58/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index d6cbb426..46daab7f 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -252,9 +252,9 @@ The actual development consisted of several distinct phases: - Phase 0 - Started with a runtime using a basic Cheney-style copying collector. - Phase 1 - Added new definitions via `gc.h` and made sure everything compiles. - Phase 2 - Changed how strings are allocated to clean up the code and be compatible with the new GC algorithm. This was mainly just an exercise in cleaning up cruft in the old Cyclone implementation. -- Phase 3 - Changed from using a Cheney-style copying collector to a naive mark-and-sweep algorithm. The new algorithm was based on code from Chibi Scheme, so it was already debugged and a solid foundation for future work. -- Phase 4 - Integrated a new tracing GC algorithm but do not activate it yet. Added a new thread data argument to all of the necessary runtime functions. -- Phase 5 - Required the pthreads library, and stood Cyclone back up using the new GC algorithm for the first time. +- Phase 3 - Changed major GC from using a Cheney-style copying collector to a naive mark-and-sweep algorithm. The new algorithm was based on code from Chibi Scheme so it was already debugged and would serve as a solid foundation for future work. +- Phase 4 - Integrated code for a new tracing GC algorithm but did not cut over to it yet. Added a new thread data argument to all of the necessary runtime functions - a simple but far-reaching change that affected almost all functions in the runtime and compiled code. +- Phase 5 - Required the pthreads library and stood Cyclone back up using the new GC algorithm for the first time. - Phase 6 - Added SRFI 18 to support multiple application threads. ### Heap Data Structures From 2d379f2f8a1936d64f940c960b37c9eddaffca71 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 22:50:19 -0500 Subject: [PATCH 59/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 46daab7f..4d37630b 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -332,7 +332,7 @@ Each thread has its own instance of the thread data structure and its own stack ### Call History -Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer itself consists of an array of pointers-to-strings. Cyclone generates calls to runtime function `Cyc_st_add` as part of the compiled code to populate the buffer. This function must be fast as it is called all the time! So it does the bare minimum: update the pointer at the current buffer index and increment the index. +Each thread maintains a circular buffer of call history that is used to provide debug information in the event of an error. The buffer itself consists of an array of pointers-to-strings. The compiler emits calls to runtime function `Cyc_st_add` that will populate the buffer when the program is running. `Cyc_st_add` must be fast as it is called all the time! So it does the bare minimum - update the pointer at the current buffer index and increment the index. ### Exception Handling From 9291db84bfb993548ddb990901c34c78c488d83e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 7 Jan 2017 23:05:22 -0500 Subject: [PATCH 60/93] Revisions --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 4d37630b..9620be18 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -364,17 +364,17 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus ## Benchmarks -[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) based on the ones from the Larceny project. These are the typical benchmarks that many implementations have used over the years, but the remarkable thing about this suite is all of the major implementations are supported. This allows an apples-to-apples comparison of all of the major implementations. +[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) based on the ones from the Larceny project. These are the typical benchmarks that many implementations have used over the years, but the remarkable thing about this suite is all of the major implementations are supported, allowing an apples-to-apples comparison of all the major Schemes. -Over the past year Cyclone has matured to the point where almost all of the 56 benchmarks will run: +Over the past year Cyclone has matured to the point where most of the 56 benchmarks will run: The remaining ones are: -- `compiler` passes but returns the wrong result. This is going to be fun to track down since the program takes so long to compile... - `mbrotZ` fails because Cyclone does not support complex numbers. - `pi` does not work because Cyclone does not support bignums yet. +- `compiler` passes but returns the wrong result. This is going to be fun to track down since the program is (relatively) huge and takes so long to compile... Regarding performance, from Feeley's presentation: From a31a7460b0c948ddf3736eb51939b57b8bc15649 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 8 Jan 2017 17:23:28 -0500 Subject: [PATCH 61/93] Revisions --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 9620be18..438b0922 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -275,7 +275,7 @@ TODO: not really related to this paper, but can allocation speedup for Cyclone b The C runtime provides supporting features to compiled Scheme programs including a set of primitive functions, call history, exception handling, and garbage collection. -An interesting observation from R. Kent Dybvig that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: +An interesting observation from R. Kent Dybvig [11](#references) that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: > My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. @@ -283,7 +283,7 @@ An interesting observation from R. Kent Dybvig that I have tried to keep in mind #### Objects -Most Scheme data types are represented as objects that are allocated in heap/stack memory. Each type of object has a corresponding C structure that defines its fields: +Most Scheme data types are represented as objects that are allocated in heap/stack memory. Each type of object has a corresponding C structure that defines its fields, such as the following one for pairs: typedef struct { gc_header_type hdr; @@ -296,11 +296,11 @@ All objects have: - A `gc_header_type` field that contains marking information for the garbage collector. - A tag to identify the object type. -- One or more additional fields that contain the actual object data. +- One or more additional fields containing the actual object data. #### Value Types -On the other hand, some data types can be represented using 30 bits or less and can be stored as value types. The great thing about value types is they do not have to be garbage collected because no extra data is allocated for them. This makes them super efficient for commonly-used data types. +On the other hand, some data types can be represented using 30 bits or less and are stored as value types. The great thing about value types is they do not have to be garbage collected because no extra data is allocated for them. This makes them super efficient for commonly-used data types. Value types are stored using a common technique that is described in Lisp in Small Pieces (among other places). On many machines addresses are multiples of four, leaving the two least significant bits free. [A brief explanation](http://stackoverflow.com/q/9272526/101258): From 5bbf5b38afc4d9ecc087893a6272d27c07749243 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 8 Jan 2017 17:37:27 -0500 Subject: [PATCH 62/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 438b0922..bd5e41de 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -275,7 +275,7 @@ TODO: not really related to this paper, but can allocation speedup for Cyclone b The C runtime provides supporting features to compiled Scheme programs including a set of primitive functions, call history, exception handling, and garbage collection. -An interesting observation from R. Kent Dybvig [11](#references) that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: +An interesting observation from R. Kent Dybvig [[11]](#references) that I have tried to keep in mind is that performance optimizations in the runtime can be just as (if not more) important that higher level CPS optimizations: > My focus was instead on low-level details, like choosing efficient representations and generating good instruction sequences, and the compiler did include a peephole optimizer. High-level optimization is important, and we did plenty of that later, but low-level details often have more leverage in the sense that they typically affect a broader class of programs, if not all programs. From 9fca347bd27392d4d16adff4e94db4be54188a27 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 8 Jan 2017 17:51:59 -0500 Subject: [PATCH 63/93] WIP --- ...iting-the-Cyclone-Scheme-Compiler-Revision-1.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index bd5e41de..59e7dfbf 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -338,6 +338,8 @@ Each thread maintains a circular buffer of call history that is used to provide A family of `Cyc_rt_raise` functions is provided to allow an exception to be raised for the current thread. These functions gather the required arguments and use `apply` to call the thread's current exception handler. The handler is part of the thread data parameter, so any functions that raise an exception must receive that parameter. +A Scheme API for exception handling is provided as part of R7RS. + ## Native Thread Support A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. @@ -364,23 +366,23 @@ Cyclone targets the [R7RS-small specification](https://github.com/jus ## Benchmarks -[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) based on the ones from the Larceny project. These are the typical benchmarks that many implementations have used over the years, but the remarkable thing about this suite is all of the major implementations are supported, allowing an apples-to-apples comparison of all the major Schemes. +[ecraven](https://github.com/ecraven) has put together an excellent set of [Scheme benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) based on a R7RS suite from the Larceny project. These are the typical benchmarks that many implementations have used over the years, but the remarkable thing here is all of the major implementations are supported, allowing a rare apples-to-apples comparison among all the widely-used Schemes. -Over the past year Cyclone has matured to the point where most of the 56 benchmarks will run: +Over the past year Cyclone has matured to the point where almost all of the 56 benchmarks will run: The remaining ones are: -- `mbrotZ` fails because Cyclone does not support complex numbers. +- `mbrotZ` fails because Cyclone does not support complex numbers yet. - `pi` does not work because Cyclone does not support bignums yet. -- `compiler` passes but returns the wrong result. This is going to be fun to track down since the program is (relatively) huge and takes so long to compile... +- `compiler` passes but returns the wrong result. This will be fun to track down since the program is huge and takes a long time to compile... -Regarding performance, from Feeley's presentation: +Regarding performance, from Feeley's presentation [[10]](#references): > Performance is not so bad with NO optimizations (about 6 times slower than Gambit-C with full optimization) -But Cyclone has some optimizations now, doesn't it? The following is a chart of total runtime (in minutes) for the benchmarks that each Scheme passes successfully. Cyclone performs well against all of the interpreters but still has a long ways to go to match top-tier compilers. Then again, most of these compilers have been around for a decade or longer: +But Cyclone has some optimizations now, doesn't it? The following is a chart of total runtime in minutes for the benchmarks that each Scheme passes successfully. Cyclone performs well against all of the interpreters but still has a long ways to go to match top-tier compilers. Then again, most of these compilers have been around for a decade or longer: From 5ba6db9902378a2392ae71080eb740d91ad2cd76 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:31:06 -0500 Subject: [PATCH 64/93] Removed TODO --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 59e7dfbf..72019bc6 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -267,8 +267,6 @@ Cyclone allocates smaller objects in fixed size heaps to minimize allocation tim The heap data structures and associated algorithms are based on code from Chibi scheme. -TODO: not really related to this paper, but can allocation speedup for Cyclone be ported back to Chibi? Should look into that - ## C Runtime ### Overview From 07c9a61c359c3633a9957359cbf1493ee8e4cbe4 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:38:50 -0500 Subject: [PATCH 65/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index 72019bc6..be1c7f21 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -380,7 +380,7 @@ Regarding performance, from Feeley's presentation [[10]](#references): > Performance is not so bad with NO optimizations (about 6 times slower than Gambit-C with full optimization) -But Cyclone has some optimizations now, doesn't it? The following is a chart of total runtime in minutes for the benchmarks that each Scheme passes successfully. Cyclone performs well against all of the interpreters but still has a long ways to go to match top-tier compilers. Then again, most of these compilers have been around for a decade or longer: +But Cyclone has some optimizations now, doesn't it? The following is a chart of total runtime in minutes for the benchmarks that each Scheme passes successfully. This metric is problematic because not all of the Schemes can run all of the benchmarks but it gives a general idea of how well they compare to each other. Cyclone performs well against all of the interpreters but still has a long ways to go to match top-tier compilers. Then again, most of these compilers have been around for a decade or longer: From d038300f462f423dd248dc45abc58503e5fa89f4 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 02:44:36 -0500 Subject: [PATCH 66/93] Clarify mutator behavior on async transition --- docs/Garbage-Collector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Garbage-Collector.md b/docs/Garbage-Collector.md index 81ff0273..ce760db4 100644 --- a/docs/Garbage-Collector.md +++ b/docs/Garbage-Collector.md @@ -168,7 +168,7 @@ The collector swaps the values of the clear color (white) and the mark color (bl Initial object graph ### Mark -The collector transitions to sync 2 and then async. At this point it marks the global variables and waits for the mutators to also transition to async: +The collector transitions to sync 2 and then async. At this point it marks the global variables and waits for the mutators to also transition to async. When a mutator transitions it will gray its roots and use black as the allocation color to prevent any new objects from being collected during this cycle: Initial object graph From 4923c7c3ae0b999fc8ec2cd0ad0675b5c26ca42e Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 02:46:41 -0500 Subject: [PATCH 67/93] "mark" instead of gray, to clarify behavior --- docs/Garbage-Collector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Garbage-Collector.md b/docs/Garbage-Collector.md index ce760db4..1b52d204 100644 --- a/docs/Garbage-Collector.md +++ b/docs/Garbage-Collector.md @@ -168,7 +168,7 @@ The collector swaps the values of the clear color (white) and the mark color (bl Initial object graph ### Mark -The collector transitions to sync 2 and then async. At this point it marks the global variables and waits for the mutators to also transition to async. When a mutator transitions it will gray its roots and use black as the allocation color to prevent any new objects from being collected during this cycle: +The collector transitions to sync 2 and then async. At this point it marks the global variables and waits for the mutators to also transition to async. When a mutator transitions it will mark its roots and use black as the allocation color to prevent any new objects from being collected during this cycle: Initial object graph From 81263b0a07c0089840e9e8ccca90f04b923efdd2 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 02:49:34 -0500 Subject: [PATCH 68/93] Link to collection cycle section --- docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md index be1c7f21..e236221c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md @@ -239,7 +239,7 @@ Under Cyclone's runtime each thread contains its own stack that is used for priv Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. -More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. +More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. For a casual reader the most interesting part may be the [Collection Cycle](Garbage-Collector.md#collection-cycle) section, which explains what happens on the collector thread and application (mutator) threads during a major GC. ### Developing the New Collector From ea97f92019789da30f35980fb9aa54529aa00e79 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 02:54:54 -0500 Subject: [PATCH 69/93] Renamed doc --- ...n-1.md => Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{Writing-the-Cyclone-Scheme-Compiler-Revision-1.md => Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md} (100%) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md similarity index 100% rename from docs/Writing-the-Cyclone-Scheme-Compiler-Revision-1.md rename to docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md From 2a432f522ffa1af762d1ac76f65c93b77a2af838 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 03:10:34 -0500 Subject: [PATCH 70/93] Ported new section from GC doc --- ...he-Cyclone-Scheme-Compiler-Revised-2017.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index e236221c..b458ffff 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -25,6 +25,7 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Garbage Collector](#garbage-collector) - [Background: Cheney on the MTA](#background-cheney-on-the-mta) - [Cyclone's Hybrid Collector](#cyclones-hybrid-collector) + - [Major Garbage Collection Algorithm](#major-garbage-collection-algorithm) - [Developing the New Collector](#developing-the-new-collector) - [Heap Data Structures](#heap-data-structures) - [C Runtime](#c-runtime) @@ -239,7 +240,33 @@ Under Cyclone's runtime each thread contains its own stack that is used for priv Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. -More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. For a casual reader the most interesting part may be the [Collection Cycle](Garbage-Collector.md#collection-cycle) section, which explains what happens on the collector thread and application (mutator) threads during a major GC. +### Major Garbage Collection Algorithm + +During a major GC the collector thread transitions through the following states. + +#### Clear +The collector thread swaps the values of the clear color (white) and the mark color (black). This is more efficient than modifying the color on each object in the heap. The collector then transitions to sync 1. At this point no heap objects are marked, as demonstrated below: + +Initial object graph + +#### Mark +The collector thread transitions to sync 2 and then async. At this point it marks the global variables and waits for the application threads to also transition to async. When an application thread transitions it will mark its roots and use black as the allocation color to prevent any new objects from being collected during this cycle: + +Initial object graph + +#### Trace +The collector thread finds all live objects using a breadth-first search and marks them black: + +Initial object graph + +#### Sweep +The collector thread scans the heap and frees memory used by all white objects: + +Initial object graph + +If the heap is still low on memory at this point the heap will be increased in size. Also, to ensure a complete collection, data for any terminated threads is not freed until now. + +More details are available in a separate [Garbage Collector](Garbage-Collector.md) document. ### Developing the New Collector From ddebc015ff3c15cb5b08c1dd5c89d725db80ad50 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 03:34:13 -0500 Subject: [PATCH 71/93] Consolidate sections --- ...riting-the-Cyclone-Scheme-Compiler-Revised-2017.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index b458ffff..abcfffe7 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -19,9 +19,8 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [CPS Conversion](#cps-conversion) - [CPS Optimizations](#cps-optimizations) - [Closure Conversion](#closure-conversion) -- [C Back-End](#c-back-end) - - [Code Generation](#code-generation) - - [Compilation](#compilation) + - [C Code Generation](#c-code-generation) + - [Native Compilation](#native-compilation) - [Garbage Collector](#garbage-collector) - [Background: Cheney on the MTA](#background-cheney-on-the-mta) - [Cyclone's Hybrid Collector](#cyclones-hybrid-collector) @@ -181,9 +180,7 @@ Mutated variables are not directly supported by flat closures and must be added Cyclone's closure conversion is based on code from Marc Feeley's 90 minute Scheme->C compiler and Matt Might's Scheme->C compiler. -## C Back-End - -### Code Generation +### C Code Generation The compiler's code generation phase takes a single pass over the transformed Scheme code and outputs C code to the current output port (usually a `.c` file). @@ -191,7 +188,7 @@ During this phase C code is sometimes saved for later use instead of being outpu The C code is carefully generated so that a Scheme library (`.sld` file) is compiled into a C module. Functions and variables exported from the library become C globals in the generated code. -### Compilation +### Native Compilation The C compiler is invoked to generate machine code for the Scheme module, and to also create an executable if a Scheme program is being compiled. From 2993d0b5763c329aa5c774046fabfa354a03b15f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 03:38:17 -0500 Subject: [PATCH 72/93] Added more TODO's --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index abcfffe7..80b1455b 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -46,12 +46,18 @@ Before we get started, I want to say **Thank You** to all of the contributors to Cyclone has a similar architecture to other modern compilers: +TODO: change parser to reader in diagram + flowchart of cyclone compiler First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. +TODO: move reader section up here?? + +TODO: have another diagram that illustrates the compiled file contains a mix of generated C code, and runtime (with primitives, gc, helper functions, environments, etc)?? + ## Source-to-Source Transformations ### Overview From fba902455549861acee3589c655862b2dc57137b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 03:40:42 -0500 Subject: [PATCH 73/93] New section --- ...-the-Cyclone-Scheme-Compiler-Revised-2017.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 80b1455b..5ecb7956 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -32,9 +32,10 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Thread Data Parameter](#thread-data-parameter) - [Call History](#call-history) - [Exception Handling](#exception-handling) -- [Native Thread Support](#native-thread-support) -- [Reader](#reader) -- [Interpreter](#interpreter) +- [Scheme Libraries](#scheme-libraries) + - [Native Thread Support](#native-thread-support) + - [Reader](#reader) + - [Interpreter](#interpreter) - [Scheme Standards](#scheme-standards) - [Benchmarks](#benchmarks) - [Future](#future) @@ -368,19 +369,23 @@ A family of `Cyc_rt_raise` functions is provided to allow an exception to be rai A Scheme API for exception handling is provided as part of R7RS. -## Native Thread Support +## Scheme Libraries + +TODO: explain compiler is mostly implemented as libraries? maybe a new sub-section? + +### Native Thread Support A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. Cyclone attempts to support multithreading in an efficient way that minimizes the amount of synchronization among threads. But objects are still copied during minor GC. In order for an object to be shared among threads the application must guarantee the object is no longer on the stack. One solution is for application code to initiate a minor GC before an object is shared with other threads, to guarantee the object will henceforth not be relocated. -## Reader +### Reader Cyclone uses a combined lexer / parser to read S-expressions. Input is processed one character at a time and either added to the current token or discarded if it is whitespace, part of a comment, etc. Once a terminating character is read the token is inspected and converted to an appropriate Scheme object. For example, a series of numbers may be converted into an integer. The full implementation is written in Scheme and located in the `(scheme read)` library. -## Interpreter +### Interpreter The `eval` function is written in Scheme, using code from the [Metacircular Evaluator](https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1) from [SICP](https://mitpress.mit.edu/sicp/full-text/book/book.html) as a starting point. From 7567bcf731cacf2c5706ec8eac91483a00fde9a4 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:10:03 -0500 Subject: [PATCH 74/93] WIP --- docs/images/compiler.dia | Bin 2393 -> 2390 bytes docs/images/compiler.png | Bin 19344 -> 19373 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/compiler.dia b/docs/images/compiler.dia index 902754f3d75f783c800f56dca913741db9604fba..ba5c7efa66a8f62d6a60c2acb50fd537215e0523 100644 GIT binary patch delta 2229 zcmV;m2ukv z?KB|tA_I7ICZL?i>O%bY#zp*ERwva2<#&%e z)q5wA=k9mjtr8Wryn1djefqAbyOy=TDXRU&i@lLA%73oj3zD-{|8}10i{DO$;Omb! z91Y9bDyImS2~(J-PZ5)a=Zg5iFxxIuQPVUpHayhp#d61X%<`qegq@l2`J0IH>OZZg zY9s%GbHp+DIPqRq&o=rb9Q`TAN#58m2@hNzxyGIGDg54F^AO2GJomo;FSy-V#pcP% zBo6NM)_*))4=HPafz65?unQkm)sIHS+9P@WJec?*w_pOtOpTC_gaBv`C}7Ao>sb`O zm_3cdDA?r*=W0}DB7>6MhP}gx-JtHN@Fvq_PvyX2wh7k{QqR~Zj9d{NY6=7>H-o4H z5wZ|&WNsT8O8Fx)NlhDG5U4g0Ps7)z5{iA8JAahp+;HvGM|k<~ULZ=`95r@xJV0_> znT|?FN5CQs4;WyK;g1LdBAMJk{*{8Ep51X61WzJxvzDCLzS2T9uOnE@#`B{2vT6Aw zFbLcy9!246v0@?3<&+pVtoq3p!DPStn@vp|1ehZ&q+hliQF7qNJHEYo$Cyf2NheY1 z8GlJAJp;>s)^FeU+0Fnc`7p{qY;J$n+NA-7D>~7e%jax-hB@0*K4DY&>mx?#gzd;* zil=K+-CS)doT_OjX67SjO=rXr@8qocReVo291Z1;MjAUB1LnY1>1r0Rq=Q+2Lg{P} z5b1cfbUa*h&?ad|98iLVGF4w_7CPH1R|tr-{qp5&?`xBo11SREg_FYrgMUI!R@OVI zAOMl>(29Qx?p9_mXmW8ra)Gsw>Lj%=FC(PvYsWmi!aJ-blt#ImMLDQZPMv^aO+gMb zr2-1u?+R*}NTOOn)o+hpm(mKVnoT%O9gRT6VOh+8X)%_Q3W5P88MEl(%G5tK(NIk^ zisMlWs?Jaib{Rp1;MHSbW`7_DK&Y3dG~C@Z+(8X@=YYGa{N3gWyi{!fiKN=f$`W`# zA`2jdm_)oZfme0rF5PyelH@>JC+*%=(rzKXK~KrqEi5jRwmi6T)-FbBB^%uEU`znC zFlonww;NXSK9*MoP3^`vmwR97#wx>!_1<0{htDo{2gM@WPssjMDT34;si(^m+Cp)9oPR6c6kABxG*uLUT;aRZ?~)D{ZzTs&sWoK ze64QGnnc|$lahoQCx2d2q*Uuu_^$P-*@o7y-yXfILu>s#TEB7jA5}YFQUov|tCS>4 zfo)mcNlE%g@DhF#M(@#hlomW+Z}Lzt{3+40znik(zEDzetK=+4;p3`?8y=d%<63D~w47=v*a_!@{&3|WS`{n!QkyTq_$$sI7 zaL@I|iQ;Yfb^EKM3eNWe(VBkCjHR%(IB-JfHkh4a;@R{4BTQJ%NMLpq5^-N&WpiaU z{=uCnQR!jYC-tB2&7Y=W-L%y#=` zDO$lRJ(agLW{aCI9b|M9D-CMq)Rvk6b)DHZ>n}}iHM!N~R+HN@C@0P1vKcf{wd+$P zU6IQ9ZMr~}E?0Gi-{$L5u4cHchHi`FQj^^7kX(G3?0-~D&#+9T@@=eS*Ms;XUiOP3>(+%9u)F>ah~PE4gqZdpcX ze(;vlMv`0o_UI%xo#eJhNHk9hx78+vn*gKtQ)d{kS$FOS^BB6K_nVL-i>C;w^FEXx zLu2dwwtsF4hYOuzjO}ZOKYImzw$5+UICrx+2Q|(q4Ujb6%aF<(N*%Re$AIHV8~GN% zboI=#oR;#i zm47IfE#2M5#O^{sy7x(b>vz8fuI3{xrL&ZbNlisM6R#ogBJ1A-pJ5N8BnXb`U5L^K z%{L)R&Vy~$x9_drrb{n_YsRA)Pm%GEGwe{4vkN0?LpKm$Vr86%$swHXQ?o6Su^wV| zXP=tU`y5G5qRCIIyVZ7vrzSt$AwP|i{~DIhef}n*hu-pu{Fy|2_R#x3Q_FMeN1gxx D^!;=Z delta 2232 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 Go&W&3mUZv| diff --git a/docs/images/compiler.png b/docs/images/compiler.png index 76aa0aad44d1614347340475e3dd331d0bcd76a8..2c2574de632df7d1e374b8b7c94b2cc65e295113 100644 GIT binary patch literal 19373 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 Y8LI5kvl{Z|!VVZE@x9e<_`E<^TWy From 78914e23f46a7c08a104fbe77e1d3abde1a66850 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:10:12 -0500 Subject: [PATCH 75/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 5ecb7956..a95bc001 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -47,8 +47,6 @@ Before we get started, I want to say **Thank You** to all of the contributors to Cyclone has a similar architecture to other modern compilers: -TODO: change parser to reader in diagram - flowchart of cyclone compiler First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. From 52451998e614b16dfc077223229dde5cbe1c8752 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:33:30 -0500 Subject: [PATCH 76/93] Initial file --- docs/images/runtime.dia | Bin 0 -> 1653 bytes docs/images/runtime.png | Bin 0 -> 27166 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/runtime.dia create mode 100644 docs/images/runtime.png diff --git a/docs/images/runtime.dia b/docs/images/runtime.dia new file mode 100644 index 0000000000000000000000000000000000000000..be06b1cdbc2ae1b3cb36c69ff0791b41857316e4 GIT binary patch literal 1653 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 Z`G%J#J5mU}KM4vV|5`=5P|E1r{{z?^6}SKZ literal 0 HcmV?d00001 From ab44b72937b09d286115e3b48bbc9d7b740e8014 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:40:10 -0500 Subject: [PATCH 77/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index a95bc001..f18b68ad 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -53,9 +53,9 @@ First, an input file containing Scheme code is received on the command line and The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. -TODO: move reader section up here?? +Programs are linked with the necessary Scheme libraries and the Cyclone runtime library to create an executable: -TODO: have another diagram that illustrates the compiled file contains a mix of generated C code, and runtime (with primitives, gc, helper functions, environments, etc)?? +Diagram of files linked into a compiled executable ## Source-to-Source Transformations From 29180cbb281e6a350b91e6b572670b41726d4391 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:49:31 -0500 Subject: [PATCH 78/93] Updated --- docs/images/runtime.dia | Bin 1653 -> 2046 bytes docs/images/runtime.png | Bin 27166 -> 20661 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/runtime.dia b/docs/images/runtime.dia index be06b1cdbc2ae1b3cb36c69ff0791b41857316e4..813dc36cc0c84056b21e9120ab3fa1b51debca4b 100644 GIT binary patch literal 2046 zcmV|znK^UXeNSfUvhl>Y%mbO7F90?5^R~swVuc2cz2WY zy7SNLE;_F}5#KJuD2bRzwp~ub(B~}3ye83#H}?}ynJ=f^{0-k--}pGd|q|*B1leV{^>O4%V#H5 z@b&I3XG3PK_7dR{jyXR55;0o|kH>qaS+PxxrFq_Lv~SeQ?G7E7Y*Xoiox1SZ6OVH9 zAJ>;^BR|2p;uvh2i2LVH8)Fhq{^8Rk@9ejP1s;n$jBxC3Kjdpd|z0*@3U}}4k+841$AANf8pVR%kE8OnE%P6JN3;c5l#Kg zfQNa&!?ppB&=3QNy9{&)WSC1QV--nw2u;v1y5+F2!JaFdC#Ffm`RMb-?KF&n?WE&W zoVY@T#rU2-koAE?mGUeKl{gbqY4oGFA@Mce1Qn0uOLGZ%Nl_YZL4 z&MAtXy?K^)=D#RSM7IPc8il}Ipa*lxOq}YZWgvZDMu7wq~ zxt7~dTM{)Kdvv|jrtVCpC7wdNQbp*uM?PI8Orm#9RcJ>lRX0av1XQ_H+l@Q65dM=q zG8V)GBaKrD3KBlDeShcvJy(T1;0sH;)826gS$f^H8M>H*|_ zl6Hm9y{oTc60u0|Si|mlV7E9eHRGO?ajlD#fzQRbxV0oAg=|j8j4PceA7jf^j0=0s zxGe`vGp=S_&A6IzYZ%vQE$DdIWhK|LGR7qt<2o7RQq8!Uad$IrVOna&?G5ANi!-j< zS`saVY;MPlE1f7GV~Z%pMZIR+mIJ04S2M0=T+O&Oj7wSzx-*1kms)OTkV`Yjbu-9? zrlwp?xw|R1I59Qm_6Bp^i(@Wre|Jk!8|fHxr4!|2Y*B@|RS7UAs z=EC+1tK1=kU5Yu*I9HNw3c4f*U8q4HJ1Oe+(b1;<@!gA~@`_B&Tjm3~l)~h6I@DZxc=2W!SYi}eoG$^MUniE-7s7yVdU}XZ1uC;UHQUZQ9y&(YUo4A$m!U{i3@0_iEX=mY&%`Y zHeScJdh0f{ot}nvKSKGyFryO&Suew^F8y!4P(kM2!!DD4$(!l#`knL%1rP!=eJX<0 zk0%tY)B6kN?As~(PnoT!GZCOOJ(-|r%pl6RswZiy9O%zPI@aSo8zz-cY(Cx zokj6}F0C_vjk`S;(>nJQT89C4UEJxN9!z2O$P!a>-WVdOe#A{PF4za{E8XeQH*C%) zh#0t(xccE#y+lCkGL>Y~zS=~(t~R;rY7;a&FE}= zQse=xA?-`WY3ny6It@Dqbx>V+>MwPW%OqpSeC=we?30(m6V-($t$0=QP8Xi~Q+Og5 z$*@rSpBZ<%v^Y(%=thc#I#02h_DAPfI>*{Y73dUH(dqgo2SBLGyU#wR)3l cwb#4sbNXjTZ>|b|m-Oc9e>AS)xW9Y=0D-;wEdT%j literal 1653 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 Z`G%J#J5mU}KM4vV|5`=5P|E1r{{z?^6}SKZ From f0fbc6d7245294517317df848269b0fccfeaf101 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 21:54:18 -0500 Subject: [PATCH 79/93] WIP --- docs/images/compiler.png | Bin 19373 -> 18591 bytes docs/images/runtime.png | Bin 20661 -> 19344 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/compiler.png b/docs/images/compiler.png index 2c2574de632df7d1e374b8b7c94b2cc65e295113..94c6f811d0b51ee00e48963d673f1715e4c9fbe6 100644 GIT binary patch literal 18591 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 literal 20661 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 Date: Mon, 9 Jan 2017 22:04:39 -0500 Subject: [PATCH 80/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index f18b68ad..8eb4607f 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -244,7 +244,7 @@ Heap objects are not relocated, making it easier for the runtime to support nati ### Major Garbage Collection Algorithm -During a major GC the collector thread transitions through the following states. +Each object is marked with a specific color (white, gray, or black) that determines how it will be handled during a major collection. Major GC transitions through the following states: #### Clear The collector thread swaps the values of the clear color (white) and the mark color (black). This is more efficient than modifying the color on each object in the heap. The collector then transitions to sync 1. At this point no heap objects are marked, as demonstrated below: From 06781b38d2aa666ee230a00746e554a4f0c17899 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:21:30 -0500 Subject: [PATCH 81/93] Added new section --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 8eb4607f..b682325c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -369,8 +369,6 @@ A Scheme API for exception handling is provided as part of R7RS. ## Scheme Libraries -TODO: explain compiler is mostly implemented as libraries? maybe a new sub-section? - ### Native Thread Support A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. @@ -391,6 +389,10 @@ The interpreter itself is straightforward but there is nice speed up to be had b The interpreter's full implementation is available in the `(scheme eval)` library, and the `icyc` executable is provided for convenient access to a REPL. +### Compiler Internals + +Most of the Cyclone compiler is implemented in Scheme as [a series of libraries](API.md#cyclone-libraries). + ## Scheme Standards Cyclone targets the [R7RS-small specification](https://github.com/justinethier/cyclone/raw/master/docs/r7rs.pdf). This spec is relatively new and provides incremental improvements from the popular [R5RS spec](http://www.schemers.org/Documents/Standards/R5RS/HTML/). Library support is the most important new feature but there are also exceptions, system interfaces, and a more consistent API. From 923b168944b4a4aad0e8ffb329aed5ac82ffdc74 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:22:09 -0500 Subject: [PATCH 82/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index b682325c..1a88554f 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -36,6 +36,7 @@ Before we get started, I want to say **Thank You** to all of the contributors to - [Native Thread Support](#native-thread-support) - [Reader](#reader) - [Interpreter](#interpreter) + - [Compiler Internals](#compiler-internals) - [Scheme Standards](#scheme-standards) - [Benchmarks](#benchmarks) - [Future](#future) From 603c68f7bfb4508bc799e7c0b92cdefc29387280 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:39:49 -0500 Subject: [PATCH 83/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 1a88554f..612a7caf 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -392,7 +392,7 @@ The interpreter's full implementation is available in the `(scheme eval)` librar ### Compiler Internals -Most of the Cyclone compiler is implemented in Scheme as [a series of libraries](API.md#cyclone-libraries). +Most of the Cyclone compiler is implemented in Scheme as [a series of libraries](API.md#api-documentation). ## Scheme Standards From 3696b7e5e4aad249855c193883c46ddf7d395bff Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 9 Jan 2017 22:41:39 -0500 Subject: [PATCH 84/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 612a7caf..63de394e 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -392,7 +392,7 @@ The interpreter's full implementation is available in the `(scheme eval)` librar ### Compiler Internals -Most of the Cyclone compiler is implemented in Scheme as [a series of libraries](API.md#api-documentation). +Most of the Cyclone compiler is implemented in Scheme as [a series of libraries](API.md#cyclone-compiler-api). ## Scheme Standards From 5df57542f042a45139fb643b9415e5e1ac518413 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 20:13:15 -0500 Subject: [PATCH 85/93] Added summary --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 63de394e..041bbe08 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -243,6 +243,12 @@ Under Cyclone's runtime each thread contains its own stack that is used for priv Heap objects are not relocated, making it easier for the runtime to support native threads. In addition major GC uses a collector thread that executes asynchronously so application threads can continue to run concurrently even during collections. +In summary: + +- All objects on the stack are collected using Cheney on the MTA, and the ones that survive are placed on the heap. +- Heap objects are collected during Major GC using the DLG algorithm. +- Heap collection runs on a separate thread in parallel with application threads. + ### Major Garbage Collection Algorithm Each object is marked with a specific color (white, gray, or black) that determines how it will be handled during a major collection. Major GC transitions through the following states: From 3adf6fb1d29c58636783e52129afbb68a21223c2 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 20:17:21 -0500 Subject: [PATCH 86/93] Explain mark phase --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 041bbe08..20ab26bd 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -259,7 +259,11 @@ The collector thread swaps the values of the clear color (white) and the mark co Initial object graph #### Mark -The collector thread transitions to sync 2 and then async. At this point it marks the global variables and waits for the application threads to also transition to async. When an application thread transitions it will mark its roots and use black as the allocation color to prevent any new objects from being collected during this cycle: +The collector thread transitions to sync 2 and then async. At this point it marks the global variables and waits for the application threads to also transition to async. When an application thread transitions it will: + +- Mark its roots black. +- Gray any child objects of the roots. The collector thread traces these gray objects during the next phase. +- Use black as the allocation color to prevent any new objects from being collected during this cycle. Initial object graph From 32ee859a44d9821cf674293194e8e9675b941577 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 20:20:53 -0500 Subject: [PATCH 87/93] WIP --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 20ab26bd..ae11bb59 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -380,6 +380,8 @@ A Scheme API for exception handling is provided as part of R7RS. ## Scheme Libraries +This section describes a few notable parts of [Cyclone's Scheme API](API.md). + ### Native Thread Support A multithreading API is provided based on [SRFI 18](http://justinethier.github.io/cyclone/docs/api/srfi/18). Most of the work to support multithreading is accomplished by the runtime and garbage collector. From 5195cbe6149e34fa20ce52be317bd5fe7d980cc6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 23:27:32 -0500 Subject: [PATCH 88/93] Revs --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index ae11bb59..9dad0a4c 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -6,7 +6,7 @@ ###### by [Justin Ethier](https://github.com/justinethier) -This write-up is an attempt to provide a constructive background on the various components of Cyclone and how they were written. It is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sorts for everything that has happened in the last year and half. +This write-up is an attempt to provide a high level background on the various components of Cyclone and how they were written. It is a revision of the [original write-up](Writing-the-Cyclone-Scheme-Compiler.md), written over a year ago in August 2015, when the compiler was self hosting but before the new garbage collector was written. So much time has passed that I thought it would be worthwhile to provide a brain dump of sorts for everything that has happened in the last year and half. Before we get started, I want to say **Thank You** to all of the contributors to the Scheme community. Cyclone is based on the community's latest revision of the Scheme language and wherever possible existing code was reused or repurposed for this project, instead of starting from scratch. At the end of this document is a list of helpful online resources. Without high quality Scheme resources like these the Cyclone project would not have been possible. From b3218fcbaab8bae330d7482aef5d954cc270dfb3 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 10 Jan 2017 23:33:12 -0500 Subject: [PATCH 89/93] Relocated text --- docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md index 9dad0a4c..2ec219af 100644 --- a/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md +++ b/docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md @@ -52,8 +52,6 @@ Cyclone has a similar architecture to other modern compilers: First, an input file containing Scheme code is received on the command line and loaded into an abstract syntax tree (AST) by Cyclone's parser. From there a series of source-to-source transformations are performed on the AST to expand macros, perform optimizations, and make the code easier to compile to C. These intermediate representations (IR) can be printed out in a readable format to aid debugging. The final AST is then output as a `.c` file and the C compiler is invoked to create the final executable or object file. -The code is represented internally as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. - Programs are linked with the necessary Scheme libraries and the Cyclone runtime library to create an executable: Diagram of files linked into a compiled executable @@ -96,6 +94,8 @@ The 90-minute compiler ultimately compiles the code down to a single function an To make Cyclone easier to maintain a separate pass is made for each transformation. This allows Cyclone's code to be as simple as possible and minimizes dependencies so there is less chance of changes to one transformation breaking the code for another. +Internally Cyclone represents the code being compiled as an AST of regular Scheme objects. Since Scheme represents both code and data using [S-expressions](https://en.wikipedia.org/wiki/S-expression), our compiler does not (in general) have to use custom abstract data types to store the code as would be the case with many other languages. + Most of the transformations follow a similar pattern of recursively examining an expression. Here is a short example that demonstrates the code structure: (define (search exp) From 5356b3e4a93adaff04575965e00dda3906bf7fb1 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 11 Jan 2017 22:17:26 -0500 Subject: [PATCH 90/93] Remove unnecesary include --- include/cyclone/ck_ht_hash.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/cyclone/ck_ht_hash.h b/include/cyclone/ck_ht_hash.h index be4f08e6..f8cb705e 100644 --- a/include/cyclone/ck_ht_hash.h +++ b/include/cyclone/ck_ht_hash.h @@ -32,7 +32,6 @@ */ #include -#include //----------------------------------------------------------------------------- // MurmurHash3 was written by Austin Appleby, and is placed in the public From bb660f850212ff64cafd642d2f1f6b746b5534ef Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 11 Jan 2017 23:15:06 -0500 Subject: [PATCH 91/93] Link to new document --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f53fdea4..5206932f 100644 --- a/README.md +++ b/README.md @@ -47,14 +47,14 @@ Documentation - The [User Manual](docs/User-Manual.md) covers in detail how to use Cyclone, and provides information and API documentation on the Scheme language features implemented by Cyclone. +- [Writing the Cyclone Scheme Compiler](docs/Writing-the-Cyclone-Scheme-Compiler-Revised-2017.md) provides high-level details on how the compiler was written and how it works. + - There is a [Development Guide](docs/Development.md) with instructions for common tasks when hacking on the compiler itself. - Cyclone's [Garbage Collector](docs/Garbage-Collector.md) is documented at a high-level. This document includes details on extending Cheney on the MTA to support multiple stacks and fusing that approach with a tri-color marking collector. - This [Benchmarks](http://ecraven.github.io/r7rs-benchmarks/benchmark.html) page by [ecraven](https://github.com/ecraven) compares the performance of Cyclone with other R7RS and R6RS Schemes using a common set of benchmarks. -- [Writing the Cyclone Scheme Compiler](docs/Writing-the-Cyclone-Scheme-Compiler.md) provides high-level details on how the compiler was written and how it works. - - Finally, if you need another resource to start learning the Scheme language you may want to try a classic textbook such as [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html). Example Programs From bb91733e725a5a4d1c4b0d42aa6ea5b7b4e77aa5 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 11 Jan 2017 23:22:53 -0500 Subject: [PATCH 92/93] Updated images --- docs/images/benchmark-tests-finished.png | Bin 17661 -> 28369 bytes docs/images/benchmark-total-runtimes.png | Bin 10529 -> 10595 bytes docs/images/compiler.png | Bin 18591 -> 18759 bytes docs/images/runtime.png | Bin 19344 -> 17942 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/benchmark-tests-finished.png b/docs/images/benchmark-tests-finished.png index 53257910b6f33def34e4c5c6a449ba318fbd8a72..6ba6fb97d2e42eee07b95717050326f6a2103e2d 100644 GIT binary patch literal 28369 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 RHgGu!i=(zju!qlF{V$1w_s{?U literal 17661 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 K&&$MK`~ELAPRe@# literal 10529 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 From 920af9847655fa085f4d545cf0a0699ff53ff0c5 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 12 Jan 2017 02:22:55 -0500 Subject: [PATCH 93/93] Added file --- tests/debug/earley-gmon-analysis.txt | 6824 ++++++++++++++++++++++++++ 1 file changed, 6824 insertions(+) create mode 100644 tests/debug/earley-gmon-analysis.txt diff --git a/tests/debug/earley-gmon-analysis.txt b/tests/debug/earley-gmon-analysis.txt new file mode 100644 index 00000000..938d3003 --- /dev/null +++ b/tests/debug/earley-gmon-analysis.txt @@ -0,0 +1,6824 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls s/call s/call name + 37.79 298.25 298.25 4280993215 0.00 0.00 gc_collector_mark_gray + 12.90 400.07 101.83 2140354415 0.00 0.00 gc_mark_black + 8.95 470.67 70.60 1098 0.06 0.10 gc_sweep + 5.93 517.47 46.80 357411 0.00 0.00 gc_empty_collector_stack + 4.94 556.45 38.98 2514214181 0.00 0.00 gc_allocated_bytes + 4.22 589.74 33.30 2207552592 0.00 0.00 vpbuffer_add + 3.12 614.36 24.62 2275804334 0.00 0.00 ck_pr_md_load_int + 2.87 636.97 22.61 256642811 0.00 0.00 ck_pr_barrier + 1.92 652.09 15.12 306470 0.00 0.00 gc_minor + 1.43 663.38 11.29 216534587 0.00 0.00 gc_try_alloc + 1.37 674.21 10.84 277761978 0.00 0.00 gc_move + 0.88 681.14 6.93 216534532 0.00 0.00 gc_copy_obj + 0.76 687.12 5.97 46222617 0.00 0.00 __lambda_78 + 0.72 692.83 5.71 216534517 0.00 0.00 gc_alloc + 0.71 698.40 5.57 ck_cc_popcount + 0.47 702.11 3.71 153035271 0.00 0.00 Cyc_vector_ref + 0.47 705.79 3.69 23727868 0.00 0.00 __lambda_326 + 0.46 709.41 3.62 223 0.02 2.36 gc_collector_trace + 0.44 712.88 3.46 35070187 0.00 0.00 __lambda_77 + 0.41 716.14 3.27 23737943 0.00 0.00 __lambda_284 + 0.41 719.39 3.25 vpbuffer_free + 0.35 722.19 2.80 ck_pr_md_store_uint + 0.35 724.97 2.78 169600308 0.00 0.00 Cyc_st_add + 0.34 727.65 2.68 410327643 0.00 0.00 Cyc_is_pair + 0.32 730.20 2.54 34759092 0.00 0.00 __lambda_327 + 0.28 732.39 2.20 47455800 0.00 0.00 __lambda_282 + 0.27 734.55 2.16 17224530 0.00 0.00 __lambda_64 + 0.27 736.68 2.13 771639154 0.00 0.00 cell_get + 0.26 738.77 2.08 40951951 0.00 0.00 __lambda_63 + 0.25 740.77 2.00 25194548 0.00 0.00 __lambda_69 + 0.25 742.73 1.96 11150907 0.00 0.00 __lambda_79 + 0.23 744.58 1.85 23727811 0.00 0.00 __lambda_321 + 0.21 746.22 1.64 15143428 0.00 0.00 __lambda_84 + 0.20 747.82 1.59 15940989 0.00 0.00 __lambda_91 + 0.20 749.40 1.58 216534461 0.00 0.00 gc_fixup_moved_obj + 0.20 750.95 1.54 22317984 0.00 0.00 __lambda_85 + 0.18 752.39 1.45 15940855 0.00 0.00 __lambda_92 + 0.17 753.75 1.36 15143033 0.00 0.00 __lambda_83 + 0.16 755.02 1.27 11150932 0.00 0.00 __lambda_81 + 0.16 756.29 1.27 23728557 0.00 0.00 __lambda_325 + 0.16 757.53 1.24 7173717 0.00 0.00 __lambda_86 + 0.15 758.72 1.19 17224399 0.00 0.00 __lambda_66 + 0.15 759.90 1.18 17224619 0.00 0.00 __lambda_65 + 0.15 761.06 1.16 153047710 0.00 0.00 Cyc_is_vector + 0.15 762.22 1.16 7970898 0.00 0.00 __lambda_70 + 0.14 763.36 1.14 81303063 0.00 0.00 Cyc_num_fast_gte_op + 0.14 764.50 1.14 11150920 0.00 0.00 __lambda_80 + 0.14 765.62 1.12 11150284 0.00 0.00 __lambda_82 + 0.14 766.73 1.11 216534597 0.00 0.00 gc_thr_add_to_move_buffer + 0.14 767.82 1.09 17222428 0.00 0.00 __lambda_67 + 0.13 768.86 1.03 23727286 0.00 0.00 __lambda_324 + 0.13 769.88 1.02 158564737 0.00 0.00 Cyc_is_null + 0.13 770.87 0.99 7970335 0.00 0.00 __lambda_75 + 0.10 771.68 0.81 7970885 0.00 0.00 __lambda_73 + 0.10 772.48 0.80 7173825 0.00 0.00 __lambda_87 + 0.10 773.25 0.77 7173691 0.00 0.00 __lambda_88 + 0.10 774.01 0.77 7970468 0.00 0.00 __lambda_74 + 0.10 774.76 0.75 39924166 0.00 0.00 __lambda_283 + 0.10 775.51 0.75 7173628 0.00 0.00 __lambda_89 + 0.09 776.25 0.73 67253349 0.00 0.00 add_mutation + 0.09 776.97 0.72 167205531 0.00 0.00 Cyc_cdr + 0.09 777.66 0.69 153043652 0.00 0.00 Cyc_is_number + 0.09 778.35 0.69 7970943 0.00 0.00 __lambda_71 + 0.08 779.01 0.67 7173660 0.00 0.00 __lambda_90 + 0.08 779.67 0.66 67255054 0.00 0.00 gc_mut_update + 0.08 780.33 0.66 35069195 0.00 0.00 __lambda_59 + 0.08 780.98 0.65 67248908 0.00 0.00 Cyc_set_cell + 0.08 781.62 0.64 7970996 0.00 0.00 __lambda_72 + 0.08 782.23 0.61 82499403 0.00 0.00 Cyc_fast_sum + 0.07 782.78 0.56 154638249 0.00 0.00 Cyc_car + 0.07 783.33 0.54 27098894 0.00 0.00 __lambda_76 + 0.06 783.84 0.51 23726953 0.00 0.00 __lambda_62 + 0.06 784.34 0.50 45832448 0.00 0.00 __lambda_274 + 0.05 784.74 0.41 23728336 0.00 0.00 __lambda_323 + 0.05 785.12 0.38 23727555 0.00 0.00 __lambda_281 + 0.04 785.47 0.35 17223300 0.00 0.00 __lambda_61 + 0.04 785.77 0.30 10762697 0.00 0.00 __lambda_272 + 0.03 786.04 0.27 23727863 0.00 0.00 __lambda_320 + 0.03 786.31 0.27 15147362 0.00 0.00 __lambda_295 + 0.03 786.57 0.26 7969910 0.00 0.00 __lambda_68 + 0.03 786.83 0.26 gc_heap_last + 0.03 787.08 0.24 1850 0.00 0.00 gc_grow_heap + 0.03 787.29 0.22 7970285 0.00 0.00 __lambda_60 + 0.03 787.51 0.21 39924294 0.00 0.00 __lambda_322 + 0.02 787.70 0.19 11150344 0.00 0.00 __lambda_58 + 0.02 787.84 0.14 Cyc_length_as_object + 0.02 787.97 0.13 7173165 0.00 0.00 __lambda_57 + 0.02 788.10 0.13 5579159 0.00 0.00 __lambda_56 + 0.02 788.22 0.12 25906361 0.00 0.00 Cyc_fast_sub + 0.01 788.33 0.11 8768479 0.00 0.00 Cyc_num_fast_lt_op + 0.01 788.43 0.10 273 0.00 0.00 gc_zero_read_write_counts + 0.01 788.51 0.08 306503 0.00 0.00 do_dispatch + 0.01 788.59 0.07 3188171 0.00 0.00 __lambda_55 + 0.01 788.65 0.07 11151772 0.00 0.00 __lambda_276 + 0.01 788.71 0.06 __lambda_285 + 0.01 788.76 0.06 3993 0.00 0.00 Cyc_vector_set + 0.01 788.82 0.06 97 0.00 0.00 equal + 0.01 788.87 0.05 Cyc_num_lte_op + 0.01 788.91 0.04 Cyc_get_global_variables + 0.01 788.96 0.04 62 0.00 0.00 Cyc_length + 0.00 788.99 0.04 30 0.00 0.00 Cyc_set_car + 0.00 789.02 0.03 306499 0.00 0.00 gc_sum_pending_writes + 0.00 789.04 0.02 1 0.02 143.28 Cyc_start_trampoline + 0.00 789.06 0.02 __halt + 0.00 789.08 0.02 debug_dump_globals + 0.00 789.10 0.01 1 0.01 0.01 Cyc_fast_mul + 0.00 789.11 0.01 363586 0.00 0.00 mark_stack_or_heap_obj + 0.00 789.12 0.01 306500 0.00 0.00 clear_mutations + 0.00 789.12 0.01 306500 0.00 0.00 gc_mut_cooperate + 0.00 789.13 0.01 225 0.00 0.00 gc_mark_globals + 0.00 789.14 0.01 364053 0.00 0.00 gc_is_stack_obj + 0.00 789.14 0.01 306468 0.00 0.00 GC + 0.00 789.15 0.01 1 0.01 0.01 __lambda_277 + 0.00 789.15 0.00 380109 0.00 0.00 gc_mark_gray + 0.00 789.15 0.00 171424 0.00 0.00 gc_mark_gray2 + 0.00 789.15 0.00 12712 0.00 0.00 gc_is_heap_empty + 0.00 789.15 0.00 3205 0.00 0.00 gc_get_heap + 0.00 789.15 0.00 3136 0.00 0.00 ck_pr_cas_int + 0.00 789.15 0.00 2584 0.00 0.00 __lambda_150 + 0.00 789.15 0.00 2150 0.00 0.00 __lambda_147 + 0.00 789.15 0.00 2150 0.00 0.00 __lambda_148 + 0.00 789.15 0.00 2150 0.00 0.00 __lambda_149 + 0.00 789.15 0.00 2054 0.00 0.00 gc_heap_free + 0.00 789.15 0.00 1923 0.00 0.00 __lambda_249 + 0.00 789.15 0.00 1923 0.00 0.00 __lambda_250 + 0.00 789.15 0.00 1923 0.00 0.00 __lambda_251 + 0.00 789.15 0.00 1855 0.00 0.00 gc_heap_create + 0.00 789.15 0.00 1708 0.00 0.00 __lambda_292 + 0.00 789.15 0.00 1708 0.00 0.00 __lambda_293 + 0.00 789.15 0.00 1486 0.00 0.00 ck_pr_fence_load + 0.00 789.15 0.00 1417 0.00 0.00 ck_pr_md_load_ptr + 0.00 789.15 0.00 1361 0.00 0.00 __lambda_244 + 0.00 789.15 0.00 1361 0.00 0.00 __lambda_245 + 0.00 789.15 0.00 1361 0.00 0.00 __lambda_246 + 0.00 789.15 0.00 1361 0.00 0.00 __lambda_247 + 0.00 789.15 0.00 1361 0.00 0.00 __lambda_248 + 0.00 789.15 0.00 1240 0.00 0.00 __lambda_146 + 0.00 789.15 0.00 935 0.00 0.00 __lambda_238 + 0.00 789.15 0.00 870 0.00 0.00 __lambda_156 + 0.00 789.15 0.00 864 0.00 0.00 MurmurHash64A + 0.00 789.15 0.00 864 0.00 0.00 hs_hash + 0.00 789.15 0.00 695 0.00 0.00 __lambda_237 + 0.00 789.15 0.00 657 0.00 0.00 gc_post_handshake + 0.00 789.15 0.00 645 0.00 0.00 __lambda_154 + 0.00 789.15 0.00 645 0.00 0.00 __lambda_155 + 0.00 789.15 0.00 596 0.00 0.00 gc_wait_handshake + 0.00 789.15 0.00 556 0.00 0.00 __lambda_266 + 0.00 789.15 0.00 556 0.00 0.00 __lambda_267 + 0.00 789.15 0.00 556 0.00 0.00 __lambda_268 + 0.00 789.15 0.00 556 0.00 0.00 __lambda_269 + 0.00 789.15 0.00 556 0.00 0.00 __lambda_270 + 0.00 789.15 0.00 477 0.00 0.00 gc_handshake + 0.00 789.15 0.00 476 0.00 0.00 add_symbol + 0.00 789.15 0.00 476 0.00 0.00 set_insert + 0.00 789.15 0.00 455 0.00 0.00 __lambda_234 + 0.00 789.15 0.00 434 0.00 0.00 __lambda_145 + 0.00 789.15 0.00 434 0.00 0.00 __lambda_151 + 0.00 789.15 0.00 434 0.00 0.00 __lambda_152 + 0.00 789.15 0.00 434 0.00 0.00 __lambda_153 + 0.00 789.15 0.00 388 0.00 0.00 find_or_add_symbol + 0.00 789.15 0.00 388 0.00 0.00 find_symbol_by_name + 0.00 789.15 0.00 388 0.00 0.00 set_get + 0.00 789.15 0.00 357 0.00 0.00 __lambda_127 + 0.00 789.15 0.00 345 0.00 0.00 _strdup + 0.00 789.15 0.00 345 0.00 0.00 add_symbol_by_name + 0.00 789.15 0.00 328 0.00 0.00 __lambda_202 + 0.00 789.15 0.00 275 0.00 0.00 gc_free_old_thread_data + 0.00 789.15 0.00 269 0.00 0.00 __lambda_125 + 0.00 789.15 0.00 269 0.00 0.00 __lambda_126 + 0.00 789.15 0.00 269 0.00 0.00 __lambda_143 + 0.00 789.15 0.00 269 0.00 0.00 __lambda_160 + 0.00 789.15 0.00 269 0.00 0.00 __lambda_161 + 0.00 789.15 0.00 257 0.00 0.00 add_global + 0.00 789.15 0.00 257 0.00 0.00 malloc_make_pair + 0.00 789.15 0.00 257 0.00 0.00 mcvar + 0.00 789.15 0.00 255 0.00 0.00 __lambda_197 + 0.00 789.15 0.00 255 0.00 0.00 __lambda_198 + 0.00 789.15 0.00 255 0.00 0.00 __lambda_199 + 0.00 789.15 0.00 255 0.00 0.00 __lambda_200 + 0.00 789.15 0.00 255 0.00 0.00 __lambda_201 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_196 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_233 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_235 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_236 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_239 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_240 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_241 + 0.00 789.15 0.00 240 0.00 0.00 __lambda_242 + 0.00 789.15 0.00 239 0.00 2.65 gc_collector + 0.00 789.15 0.00 225 0.00 0.00 __lambda_144 + 0.00 789.15 0.00 225 0.00 0.00 __lambda_157 + 0.00 789.15 0.00 225 0.00 0.00 __lambda_158 + 0.00 789.15 0.00 225 0.00 0.00 __lambda_159 + 0.00 789.15 0.00 218 0.00 0.00 Cyc_make_vector + 0.00 789.15 0.00 212 0.00 0.00 __lambda_216 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_264 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_265 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_278 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_279 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_280 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_281 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_282 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_283 + 0.00 789.15 0.00 193 0.00 0.00 __lambda_284 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_286 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_287 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_288 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_289 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_290 + 0.00 789.15 0.00 178 0.00 0.00 __lambda_291 + 0.00 789.15 0.00 151 0.00 0.00 __lambda_215 + 0.00 789.15 0.00 151 0.00 0.00 __lambda_224 + 0.00 789.15 0.00 121 0.00 0.00 __lambda_187 + 0.00 789.15 0.00 121 0.00 0.00 __lambda_188 + 0.00 789.15 0.00 117 0.00 0.00 __lambda_206 + 0.00 789.15 0.00 105 0.00 0.00 Cyc_eq + 0.00 789.15 0.00 105 0.00 0.00 __lambda_179 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_180 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_181 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_182 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_183 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_184 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_185 + 0.00 789.15 0.00 105 0.00 0.00 __lambda_186 + 0.00 789.15 0.00 104 0.00 0.00 __lambda_136 + 0.00 789.15 0.00 104 0.00 0.00 __lambda_137 + 0.00 789.15 0.00 95 0.00 0.00 equalp + 0.00 789.15 0.00 90 0.00 0.00 __lambda_222 + 0.00 789.15 0.00 90 0.00 0.00 __lambda_223 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_124 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_128 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_129 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_130 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_131 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_132 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_133 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_134 + 0.00 789.15 0.00 88 0.00 0.00 __lambda_135 + 0.00 789.15 0.00 85 0.00 0.00 Cyc_vector_length + 0.00 789.15 0.00 73 0.00 0.00 __lambda_195 + 0.00 789.15 0.00 73 0.00 0.00 __lambda_203 + 0.00 789.15 0.00 73 0.00 0.00 __lambda_204 + 0.00 789.15 0.00 73 0.00 0.00 __lambda_205 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_212 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_217 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_218 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_219 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_220 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_225 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_226 + 0.00 789.15 0.00 61 0.00 0.00 __lambda_227 + 0.00 789.15 0.00 47 0.00 0.00 apply + 0.00 789.15 0.00 44 0.00 0.00 __lambda_194 + 0.00 789.15 0.00 44 0.00 0.00 __lambda_207 + 0.00 789.15 0.00 44 0.00 0.00 __lambda_208 + 0.00 789.15 0.00 44 0.00 0.00 __lambda_209 + 0.00 789.15 0.00 44 0.00 0.00 __lambda_210 + 0.00 789.15 0.00 43 0.00 0.00 Cyc_apply + 0.00 789.15 0.00 42 0.00 0.00 _cons + 0.00 789.15 0.00 34 0.00 0.00 __lambda_301 + 0.00 789.15 0.00 33 0.00 0.00 __lambda_257 + 0.00 789.15 0.00 32 0.00 0.00 Cyc_is_port + 0.00 789.15 0.00 32 0.00 0.00 __lambda_298 + 0.00 789.15 0.00 32 0.00 0.00 __lambda_299 + 0.00 789.15 0.00 32 0.00 0.00 __lambda_300 + 0.00 789.15 0.00 30 0.00 0.00 __lambda_221 + 0.00 789.15 0.00 30 0.00 0.00 __lambda_316 + 0.00 789.15 0.00 30 0.00 0.00 __lambda_365 + 0.00 789.15 0.00 30 0.00 0.00 __lambda_366 + 0.00 789.15 0.00 28 0.00 0.00 vpbuffer_realloc + 0.00 789.15 0.00 24 0.00 0.00 Cyc_global_set + 0.00 789.15 0.00 22 0.00 0.00 __lambda_430 + 0.00 789.15 0.00 22 0.00 0.00 __lambda_431 + 0.00 789.15 0.00 22 0.00 0.00 __lambda_721 + 0.00 789.15 0.00 20 0.00 0.00 __lambda_19 + 0.00 789.15 0.00 20 0.00 0.00 __lambda_20 + 0.00 789.15 0.00 20 0.00 0.00 __lambda_383 + 0.00 789.15 0.00 18 0.00 0.00 Cyc_is_string + 0.00 789.15 0.00 17 0.00 0.00 __lambda_106 + 0.00 789.15 0.00 17 0.00 0.00 __lambda_254 + 0.00 789.15 0.00 17 0.00 0.00 __lambda_255 + 0.00 789.15 0.00 17 0.00 0.00 __lambda_256 + 0.00 789.15 0.00 17 0.00 0.00 __lambda_323 + 0.00 789.15 0.00 17 0.00 0.00 __lambda_324 + 0.00 789.15 0.00 17 0.00 0.00 memberp + 0.00 789.15 0.00 16 0.00 0.00 Cyc_num_fast_eq_op + 0.00 789.15 0.00 16 0.00 0.00 __lambda_105 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_123 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_138 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_139 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_140 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_141 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_168 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_178 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_189 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_190 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_191 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_192 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_193 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_211 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_228 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_229 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_230 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_231 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_253 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_258 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_259 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_260 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_261 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_262 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_322 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_325 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_326 + 0.00 789.15 0.00 16 0.00 0.00 __lambda_327 + 0.00 789.15 0.00 15 0.00 0.00 Cyc_is_eof_object + 0.00 789.15 0.00 15 0.00 0.00 __lambda_12 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_14 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_165 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_166 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_167 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_250 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_251 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_252 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_253 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_254 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_309 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_313 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_314 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_315 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_317 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_318 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_319 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_320 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_44 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_45 + 0.00 789.15 0.00 15 0.00 0.00 __lambda_470 + 0.00 789.15 0.00 14 0.00 0.00 Cyc_display + 0.00 789.15 0.00 13 0.00 0.00 Cyc_io_read_char + 0.00 789.15 0.00 13 0.00 0.00 gc_mutator_thread_blocked + 0.00 789.15 0.00 13 0.00 0.00 gc_mutator_thread_runnable + 0.00 789.15 0.00 12 0.00 0.00 Cyc_display_va + 0.00 789.15 0.00 12 0.00 0.00 Cyc_display_va_list + 0.00 789.15 0.00 12 0.00 0.00 __lambda_0 + 0.00 789.15 0.00 12 0.00 0.00 __lambda_1 + 0.00 789.15 0.00 12 0.00 0.00 __lambda_429 + 0.00 789.15 0.00 12 0.00 0.00 __lambda_432 + 0.00 789.15 0.00 12 0.00 0.00 __lambda_433 + 0.00 789.15 0.00 12 0.00 0.00 __lambda_434 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_241 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_242 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_243 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_244 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_245 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_246 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_247 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_248 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_249 + 0.00 789.15 0.00 10 0.00 0.00 __lambda_36 + 0.00 789.15 0.00 7 0.00 0.00 __lambda_395 + 0.00 789.15 0.00 7 0.00 0.00 __lambda_396 + 0.00 789.15 0.00 7 0.00 0.00 __lambda_397 + 0.00 789.15 0.00 6 0.00 0.00 gc_thr_grow_move_buffer + 0.00 789.15 0.00 5 0.00 0.00 Cyc_list2vector + 0.00 789.15 0.00 5 0.00 0.00 Cyc_string_append + 0.00 789.15 0.00 5 0.00 0.00 __lambda_13 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_15 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_16 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_17 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_18 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_366 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_43 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_440 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_55 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_56 + 0.00 789.15 0.00 5 0.00 0.00 __lambda_57 + 0.00 789.15 0.00 4 0.00 0.00 __lambda_113 + 0.00 789.15 0.00 4 0.00 0.00 __lambda_455 + 0.00 789.15 0.00 4 0.00 0.00 __lambda_456 + 0.00 789.15 0.00 4 0.00 0.00 __lambda_47 + 0.00 789.15 0.00 4 0.00 0.00 apply_va + 0.00 789.15 0.00 4 0.00 0.00 dispatch + 0.00 789.15 0.00 3 0.00 0.00 Cyc_check_obj + 0.00 789.15 0.00 3 0.00 0.00 Cyc_list2string + 0.00 789.15 0.00 3 0.00 0.00 Cyc_string2number2_ + 0.00 789.15 0.00 3 0.00 0.00 Cyc_string2number_ + 0.00 789.15 0.00 3 0.00 0.00 Cyc_write_char + 0.00 789.15 0.00 3 0.00 0.00 __lambda_10 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_11 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_112 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_24 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_27 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_28 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_307 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_308 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_309 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_328 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_329 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_330 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_336 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_337 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_35 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_360 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_361 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_362 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_373 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_384 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_387 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_388 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_389 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_390 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_390 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_40 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_41 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_419 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_42 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_439 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_444 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_45 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_46 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_718 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_719 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_722 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_723 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_724 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_725 + 0.00 789.15 0.00 3 0.00 0.00 __lambda_9 + 0.00 789.15 0.00 3 0.00 0.00 assoc + 0.00 789.15 0.00 3 0.00 0.00 str2int + 0.00 789.15 0.00 2 0.00 0.00 Cyc_fast_div + 0.00 789.15 0.00 2 0.00 0.00 Cyc_io_flush_output_port + 0.00 789.15 0.00 2 0.00 0.00 Cyc_num_fast_gt_op + 0.00 789.15 0.00 2 0.00 0.00 Cyc_number2string2 + 0.00 789.15 0.00 2 0.00 0.00 Cyc_write + 0.00 789.15 0.00 2 0.00 0.00 Cyc_write_va + 0.00 789.15 0.00 2 0.00 0.00 Cyc_write_va_list + 0.00 789.15 0.00 2 0.00 0.00 _Cyc_write + 0.00 789.15 0.00 2 0.00 0.00 __lambda_0 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_1 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_2 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_21 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_22 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_23 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_245 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_246 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_247 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_297 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_3 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_302 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_303 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_304 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_304 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_305 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_306 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_359 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_363 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_364 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_365 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_367 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_367 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_368 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_369 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_370 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_371 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_372 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_377 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_384 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_385 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_386 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_387 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_388 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_389 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_414 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_415 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_416 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_417 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_418 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_423 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_438 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_441 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_442 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_443 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_450 + 0.00 789.15 0.00 2 0.00 0.00 __lambda_521 + 0.00 789.15 0.00 2 0.00 0.00 double2buffer + 0.00 789.15 0.00 1 0.00 0.00 Cyc_heap_init + 0.00 789.15 0.00 1 0.00 0.00 Cyc_stderr + 0.00 789.15 0.00 1 0.00 0.00 Cyc_stdin + 0.00 789.15 0.00 1 0.00 0.00 Cyc_stdout + 0.00 789.15 0.00 1 0.00 0.00 __75halt + 0.00 789.15 0.00 1 0.00 0.00 __lambda_0 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_0 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_102 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_103 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_104 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_107 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_108 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_109 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_110 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_111 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_114 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_115 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_116 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_117 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_118 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_119 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_120 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_121 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_122 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_142 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_15 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1544 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1545 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1546 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1547 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1548 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1549 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1550 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1551 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1552 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1553 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1554 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1555 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1556 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1557 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1558 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1559 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1560 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_1561 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_162 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_163 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_164 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_169 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_170 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_171 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_172 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_173 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_174 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_175 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_176 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_177 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_2 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_2 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_2 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_232 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_243 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_248 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_249 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_250 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_251 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_252 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_263 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_271 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_273 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_275 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_285 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_294 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_296 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_3 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_3 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_3 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_307 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_308 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_310 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_311 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_312 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_321 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_328 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_329 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_330 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_331 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_332 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_333 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_334 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_335 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_336 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_337 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_338 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_339 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_340 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_341 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_342 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_343 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_344 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_345 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_346 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_347 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_348 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_349 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_350 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_351 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_352 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_353 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_354 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_355 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_356 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_357 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_358 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_374 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_375 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_376 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_378 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_379 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_380 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_381 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_382 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_383 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_385 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_386 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_387 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_388 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_389 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_390 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_391 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_391 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_392 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_392 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_393 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_393 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_394 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_394 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_395 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_396 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_397 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_398 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_398 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_399 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_399 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_399 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_4 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_4 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_400 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_400 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_401 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_402 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_403 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_404 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_405 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_406 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_407 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_408 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_409 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_41 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_410 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_411 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_412 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_413 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_42 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_42 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_420 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_421 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_422 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_424 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_425 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_426 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_427 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_428 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_43 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_435 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_436 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_437 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_44 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_445 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_446 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_447 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_448 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_449 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_451 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_452 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_453 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_454 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_457 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_458 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_459 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_460 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_461 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_462 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_463 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_464 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_465 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_466 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_467 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_468 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_469 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_471 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_472 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_473 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_474 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_475 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_476 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_477 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_478 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_479 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_48 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_480 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_481 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_482 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_483 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_484 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_485 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_486 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_487 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_489 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_49 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_490 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_491 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_492 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_493 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_494 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_495 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_496 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_497 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_498 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_499 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_5 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_5 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_5 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_50 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_500 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_501 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_502 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_503 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_504 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_505 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_506 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_507 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_508 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_509 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_51 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_510 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_511 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_512 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_513 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_514 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_52 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_520 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_522 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_523 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_524 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_525 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_526 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_527 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_528 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_529 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_53 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_530 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_531 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_532 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_533 + 0.00 789.15 0.00 1 0.00 0.01 __lambda_534 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_535 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_536 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_537 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_538 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_54 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_6 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_6 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_7 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_765 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_766 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_8 + 0.00 789.15 0.00 1 0.00 0.00 __lambda_93 + 0.00 789.15 0.00 1 0.00 0.00 c_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_entry_pt_first_lambda + 0.00 789.15 0.00 1 0.00 0.00 c_scheme_char_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_schemebase_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_schemecyclonecommon_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_schemeread_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_schemetime_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 c_schemewrite_entry_pt + 0.00 789.15 0.00 1 0.00 0.00 gc_add_mutator + 0.00 789.15 0.00 1 0.00 0.00 gc_init_heap + 0.00 789.15 0.00 1 0.00 0.00 gc_initialize + 0.00 789.15 0.00 1 0.00 0.00 gc_start_collector + 0.00 789.15 0.00 1 0.00 0.00 gc_thread_data_init + 0.00 789.15 0.00 1 0.00 0.00 set_env_variables + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + + Call graph (explanation follows) + + +granularity: each sample hit covers 4 byte(s) for 0.00% of 789.15 seconds + +index % time self children called name + +[1] 80.3 0.00 633.66 collector_main [1] + 0.00 633.66 239/239 gc_collector [2] + 0.00 0.00 6441/2275804334 ck_pr_md_load_int [13] +----------------------------------------------- + 0.00 633.66 239/239 collector_main [1] +[2] 80.3 0.00 633.66 239 gc_collector [2] + 3.62 523.55 223/223 gc_collector_trace [3] + 70.60 35.62 1098/1098 gc_sweep [10] + 0.24 0.00 1830/1850 gc_grow_heap [95] + 0.01 0.01 225/225 gc_mark_globals [114] + 0.00 0.00 477/477 gc_handshake [166] + 0.00 0.00 196/596 gc_wait_handshake [162] + 0.00 0.00 275/275 gc_free_old_thread_data [174] + 0.00 0.00 379/2275804334 ck_pr_md_load_int [13] + 0.00 0.00 200/657 gc_post_handshake [195] + 0.00 0.00 3205/3205 gc_get_heap [484] + 0.00 0.00 1399/3136 ck_pr_cas_int [485] +----------------------------------------------- + 3.62 523.55 223/223 gc_collector [2] +[3] 66.8 3.62 523.55 223 gc_collector_trace [3] + 46.80 476.67 357411/357411 gc_empty_collector_stack [4] + 0.02 0.06 357397/2140354415 gc_mark_black [5] + 0.00 0.00 496/1417 ck_pr_md_load_ptr [163] + 0.00 0.00 504/1486 ck_pr_fence_load [172] +----------------------------------------------- + 46.80 476.67 357411/357411 gc_collector_trace [3] +[4] 66.3 46.80 476.67 357411 gc_empty_collector_stack [4] + 101.81 374.87 2139944809/2140354415 gc_mark_black [5] +----------------------------------------------- + 0.00 0.01 52209/2140354415 gc_mark_globals [114] + 0.02 0.06 357397/2140354415 gc_collector_trace [3] + 101.81 374.87 2139944809/2140354415 gc_empty_collector_stack [4] +[5] 60.4 101.83 374.94 2140354415 gc_mark_black [5] + 298.25 32.28 4280993215/4280993215 gc_collector_mark_gray [6] + 23.15 21.26 2140359837/2275804334 ck_pr_md_load_int [13] +----------------------------------------------- + 298.25 32.28 4280993215/4280993215 gc_mark_black [5] +[6] 41.9 298.25 32.28 4280993215 gc_collector_mark_gray [6] + 32.28 0.00 2139943824/2207552592 vpbuffer_add [16] +----------------------------------------------- + +[7] 18.2 0.00 143.28 main [7] + 0.02 143.26 1/1 Cyc_start_trampoline [8] + 0.00 0.00 1/1 gc_thread_data_init [416] + 0.00 0.00 1/1 set_env_variables [544] + 0.00 0.00 1/1 gc_initialize [542] + 0.00 0.00 1/1 gc_add_mutator [540] + 0.00 0.00 1/1 Cyc_heap_init [528] +----------------------------------------------- + 0.02 143.26 1/1 main [7] +[8] 18.2 0.02 143.26 1 Cyc_start_trampoline [8] + 63.65 79.61 306499/306499 do_dispatch [101] +----------------------------------------------- +[9] 18.2 63.65 79.61 306499+1010108175 [9] + 3.27 5.10 23737943+39914123 __lambda_284 [20] + 5.97 2.14 46222617 __lambda_78 [21] + 2.20 4.00 47455800 __lambda_282 [23] + 0.50 5.48 45832448 __lambda_274 [24] + 2.54 3.22 34759092 __lambda_327 [26] + 0.66 5.06 35069195 __lambda_59 [27] + 3.46 1.80 35070187 __lambda_77 [30] + 3.69 1.34 23727868 __lambda_326 [31] + 2.16 2.74 17224530 __lambda_64 [32] + 2.08 2.03 40951951 __lambda_63 [33] + 1.85 2.20 23727811 __lambda_321 [34] + 1.03 2.81 23727286 __lambda_324 [35] + 1.96 1.80 11150907 __lambda_79 [36] + 1.45 2.30 15940855 __lambda_92 [37] + 1.27 2.42 23728557 __lambda_325 [38] + 2.00 1.29 25194548 __lambda_69 [40] + 1.54 1.66 22317984 __lambda_85 [42] + 1.59 1.55 15940989 __lambda_91 [43] + 1.64 1.35 15143428 __lambda_84 [44] + 0.51 2.15 23726953 __lambda_62 [49] + 0.75 1.74 39924166 __lambda_283 [50] + 1.24 1.17 7173717 __lambda_86 [51] + 1.16 1.15 7970898 __lambda_70 [52] + 0.27 1.91 15147362 __lambda_295 [53] + 1.18 0.98 17224619 __lambda_65 [54] + 1.27 0.76 11150932 __lambda_81 [56] + 1.36 0.64 15143033 __lambda_83 [57] + 1.14 0.78 11150920 __lambda_80 [58] + 1.19 0.59 17224399 __lambda_66 [60] + 0.27 1.48 23727863 __lambda_320 [61] + 0.30 1.44 10762697 __lambda_272 [63] + 0.35 1.35 17223300 __lambda_61 [64] + 0.54 1.11 27098894 __lambda_76 [65] + 1.09 0.53 17222428 __lambda_67 [66] + 0.67 0.86 7173660 __lambda_90 [68] + 0.99 0.52 7970335 __lambda_75 [69] + 0.07 1.36 11151772 __lambda_276 [70] + 1.12 0.20 11150284 __lambda_82 [71] + 0.19 1.11 11150344 __lambda_58 [72] + 0.80 0.50 7173825 __lambda_87 [73] + 0.81 0.48 7970885 __lambda_73 [74] + 0.21 1.07 39924294 __lambda_322 [75] + 0.77 0.50 7173691 __lambda_88 [76] + 0.75 0.47 7173628 __lambda_89 [77] + 0.64 0.46 7970996 __lambda_72 [81] + 0.69 0.40 7970943 __lambda_71 [82] + 0.77 0.28 7970468 __lambda_74 [83] + 0.38 0.60 23727555 __lambda_281 [85] + 0.22 0.69 7970285 __lambda_60 [86] + 0.13 0.73 7173165 __lambda_57 [87] + 0.41 0.36 23728336 __lambda_323 [88] + 0.26 0.31 7969910 __lambda_68 [91] + 0.13 0.26 5579159 __lambda_56 [92] + 0.07 0.18 3188171 __lambda_55 [94] + 0.08 0.00 306503 do_dispatch [101] + 0.00 0.03 42 _cons [112] + 0.00 0.02 20 __lambda_19 [113] + 0.00 0.02 10 __lambda_36 [117] + 0.00 0.01 1 __lambda_534 [120] + 0.00 0.01 22 __lambda_430 [121] + 0.00 0.01 17 __lambda_323 [123] + 0.00 0.01 556 __lambda_269 [125] + 0.00 0.01 556 __lambda_268 [124] + 0.00 0.01 556 __lambda_267 [126] + 0.00 0.01 4 __lambda_456 [127] + 0.00 0.01 5 __lambda_17 [129] + 0.00 0.01 5 __lambda_15 [128] + 0.00 0.01 3 __lambda_35 [130] + 0.00 0.01 47 apply [131] + 0.01 0.00 1 __lambda_277 [132] + 0.00 0.00 5 Cyc_list2vector [134] + 0.00 0.00 193 __lambda_279 [136] + 0.00 0.00 193 __lambda_265 [135] + 0.00 0.00 193 __lambda_282 [138] + 0.00 0.00 193 __lambda_280 [141] + 0.00 0.00 193 __lambda_278 [140] + 0.00 0.00 193 __lambda_264 [139] + 0.00 0.00 178 __lambda_287 [143] + 0.00 0.00 178 __lambda_291 [147] + 0.00 0.00 178 __lambda_290 [146] + 0.00 0.00 178 __lambda_289 [145] + 0.00 0.00 178 __lambda_288 [144] + 0.00 0.00 3 Cyc_list2string [148] + 0.00 0.00 105 __lambda_183 [149] + 0.00 0.00 88 __lambda_133 [150] + 0.00 0.00 3 __lambda_11 [151] + 0.00 0.00 1 __lambda_386 [153] + 0.00 0.00 1 __lambda_466 [155] + 0.00 0.00 1 __lambda_385 [154] + 0.00 0.00 1 __lambda_468 [156] + 0.00 0.00 1 __lambda_248 [157] + 0.00 0.00 1 __lambda_477 [158] + 0.00 0.00 32 __lambda_300 [160] + 0.00 0.00 32 __lambda_299 [159] + 0.00 0.00 1923 __lambda_251 [161] + 0.00 0.00 2150 __lambda_147 [164] + 0.00 0.00 2150 __lambda_148 [165] + 0.00 0.00 1240 __lambda_146 [167] + 0.00 0.00 434 __lambda_145 [168] + 0.00 0.00 269 __lambda_126 [169] + 0.00 0.00 105 __lambda_180 [170] + 0.00 0.00 1361 __lambda_247 [171] + 0.00 0.00 7 __lambda_395 [173] + 0.00 0.00 1923 __lambda_249 [175] + 0.00 0.00 2584 __lambda_150 [176] + 0.00 0.00 3 __lambda_362 [177] + 0.00 0.00 434 __lambda_151 [178] + 0.00 0.00 870 __lambda_156 [179] + 0.00 0.00 3 __lambda_390 [180] + 0.00 0.00 2 __lambda_365 [181] + 0.00 0.00 2 __lambda_387 [184] + 0.00 0.00 2 __lambda_385 [183] + 0.00 0.00 2 __lambda_372 [182] + 0.00 0.00 240 __lambda_239 [185] + 0.00 0.00 556 __lambda_270 [186] + 0.00 0.00 225 __lambda_157 [187] + 0.00 0.00 935 __lambda_238 [188] + 0.00 0.00 2150 __lambda_149 [189] + 0.00 0.00 269 __lambda_143 [190] + 0.00 0.00 1923 __lambda_250 [191] + 0.00 0.00 328 __lambda_202 [192] + 0.00 0.00 1708 __lambda_293 [193] + 0.00 0.00 556 __lambda_266 [194] + 0.00 0.00 645 __lambda_155 [196] + 0.00 0.00 1361 __lambda_248 [198] + 0.00 0.00 1361 __lambda_245 [197] + 0.00 0.00 225 __lambda_144 [199] + 0.00 0.00 269 __lambda_160 [200] + 0.00 0.00 357 __lambda_127 [201] + 0.00 0.00 88 __lambda_128 [202] + 0.00 0.00 645 __lambda_154 [203] + 0.00 0.00 193 __lambda_284 [206] + 0.00 0.00 193 __lambda_283 [205] + 0.00 0.00 193 __lambda_281 [204] + 0.00 0.00 73 __lambda_203 [207] + 0.00 0.00 255 __lambda_197 [208] + 0.00 0.00 240 __lambda_196 [209] + 0.00 0.00 695 __lambda_237 [210] + 0.00 0.00 121 __lambda_187 [211] + 0.00 0.00 61 __lambda_225 [213] + 0.00 0.00 61 __lambda_217 [212] + 0.00 0.00 104 __lambda_136 [214] + 0.00 0.00 255 __lambda_201 [215] + 0.00 0.00 105 __lambda_186 [216] + 0.00 0.00 121 __lambda_188 [217] + 0.00 0.00 105 __lambda_179 [218] + 0.00 0.00 212 __lambda_216 [219] + 0.00 0.00 44 __lambda_207 [220] + 0.00 0.00 105 __lambda_185 [222] + 0.00 0.00 105 __lambda_184 [221] + 0.00 0.00 104 __lambda_137 [223] + 0.00 0.00 455 __lambda_234 [224] + 0.00 0.00 88 __lambda_135 [226] + 0.00 0.00 88 __lambda_134 [225] + 0.00 0.00 151 __lambda_215 [227] + 0.00 0.00 61 __lambda_220 [229] + 0.00 0.00 61 __lambda_212 [228] + 0.00 0.00 151 __lambda_224 [230] + 0.00 0.00 1361 __lambda_244 [231] + 0.00 0.00 269 __lambda_125 [232] + 0.00 0.00 255 __lambda_199 [234] + 0.00 0.00 255 __lambda_198 [233] + 0.00 0.00 240 __lambda_236 [237] + 0.00 0.00 240 __lambda_233 [235] + 0.00 0.00 240 __lambda_242 [238] + 0.00 0.00 240 __lambda_235 [236] + 0.00 0.00 90 __lambda_222 [239] + 0.00 0.00 16 __lambda_325 [245] + 0.00 0.00 16 __lambda_138 [240] + 0.00 0.00 16 __lambda_258 [244] + 0.00 0.00 16 __lambda_228 [243] + 0.00 0.00 16 __lambda_211 [242] + 0.00 0.00 16 __lambda_189 [241] + 0.00 0.00 1708 __lambda_292 [246] + 0.00 0.00 15 __lambda_317 [247] + 0.00 0.00 22 __lambda_431 [249] + 0.00 0.00 12 __lambda_432 [250] + 0.00 0.00 218 Cyc_make_vector [251] + 0.00 0.00 20 __lambda_20 [252] + 0.00 0.00 15 __lambda_14 [253] + 0.00 0.00 105 __lambda_182 [254] + 0.00 0.00 17 __lambda_324 [255] + 0.00 0.00 1+15 __lambda_388 [256] + 0.00 0.00 117 __lambda_206 [257] + 0.00 0.00 90 __lambda_223 [258] + 0.00 0.00 16 __lambda_168 [259] + 0.00 0.00 88 __lambda_132 [261] + 0.00 0.00 88 __lambda_124 [260] + 0.00 0.00 34 __lambda_301 [262] + 0.00 0.00 73 __lambda_195 [263] + 0.00 0.00 16 __lambda_141 [264] + 0.00 0.00 16 __lambda_262 [266] + 0.00 0.00 16 __lambda_193 [265] + 0.00 0.00 30 __lambda_221 [267] + 0.00 0.00 15 __lambda_12 [268] + 0.00 0.00 33 __lambda_257 [269] + 0.00 0.00 30 __lambda_316 [270] + 0.00 0.00 32 __lambda_298 [271] + 0.00 0.00 15 __lambda_167 [272] + 0.00 0.00 17 __lambda_106 [273] + 0.00 0.00 44 __lambda_194 [274] + 0.00 0.00 1 __lambda_465 [275] + 0.00 0.00 20 __lambda_383 [276] + 0.00 0.00 17 __lambda_254 [277] + 0.00 0.00 17 __lambda_255 [278] + 0.00 0.00 15 __lambda_314 [279] + 0.00 0.00 12 __lambda_1 [280] + 0.00 0.00 7 __lambda_396 [281] + 0.00 0.00 15 __lambda_254 [282] + 0.00 0.00 5 __lambda_13 [283] + 0.00 0.00 15 __lambda_166 [285] + 0.00 0.00 15 __lambda_165 [284] + 0.00 0.00 1 __lambda_0 [286] + 0.00 0.00 16 __lambda_322 [288] + 0.00 0.00 16 __lambda_105 [287] + 0.00 0.00 22 __lambda_721 [289] + 0.00 0.00 5 __lambda_18 [290] + 0.00 0.00 1 __lambda_2 [291] + 0.00 0.00 2 __lambda_441 [295] + 0.00 0.00 2 __lambda_416 [294] + 0.00 0.00 2 __lambda_302 [292] + 0.00 0.00 2 __lambda_367 [293] + 0.00 0.00 2+3 __lambda_415 [296] + 0.00 0.00 15 __lambda_320 [297] + 0.00 0.00 12 __lambda_429 [298] + 0.00 0.00 15 __lambda_315 [299] + 0.00 0.00 5 __lambda_366 [300] + 0.00 0.00 17 __lambda_256 [301] + 0.00 0.00 5 __lambda_16 [302] + 0.00 0.00 4 __lambda_47 [303] + 0.00 0.00 16 __lambda_123 [304] + 0.00 0.00 16 __lambda_253 [306] + 0.00 0.00 16 __lambda_178 [305] + 0.00 0.00 5 __lambda_440 [307] + 0.00 0.00 15 __lambda_309 [308] + 0.00 0.00 15 __lambda_313 [309] + 0.00 0.00 1 __lambda_1 [310] + 0.00 0.00 5 __lambda_43 [311] + 0.00 0.00 15 __lambda_253 [312] + 0.00 0.00 1 __lambda_490 [313] + 0.00 0.00 1 __lambda_48 [355] + 0.00 0.00 1 __lambda_522 [356] + 0.00 0.00 1 __lambda_394 [343] + 0.00 0.00 1 __lambda_392 [342] + 0.00 0.00 1 __lambda_390 [340] + 0.00 0.00 1 __lambda_389 [339] + 0.00 0.00 1 __lambda_401 [345] + 0.00 0.00 1 __lambda_398 [344] + 0.00 0.00 1 __lambda_391 [341] + 0.00 0.00 1 __lambda_378 [338] + 0.00 0.00 1 __lambda_107 [315] + 0.00 0.00 1 __lambda_169 [321] + 0.00 0.00 1 __lambda_460 [354] + 0.00 0.00 1 __lambda_435 [350] + 0.00 0.00 1 __lambda_428 [349] + 0.00 0.00 1 __lambda_457 [353] + 0.00 0.00 1 __lambda_451 [352] + 0.00 0.00 1 __lambda_445 [351] + 0.00 0.00 1 __lambda_424 [348] + 0.00 0.00 1 __lambda_420 [347] + 0.00 0.00 1 __lambda_328 [336] + 0.00 0.00 1 __lambda_321 [335] + 0.00 0.00 1 __lambda_312 [334] + 0.00 0.00 1 __lambda_307 [333] + 0.00 0.00 1 __lambda_296 [332] + 0.00 0.00 1 __lambda_294 [331] + 0.00 0.00 1 __lambda_285 [330] + 0.00 0.00 1 __lambda_275 [329] + 0.00 0.00 1 __lambda_273 [328] + 0.00 0.00 1 __lambda_271 [327] + 0.00 0.00 1 __lambda_263 [326] + 0.00 0.00 1 __lambda_252 [325] + 0.00 0.00 1 __lambda_243 [324] + 0.00 0.00 1 __lambda_232 [323] + 0.00 0.00 1 __lambda_177 [322] + 0.00 0.00 1 __lambda_162 [320] + 0.00 0.00 1 __lambda_142 [318] + 0.00 0.00 1 __lambda_122 [317] + 0.00 0.00 1 __lambda_102 [314] + 0.00 0.00 1 __lambda_93 [360] + 0.00 0.00 1 __lambda_54 [358] + 0.00 0.00 1 __lambda_41 [346] + 0.00 0.00 1 __lambda_15 [319] + 0.00 0.00 1 __lambda_374 [337] + 0.00 0.00 1 __lambda_114 [316] + 0.00 0.00 1 __lambda_8 [359] + 0.00 0.00 1 __lambda_535 [357] + 0.00 0.00 4 __lambda_113 [361] + 0.00 0.00 1 __lambda_3 [362] + 0.00 0.00 3 __lambda_360 [363] + 0.00 0.00 3 __lambda_329 [364] + 0.00 0.00 3 __lambda_373 [365] + 0.00 0.00 2 __lambda_23 [366] + 0.00 0.00 2 __lambda_389 [367] + 0.00 0.00 3 __lambda_308 [368] + 0.00 0.00 2 __lambda_363 [369] + 0.00 0.00 1 __lambda_1561 [370] + 0.00 0.00 1 __lambda_5 [373] + 0.00 0.00 1 __lambda_42 [372] + 0.00 0.00 1 __lambda_400 [371] + 0.00 0.00 2 __lambda_304 [374] + 0.00 0.00 3 __lambda_444 [376] + 0.00 0.00 3 __lambda_419 [375] + 0.00 0.00 7 __lambda_397 [377] + 0.00 0.00 3 __lambda_112 [378] + 0.00 0.00 3 __lambda_439 [379] + 0.00 0.00 2 __lambda_371 [381] + 0.00 0.00 2 __lambda_364 [380] + 0.00 0.00 3 __lambda_45 [382] + 0.00 0.00 3 __lambda_46 [384] + 0.00 0.00 3 __lambda_361 [383] + 0.00 0.00 1 __lambda_5 [403] + 0.00 0.00 1 __lambda_3 [400] + 0.00 0.00 1 __lambda_2 [399] + 0.00 0.00 1 __lambda_0 [385] + 0.00 0.00 1 __lambda_1559 [398] + 0.00 0.00 1 __lambda_1557 [397] + 0.00 0.00 1 __lambda_1555 [396] + 0.00 0.00 1 __lambda_1554 [395] + 0.00 0.00 1 __lambda_1553 [394] + 0.00 0.00 1 __lambda_1552 [393] + 0.00 0.00 1 __lambda_1551 [392] + 0.00 0.00 1 __lambda_1550 [391] + 0.00 0.00 1 __lambda_1549 [390] + 0.00 0.00 1 __lambda_1548 [389] + 0.00 0.00 1 __lambda_1547 [388] + 0.00 0.00 1 __lambda_1546 [387] + 0.00 0.00 1 __lambda_1544 [386] + 0.00 0.00 1 __lambda_4 [402] + 0.00 0.00 1 __lambda_399 [401] + 0.00 0.00 1 __lambda_6 [404] + 0.00 0.00 3 __lambda_725 [411] + 0.00 0.00 3 __lambda_390 [410] + 0.00 0.00 3 __lambda_28 [406] + 0.00 0.00 3 __lambda_384 [409] + 0.00 0.00 3 __lambda_337 [408] + 0.00 0.00 3 __lambda_24 [405] + 0.00 0.00 3 __lambda_309 [407] + 0.00 0.00 2 __lambda_245 [412] + 0.00 0.00 2 __lambda_367 [413] + 0.00 0.00 2 __lambda_3 [414] + 0.00 0.00 2 __lambda_450 [415] + 0.00 0.00 5 __lambda_57 [417] + 0.00 0.00 1 __lambda_52 [420] + 0.00 0.00 1 __lambda_174 [419] + 0.00 0.00 1 __lambda_118 [418] + 0.00 0.00 2 __lambda_377 [421] + 0.00 0.00 2 __lambda_423 [422] + 0.00 0.00 2 __lambda_247 [423] + 0.00 0.00 3 __lambda_40 [424] + 0.00 0.00 4 apply_va [425] + 0.00 0.00 2 __lambda_384 [426] + 0.00 0.00 2 __lambda_521 [427] + 0.00 0.00 1 __lambda_448 [428] + 0.00 0.00 2 __lambda_370 [429] + 0.00 0.00 3 __lambda_719 [430] + 0.00 0.00 3 __lambda_387 [431] + 0.00 0.00 1 __lambda_43 [432] + 0.00 0.00 2 __lambda_438 [436] + 0.00 0.00 2 __lambda_414 [435] + 0.00 0.00 2 __lambda_297 [433] + 0.00 0.00 2 __lambda_359 [434] + 0.00 0.00 1 __lambda_538 [445] + 0.00 0.00 1 __lambda_3 [438] + 0.00 0.00 1 __lambda_484 [442] + 0.00 0.00 1 __lambda_399 [439] + 0.00 0.00 1 __lambda_6 [446] + 0.00 0.00 1 __lambda_472 [441] + 0.00 0.00 1 __lambda_464 [440] + 0.00 0.00 1 __lambda_491 [443] + 0.00 0.00 1 __lambda_251 [437] + 0.00 0.00 1 __lambda_537 [444] + 0.00 0.00 1 __lambda_493 [447] + 0.00 0.00 2 __lambda_306 [448] + 0.00 0.00 3 __lambda_9 [449] + 0.00 0.00 1 __lambda_512 [451] + 0.00 0.00 1 __lambda_383 [450] + 0.00 0.00 1 __lambda_485 [452] + 0.00 0.00 1 __lambda_387 [453] + 0.00 0.00 1 __lambda_249 [454] + 0.00 0.00 2 __lambda_246 [455] + 0.00 0.00 2 Cyc_number2string2 [456] + 0.00 0.00 1 __lambda_42 [471] + 0.00 0.00 1 __lambda_492 [474] + 0.00 0.00 1 __lambda_356 [464] + 0.00 0.00 1 __lambda_357 [465] + 0.00 0.00 1 __lambda_104 [457] + 0.00 0.00 1 __lambda_164 [460] + 0.00 0.00 1 __lambda_119 [459] + 0.00 0.00 1 __lambda_172 [461] + 0.00 0.00 1 __lambda_411 [468] + 0.00 0.00 1 __lambda_436 [472] + 0.00 0.00 1 __lambda_437 [473] + 0.00 0.00 1 __lambda_409 [467] + 0.00 0.00 1 __lambda_412 [469] + 0.00 0.00 1 __lambda_413 [470] + 0.00 0.00 1 __lambda_175 [463] + 0.00 0.00 1 __lambda_53 [475] + 0.00 0.00 1 __lambda_358 [466] + 0.00 0.00 1 __lambda_173 [462] + 0.00 0.00 1 __lambda_111 [458] + 0.00 0.00 1 __lambda_405 [477] + 0.00 0.00 1 __lambda_404 [476] + 0.00 0.00 1 __lambda_513 [478] + 0.00 0.00 1 __lambda_766 [480] + 0.00 0.00 1 __lambda_765 [479] + 0.00 0.00 1 __lambda_7 [482] + 0.00 0.00 1 __lambda_5 [481] + 0.00 0.00 1361 __lambda_246 [1081] + 0.00 0.00 434 __lambda_153 [1083] + 0.00 0.00 434 __lambda_152 [1082] + 0.00 0.00 269 __lambda_161 [1085] + 0.00 0.00 255 __lambda_200 [1086] + 0.00 0.00 240 __lambda_241 [1088] + 0.00 0.00 240 __lambda_240 [1087] + 0.00 0.00 225 __lambda_159 [1090] + 0.00 0.00 225 __lambda_158 [1089] + 0.00 0.00 178 __lambda_286 [1091] + 0.00 0.00 105 __lambda_181 [1092] + 0.00 0.00 88 __lambda_131 [1095] + 0.00 0.00 88 __lambda_130 [1094] + 0.00 0.00 88 __lambda_129 [1093] + 0.00 0.00 73 __lambda_205 [1097] + 0.00 0.00 73 __lambda_204 [1096] + 0.00 0.00 61 __lambda_227 [1101] + 0.00 0.00 61 __lambda_226 [1100] + 0.00 0.00 61 __lambda_219 [1099] + 0.00 0.00 61 __lambda_218 [1098] + 0.00 0.00 44 __lambda_210 [1104] + 0.00 0.00 44 __lambda_209 [1103] + 0.00 0.00 44 __lambda_208 [1102] + 0.00 0.00 43 Cyc_apply [501] + 0.00 0.00 30 __lambda_366 [1106] + 0.00 0.00 30 __lambda_365 [1105] + 0.00 0.00 16 __lambda_327 [1119] + 0.00 0.00 16 __lambda_326 [1118] + 0.00 0.00 16 __lambda_140 [1108] + 0.00 0.00 16 __lambda_139 [1107] + 0.00 0.00 16 __lambda_261 [1117] + 0.00 0.00 16 __lambda_260 [1116] + 0.00 0.00 16 __lambda_259 [1115] + 0.00 0.00 16 __lambda_231 [1114] + 0.00 0.00 16 __lambda_230 [1113] + 0.00 0.00 16 __lambda_229 [1112] + 0.00 0.00 16 __lambda_192 [1111] + 0.00 0.00 16 __lambda_191 [1110] + 0.00 0.00 16 __lambda_190 [1109] + 0.00 0.00 15 __lambda_252 [1122] + 0.00 0.00 15 __lambda_45 [1126] + 0.00 0.00 15 __lambda_44 [1125] + 0.00 0.00 15 __lambda_251 [1121] + 0.00 0.00 15 __lambda_250 [1120] + 0.00 0.00 15 __lambda_470 [1127] + 0.00 0.00 15 __lambda_319 [1124] + 0.00 0.00 15 __lambda_318 [1123] + 0.00 0.00 13 Cyc_io_read_char [508] + 0.00 0.00 13 gc_mutator_thread_runnable [510] + 0.00 0.00 12 __lambda_0 [1128] + 0.00 0.00 12 __lambda_434 [1130] + 0.00 0.00 12 __lambda_433 [1129] + 0.00 0.00 10 __lambda_249 [1139] + 0.00 0.00 10 __lambda_248 [1138] + 0.00 0.00 10 __lambda_247 [1137] + 0.00 0.00 10 __lambda_246 [1136] + 0.00 0.00 10 __lambda_245 [1135] + 0.00 0.00 10 __lambda_244 [1134] + 0.00 0.00 10 __lambda_243 [1133] + 0.00 0.00 10 __lambda_242 [1132] + 0.00 0.00 10 __lambda_241 [1131] + 0.00 0.00 5 Cyc_string_append [514] + 0.00 0.00 5 __lambda_56 [1141] + 0.00 0.00 5 __lambda_55 [1140] + 0.00 0.00 4 dispatch [515] + 0.00 0.00 4 __lambda_455 [1142] + 0.00 0.00 3 __lambda_724 [1156] + 0.00 0.00 3 __lambda_718 [1153] + 0.00 0.00 3 __lambda_723 [1155] + 0.00 0.00 3 __lambda_722 [1154] + 0.00 0.00 3 __lambda_389 [1150] + 0.00 0.00 3 __lambda_10 [1143] + 0.00 0.00 3 __lambda_388 [1149] + 0.00 0.00 3 __lambda_42 [1152] + 0.00 0.00 3 __lambda_27 [1144] + 0.00 0.00 3 __lambda_328 [1146] + 0.00 0.00 3 __lambda_336 [1148] + 0.00 0.00 3 __lambda_330 [1147] + 0.00 0.00 3 Cyc_string2number2_ [517] + 0.00 0.00 3 Cyc_string2number_ [518] + 0.00 0.00 3 __lambda_41 [1151] + 0.00 0.00 3 __lambda_307 [1145] + 0.00 0.00 2 __lambda_22 [1162] + 0.00 0.00 2 __lambda_21 [1161] + 0.00 0.00 2 __lambda_1 [1159] + 0.00 0.00 2 __lambda_0 [1158] + 0.00 0.00 2 __lambda_443 [1173] + 0.00 0.00 2 __lambda_442 [1172] + 0.00 0.00 2 __lambda_418 [1171] + 0.00 0.00 2 __lambda_417 [1170] + 0.00 0.00 2 __lambda_388 [1169] + 0.00 0.00 2 __lambda_305 [1165] + 0.00 0.00 2 __lambda_304 [1164] + 0.00 0.00 2 __lambda_303 [1163] + 0.00 0.00 2 __lambda_2 [1160] + 0.00 0.00 2 __lambda_386 [1168] + 0.00 0.00 2 __lambda_369 [1167] + 0.00 0.00 2 __lambda_368 [1166] + 0.00 0.00 1 __lambda_4 [1241] + 0.00 0.00 1 __lambda_1 [1175] + 0.00 0.00 1 c_schemebase_entry_pt [535] + 0.00 0.00 1 __lambda_1560 [1188] + 0.00 0.00 1 __lambda_1558 [1187] + 0.00 0.00 1 __lambda_1556 [1186] + 0.00 0.00 1 __lambda_1545 [1185] + 0.00 0.00 1 c_schemetime_entry_pt [538] + 0.00 0.00 1 c_schemewrite_entry_pt [539] + 0.00 0.00 1 c_scheme_char_entry_pt [534] + 0.00 0.00 1 c_schemeread_entry_pt [537] + 0.00 0.00 1 c_entry_pt_first_lambda [533] + 0.00 0.00 1 __lambda_51 [1300] + 0.00 0.00 1 __lambda_50 [1289] + 0.00 0.00 1 __lambda_49 [1282] + 0.00 0.00 1 __lambda_520 [1304] + 0.00 0.00 1 __lambda_524 [1306] + 0.00 0.00 1 __lambda_523 [1305] + 0.00 0.00 1 __lambda_514 [1303] + 0.00 0.00 1 __lambda_525 [1307] + 0.00 0.00 1 __lambda_533 [1315] + 0.00 0.00 1 __lambda_511 [1302] + 0.00 0.00 1 __lambda_476 [1272] + 0.00 0.00 1 __lambda_475 [1271] + 0.00 0.00 1 __lambda_398 [1239] + 0.00 0.00 1 __lambda_397 [1238] + 0.00 0.00 1 __lambda_396 [1237] + 0.00 0.00 1 __lambda_395 [1236] + 0.00 0.00 1 __lambda_393 [1234] + 0.00 0.00 1 __lambda_391 [1231] + 0.00 0.00 1 __lambda_407 [1246] + 0.00 0.00 1 __lambda_406 [1245] + 0.00 0.00 1 __lambda_403 [1244] + 0.00 0.00 1 __lambda_402 [1243] + 0.00 0.00 1 __lambda_400 [1242] + 0.00 0.00 1 __lambda_399 [1240] + 0.00 0.00 1 __lambda_394 [1235] + 0.00 0.00 1 __lambda_393 [1233] + 0.00 0.00 1 __lambda_392 [1232] + 0.00 0.00 1 __lambda_382 [1230] + 0.00 0.00 1 __lambda_381 [1229] + 0.00 0.00 1 __lambda_380 [1228] + 0.00 0.00 1 __lambda_379 [1227] + 0.00 0.00 1 __lambda_355 [1224] + 0.00 0.00 1 __lambda_487 [1280] + 0.00 0.00 1 __lambda_486 [1279] + 0.00 0.00 1 __lambda_250 [1194] + 0.00 0.00 1 __lambda_110 [1179] + 0.00 0.00 1 __lambda_109 [1178] + 0.00 0.00 1 __lambda_108 [1177] + 0.00 0.00 1 __lambda_103 [1176] + 0.00 0.00 1 __lambda_171 [1191] + 0.00 0.00 1 __lambda_170 [1190] + 0.00 0.00 1 __lambda_163 [1189] + 0.00 0.00 1 __lambda_121 [1184] + 0.00 0.00 1 __lambda_120 [1183] + 0.00 0.00 1 __lambda_44 [1254] + 0.00 0.00 1 c_entry_pt [532] + 0.00 0.00 1 c_schemecyclonecommon_entry_pt [536] + 0.00 0.00 1 __lambda_473 [1269] + 0.00 0.00 1 __lambda_463 [1265] + 0.00 0.00 1 __lambda_462 [1264] + 0.00 0.00 1 __lambda_461 [1263] + 0.00 0.00 1 __lambda_459 [1262] + 0.00 0.00 1 __lambda_458 [1261] + 0.00 0.00 1 __lambda_454 [1260] + 0.00 0.00 1 __lambda_453 [1259] + 0.00 0.00 1 __lambda_452 [1258] + 0.00 0.00 1 __lambda_447 [1256] + 0.00 0.00 1 __lambda_446 [1255] + 0.00 0.00 1 __lambda_410 [1248] + 0.00 0.00 1 __lambda_427 [1253] + 0.00 0.00 1 __lambda_426 [1252] + 0.00 0.00 1 __lambda_425 [1251] + 0.00 0.00 1 __lambda_408 [1247] + 0.00 0.00 1 __lambda_422 [1250] + 0.00 0.00 1 __lambda_421 [1249] + 0.00 0.00 1 __lambda_354 [1223] + 0.00 0.00 1 __lambda_469 [1267] + 0.00 0.00 1 __lambda_353 [1222] + 0.00 0.00 1 __lambda_352 [1221] + 0.00 0.00 1 __lambda_351 [1220] + 0.00 0.00 1 __lambda_350 [1219] + 0.00 0.00 1 __lambda_349 [1218] + 0.00 0.00 1 __lambda_348 [1217] + 0.00 0.00 1 __lambda_347 [1216] + 0.00 0.00 1 __lambda_346 [1215] + 0.00 0.00 1 __lambda_345 [1214] + 0.00 0.00 1 __lambda_344 [1213] + 0.00 0.00 1 __lambda_343 [1212] + 0.00 0.00 1 __lambda_342 [1211] + 0.00 0.00 1 __lambda_341 [1210] + 0.00 0.00 1 __lambda_340 [1209] + 0.00 0.00 1 __lambda_339 [1208] + 0.00 0.00 1 __lambda_338 [1207] + 0.00 0.00 1 __lambda_337 [1206] + 0.00 0.00 1 __lambda_336 [1205] + 0.00 0.00 1 __lambda_335 [1204] + 0.00 0.00 1 __lambda_334 [1203] + 0.00 0.00 1 __lambda_333 [1202] + 0.00 0.00 1 __lambda_332 [1201] + 0.00 0.00 1 __lambda_331 [1200] + 0.00 0.00 1 __lambda_330 [1199] + 0.00 0.00 1 __lambda_329 [1198] + 0.00 0.00 1 __lambda_311 [1197] + 0.00 0.00 1 __lambda_471 [1268] + 0.00 0.00 1 __lambda_176 [1192] + 0.00 0.00 1 __lambda_467 [1266] + 0.00 0.00 1 __lambda_376 [1226] + 0.00 0.00 1 __lambda_375 [1225] + 0.00 0.00 1 __lambda_117 [1182] + 0.00 0.00 1 __lambda_116 [1181] + 0.00 0.00 1 __lambda_115 [1180] + 0.00 0.00 1 __lambda_483 [1278] + 0.00 0.00 1 __lambda_482 [1277] + 0.00 0.00 1 __lambda_481 [1276] + 0.00 0.00 1 __lambda_480 [1275] + 0.00 0.00 1 __lambda_479 [1274] + 0.00 0.00 1 __lambda_474 [1270] + 0.00 0.00 1 __lambda_489 [1281] + 0.00 0.00 1 __lambda_449 [1257] + 0.00 0.00 1 __lambda_310 [1196] + 0.00 0.00 1 __lambda_308 [1195] + 0.00 0.00 1 __lambda_528 [1310] + 0.00 0.00 1 __lambda_527 [1309] + 0.00 0.00 1 __lambda_2 [1193] + 0.00 0.00 1 __lambda_526 [1308] + 0.00 0.00 1 __lambda_494 [1283] + 0.00 0.00 1 __lambda_509 [1299] + 0.00 0.00 1 __lambda_507 [1297] + 0.00 0.00 1 __lambda_531 [1313] + 0.00 0.00 1 __lambda_530 [1312] + 0.00 0.00 1 __lambda_510 [1301] + 0.00 0.00 1 __lambda_508 [1298] + 0.00 0.00 1 __lambda_506 [1296] + 0.00 0.00 1 __lambda_505 [1295] + 0.00 0.00 1 __lambda_503 [1293] + 0.00 0.00 1 __lambda_501 [1291] + 0.00 0.00 1 __lambda_500 [1290] + 0.00 0.00 1 __lambda_499 [1288] + 0.00 0.00 1 __lambda_498 [1287] + 0.00 0.00 1 __lambda_497 [1286] + 0.00 0.00 1 __lambda_529 [1311] + 0.00 0.00 1 __lambda_504 [1294] + 0.00 0.00 1 __lambda_496 [1285] + 0.00 0.00 1 __lambda_495 [1284] + 0.00 0.00 1 __lambda_478 [1273] + 0.00 0.00 1 __lambda_536 [1316] + 0.00 0.00 1 __lambda_532 [1314] + 0.00 0.00 1 __lambda_502 [1292] +----------------------------------------------- + 70.60 35.62 1098/1098 gc_collector [2] +[10] 13.5 70.60 35.62 1098 gc_sweep [10] + 35.62 0.00 2297679571/2514214181 gc_allocated_bytes [15] + 0.00 0.00 12712/12712 gc_is_heap_empty [483] + 0.00 0.00 2054/2054 gc_heap_free [486] +----------------------------------------------- + 0.00 0.00 1/306468 __lambda_279 [136] + 0.00 0.00 1/306468 __lambda_265 [135] + 0.00 0.00 1/306468 __lambda_247 [171] + 0.00 0.00 1/306468 __lambda_180 [170] + 0.00 0.00 1/306468 __lambda_148 [165] + 0.00 0.00 1/306468 __lambda_147 [164] + 0.00 0.00 1/306468 __lambda_146 [167] + 0.00 0.00 1/306468 __lambda_145 [168] + 0.00 0.00 1/306468 __lambda_133 [150] + 0.00 0.00 1/306468 __lambda_126 [169] + 0.00 0.00 2/306468 __lambda_251 [161] + 0.00 0.18 956/306468 __lambda_55 [94] + 0.00 0.20 1100/306468 __lambda_82 [71] + 0.00 0.24 1317/306468 __lambda_68 [91] + 0.00 0.26 1427/306468 __lambda_56 [92] + 0.00 0.28 1516/306468 __lambda_74 [83] + 0.00 0.34 1856/306468 __lambda_281 [85] + 0.00 0.36 1959/306468 __lambda_323 [88] + 0.00 0.38 2053/306468 __lambda_75 [69] + 0.00 0.40 2172/306468 __lambda_71 [82] + 0.00 0.41 2216/306468 __lambda_272 [63] + 0.00 0.46 2502/306468 __lambda_72 [81] + 0.00 0.46 2507/306468 __lambda_70 [52] + 0.00 0.47 2564/306468 __lambda_89 [77] + 0.00 0.47 2580/306468 __lambda_83 [57] + 0.00 0.48 2648/306468 __lambda_73 [74] + 0.00 0.50 2739/306468 __lambda_87 [73] + 0.00 0.50 2751/306468 __lambda_88 [76] + 0.00 0.53 2875/306468 __lambda_67 [66] + 0.00 0.55 2989/306468 __lambda_86 [51] + 0.00 0.59 3217/306468 __lambda_66 [60] + 0.00 0.60 3267/306468 __lambda_90 [68] + 0.00 0.62 3393/306468 __lambda_60 [86] + 0.00 0.67 3654/306468 __lambda_57 [87] + 0.00 0.74 4050/306468 __lambda_324 [35] + 0.00 0.76 4130/306468 __lambda_81 [56] + 0.00 0.78 4245/306468 __lambda_80 [58] + 0.00 0.83 4517/306468 __lambda_79 [36] + 0.00 0.88 4814/306468 __lambda_69 [40] + 0.00 0.89 4837/306468 __lambda_76 [65] + 0.00 0.95 5176/306468 __lambda_326 [31] + 0.00 0.96 5242/306468 __lambda_276 [70] + 0.00 0.97 5285/306468 __lambda_85 [42] + 0.00 0.98 5362/306468 __lambda_65 [54] + 0.00 1.00 5474/306468 __lambda_91 [43] + 0.00 1.02 5579/306468 __lambda_58 [72] + 0.00 1.07 5834/306468 __lambda_84 [44] + 0.00 1.07 5835/306468 __lambda_322 [75] + 0.00 1.14 6244/306468 __lambda_321 [34] + 0.00 1.20 6530/306468 __lambda_63 [33] + 0.00 1.21 6608/306468 __lambda_61 [64] + 0.00 1.24 6765/306468 __lambda_64 [32] + 0.00 1.25 6807/306468 __lambda_295 [53] + 0.00 1.28 7001/306468 __lambda_78 [21] + 0.00 1.29 7029/306468 __lambda_320 [61] + 0.00 1.34 7292/306468 __lambda_283 [50] + 0.00 1.47 8018/306468 __lambda_77 [30] + 0.00 1.70 9285/306468 __lambda_62 [49] + 0.00 1.72 9372/306468 __lambda_92 [37] + 0.00 2.42 13226/306468 __lambda_325 [38] + 0.00 2.65 14485/306468 __lambda_327 [26] + 0.00 2.68 14609/306468 __lambda_282 [23] + 0.00 3.21 17521/306468 __lambda_284 [20] + 0.00 3.47 18964/306468 __lambda_274 [24] + 0.00 4.04 22062/306468 __lambda_59 [27] +[11] 7.1 0.01 56.12 306468 GC [11] + 15.12 40.84 306470/306470 gc_minor [12] + 0.01 0.16 306500/306500 gc_mut_cooperate [96] +----------------------------------------------- + 15.12 40.84 306470/306470 GC [11] +[12] 7.1 15.12 40.84 306470 gc_minor [12] + 10.84 30.00 277761978/277761978 gc_move [14] + 0.01 0.00 306500/306500 clear_mutations [122] +----------------------------------------------- + 0.00 0.00 2/2275804334 gc_thread_data_init [416] + 0.00 0.00 379/2275804334 gc_collector [2] + 0.00 0.00 622/2275804334 gc_post_handshake [195] + 0.00 0.00 5225/2275804334 gc_wait_handshake [162] + 0.00 0.00 6441/2275804334 collector_main [1] + 0.01 0.01 919778/2275804334 gc_mut_cooperate [96] + 1.46 1.34 134512050/2275804334 gc_mut_update [39] + 23.15 21.26 2140359837/2275804334 gc_mark_black [5] +[13] 6.0 24.62 22.61 2275804334 ck_pr_md_load_int [13] + 22.61 0.00 256638619/256642811 ck_pr_barrier [18] +----------------------------------------------- + 10.84 30.00 277761978/277761978 gc_minor [12] +[14] 5.2 10.84 30.00 277761978 gc_move [14] + 5.72 21.58 216534517/216534517 gc_alloc [17] + 1.59 1.11 216534461/216534461 gc_fixup_moved_obj [47] +----------------------------------------------- + 3.36 0.00 216534610/2514214181 gc_try_alloc [19] + 35.62 0.00 2297679571/2514214181 gc_sweep [10] +[15] 4.9 38.98 0.00 2514214181 gc_allocated_bytes [15] +----------------------------------------------- + 0.00 0.00 171232/2207552592 gc_mark_gray2 [142] + 0.00 0.00 186074/2207552592 gc_mark_gray [137] + 1.01 0.00 67251462/2207552592 add_mutation [62] + 32.28 0.00 2139943824/2207552592 gc_collector_mark_gray [6] +[16] 4.2 33.29 0.00 2207552592 vpbuffer_add [16] + 0.00 0.00 25/28 vpbuffer_realloc [503] +----------------------------------------------- + 5.72 21.58 216534517/216534517 gc_move [14] +[17] 3.5 5.72 21.58 216534517 gc_alloc [17] + 11.29 10.29 216534587/216534587 gc_try_alloc [19] + 0.00 0.00 20/1850 gc_grow_heap [95] +----------------------------------------------- + 0.00 0.00 1437/256642811 ck_pr_fence_load [172] + 0.00 0.00 2755/256642811 ck_pr_md_load_ptr [163] + 22.61 0.00 256638619/256642811 ck_pr_md_load_int [13] +[18] 2.9 22.61 0.00 256642811 ck_pr_barrier [18] +----------------------------------------------- + 11.29 10.29 216534587/216534587 gc_alloc [17] +[19] 2.7 11.29 10.29 216534587 gc_try_alloc [19] + 6.94 0.00 216534532/216534532 gc_copy_obj [22] + 3.36 0.00 216534610/2514214181 gc_allocated_bytes [15] +----------------------------------------------- + 39914123 __lambda_284 [20] + 2 __lambda_367 [413] + 12073 do_dispatch [101] + 23725868 __lambda_323 [88] +[20] 1.1 3.27 5.10 23737943+39914123 __lambda_284 [20] + 0.00 3.21 17521/306468 GC [11] + 1.04 0.00 63655045/169600308 Cyc_st_add [46] + 0.17 0.26 39922581/167205531 Cyc_cdr [59] + 0.41 0.00 63652306/158564737 Cyc_is_null [84] + 23720625 __lambda_283 [50] + 39914123 __lambda_284 [20] +----------------------------------------------- + 11733 do_dispatch [101] + 7969408 __lambda_68 [91] + 11145216 __lambda_58 [72] + 27096260 __lambda_76 [65] +[21] 1.0 5.97 2.14 46222617 __lambda_78 [21] + 0.00 1.28 7001/306468 GC [11] + 0.65 0.00 46223567/81303063 Cyc_num_fast_gte_op [79] + 0.05 0.07 11151149/167205531 Cyc_cdr [59] + 0.09 0.00 33448140/771639154 cell_get [55] + 35063874 __lambda_59 [27] + 11149171 __lambda_85 [42] +----------------------------------------------- + 6.94 0.00 216534532/216534532 gc_try_alloc [19] +[22] 0.9 6.94 0.00 216534532 gc_copy_obj [22] +----------------------------------------------- + 20 __lambda_383 [276] + 8100 do_dispatch [101] + 23721859 __lambda_321 [34] + 23725821 __lambda_281 [85] +[23] 0.8 2.20 4.00 47455800 __lambda_282 [23] + 0.00 2.68 14609/306468 GC [11] + 0.78 0.00 47457910/169600308 Cyc_st_add [46] + 0.31 0.00 47454528/158564737 Cyc_is_null [84] + 0.09 0.15 23727537/154638249 Cyc_car [67] + 23722079 __lambda_62 [49] + 23718126 __lambda_320 [61] + 42 Cyc_apply [501] + 15 __lambda_315 [299] + 3 __lambda_27 [1144] + 1 __lambda_43 [432] + 1 __lambda_449 [1257] + 1 __lambda_474 [1270] +----------------------------------------------- + 17 __lambda_256 [301] + 90 __lambda_223 [258] + 240 __lambda_236 [237] + 255 __lambda_199 [234] + 268 __lambda_126 [169] + 455 __lambda_237 [210] + 695 __lambda_238 [188] + 1361 __lambda_245 [197] + 2150 __lambda_149 [189] + 10898 do_dispatch [101] + 7968616 __lambda_69 [40] + 10752165 __lambda_272 [63] + 27095238 __lambda_77 [30] +[24] 0.8 0.50 5.48 45832448 __lambda_274 [24] + 0.00 3.47 18964/306468 GC [11] + 1.11 0.55 45830677/153035271 Cyc_vector_ref [29] + 0.34 0.00 45832943/82499403 Cyc_fast_sum [90] + 27084682 __lambda_76 [65] + 10749354 __lambda_77 [30] + 7967339 __lambda_68 [91] + 2148 __lambda_148 [165] + 1907 __lambda_249 [175] + 1361 __lambda_244 [231] + 695 __lambda_237 [210] + 455 __lambda_234 [224] + 269 __lambda_125 [232] + 255 __lambda_198 [233] + 240 __lambda_235 [236] + 101 __lambda_215 [227] + 90 __lambda_222 [239] + 17 __lambda_255 [278] + 2 __lambda_45 [382] +----------------------------------------------- + 0.00 0.00 1/67248908 __lambda_535 [357] + 0.00 0.00 1/67248908 __lambda_522 [356] + 0.00 0.00 1/67248908 __lambda_460 [354] + 0.00 0.00 1/67248908 __lambda_457 [353] + 0.00 0.00 1/67248908 __lambda_451 [352] + 0.00 0.00 1/67248908 __lambda_445 [351] + 0.00 0.00 1/67248908 __lambda_435 [350] + 0.00 0.00 1/67248908 __lambda_428 [349] + 0.00 0.00 1/67248908 __lambda_424 [348] + 0.00 0.00 1/67248908 __lambda_420 [347] + 0.00 0.00 1/67248908 __lambda_401 [345] + 0.00 0.00 1/67248908 __lambda_398 [344] + 0.00 0.00 1/67248908 __lambda_391 [341] + 0.00 0.00 1/67248908 __lambda_378 [338] + 0.00 0.00 1/67248908 __lambda_374 [337] + 0.00 0.00 1/67248908 __lambda_328 [336] + 0.00 0.00 1/67248908 __lambda_321 [335] + 0.00 0.00 1/67248908 __lambda_312 [334] + 0.00 0.00 1/67248908 __lambda_307 [333] + 0.00 0.00 1/67248908 __lambda_296 [332] + 0.00 0.00 1/67248908 __lambda_294 [331] + 0.00 0.00 1/67248908 __lambda_285 [330] + 0.00 0.00 1/67248908 __lambda_277 [132] + 0.00 0.00 1/67248908 __lambda_275 [329] + 0.00 0.00 1/67248908 __lambda_273 [328] + 0.00 0.00 1/67248908 __lambda_271 [327] + 0.00 0.00 1/67248908 __lambda_263 [326] + 0.00 0.00 1/67248908 __lambda_252 [325] + 0.00 0.00 1/67248908 __lambda_243 [324] + 0.00 0.00 1/67248908 __lambda_232 [323] + 0.00 0.00 1/67248908 __lambda_177 [322] + 0.00 0.00 1/67248908 __lambda_169 [321] + 0.00 0.00 1/67248908 __lambda_162 [320] + 0.00 0.00 1/67248908 __lambda_142 [318] + 0.00 0.00 1/67248908 __lambda_122 [317] + 0.00 0.00 1/67248908 __lambda_114 [316] + 0.00 0.00 1/67248908 __lambda_107 [315] + 0.00 0.00 1/67248908 __lambda_102 [314] + 0.00 0.00 1/67248908 __lambda_93 [360] + 0.00 0.00 1/67248908 __lambda_54 [358] + 0.00 0.00 1/67248908 __lambda_48 [355] + 0.00 0.00 1/67248908 __lambda_41 [346] + 0.00 0.00 1/67248908 __lambda_15 [319] + 0.00 0.00 1/67248908 __lambda_394 [343] + 0.00 0.00 1/67248908 __lambda_392 [342] + 0.00 0.00 1/67248908 __lambda_390 [340] + 0.00 0.00 1/67248908 __lambda_389 [339] + 0.00 0.00 1/67248908 __lambda_8 [359] + 0.00 0.00 2/67248908 __lambda_441 [295] + 0.00 0.00 2/67248908 __lambda_416 [294] + 0.00 0.00 2/67248908 __lambda_367 [293] + 0.00 0.00 2/67248908 __lambda_302 [292] + 0.00 0.00 12/67248908 __lambda_432 [250] + 0.00 0.00 15/67248908 __lambda_317 [247] + 0.00 0.00 16/67248908 __lambda_325 [245] + 0.00 0.00 16/67248908 __lambda_258 [244] + 0.00 0.00 16/67248908 __lambda_228 [243] + 0.00 0.00 16/67248908 __lambda_211 [242] + 0.00 0.00 16/67248908 __lambda_189 [241] + 0.00 0.00 16/67248908 __lambda_138 [240] + 0.00 0.00 44/67248908 __lambda_207 [220] + 0.00 0.00 61/67248908 __lambda_225 [213] + 0.00 0.00 61/67248908 __lambda_217 [212] + 0.00 0.00 73/67248908 __lambda_203 [207] + 0.00 0.00 88/67248908 __lambda_128 [202] + 0.00 0.00 225/67248908 __lambda_157 [187] + 0.00 0.00 240/67248908 __lambda_239 [185] + 0.00 0.00 434/67248908 __lambda_151 [178] + 0.07 0.56 7173615/67248908 __lambda_86 [51] + 0.08 0.62 7971012/67248908 __lambda_70 [52] + 0.11 0.86 11150680/67248908 __lambda_79 [36] + 0.17 1.33 17224919/67248908 __lambda_64 [32] + 0.23 1.84 23727277/67248908 __lambda_324 [35] +[25] 0.7 0.64 5.21 67248908 Cyc_set_cell [25] + 0.66 2.81 67251007/67255054 gc_mut_update [39] + 0.73 1.01 67249326/67253349 add_mutation [62] +----------------------------------------------- + 1 __lambda_1545 [1185] + 1 __lambda_9 [449] + 2 __lambda_388 [1169] + 2 __lambda_386 [1168] + 2 __lambda_373 [365] + 15 __lambda_470 [1127] + 8089 do_dispatch [101] + 3187168 __lambda_55 [94] + 5577815 __lambda_56 [92] + 8764651 __lambda_91 [43] + 17221346 __lambda_69 [40] +[26] 0.7 2.54 3.22 34759092 __lambda_327 [26] + 0.00 2.65 14485/306468 GC [11] + 0.57 0.00 34758625/169600308 Cyc_st_add [46] + 17212920 __lambda_67 [66] + 5578179 __lambda_75 [69] + 5577003 __lambda_56 [92] + 3187564 __lambda_74 [83] + 3186914 __lambda_55 [94] + 15 __lambda_365 [1105] + 2 __lambda_372 [182] + 2 __lambda_385 [183] + 2 __lambda_387 [184] + 1 __lambda_8 [359] + 1 __lambda_1544 [386] +----------------------------------------------- + 5321 do_dispatch [101] + 35063874 __lambda_78 [21] +[27] 0.7 0.66 5.06 35069195 __lambda_59 [27] + 0.00 4.04 22062/306468 GC [11] + 0.49 0.00 35072196/81303063 Cyc_num_fast_gte_op [79] + 0.26 0.13 10760840/153035271 Cyc_vector_ref [29] + 0.09 0.00 32268048/771639154 cell_get [55] + 0.05 0.00 10760275/25906361 Cyc_fast_sub [98] + 24295193 __lambda_77 [30] + 10753823 __lambda_272 [63] +----------------------------------------------- + +[28] 0.7 5.57 0.00 ck_cc_popcount [28] +----------------------------------------------- + 0.00 0.00 1/153035271 __lambda_174 [419] + 0.00 0.00 1/153035271 __lambda_118 [418] + 0.00 0.00 1/153035271 __lambda_52 [420] + 0.00 0.00 2/153035271 __lambda_389 [367] + 0.00 0.00 2/153035271 __lambda_3 [362] + 0.00 0.00 3/153035271 __lambda_490 [313] + 0.00 0.00 3/153035271 __lambda_47 [303] + 0.00 0.00 3/153035271 __lambda_1 [310] + 0.00 0.00 5/153035271 __lambda_2 [291] + 0.00 0.00 6/153035271 __lambda_0 [286] + 0.00 0.00 7/153035271 __lambda_396 [281] + 0.00 0.00 9/153035271 __lambda_465 [275] + 0.00 0.00 15/153035271 __lambda_168 [259] + 0.00 0.00 15/153035271 __lambda_388 [256] + 0.00 0.00 16/153035271 __lambda_262 [266] + 0.00 0.00 16/153035271 __lambda_193 [265] + 0.00 0.00 16/153035271 __lambda_141 [264] + 0.00 0.00 17/153035271 __lambda_324 [255] + 0.00 0.00 22/153035271 __lambda_431 [249] + 0.00 0.00 44/153035271 __lambda_179 [218] + 0.00 0.00 61/153035271 __lambda_220 [229] + 0.00 0.00 61/153035271 __lambda_212 [228] + 0.00 0.00 88/153035271 __lambda_136 [214] + 0.00 0.00 88/153035271 __lambda_135 [226] + 0.00 0.00 88/153035271 __lambda_134 [225] + 0.00 0.00 104/153035271 __lambda_137 [223] + 0.00 0.00 105/153035271 __lambda_187 [211] + 0.00 0.00 105/153035271 __lambda_186 [216] + 0.00 0.00 105/153035271 __lambda_185 [222] + 0.00 0.00 105/153035271 __lambda_184 [221] + 0.00 0.00 121/153035271 __lambda_188 [217] + 0.00 0.00 193/153035271 __lambda_284 [206] + 0.00 0.00 193/153035271 __lambda_283 [205] + 0.00 0.00 193/153035271 __lambda_281 [204] + 0.00 0.00 193/153035271 __lambda_266 [194] + 0.00 0.00 225/153035271 __lambda_160 [200] + 0.00 0.00 225/153035271 __lambda_144 [199] + 0.00 0.00 254/153035271 __lambda_143 [190] + 0.00 0.00 255/153035271 __lambda_202 [192] + 0.00 0.00 556/153035271 __lambda_270 [186] + 0.00 0.00 645/153035271 __lambda_156 [179] + 0.00 0.00 1361/153035271 __lambda_249 [175] + 0.00 0.00 1923/153035271 __lambda_251 [161] + 0.17 0.09 7173702/153035271 __lambda_90 [68] + 0.25 0.13 10361867/153035271 __lambda_91 [43] + 0.26 0.13 10760840/153035271 __lambda_59 [27] + 0.27 0.13 11151737/153035271 __lambda_276 [70] + 0.37 0.18 15144018/153035271 __lambda_85 [42] + 0.37 0.18 15146464/153035271 __lambda_295 [53] + 0.39 0.19 15941549/153035271 __lambda_92 [37] + 0.52 0.26 21516966/153035271 __lambda_272 [63] + 1.11 0.55 45830677/153035271 __lambda_274 [24] +[29] 0.7 3.71 1.85 153035271 Cyc_vector_ref [29] + 1.16 0.00 153043717/153047710 Cyc_is_vector [78] + 0.69 0.00 153039437/153043652 Cyc_is_number [89] +----------------------------------------------- + 8189 __lambda_272 [63] + 17451 do_dispatch [101] + 10749354 __lambda_274 [24] + 24295193 __lambda_59 [27] +[30] 0.7 3.46 1.80 35070187 __lambda_77 [30] + 0.00 1.47 8018/306468 GC [11] + 0.29 0.00 105198661/771639154 cell_get [55] + 0.04 0.00 7970623/25906361 Cyc_fast_sub [98] + 27095238 __lambda_274 [24] + 7969043 __lambda_92 [37] +----------------------------------------------- + 1 __lambda_44 [1254] + 4557 do_dispatch [101] + 23723310 __lambda_63 [33] +[31] 0.6 3.69 1.34 23727868 __lambda_326 [31] + 0.00 0.95 5176/306468 GC [11] + 0.39 0.00 23728543/169600308 Cyc_st_add [46] + 23723381 __lambda_325 [38] +----------------------------------------------- + 5363 do_dispatch [101] + 17219167 __lambda_65 [54] +[32] 0.6 2.16 2.74 17224530 __lambda_64 [32] + 0.17 1.33 17224919/67248908 Cyc_set_cell [25] + 0.00 1.24 6765/306468 GC [11] + 17216535 __lambda_61 [64] +----------------------------------------------- + 15893 do_dispatch [101] + 17217379 __lambda_61 [64] + 23718679 __lambda_62 [49] +[33] 0.5 2.08 2.03 40951951 __lambda_63 [33] + 0.00 1.20 6530/306468 GC [11] + 0.27 0.00 40953814/410327643 Cyc_is_pair [48] + 0.09 0.15 23727741/154638249 Cyc_car [67] + 0.07 0.11 17224403/167205531 Cyc_cdr [59] + 0.14 0.00 51667407/771639154 cell_get [55] + 23723310 __lambda_326 [31] + 17221837 __lambda_69 [40] +----------------------------------------------- + 4051 do_dispatch [101] + 23723760 __lambda_324 [35] +[34] 0.5 1.85 2.20 23727811 __lambda_321 [34] + 0.00 1.14 6244/306468 GC [11] + 0.21 0.31 47455515/167205531 Cyc_cdr [59] + 0.31 0.00 47457850/158564737 Cyc_is_null [84] + 0.09 0.15 23728395/154638249 Cyc_car [67] + 23721859 __lambda_282 [23] +----------------------------------------------- + 13227 do_dispatch [101] + 23714059 __lambda_325 [38] +[35] 0.5 1.03 2.81 23727286 __lambda_324 [35] + 0.23 1.84 23727277/67248908 Cyc_set_cell [25] + 0.00 0.74 4050/306468 GC [11] + 23723760 __lambda_321 [34] +----------------------------------------------- + 4245 do_dispatch [101] + 11146662 __lambda_80 [58] +[36] 0.5 1.96 1.80 11150907 __lambda_79 [36] + 0.11 0.86 11150680/67248908 Cyc_set_cell [25] + 0.00 0.83 4517/306468 GC [11] + 11145827 __lambda_58 [72] +----------------------------------------------- + 1 __lambda_45 [382] + 3529 do_dispatch [101] + 7968282 __lambda_75 [69] + 7969043 __lambda_77 [30] +[37] 0.5 1.45 2.30 15940855 __lambda_92 [37] + 0.00 1.72 9372/306468 GC [11] + 0.39 0.19 15941549/153035271 Cyc_vector_ref [29] + 15931615 __lambda_91 [43] +----------------------------------------------- + 5176 do_dispatch [101] + 23723381 __lambda_326 [31] +[38] 0.5 1.27 2.42 23728557 __lambda_325 [38] + 0.00 2.42 13226/306468 GC [11] + 23714059 __lambda_324 [35] +----------------------------------------------- + 0.00 0.00 24/67255054 Cyc_global_set [248] + 0.00 0.00 30/67255054 Cyc_set_car [109] + 0.00 0.00 3993/67255054 Cyc_vector_set [103] + 0.66 2.81 67251007/67255054 Cyc_set_cell [25] +[39] 0.4 0.66 2.81 67255054 gc_mut_update [39] + 1.46 1.34 134512050/2275804334 ck_pr_md_load_int [13] + 0.01 0.01 363586/363586 mark_stack_or_heap_obj [118] +----------------------------------------------- + 5366 do_dispatch [101] + 7967345 __lambda_60 [86] + 17221837 __lambda_63 [33] +[40] 0.4 2.00 1.29 25194548 __lambda_69 [40] + 0.00 0.88 4814/306468 GC [11] + 0.06 0.11 17223371/154638249 Cyc_car [67] + 0.16 0.00 25195866/410327643 Cyc_is_pair [48] + 0.07 0.00 23907538/771639154 cell_get [55] + 17221346 __lambda_327 [26] + 7968616 __lambda_274 [24] +----------------------------------------------- + +[41] 0.4 3.25 0.00 vpbuffer_free [41] +----------------------------------------------- + 6004 do_dispatch [101] + 3992851 __lambda_83 [57] + 7169958 __lambda_57 [87] + 11149171 __lambda_78 [21] +[42] 0.4 1.54 1.66 22317984 __lambda_85 [42] + 0.00 0.97 5285/306468 GC [11] + 0.37 0.18 15144018/153035271 Cyc_vector_ref [29] + 0.15 0.00 22318989/410327643 Cyc_is_pair [48] + 15139865 __lambda_84 [44] + 4781190 __lambda_74 [83] + 2390581 __lambda_75 [69] + 1 __lambda_44 [1254] +----------------------------------------------- + 9374 do_dispatch [101] + 15931615 __lambda_92 [37] +[43] 0.4 1.59 1.55 15940989 __lambda_91 [43] + 0.00 1.00 5474/306468 GC [11] + 0.25 0.13 10361867/153035271 Cyc_vector_ref [29] + 0.11 0.00 8767904/8768479 Cyc_num_fast_lt_op [99] + 0.03 0.00 7173648/25906361 Cyc_fast_sub [98] + 0.01 0.02 3188173/154638249 Cyc_car [67] + 8764651 __lambda_327 [26] + 7171217 __lambda_90 [68] +----------------------------------------------- + 3563 do_dispatch [101] + 15139865 __lambda_85 [42] +[44] 0.4 1.64 1.35 15143428 __lambda_84 [44] + 0.00 1.07 5834/306468 GC [11] + 0.05 0.10 15145183/154638249 Cyc_car [67] + 0.13 0.00 45422294/771639154 cell_get [55] + 15138920 __lambda_295 [53] +----------------------------------------------- + +[45] 0.4 2.80 0.00 ck_pr_md_store_uint [45] +----------------------------------------------- + 0.00 0.00 1/169600308 __lambda_538 [445] + 0.00 0.00 1/169600308 __lambda_537 [444] + 0.00 0.00 1/169600308 __lambda_491 [443] + 0.00 0.00 1/169600308 __lambda_484 [442] + 0.00 0.00 1/169600308 __lambda_472 [441] + 0.00 0.00 1/169600308 __lambda_465 [275] + 0.00 0.00 1/169600308 __lambda_464 [440] + 0.00 0.00 1/169600308 __lambda_6 [446] + 0.00 0.00 1/169600308 __lambda_1561 [370] + 0.00 0.00 1/169600308 __lambda_399 [439] + 0.00 0.00 1/169600308 __lambda_251 [437] + 0.00 0.00 1/169600308 __lambda_3 [438] + 0.00 0.00 1/169600308 __lambda_5 [373] + 0.00 0.00 1/169600308 __lambda_42 [372] + 0.00 0.00 1/169600308 __lambda_400 [371] + 0.00 0.00 2/169600308 __lambda_367 [413] + 0.00 0.00 2/169600308 __lambda_304 [374] + 0.00 0.00 2/169600308 __lambda_247 [423] + 0.00 0.00 2/169600308 __lambda_3 [414] + 0.00 0.00 2/169600308 __lambda_23 [366] + 0.00 0.00 3/169600308 __lambda_725 [411] + 0.00 0.00 3/169600308 __lambda_384 [409] + 0.00 0.00 3/169600308 __lambda_309 [407] + 0.00 0.00 3/169600308 __lambda_308 [368] + 0.00 0.00 3/169600308 __lambda_35 [130] + 0.00 0.00 3/169600308 __lambda_390 [410] + 0.00 0.00 3/169600308 __lambda_337 [408] + 0.00 0.00 3/169600308 __lambda_329 [364] + 0.00 0.00 3/169600308 __lambda_28 [406] + 0.00 0.00 3/169600308 __lambda_24 [405] + 0.00 0.00 3/169600308 __lambda_11 [151] + 0.00 0.00 5/169600308 __lambda_43 [311] + 0.00 0.00 5/169600308 __lambda_18 [290] + 0.00 0.00 5/169600308 __lambda_16 [302] + 0.00 0.00 5/169600308 __lambda_13 [283] + 0.00 0.00 10/169600308 __lambda_36 [117] + 0.00 0.00 12/169600308 __lambda_1 [280] + 0.00 0.00 15/169600308 __lambda_254 [282] + 0.00 0.00 15/169600308 __lambda_14 [253] + 0.00 0.00 15/169600308 __lambda_12 [268] + 0.00 0.00 20/169600308 __lambda_383 [276] + 0.00 0.00 20/169600308 __lambda_20 [252] + 0.39 0.00 23728543/169600308 __lambda_326 [31] + 0.57 0.00 34758625/169600308 __lambda_327 [26] + 0.78 0.00 47457910/169600308 __lambda_282 [23] + 1.04 0.00 63655045/169600308 __lambda_284 [20] +[46] 0.4 2.78 0.00 169600308 Cyc_st_add [46] +----------------------------------------------- + 1.59 1.11 216534461/216534461 gc_move [14] +[47] 0.3 1.59 1.11 216534461 gc_fixup_moved_obj [47] + 1.11 0.00 216534597/216534597 gc_thr_add_to_move_buffer [80] + 0.00 0.00 171424/171424 gc_mark_gray2 [142] +----------------------------------------------- + 0.00 0.00 1/410327643 __lambda_248 [157] + 0.00 0.00 2/410327643 __lambda_450 [415] + 0.00 0.00 2/410327643 __lambda_423 [422] + 0.00 0.00 2/410327643 __lambda_377 [421] + 0.00 0.00 2/410327643 __lambda_367 [413] + 0.00 0.00 2/410327643 assoc [152] + 0.00 0.00 3/410327643 __lambda_444 [376] + 0.00 0.00 3/410327643 __lambda_419 [375] + 0.00 0.00 3/410327643 __lambda_373 [365] + 0.00 0.00 3/410327643 __lambda_719 [430] + 0.00 0.00 3/410327643 Cyc_list2string [148] + 0.00 0.00 4/410327643 __lambda_113 [361] + 0.00 0.00 4/410327643 __lambda_47 [303] + 0.00 0.00 4/410327643 apply_va [425] + 0.00 0.00 5/410327643 __lambda_440 [307] + 0.00 0.00 5/410327643 __lambda_415 [296] + 0.00 0.00 5/410327643 __lambda_366 [300] + 0.00 0.00 5/410327643 Cyc_list2vector [134] + 0.00 0.00 16/410327643 memberp [110] + 0.00 0.00 30/410327643 __lambda_316 [270] + 0.00 0.00 30/410327643 Cyc_set_car [109] + 0.00 0.00 33/410327643 __lambda_257 [269] + 0.00 0.00 97/410327643 equalp [104] + 0.00 0.00 117/410327643 __lambda_206 [257] + 0.00 0.00 151/410327643 __lambda_224 [230] + 0.00 0.00 212/410327643 __lambda_216 [219] + 0.00 0.00 870/410327643 __lambda_156 [179] + 0.15 0.00 22318989/410327643 __lambda_85 [42] + 0.16 0.00 25195866/410327643 __lambda_69 [40] + 0.27 0.00 40953814/410327643 __lambda_63 [33] + 1.01 0.00 154644813/410327643 Cyc_car [67] + 1.09 0.00 167212547/410327643 Cyc_cdr [59] +[48] 0.3 2.68 0.00 410327643 Cyc_is_pair [48] +----------------------------------------------- + 4874 do_dispatch [101] + 23722079 __lambda_282 [23] +[49] 0.3 0.51 2.15 23726953 __lambda_62 [49] + 0.00 1.70 9285/306468 GC [11] + 0.10 0.15 23728720/167205531 Cyc_cdr [59] + 0.20 0.00 71166488/771639154 cell_get [55] + 23718679 __lambda_63 [33] +----------------------------------------------- + 28 __lambda_365 [1105] + 10884 do_dispatch [101] + 16192629 __lambda_322 [75] + 23720625 __lambda_284 [20] +[50] 0.3 0.75 1.74 39924166 __lambda_283 [50] + 0.00 1.34 7292/306468 GC [11] + 0.14 0.26 39924872/154638249 Cyc_car [67] + 39917002 __lambda_322 [75] + 30 __lambda_366 [1106] +----------------------------------------------- + 2739 do_dispatch [101] + 7170978 __lambda_87 [73] +[51] 0.3 1.24 1.17 7173717 __lambda_86 [51] + 0.07 0.56 7173615/67248908 Cyc_set_cell [25] + 0.00 0.55 2989/306468 GC [11] + 7170176 __lambda_57 [87] +----------------------------------------------- + 2172 do_dispatch [101] + 7968726 __lambda_71 [82] +[52] 0.3 1.16 1.15 7970898 __lambda_70 [52] + 0.08 0.62 7971012/67248908 Cyc_set_cell [25] + 0.00 0.46 2507/306468 GC [11] + 7967778 __lambda_60 [86] +----------------------------------------------- + 255 __lambda_201 [215] + 645 __lambda_155 [196] + 1708 __lambda_293 [193] + 5834 do_dispatch [101] + 15138920 __lambda_84 [44] +[53] 0.3 0.27 1.91 15147362 __lambda_295 [53] + 0.00 1.25 6807/306468 GC [11] + 0.37 0.18 15146464/153035271 Cyc_vector_ref [29] + 0.11 0.00 15147485/82499403 Cyc_fast_sum [90] + 15136226 __lambda_83 [57] + 1706 __lambda_292 [246] + 645 __lambda_154 [203] + 255 __lambda_200 [1086] +----------------------------------------------- + 3218 do_dispatch [101] + 17221401 __lambda_66 [60] +[54] 0.3 1.18 0.98 17224619 __lambda_65 [54] + 0.00 0.98 5362/306468 GC [11] + 17219167 __lambda_64 [32] +----------------------------------------------- + 0.00 0.00 1/771639154 __lambda_386 [153] + 0.00 0.00 1/771639154 __lambda_7 [482] + 0.00 0.00 1/771639154 __lambda_5 [481] + 0.00 0.00 3/771639154 __lambda_512 [451] + 0.00 0.00 3/771639154 __lambda_493 [447] + 0.00 0.00 3/771639154 __lambda_492 [474] + 0.00 0.00 3/771639154 __lambda_450 [415] + 0.00 0.00 3/771639154 __lambda_444 [376] + 0.00 0.00 3/771639154 __lambda_437 [473] + 0.00 0.00 3/771639154 __lambda_436 [472] + 0.00 0.00 3/771639154 __lambda_419 [375] + 0.00 0.00 3/771639154 __lambda_413 [470] + 0.00 0.00 3/771639154 __lambda_412 [469] + 0.00 0.00 3/771639154 __lambda_411 [468] + 0.00 0.00 3/771639154 __lambda_409 [467] + 0.00 0.00 3/771639154 __lambda_383 [450] + 0.00 0.00 3/771639154 __lambda_373 [365] + 0.00 0.00 3/771639154 __lambda_358 [466] + 0.00 0.00 3/771639154 __lambda_357 [465] + 0.00 0.00 3/771639154 __lambda_356 [464] + 0.00 0.00 3/771639154 __lambda_323 [123] + 0.00 0.00 3/771639154 __lambda_175 [463] + 0.00 0.00 3/771639154 __lambda_173 [462] + 0.00 0.00 3/771639154 __lambda_172 [461] + 0.00 0.00 3/771639154 __lambda_164 [460] + 0.00 0.00 3/771639154 __lambda_119 [459] + 0.00 0.00 3/771639154 __lambda_111 [458] + 0.00 0.00 3/771639154 __lambda_104 [457] + 0.00 0.00 3/771639154 __lambda_53 [475] + 0.00 0.00 3/771639154 __lambda_43 [432] + 0.00 0.00 3/771639154 __lambda_42 [471] + 0.00 0.00 3/771639154 __lambda_3 [362] + 0.00 0.00 3/771639154 __lambda_2 [291] + 0.00 0.00 3/771639154 __lambda_1 [310] + 0.00 0.00 3/771639154 __lambda_0 [286] + 0.00 0.00 4/771639154 __lambda_387 [453] + 0.00 0.00 5/771639154 __lambda_9 [449] + 0.00 0.00 6/771639154 __lambda_438 [436] + 0.00 0.00 6/771639154 __lambda_414 [435] + 0.00 0.00 6/771639154 __lambda_384 [426] + 0.00 0.00 6/771639154 __lambda_371 [381] + 0.00 0.00 6/771639154 __lambda_364 [380] + 0.00 0.00 6/771639154 __lambda_363 [369] + 0.00 0.00 6/771639154 __lambda_359 [434] + 0.00 0.00 6/771639154 __lambda_297 [433] + 0.00 0.00 9/771639154 __lambda_439 [379] + 0.00 0.00 9/771639154 __lambda_361 [383] + 0.00 0.00 9/771639154 __lambda_360 [363] + 0.00 0.00 9/771639154 __lambda_113 [361] + 0.00 0.00 9/771639154 __lambda_112 [378] + 0.00 0.00 9/771639154 __lambda_46 [384] + 0.00 0.00 9/771639154 __lambda_45 [382] + 0.00 0.00 15/771639154 __lambda_440 [307] + 0.00 0.00 15/771639154 __lambda_415 [296] + 0.00 0.00 15/771639154 __lambda_366 [300] + 0.00 0.00 21/771639154 __lambda_397 [377] + 0.00 0.00 22/771639154 __lambda_721 [289] + 0.00 0.00 30/771639154 __lambda_430 [121] + 0.00 0.00 36/771639154 __lambda_429 [298] + 0.00 0.00 45/771639154 __lambda_316 [270] + 0.00 0.00 45/771639154 __lambda_314 [279] + 0.00 0.00 45/771639154 __lambda_313 [309] + 0.00 0.00 45/771639154 __lambda_309 [308] + 0.00 0.00 45/771639154 __lambda_167 [272] + 0.00 0.00 45/771639154 __lambda_166 [285] + 0.00 0.00 45/771639154 __lambda_165 [284] + 0.00 0.00 48/771639154 __lambda_322 [288] + 0.00 0.00 48/771639154 __lambda_253 [306] + 0.00 0.00 48/771639154 __lambda_178 [305] + 0.00 0.00 48/771639154 __lambda_123 [304] + 0.00 0.00 48/771639154 __lambda_106 [273] + 0.00 0.00 48/771639154 __lambda_105 [287] + 0.00 0.00 51/771639154 __lambda_257 [269] + 0.00 0.00 51/771639154 __lambda_256 [301] + 0.00 0.00 51/771639154 __lambda_255 [278] + 0.00 0.00 51/771639154 __lambda_254 [277] + 0.00 0.00 61/771639154 __lambda_388 [256] + 0.00 0.00 90/771639154 __lambda_221 [267] + 0.00 0.00 96/771639154 __lambda_298 [271] + 0.00 0.00 132/771639154 __lambda_194 [274] + 0.00 0.00 183/771639154 __lambda_220 [229] + 0.00 0.00 183/771639154 __lambda_212 [228] + 0.00 0.00 219/771639154 __lambda_202 [192] + 0.00 0.00 219/771639154 __lambda_195 [263] + 0.00 0.00 264/771639154 __lambda_132 [261] + 0.00 0.00 264/771639154 __lambda_124 [260] + 0.00 0.00 270/771639154 __lambda_224 [230] + 0.00 0.00 270/771639154 __lambda_223 [258] + 0.00 0.00 270/771639154 __lambda_222 [239] + 0.00 0.00 313/771639154 __lambda_180 [170] + 0.00 0.00 315/771639154 __lambda_182 [254] + 0.00 0.00 315/771639154 __lambda_179 [218] + 0.00 0.00 453/771639154 __lambda_216 [219] + 0.00 0.00 453/771639154 __lambda_215 [227] + 0.00 0.00 675/771639154 __lambda_144 [199] + 0.00 0.00 720/771639154 __lambda_242 [238] + 0.00 0.00 720/771639154 __lambda_236 [237] + 0.00 0.00 720/771639154 __lambda_235 [236] + 0.00 0.00 720/771639154 __lambda_233 [235] + 0.00 0.00 720/771639154 __lambda_197 [208] + 0.00 0.00 720/771639154 __lambda_196 [209] + 0.00 0.00 765/771639154 __lambda_201 [215] + 0.00 0.00 765/771639154 __lambda_199 [234] + 0.00 0.00 765/771639154 __lambda_198 [233] + 0.00 0.00 805/771639154 __lambda_126 [169] + 0.00 0.00 807/771639154 __lambda_244 [231] + 0.00 0.00 807/771639154 __lambda_125 [232] + 0.00 0.00 1071/771639154 __lambda_127 [201] + 0.00 0.00 1300/771639154 __lambda_145 [168] + 0.00 0.00 1302/771639154 __lambda_150 [176] + 0.00 0.00 1365/771639154 __lambda_234 [224] + 0.00 0.00 1935/771639154 __lambda_155 [196] + 0.00 0.00 1935/771639154 __lambda_154 [203] + 0.00 0.00 2038/771639154 __lambda_146 [167] + 0.00 0.00 2085/771639154 __lambda_238 [188] + 0.00 0.00 2085/771639154 __lambda_237 [210] + 0.00 0.00 3720/771639154 __lambda_147 [164] + 0.00 0.00 4083/771639154 __lambda_248 [198] + 0.00 0.00 4083/771639154 __lambda_245 [197] + 0.00 0.00 5124/771639154 __lambda_293 [193] + 0.00 0.00 5769/771639154 __lambda_250 [191] + 0.00 0.00 6448/771639154 __lambda_148 [165] + 0.00 0.00 6450/771639154 __lambda_149 [189] + 0.06 0.00 21514183/771639154 __lambda_57 [87] + 0.07 0.00 23905928/771639154 __lambda_60 [86] + 0.07 0.00 23907538/771639154 __lambda_69 [40] + 0.07 0.00 23907910/771639154 __lambda_75 [69] + 0.07 0.00 23909626/771639154 __lambda_68 [91] + 0.09 0.00 32258188/771639154 __lambda_272 [63] + 0.09 0.00 32268048/771639154 __lambda_59 [27] + 0.09 0.00 33442256/771639154 __lambda_58 [72] + 0.09 0.00 33448140/771639154 __lambda_78 [21] + 0.13 0.00 45422294/771639154 __lambda_84 [44] + 0.13 0.00 45428514/771639154 __lambda_83 [57] + 0.14 0.00 51660752/771639154 __lambda_61 [64] + 0.14 0.00 51667407/771639154 __lambda_63 [33] + 0.20 0.00 71166488/771639154 __lambda_62 [49] + 0.20 0.00 71172426/771639154 __lambda_320 [61] + 0.22 0.00 81294743/771639154 __lambda_76 [65] + 0.29 0.00 105198661/771639154 __lambda_77 [30] +[55] 0.3 2.13 0.00 771639154 cell_get [55] +----------------------------------------------- + 1100 do_dispatch [101] + 11149832 __lambda_82 [71] +[56] 0.3 1.27 0.76 11150932 __lambda_81 [56] + 0.00 0.76 4130/306468 GC [11] + 11146790 __lambda_80 [58] +----------------------------------------------- + 6807 do_dispatch [101] + 15136226 __lambda_295 [53] +[57] 0.3 1.36 0.64 15143033 __lambda_83 [57] + 0.00 0.47 2580/306468 GC [11] + 0.13 0.00 45428514/771639154 cell_get [55] + 0.02 0.03 3993665/167205531 Cyc_cdr [59] + 11149187 __lambda_276 [70] + 3992851 __lambda_85 [42] +----------------------------------------------- + 4130 do_dispatch [101] + 11146790 __lambda_81 [56] +[58] 0.2 1.14 0.78 11150920 __lambda_80 [58] + 0.00 0.78 4245/306468 GC [11] + 11146662 __lambda_79 [36] +----------------------------------------------- + 0.00 0.00 1/167205531 __lambda_448 [428] + 0.00 0.00 1/167205531 __lambda_444 [376] + 0.00 0.00 1/167205531 __lambda_423 [422] + 0.00 0.00 1/167205531 __lambda_419 [375] + 0.00 0.00 1/167205531 __lambda_377 [421] + 0.00 0.00 1/167205531 __lambda_373 [365] + 0.00 0.00 1/167205531 __lambda_43 [432] + 0.00 0.00 1/167205531 __lambda_249 [454] + 0.00 0.00 2/167205531 __lambda_440 [307] + 0.00 0.00 2/167205531 __lambda_363 [369] + 0.00 0.00 2/167205531 __lambda_45 [382] + 0.00 0.00 2/167205531 __lambda_245 [412] + 0.00 0.00 2/167205531 __lambda_23 [366] + 0.00 0.00 3/167205531 __lambda_439 [379] + 0.00 0.00 3/167205531 __lambda_360 [363] + 0.00 0.00 3/167205531 __lambda_112 [378] + 0.00 0.00 5/167205531 __lambda_415 [296] + 0.00 0.00 5/167205531 __lambda_16 [302] + 0.00 0.00 10/167205531 __lambda_18 [290] + 0.00 0.00 10/167205531 __lambda_13 [283] + 0.00 0.00 15/167205531 __lambda_320 [297] + 0.00 0.00 15/167205531 __lambda_314 [279] + 0.00 0.00 15/167205531 __lambda_167 [272] + 0.00 0.00 15/167205531 __lambda_12 [268] + 0.00 0.00 17/167205531 __lambda_254 [277] + 0.00 0.00 30/167205531 __lambda_221 [267] + 0.00 0.00 45/167205531 __lambda_14 [253] + 0.00 0.00 60/167205531 __lambda_222 [239] + 0.00 0.00 60/167205531 __lambda_20 [252] + 0.00 0.00 73/167205531 __lambda_202 [192] + 0.00 0.00 151/167205531 __lambda_215 [227] + 0.00 0.00 211/167205531 __lambda_154 [203] + 0.00 0.00 434/167205531 __lambda_150 [176] + 0.02 0.03 3993665/167205531 __lambda_83 [57] + 0.05 0.07 11151149/167205531 __lambda_78 [21] + 0.07 0.11 17224403/167205531 __lambda_63 [33] + 0.10 0.15 23728300/167205531 __lambda_281 [85] + 0.10 0.15 23728720/167205531 __lambda_62 [49] + 0.17 0.26 39922581/167205531 __lambda_284 [20] + 0.21 0.31 47455515/167205531 __lambda_321 [34] +[59] 0.2 0.72 1.09 167205531 Cyc_cdr [59] + 1.09 0.00 167212547/410327643 Cyc_is_pair [48] +----------------------------------------------- + 2875 do_dispatch [101] + 17221524 __lambda_67 [66] +[60] 0.2 1.19 0.59 17224399 __lambda_66 [60] + 0.00 0.59 3217/306468 GC [11] + 17221401 __lambda_65 [54] +----------------------------------------------- + 9737 do_dispatch [101] + 23718126 __lambda_282 [23] +[61] 0.2 0.27 1.48 23727863 __lambda_320 [61] + 0.00 1.29 7029/306468 GC [11] + 0.20 0.00 71172426/771639154 cell_get [55] + 23721305 __lambda_323 [88] +----------------------------------------------- + 0.00 0.00 30/67253349 Cyc_set_car [109] + 0.00 0.00 3993/67253349 Cyc_vector_set [103] + 0.73 1.01 67249326/67253349 Cyc_set_cell [25] +[62] 0.2 0.73 1.01 67253349 add_mutation [62] + 1.01 0.00 67251462/2207552592 vpbuffer_add [16] +----------------------------------------------- + 3 __lambda_46 [384] + 151 __lambda_216 [219] + 1923 __lambda_250 [191] + 6797 do_dispatch [101] + 10753823 __lambda_59 [27] +[63] 0.2 0.30 1.44 10762697 __lambda_272 [63] + 0.52 0.26 21516966/153035271 Cyc_vector_ref [29] + 0.00 0.41 2216/306468 GC [11] + 0.16 0.00 21516468/82499403 Cyc_fast_sum [90] + 0.09 0.00 32258188/771639154 cell_get [55] + 10752165 __lambda_274 [24] + 8189 __lambda_77 [30] + 50 __lambda_215 [227] + 15 __lambda_249 [175] + 1 __lambda_45 [382] +----------------------------------------------- + 6765 do_dispatch [101] + 17216535 __lambda_64 [32] +[64] 0.2 0.35 1.35 17223300 __lambda_61 [64] + 0.00 1.21 6608/306468 GC [11] + 0.14 0.00 51660752/771639154 cell_get [55] + 17217379 __lambda_63 [33] +----------------------------------------------- + 14212 do_dispatch [101] + 27084682 __lambda_274 [24] +[65] 0.2 0.54 1.11 27098894 __lambda_76 [65] + 0.00 0.89 4837/306468 GC [11] + 0.22 0.00 81294743/771639154 cell_get [55] + 27096260 __lambda_78 [21] +----------------------------------------------- + 9508 do_dispatch [101] + 17212920 __lambda_327 [26] +[66] 0.2 1.09 0.53 17222428 __lambda_67 [66] + 0.00 0.53 2875/306468 GC [11] + 17221524 __lambda_66 [60] +----------------------------------------------- + 0.00 0.00 1/154638249 __lambda_448 [428] + 0.00 0.00 1/154638249 __lambda_423 [422] + 0.00 0.00 1/154638249 __lambda_377 [421] + 0.00 0.00 1/154638249 __lambda_45 [382] + 0.00 0.00 1/154638249 __lambda_248 [157] + 0.00 0.00 1/154638249 __lambda_246 [455] + 0.00 0.00 2/154638249 __lambda_450 [415] + 0.00 0.00 2/154638249 __lambda_444 [376] + 0.00 0.00 2/154638249 __lambda_419 [375] + 0.00 0.00 2/154638249 __lambda_370 [429] + 0.00 0.00 2/154638249 __lambda_304 [374] + 0.00 0.00 2/154638249 __lambda_23 [366] + 0.00 0.00 3/154638249 __lambda_440 [307] + 0.00 0.00 3/154638249 __lambda_361 [383] + 0.00 0.00 3/154638249 __lambda_113 [361] + 0.00 0.00 3/154638249 __lambda_46 [384] + 0.00 0.00 3/154638249 __lambda_329 [364] + 0.00 0.00 3/154638249 __lambda_40 [424] + 0.00 0.00 4/154638249 __lambda_373 [365] + 0.00 0.00 4/154638249 __lambda_371 [381] + 0.00 0.00 4/154638249 __lambda_364 [380] + 0.00 0.00 5/154638249 __lambda_13 [283] + 0.00 0.00 7/154638249 __lambda_366 [300] + 0.00 0.00 15/154638249 __lambda_316 [270] + 0.00 0.00 15/154638249 __lambda_315 [299] + 0.00 0.00 15/154638249 __lambda_14 [253] + 0.00 0.00 15/154638249 __lambda_12 [268] + 0.00 0.00 17/154638249 __lambda_257 [269] + 0.00 0.00 17/154638249 __lambda_255 [278] + 0.00 0.00 30/154638249 __lambda_222 [239] + 0.00 0.00 90/154638249 __lambda_224 [230] + 0.00 0.00 151/154638249 __lambda_216 [219] + 0.00 0.00 240/154638249 __lambda_197 [208] + 0.00 0.00 240/154638249 __lambda_196 [209] + 0.00 0.00 255/154638249 __lambda_201 [215] + 0.00 0.00 645/154638249 __lambda_155 [196] + 0.00 0.00 680/154638249 __lambda_146 [167] + 0.01 0.02 3188173/154638249 __lambda_91 [43] + 0.03 0.05 7970492/154638249 __lambda_75 [69] + 0.05 0.10 15145183/154638249 __lambda_84 [44] + 0.06 0.11 17223371/154638249 __lambda_69 [40] + 0.09 0.15 23727537/154638249 __lambda_282 [23] + 0.09 0.15 23727741/154638249 __lambda_63 [33] + 0.09 0.15 23728395/154638249 __lambda_321 [34] + 0.14 0.26 39924872/154638249 __lambda_283 [50] +[67] 0.2 0.55 1.01 154638249 Cyc_car [67] + 1.01 0.00 154644813/410327643 Cyc_is_pair [48] +----------------------------------------------- + 2443 do_dispatch [101] + 7171217 __lambda_91 [43] +[68] 0.2 0.67 0.86 7173660 __lambda_90 [68] + 0.00 0.60 3267/306468 GC [11] + 0.17 0.09 7173702/153035271 Cyc_vector_ref [29] + 7170360 __lambda_89 [77] +----------------------------------------------- + 1575 do_dispatch [101] + 2390581 __lambda_85 [42] + 5578179 __lambda_327 [26] +[69] 0.2 0.99 0.52 7970335 __lambda_75 [69] + 0.00 0.38 2053/306468 GC [11] + 0.03 0.05 7970492/154638249 Cyc_car [67] + 0.07 0.00 23907910/771639154 cell_get [55] + 7968282 __lambda_92 [37] +----------------------------------------------- + 240 __lambda_242 [238] + 434 __lambda_154 [203] + 1911 do_dispatch [101] + 11149187 __lambda_83 [57] +[70] 0.2 0.07 1.36 11151772 __lambda_276 [70] + 0.00 0.96 5242/306468 GC [11] + 0.27 0.13 11151737/153035271 Cyc_vector_ref [29] + 11145042 __lambda_82 [71] + 434 __lambda_153 [1083] + 240 __lambda_241 [1088] +----------------------------------------------- + 5242 do_dispatch [101] + 11145042 __lambda_276 [70] +[71] 0.2 1.12 0.20 11150284 __lambda_82 [71] + 0.00 0.20 1100/306468 GC [11] + 11149832 __lambda_81 [56] +----------------------------------------------- + 4517 do_dispatch [101] + 11145827 __lambda_79 [36] +[72] 0.2 0.19 1.11 11150344 __lambda_58 [72] + 0.00 1.02 5579/306468 GC [11] + 0.09 0.00 33442256/771639154 cell_get [55] + 11145216 __lambda_78 [21] +----------------------------------------------- + 2752 do_dispatch [101] + 7171073 __lambda_88 [76] +[73] 0.2 0.80 0.50 7173825 __lambda_87 [73] + 0.00 0.50 2739/306468 GC [11] + 7170978 __lambda_86 [51] +----------------------------------------------- + 1517 do_dispatch [101] + 7969368 __lambda_74 [83] +[74] 0.2 0.81 0.48 7970885 __lambda_73 [74] + 0.00 0.48 2648/306468 GC [11] + 7968348 __lambda_72 [81] +----------------------------------------------- + 7292 do_dispatch [101] + 39917002 __lambda_283 [50] +[75] 0.2 0.21 1.07 39924294 __lambda_322 [75] + 0.00 1.07 5835/306468 GC [11] + 23725154 __lambda_281 [85] + 16192629 __lambda_283 [50] +----------------------------------------------- + 2565 do_dispatch [101] + 7171126 __lambda_89 [77] +[76] 0.2 0.77 0.50 7173691 __lambda_88 [76] + 0.00 0.50 2751/306468 GC [11] + 7171073 __lambda_87 [73] +----------------------------------------------- + 3268 do_dispatch [101] + 7170360 __lambda_90 [68] +[77] 0.2 0.75 0.47 7173628 __lambda_89 [77] + 0.00 0.47 2564/306468 GC [11] + 7171126 __lambda_88 [76] +----------------------------------------------- + 0.00 0.00 3993/153047710 Cyc_vector_set [103] + 1.16 0.00 153043717/153047710 Cyc_vector_ref [29] +[78] 0.1 1.16 0.00 153047710 Cyc_is_vector [78] +----------------------------------------------- + 0.00 0.00 3/81303063 __lambda_390 [180] + 0.00 0.00 17/81303063 __lambda_324 [255] + 0.00 0.00 17/81303063 __lambda_106 [273] + 0.00 0.00 22/81303063 __lambda_431 [249] + 0.00 0.00 34/81303063 __lambda_301 [262] + 0.00 0.00 104/81303063 __lambda_136 [214] + 0.00 0.00 105/81303063 __lambda_179 [218] + 0.00 0.00 121/81303063 __lambda_187 [211] + 0.00 0.00 328/81303063 __lambda_202 [192] + 0.00 0.00 357/81303063 __lambda_127 [201] + 0.00 0.00 523/81303063 __lambda_143 [190] + 0.00 0.00 935/81303063 __lambda_238 [188] + 0.00 0.00 2150/81303063 __lambda_147 [164] + 0.00 0.00 2584/81303063 __lambda_150 [176] + 0.49 0.00 35072196/81303063 __lambda_59 [27] + 0.65 0.00 46223567/81303063 __lambda_78 [21] +[79] 0.1 1.14 0.00 81303063 Cyc_num_fast_gte_op [79] +----------------------------------------------- + 1.11 0.00 216534597/216534597 gc_fixup_moved_obj [47] +[80] 0.1 1.11 0.00 216534597 gc_thr_add_to_move_buffer [80] + 0.00 0.00 5/6 gc_thr_grow_move_buffer [513] +----------------------------------------------- + 2648 do_dispatch [101] + 7968348 __lambda_73 [74] +[81] 0.1 0.64 0.46 7970996 __lambda_72 [81] + 0.00 0.46 2502/306468 GC [11] + 7968441 __lambda_71 [82] +----------------------------------------------- + 2502 do_dispatch [101] + 7968441 __lambda_72 [81] +[82] 0.1 0.69 0.40 7970943 __lambda_71 [82] + 0.00 0.40 2172/306468 GC [11] + 7968726 __lambda_70 [52] +----------------------------------------------- + 1714 do_dispatch [101] + 3187564 __lambda_327 [26] + 4781190 __lambda_85 [42] +[83] 0.1 0.77 0.28 7970468 __lambda_74 [83] + 0.00 0.28 1516/306468 GC [11] + 7969368 __lambda_73 [74] +----------------------------------------------- + 0.00 0.00 2/158564737 __lambda_304 [374] + 0.00 0.00 2/158564737 __lambda_3 [414] + 0.00 0.00 3/158564737 __lambda_308 [368] + 0.00 0.00 3/158564737 __lambda_387 [431] + 0.00 0.00 4/158564737 __lambda_245 [412] + 0.00 0.00 5/158564737 __lambda_43 [311] + 0.00 0.00 12/158564737 __lambda_1 [280] + 0.00 0.00 22/158564737 __lambda_721 [289] + 0.31 0.00 47454528/158564737 __lambda_282 [23] + 0.31 0.00 47457850/158564737 __lambda_321 [34] + 0.41 0.00 63652306/158564737 __lambda_284 [20] +[84] 0.1 1.02 0.00 158564737 Cyc_is_null [84] +----------------------------------------------- + 42 _cons [112] + 2359 do_dispatch [101] + 23725154 __lambda_322 [75] +[85] 0.1 0.38 0.60 23727555 __lambda_281 [85] + 0.00 0.34 1856/306468 GC [11] + 0.10 0.15 23728300/167205531 Cyc_cdr [59] + 23725821 __lambda_282 [23] +----------------------------------------------- + 2507 do_dispatch [101] + 7967778 __lambda_70 [52] +[86] 0.1 0.22 0.69 7970285 __lambda_60 [86] + 0.00 0.62 3393/306468 GC [11] + 0.07 0.00 23905928/771639154 cell_get [55] + 7967345 __lambda_69 [40] +----------------------------------------------- + 2989 do_dispatch [101] + 7170176 __lambda_86 [51] +[87] 0.1 0.13 0.73 7173165 __lambda_57 [87] + 0.00 0.67 3654/306468 GC [11] + 0.06 0.00 21514183/771639154 cell_get [55] + 7169958 __lambda_85 [42] +----------------------------------------------- + 7031 do_dispatch [101] + 23721305 __lambda_320 [61] +[88] 0.1 0.41 0.36 23728336 __lambda_323 [88] + 0.00 0.36 1959/306468 GC [11] + 23725868 __lambda_284 [20] +----------------------------------------------- + 0.00 0.00 1/153043652 __lambda_766 [480] + 0.00 0.00 1/153043652 __lambda_765 [479] + 0.00 0.00 2/153043652 Cyc_number2string2 [456] + 0.00 0.00 218/153043652 Cyc_make_vector [251] + 0.00 0.00 3993/153043652 Cyc_vector_set [103] + 0.69 0.00 153039437/153043652 Cyc_vector_ref [29] +[89] 0.1 0.69 0.00 153043652 Cyc_is_number [89] +----------------------------------------------- + 0.00 0.00 1/82499403 __lambda_493 [447] + 0.00 0.00 1/82499403 __lambda_405 [477] + 0.00 0.00 1/82499403 __lambda_404 [476] + 0.00 0.00 2/82499403 __lambda_306 [448] + 0.00 0.00 3/82499403 __lambda_360 [363] + 0.00 0.00 4/82499403 __lambda_363 [369] + 0.00 0.00 5/82499403 __lambda_415 [296] + 0.00 0.00 5/82499403 __lambda_57 [417] + 0.00 0.00 15/82499403 __lambda_167 [272] + 0.00 0.00 15/82499403 __lambda_166 [285] + 0.00 0.00 15/82499403 __lambda_165 [284] + 0.00 0.00 15/82499403 __lambda_388 [256] + 0.00 0.00 15/82499403 __lambda_253 [312] + 0.00 0.00 32/82499403 __lambda_301 [262] + 0.00 0.00 44/82499403 __lambda_179 [218] + 0.00 0.00 88/82499403 __lambda_136 [214] + 0.00 0.00 105/82499403 __lambda_186 [216] + 0.00 0.00 178/82499403 __lambda_292 [246] + 0.00 0.00 178/82499403 __lambda_287 [143] + 0.00 0.00 193/82499403 __lambda_282 [138] + 0.00 0.00 240/82499403 __lambda_197 [208] + 0.00 0.00 240/82499403 __lambda_196 [209] + 0.00 0.00 556/82499403 __lambda_269 [125] + 0.00 0.00 556/82499403 __lambda_268 [124] + 0.11 0.00 15147485/82499403 __lambda_295 [53] + 0.16 0.00 21516468/82499403 __lambda_272 [63] + 0.34 0.00 45832943/82499403 __lambda_274 [24] +[90] 0.1 0.61 0.00 82499403 Cyc_fast_sum [90] +----------------------------------------------- + 2571 do_dispatch [101] + 7967339 __lambda_274 [24] +[91] 0.1 0.26 0.31 7969910 __lambda_68 [91] + 0.00 0.24 1317/306468 GC [11] + 0.07 0.00 23909626/771639154 cell_get [55] + 7969408 __lambda_78 [21] +----------------------------------------------- + 2156 do_dispatch [101] + 5577003 __lambda_327 [26] +[92] 0.0 0.13 0.26 5579159 __lambda_56 [92] + 0.00 0.26 1427/306468 GC [11] + 5577815 __lambda_327 [26] +----------------------------------------------- + +[93] 0.0 0.26 0.00 gc_heap_last [93] +----------------------------------------------- + 1257 do_dispatch [101] + 3186914 __lambda_327 [26] +[94] 0.0 0.07 0.18 3188171 __lambda_55 [94] + 0.00 0.18 956/306468 GC [11] + 3187168 __lambda_327 [26] +----------------------------------------------- + 0.00 0.00 20/1850 gc_alloc [17] + 0.24 0.00 1830/1850 gc_collector [2] +[95] 0.0 0.24 0.00 1850 gc_grow_heap [95] + 0.00 0.00 1851/1855 gc_heap_create [487] +----------------------------------------------- + 0.01 0.16 306500/306500 GC [11] +[96] 0.0 0.01 0.16 306500 gc_mut_cooperate [96] + 0.11 0.00 273/273 gc_zero_read_write_counts [100] + 0.03 0.00 306499/306499 gc_sum_pending_writes [111] + 0.01 0.01 919778/2275804334 ck_pr_md_load_int [13] + 0.00 0.00 186895/380109 gc_mark_gray [137] + 0.00 0.00 1099/3136 ck_pr_cas_int [485] +----------------------------------------------- + +[97] 0.0 0.14 0.00 Cyc_length_as_object [97] +----------------------------------------------- + 0.00 0.00 1/25906361 __lambda_513 [478] + 0.00 0.00 1/25906361 __lambda_512 [451] + 0.00 0.00 1/25906361 __lambda_383 [450] + 0.00 0.00 1/25906361 __lambda_323 [123] + 0.00 0.00 2/25906361 __lambda_390 [180] + 0.00 0.00 2/25906361 __lambda_384 [426] + 0.00 0.00 2/25906361 __lambda_365 [181] + 0.00 0.00 10/25906361 __lambda_430 [121] + 0.00 0.00 12/25906361 __lambda_429 [298] + 0.00 0.00 16/25906361 __lambda_322 [288] + 0.00 0.00 16/25906361 __lambda_105 [287] + 0.00 0.00 32/25906361 __lambda_298 [271] + 0.00 0.00 225/25906361 __lambda_160 [200] + 0.00 0.00 254/25906361 __lambda_143 [190] + 0.00 0.00 1240/25906361 __lambda_147 [164] + 0.03 0.00 7173648/25906361 __lambda_91 [43] + 0.04 0.00 7970623/25906361 __lambda_77 [30] + 0.05 0.00 10760275/25906361 __lambda_59 [27] +[98] 0.0 0.12 0.00 25906361 Cyc_fast_sub [98] +----------------------------------------------- + 0.00 0.00 1/8768479 __lambda_485 [452] + 0.00 0.00 2/8768479 __lambda_521 [427] + 0.00 0.00 16/8768479 __lambda_168 [259] + 0.00 0.00 556/8768479 __lambda_266 [194] + 0.11 0.00 8767904/8768479 __lambda_91 [43] +[99] 0.0 0.11 0.00 8768479 Cyc_num_fast_lt_op [99] +----------------------------------------------- + 0.11 0.00 273/273 gc_mut_cooperate [96] +[100] 0.0 0.11 0.00 273 gc_zero_read_write_counts [100] +----------------------------------------------- + 4 dispatch [515] + 63.65 79.61 306499/306499 Cyc_start_trampoline [8] +[101] 0.0 0.08 0.00 306503 do_dispatch [101] + 17451 __lambda_77 [30] + 15893 __lambda_63 [33] + 14212 __lambda_76 [65] + 13227 __lambda_324 [35] + 12073 __lambda_284 [20] + 11733 __lambda_78 [21] + 10898 __lambda_274 [24] + 10884 __lambda_283 [50] + 9737 __lambda_320 [61] + 9508 __lambda_67 [66] + 9374 __lambda_91 [43] + 8100 __lambda_282 [23] + 8089 __lambda_327 [26] + 7292 __lambda_322 [75] + 7031 __lambda_323 [88] + 6807 __lambda_83 [57] + 6797 __lambda_272 [63] + 6765 __lambda_61 [64] + 6004 __lambda_85 [42] + 5834 __lambda_295 [53] + 5366 __lambda_69 [40] + 5363 __lambda_64 [32] + 5321 __lambda_59 [27] + 5242 __lambda_82 [71] + 5176 __lambda_325 [38] + 4874 __lambda_62 [49] + 4557 __lambda_326 [31] + 4517 __lambda_58 [72] + 4245 __lambda_79 [36] + 4130 __lambda_80 [58] + 4051 __lambda_321 [34] + 3563 __lambda_84 [44] + 3529 __lambda_92 [37] + 3268 __lambda_89 [77] + 3218 __lambda_65 [54] + 2989 __lambda_57 [87] + 2875 __lambda_66 [60] + 2752 __lambda_87 [73] + 2739 __lambda_86 [51] + 2648 __lambda_72 [81] + 2571 __lambda_68 [91] + 2565 __lambda_88 [76] + 2507 __lambda_60 [86] + 2502 __lambda_71 [82] + 2443 __lambda_90 [68] + 2359 __lambda_281 [85] + 2172 __lambda_70 [52] + 2156 __lambda_56 [92] + 1911 __lambda_276 [70] + 1714 __lambda_74 [83] + 1575 __lambda_75 [69] + 1517 __lambda_73 [74] + 1257 __lambda_55 [94] + 1100 __lambda_81 [56] + 3 __lambda_308 [368] + 2 __lambda_292 [246] + 2 __lambda_148 [165] + 2 __lambda_250 [191] + 2 __lambda_150 [176] + 1 __lambda_132 [261] + 1 __lambda_245 [197] + 1 __lambda_149 [189] + 1 __lambda_249 [175] + 1 __lambda_188 [217] + 1 __lambda_264 [139] + 1 __lambda_278 [140] + 1 c_entry_pt [532] + 1 __lambda_490 [313] + 1 __lambda_251 [161] +----------------------------------------------- + +[102] 0.0 0.06 0.00 __lambda_285 [102] +----------------------------------------------- + 0.00 0.00 2/3993 __lambda_390 [180] + 0.00 0.00 2/3993 __lambda_387 [184] + 0.00 0.00 2/3993 __lambda_385 [183] + 0.00 0.00 2/3993 __lambda_372 [182] + 0.00 0.00 2/3993 __lambda_365 [181] + 0.00 0.00 3/3993 __lambda_362 [177] + 0.00 0.00 7/3993 __lambda_395 [173] + 0.00 0.00 32/3993 __lambda_300 [160] + 0.00 0.00 32/3993 __lambda_299 [159] + 0.00 0.00 88/3993 __lambda_133 [150] + 0.00 0.00 105/3993 __lambda_183 [149] + 0.00 0.00 178/3993 __lambda_291 [147] + 0.00 0.00 178/3993 __lambda_290 [146] + 0.00 0.00 178/3993 __lambda_289 [145] + 0.00 0.00 178/3993 __lambda_288 [144] + 0.00 0.00 178/3993 __lambda_287 [143] + 0.00 0.00 193/3993 __lambda_282 [138] + 0.00 0.00 193/3993 __lambda_280 [141] + 0.00 0.00 193/3993 __lambda_279 [136] + 0.00 0.00 193/3993 __lambda_278 [140] + 0.00 0.00 193/3993 __lambda_265 [135] + 0.00 0.00 193/3993 __lambda_264 [139] + 0.01 0.00 556/3993 __lambda_269 [125] + 0.01 0.00 556/3993 __lambda_268 [124] + 0.01 0.00 556/3993 __lambda_267 [126] +[103] 0.0 0.06 0.00 3993 Cyc_vector_set [103] + 0.00 0.00 3993/67255054 gc_mut_update [39] + 0.00 0.00 3993/67253349 add_mutation [62] + 0.00 0.00 3993/153047710 Cyc_is_vector [78] + 0.00 0.00 3993/153043652 Cyc_is_number [89] +----------------------------------------------- + 1 equalp [104] + 0.00 0.00 1/95 __lambda_477 [158] + 0.00 0.00 1/95 __lambda_248 [157] + 0.00 0.00 2/95 assoc [152] + 0.00 0.01 17/95 __lambda_323 [123] + 0.00 0.01 22/95 __lambda_430 [121] + 0.00 0.03 52/95 memberp [110] +[104] 0.0 0.00 0.06 95+1 equalp [104] + 0.06 0.00 97/97 equal [105] + 0.00 0.00 97/410327643 Cyc_is_pair [48] + 1 equalp [104] +----------------------------------------------- + 0.06 0.00 97/97 equalp [104] +[105] 0.0 0.06 0.00 97 equal [105] +----------------------------------------------- + +[106] 0.0 0.05 0.00 Cyc_num_lte_op [106] +----------------------------------------------- + +[107] 0.0 0.04 0.00 Cyc_get_global_variables [107] +----------------------------------------------- + 0.00 0.00 1/62 __lambda_468 [156] + 0.00 0.00 1/62 __lambda_466 [155] + 0.00 0.00 1/62 __lambda_386 [153] + 0.00 0.00 1/62 __lambda_385 [154] + 0.00 0.00 3/62 Cyc_list2string [148] + 0.00 0.00 5/62 Cyc_list2vector [134] + 0.01 0.00 8/62 apply [131] + 0.03 0.00 42/62 _cons [112] +[108] 0.0 0.04 0.00 62 Cyc_length [108] +----------------------------------------------- + 0.01 0.00 5/30 __lambda_17 [129] + 0.01 0.00 5/30 __lambda_15 [128] + 0.02 0.00 20/30 __lambda_19 [113] +[109] 0.0 0.04 0.00 30 Cyc_set_car [109] + 0.00 0.00 30/67255054 gc_mut_update [39] + 0.00 0.00 30/67253349 add_mutation [62] + 0.00 0.00 30/410327643 Cyc_is_pair [48] +----------------------------------------------- + 0.00 0.01 3/17 __lambda_35 [130] + 0.00 0.01 4/17 __lambda_456 [127] + 0.00 0.02 10/17 __lambda_36 [117] +[110] 0.0 0.00 0.03 17 memberp [110] + 0.00 0.03 52/95 equalp [104] + 0.00 0.00 16/410327643 Cyc_is_pair [48] +----------------------------------------------- + 0.03 0.00 306499/306499 gc_mut_cooperate [96] +[111] 0.0 0.03 0.00 306499 gc_sum_pending_writes [111] +----------------------------------------------- + 42 apply [131] +[112] 0.0 0.00 0.03 42 _cons [112] + 0.03 0.00 42/62 Cyc_length [108] + 42 __lambda_281 [85] +----------------------------------------------- + 20 __lambda_20 [252] +[113] 0.0 0.00 0.02 20 __lambda_19 [113] + 0.02 0.00 20/30 Cyc_set_car [109] + 15 __lambda_252 [1122] + 5 __lambda_55 [1140] +----------------------------------------------- + 0.01 0.01 225/225 gc_collector [2] +[114] 0.0 0.01 0.01 225 gc_mark_globals [114] + 0.00 0.01 52209/2140354415 gc_mark_black [5] +----------------------------------------------- + +[115] 0.0 0.02 0.00 debug_dump_globals [115] +----------------------------------------------- + +[116] 0.0 0.02 0.00 __halt [116] +----------------------------------------------- + 10 __lambda_250 [1120] +[117] 0.0 0.00 0.02 10 __lambda_36 [117] + 0.00 0.02 10/17 memberp [110] + 0.00 0.00 10/169600308 Cyc_st_add [46] + 10 __lambda_249 [1139] +----------------------------------------------- + 0.01 0.01 363586/363586 gc_mut_update [39] +[118] 0.0 0.01 0.01 363586 mark_stack_or_heap_obj [118] + 0.00 0.00 364053/364053 gc_is_stack_obj [133] + 0.00 0.00 193214/380109 gc_mark_gray [137] +----------------------------------------------- + 0.01 0.00 1/1 __lambda_534 [120] +[119] 0.0 0.01 0.00 1 Cyc_fast_mul [119] +----------------------------------------------- + 1 __lambda_512 [451] +[120] 0.0 0.00 0.01 1 __lambda_534 [120] + 0.01 0.00 1/1 Cyc_fast_mul [119] + 1 __lambda_765 [479] +----------------------------------------------- + 22 __lambda_431 [249] +[121] 0.0 0.00 0.01 22 __lambda_430 [121] + 0.00 0.01 22/95 equalp [104] + 0.00 0.00 30/771639154 cell_get [55] + 0.00 0.00 10/25906361 Cyc_fast_sub [98] + 10 __lambda_431 [249] + 7 __lambda_396 [281] + 3 __lambda_362 [177] + 2 __lambda_365 [181] +----------------------------------------------- + 0.01 0.00 306500/306500 gc_minor [12] +[122] 0.0 0.01 0.00 306500 clear_mutations [122] +----------------------------------------------- + 17 __lambda_324 [255] +[123] 0.0 0.00 0.01 17 __lambda_323 [123] + 0.00 0.01 17/95 equalp [104] + 0.00 0.00 3/771639154 cell_get [55] + 0.00 0.00 1/25906361 Cyc_fast_sub [98] + 15 __lambda_314 [279] + 1 __lambda_52 [420] + 1 __lambda_324 [255] +----------------------------------------------- + 556 __lambda_269 [125] +[124] 0.0 0.00 0.01 556 __lambda_268 [124] + 0.01 0.00 556/3993 Cyc_vector_set [103] + 0.00 0.00 556/82499403 Cyc_fast_sum [90] + 556 __lambda_267 [126] +----------------------------------------------- + 556 __lambda_270 [186] +[125] 0.0 0.00 0.01 556 __lambda_269 [125] + 0.01 0.00 556/3993 Cyc_vector_set [103] + 0.00 0.00 556/82499403 Cyc_fast_sum [90] + 556 __lambda_268 [124] +----------------------------------------------- + 556 __lambda_268 [124] +[126] 0.0 0.00 0.01 556 __lambda_267 [126] + 0.01 0.00 556/3993 Cyc_vector_set [103] + 556 __lambda_266 [194] +----------------------------------------------- + 1 __lambda_450 [415] + 3 __lambda_440 [307] +[127] 0.0 0.00 0.01 4 __lambda_456 [127] + 0.00 0.01 4/17 memberp [110] + 4 __lambda_455 [1142] +----------------------------------------------- + 5 __lambda_16 [302] +[128] 0.0 0.00 0.01 5 __lambda_15 [128] + 0.01 0.00 5/30 Cyc_set_car [109] + 3 __lambda_42 [1152] + 2 __lambda_21 [1161] +----------------------------------------------- + 5 __lambda_18 [290] +[129] 0.0 0.00 0.01 5 __lambda_17 [129] + 0.01 0.00 5/30 Cyc_set_car [109] + 5 __lambda_56 [1141] +----------------------------------------------- + 3 __lambda_329 [364] +[130] 0.0 0.00 0.01 3 __lambda_35 [130] + 0.00 0.01 3/17 memberp [110] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_328 [1146] +----------------------------------------------- + 4 apply_va [425] + 43 Cyc_apply [501] +[131] 0.0 0.00 0.01 47 apply [131] + 0.01 0.00 8/62 Cyc_length [108] + 0.00 0.00 1/1 __75halt [1174] + 42 _cons [112] + 4 dispatch [515] +----------------------------------------------- + 1 __lambda_285 [330] +[132] 0.0 0.01 0.00 1 __lambda_277 [132] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_275 [329] +----------------------------------------------- + 0.00 0.00 364053/364053 mark_stack_or_heap_obj [118] +[133] 0.0 0.00 0.00 364053 gc_is_stack_obj [133] +----------------------------------------------- + 1 __lambda_449 [1257] + 1 __lambda_308 [1195] + 3 __lambda_384 [409] +[134] 0.0 0.00 0.00 5 Cyc_list2vector [134] + 0.00 0.00 5/62 Cyc_length [108] + 0.00 0.00 5/410327643 Cyc_is_pair [48] + 1 __lambda_468 [156] + 1 __lambda_2 [291] + 1 __lambda_354 [1223] + 1 __lambda_410 [1248] + 1 __lambda_487 [1280] +----------------------------------------------- + 193 __lambda_266 [194] +[135] 0.0 0.00 0.00 193 __lambda_265 [135] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 0.00 0.00 1/306468 GC [11] + 192 __lambda_264 [139] +----------------------------------------------- + 193 __lambda_280 [141] +[136] 0.0 0.00 0.00 193 __lambda_279 [136] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 0.00 0.00 1/306468 GC [11] + 192 __lambda_278 [140] +----------------------------------------------- + 0.00 0.00 186895/380109 gc_mut_cooperate [96] + 0.00 0.00 193214/380109 mark_stack_or_heap_obj [118] +[137] 0.0 0.00 0.00 380109 gc_mark_gray [137] + 0.00 0.00 186074/2207552592 vpbuffer_add [16] +----------------------------------------------- + 193 __lambda_283 [205] +[138] 0.0 0.00 0.00 193 __lambda_282 [138] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 0.00 0.00 193/82499403 Cyc_fast_sum [90] + 193 __lambda_281 [204] +----------------------------------------------- + 1 do_dispatch [101] + 192 __lambda_265 [135] +[139] 0.0 0.00 0.00 193 __lambda_264 [139] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 88 __lambda_246 [1081] + 58 __lambda_236 [237] + 30 __lambda_221 [267] + 17 __lambda_254 [277] +----------------------------------------------- + 1 do_dispatch [101] + 192 __lambda_279 [136] +[140] 0.0 0.00 0.00 193 __lambda_278 [140] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 105 __lambda_181 [1092] + 88 __lambda_131 [1095] +----------------------------------------------- + 193 __lambda_281 [204] +[141] 0.0 0.00 0.00 193 __lambda_280 [141] + 0.00 0.00 193/3993 Cyc_vector_set [103] + 193 __lambda_279 [136] +----------------------------------------------- + 0.00 0.00 171424/171424 gc_fixup_moved_obj [47] +[142] 0.0 0.00 0.00 171424 gc_mark_gray2 [142] + 0.00 0.00 171232/2207552592 vpbuffer_add [16] +----------------------------------------------- + 178 __lambda_288 [144] +[143] 0.0 0.00 0.00 178 __lambda_287 [143] + 0.00 0.00 178/3993 Cyc_vector_set [103] + 0.00 0.00 178/82499403 Cyc_fast_sum [90] + 178 __lambda_286 [1091] +----------------------------------------------- + 178 __lambda_289 [145] +[144] 0.0 0.00 0.00 178 __lambda_288 [144] + 0.00 0.00 178/3993 Cyc_vector_set [103] + 178 __lambda_287 [143] +----------------------------------------------- + 178 __lambda_290 [146] +[145] 0.0 0.00 0.00 178 __lambda_289 [145] + 0.00 0.00 178/3993 Cyc_vector_set [103] + 178 __lambda_288 [144] +----------------------------------------------- + 178 __lambda_291 [147] +[146] 0.0 0.00 0.00 178 __lambda_290 [146] + 0.00 0.00 178/3993 Cyc_vector_set [103] + 178 __lambda_289 [145] +----------------------------------------------- + 178 Cyc_make_vector [251] +[147] 0.0 0.00 0.00 178 __lambda_291 [147] + 0.00 0.00 178/3993 Cyc_vector_set [103] + 178 __lambda_290 [146] +----------------------------------------------- + 3 __lambda_336 [1148] +[148] 0.0 0.00 0.00 3 Cyc_list2string [148] + 0.00 0.00 3/62 Cyc_length [108] + 0.00 0.00 3/410327643 Cyc_is_pair [48] + 3 __lambda_330 [1147] +----------------------------------------------- + 105 __lambda_184 [221] +[149] 0.0 0.00 0.00 105 __lambda_183 [149] + 0.00 0.00 105/3993 Cyc_vector_set [103] + 105 __lambda_182 [254] +----------------------------------------------- + 88 __lambda_134 [225] +[150] 0.0 0.00 0.00 88 __lambda_133 [150] + 0.00 0.00 88/3993 Cyc_vector_set [103] + 0.00 0.00 1/306468 GC [11] + 87 __lambda_132 [261] +----------------------------------------------- + 3 __lambda_389 [1150] +[151] 0.0 0.00 0.00 3 __lambda_11 [151] + 0.00 0.00 3/3 assoc [152] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_10 [1143] +----------------------------------------------- + 0.00 0.00 3/3 __lambda_11 [151] +[152] 0.0 0.00 0.00 3 assoc [152] + 0.00 0.00 2/95 equalp [104] + 0.00 0.00 2/410327643 Cyc_is_pair [48] +----------------------------------------------- + 1 __lambda_391 [1231] +[153] 0.0 0.00 0.00 1 __lambda_386 [153] + 0.00 0.00 1/62 Cyc_length [108] + 0.00 0.00 1/771639154 cell_get [55] + 0.00 0.00 1/2 Cyc_num_fast_gt_op [523] + 1 __lambda_390 [340] +----------------------------------------------- + 1 __lambda_393 [1234] +[154] 0.0 0.00 0.00 1 __lambda_385 [154] + 0.00 0.00 1/62 Cyc_length [108] + 0.00 0.00 1/2 Cyc_num_fast_gt_op [523] + 1 __lambda_392 [342] +----------------------------------------------- + 1 __lambda_47 [303] +[155] 0.0 0.00 0.00 1 __lambda_466 [155] + 0.00 0.00 1/62 Cyc_length [108] + 1 __lambda_493 [447] +----------------------------------------------- + 1 Cyc_list2vector [134] +[156] 0.0 0.00 0.00 1 __lambda_468 [156] + 0.00 0.00 1/62 Cyc_length [108] + 1 __lambda_467 [1266] +----------------------------------------------- + 1 __lambda_250 [1194] +[157] 0.0 0.00 0.00 1 __lambda_248 [157] + 0.00 0.00 1/95 equalp [104] + 0.00 0.00 1/154638249 Cyc_car [67] + 0.00 0.00 1/410327643 Cyc_is_pair [48] + 1 __lambda_249 [454] +----------------------------------------------- + 1 __lambda_521 [427] +[158] 0.0 0.00 0.00 1 __lambda_477 [158] + 0.00 0.00 1/95 equalp [104] + 1 __lambda_520 [1304] +----------------------------------------------- + 32 __lambda_300 [160] +[159] 0.0 0.00 0.00 32 __lambda_299 [159] + 0.00 0.00 32/3993 Cyc_vector_set [103] + 32 __lambda_298 [271] +----------------------------------------------- + 32 Cyc_make_vector [251] +[160] 0.0 0.00 0.00 32 __lambda_300 [160] + 0.00 0.00 32/3993 Cyc_vector_set [103] + 32 __lambda_299 [159] +----------------------------------------------- + 1 do_dispatch [101] + 3 __lambda_113 [361] + 679 __lambda_146 [167] + 1240 __lambda_147 [164] +[161] 0.0 0.00 0.00 1923 __lambda_251 [161] + 0.00 0.00 2/306468 GC [11] + 0.00 0.00 1923/153035271 Cyc_vector_ref [29] + 1921 __lambda_250 [191] +----------------------------------------------- + 0.00 0.00 196/596 gc_collector [2] + 0.00 0.00 400/596 gc_handshake [166] +[162] 0.0 0.00 0.00 596 gc_wait_handshake [162] + 0.00 0.00 646/1417 ck_pr_md_load_ptr [163] + 0.00 0.00 5225/2275804334 ck_pr_md_load_int [13] + 0.00 0.00 707/1486 ck_pr_fence_load [172] +----------------------------------------------- + 0.00 0.00 275/1417 gc_free_old_thread_data [174] + 0.00 0.00 496/1417 gc_collector_trace [3] + 0.00 0.00 646/1417 gc_wait_handshake [162] +[163] 0.0 0.00 0.00 1417 ck_pr_md_load_ptr [163] + 0.00 0.00 2755/256642811 ck_pr_barrier [18] +----------------------------------------------- + 2150 __lambda_150 [176] +[164] 0.0 0.00 0.00 2150 __lambda_147 [164] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 2150/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 3720/771639154 cell_get [55] + 0.00 0.00 1240/25906361 Cyc_fast_sub [98] + 1240 __lambda_251 [161] + 909 __lambda_149 [189] +----------------------------------------------- + 2 do_dispatch [101] + 2148 __lambda_274 [24] +[165] 0.0 0.00 0.00 2150 __lambda_148 [165] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 6448/771639154 cell_get [55] + 2149 __lambda_150 [176] +----------------------------------------------- + 0.00 0.00 477/477 gc_collector [2] +[166] 0.0 0.00 0.00 477 gc_handshake [166] + 0.00 0.00 400/596 gc_wait_handshake [162] + 0.00 0.00 457/657 gc_post_handshake [195] +----------------------------------------------- + 560 __lambda_249 [175] + 680 __lambda_246 [1081] +[167] 0.0 0.00 0.00 1240 __lambda_146 [167] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 680/154638249 Cyc_car [67] + 0.00 0.00 2038/771639154 cell_get [55] + 679 __lambda_251 [161] + 560 __lambda_149 [189] +----------------------------------------------- + 434 __lambda_151 [178] +[168] 0.0 0.00 0.00 434 __lambda_145 [168] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 1300/771639154 cell_get [55] + 433 __lambda_150 [176] +----------------------------------------------- + 44 __lambda_160 [200] + 225 __lambda_156 [179] +[169] 0.0 0.00 0.00 269 __lambda_126 [169] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 805/771639154 cell_get [55] + 268 __lambda_274 [24] +----------------------------------------------- + 44 __lambda_206 [257] + 61 __lambda_216 [219] +[170] 0.0 0.00 0.00 105 __lambda_180 [170] + 0.00 0.00 1/306468 GC [11] + 0.00 0.00 313/771639154 cell_get [55] + 104 __lambda_188 [217] +----------------------------------------------- + 87 __lambda_286 [1091] + 1274 __lambda_292 [246] +[171] 0.0 0.00 0.00 1361 __lambda_247 [171] + 0.00 0.00 1/306468 GC [11] + 1360 __lambda_245 [197] +----------------------------------------------- + 0.00 0.00 275/1486 gc_free_old_thread_data [174] + 0.00 0.00 504/1486 gc_collector_trace [3] + 0.00 0.00 707/1486 gc_wait_handshake [162] +[172] 0.0 0.00 0.00 1486 ck_pr_fence_load [172] + 0.00 0.00 1437/256642811 ck_pr_barrier [18] +----------------------------------------------- + 7 __lambda_396 [281] +[173] 0.0 0.00 0.00 7 __lambda_395 [173] + 0.00 0.00 7/3993 Cyc_vector_set [103] + 3 __lambda_360 [363] + 2 __lambda_363 [369] + 2 __lambda_370 [429] +----------------------------------------------- + 0.00 0.00 275/275 gc_collector [2] +[174] 0.0 0.00 0.00 275 gc_free_old_thread_data [174] + 0.00 0.00 275/1417 ck_pr_md_load_ptr [163] + 0.00 0.00 275/1486 ck_pr_fence_load [172] +----------------------------------------------- + 1 do_dispatch [101] + 15 __lambda_272 [63] + 1907 __lambda_274 [24] +[175] 0.0 0.00 0.00 1923 __lambda_249 [175] + 0.00 0.00 1361/153035271 Cyc_vector_ref [29] + 1361 __lambda_248 [198] + 560 __lambda_146 [167] + 2 __lambda_112 [378] +----------------------------------------------- + 2 do_dispatch [101] + 433 __lambda_145 [168] + 2149 __lambda_148 [165] +[176] 0.0 0.00 0.00 2584 __lambda_150 [176] + 0.00 0.00 2584/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 434/167205531 Cyc_cdr [59] + 0.00 0.00 1302/771639154 cell_get [55] + 2150 __lambda_147 [164] + 434 __lambda_156 [179] +----------------------------------------------- + 3 __lambda_430 [121] +[177] 0.0 0.00 0.00 3 __lambda_362 [177] + 0.00 0.00 3/3993 Cyc_vector_set [103] + 3 __lambda_361 [383] +----------------------------------------------- + 434 __lambda_152 [1082] +[178] 0.0 0.00 0.00 434 __lambda_151 [178] + 0.00 0.00 434/67248908 Cyc_set_cell [25] + 434 __lambda_145 [168] +----------------------------------------------- + 211 __lambda_154 [203] + 225 __lambda_144 [199] + 434 __lambda_150 [176] +[179] 0.0 0.00 0.00 870 __lambda_156 [179] + 0.00 0.00 645/153035271 Cyc_vector_ref [29] + 0.00 0.00 870/410327643 Cyc_is_pair [48] + 645 __lambda_155 [196] + 225 __lambda_126 [169] +----------------------------------------------- + 1 __lambda_383 [450] + 2 __lambda_384 [426] +[180] 0.0 0.00 0.00 3 __lambda_390 [180] + 0.00 0.00 2/3993 Cyc_vector_set [103] + 0.00 0.00 3/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 2/25906361 Cyc_fast_sub [98] + 2 __lambda_389 [367] + 1 __lambda_382 [1230] +----------------------------------------------- + 2 __lambda_430 [121] +[181] 0.0 0.00 0.00 2 __lambda_365 [181] + 0.00 0.00 2/3993 Cyc_vector_set [103] + 0.00 0.00 2/25906361 Cyc_fast_sub [98] + 2 __lambda_364 [380] +----------------------------------------------- + 2 __lambda_327 [26] +[182] 0.0 0.00 0.00 2 __lambda_372 [182] + 0.00 0.00 2/3993 Cyc_vector_set [103] + 2 __lambda_371 [381] +----------------------------------------------- + 2 __lambda_327 [26] +[183] 0.0 0.00 0.00 2 __lambda_385 [183] + 0.00 0.00 2/3993 Cyc_vector_set [103] + 2 __lambda_384 [426] +----------------------------------------------- + 2 __lambda_327 [26] +[184] 0.0 0.00 0.00 2 __lambda_387 [184] + 0.00 0.00 2/3993 Cyc_vector_set [103] + 2 __lambda_386 [1168] +----------------------------------------------- + 240 __lambda_240 [1087] +[185] 0.0 0.00 0.00 240 __lambda_239 [185] + 0.00 0.00 240/67248908 Cyc_set_cell [25] + 240 __lambda_233 [235] +----------------------------------------------- + 17 __lambda_255 [278] + 30 __lambda_222 [239] + 240 __lambda_237 [210] + 269 __lambda_244 [231] +[186] 0.0 0.00 0.00 556 __lambda_270 [186] + 0.00 0.00 556/153035271 Cyc_vector_ref [29] + 556 __lambda_269 [125] +----------------------------------------------- + 225 __lambda_158 [1089] +[187] 0.0 0.00 0.00 225 __lambda_157 [187] + 0.00 0.00 225/67248908 Cyc_set_cell [25] + 225 __lambda_144 [199] +----------------------------------------------- + 240 __lambda_235 [236] + 240 __lambda_233 [235] + 455 __lambda_234 [224] +[188] 0.0 0.00 0.00 935 __lambda_238 [188] + 0.00 0.00 935/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 2085/771639154 cell_get [55] + 695 __lambda_274 [24] + 240 __lambda_199 [234] +----------------------------------------------- + 1 do_dispatch [101] + 560 __lambda_146 [167] + 680 __lambda_246 [1081] + 909 __lambda_147 [164] +[189] 0.0 0.00 0.00 2150 __lambda_149 [189] + 0.00 0.00 6450/771639154 cell_get [55] + 2150 __lambda_274 [24] +----------------------------------------------- + 269 __lambda_161 [1085] +[190] 0.0 0.00 0.00 269 __lambda_143 [190] + 0.00 0.00 254/153035271 Cyc_vector_ref [29] + 0.00 0.00 523/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 254/25906361 Cyc_fast_sub [98] + 269 __lambda_160 [200] +----------------------------------------------- + 2 do_dispatch [101] + 1921 __lambda_251 [161] +[191] 0.0 0.00 0.00 1923 __lambda_250 [191] + 0.00 0.00 5769/771639154 cell_get [55] + 1923 __lambda_272 [63] +----------------------------------------------- + 73 __lambda_195 [263] + 255 __lambda_198 [233] +[192] 0.0 0.00 0.00 328 __lambda_202 [192] + 0.00 0.00 255/153035271 Cyc_vector_ref [29] + 0.00 0.00 328/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 73/167205531 Cyc_cdr [59] + 0.00 0.00 219/771639154 cell_get [55] + 255 __lambda_201 [215] + 73 __lambda_206 [257] +----------------------------------------------- + 17 __lambda_257 [269] + 90 __lambda_224 [230] + 240 __lambda_197 [208] + 1361 __lambda_248 [198] +[193] 0.0 0.00 0.00 1708 __lambda_293 [193] + 0.00 0.00 5124/771639154 cell_get [55] + 1708 __lambda_295 [53] +----------------------------------------------- + 556 __lambda_267 [126] +[194] 0.0 0.00 0.00 556 __lambda_266 [194] + 0.00 0.00 193/153035271 Cyc_vector_ref [29] + 0.00 0.00 556/8768479 Cyc_num_fast_lt_op [99] + 193 __lambda_265 [135] + 182 __lambda_236 [237] + 181 __lambda_246 [1081] +----------------------------------------------- + 0.00 0.00 200/657 gc_collector [2] + 0.00 0.00 457/657 gc_handshake [166] +[195] 0.0 0.00 0.00 657 gc_post_handshake [195] + 0.00 0.00 622/2275804334 ck_pr_md_load_int [13] + 0.00 0.00 612/3136 ck_pr_cas_int [485] +----------------------------------------------- + 645 __lambda_156 [179] +[196] 0.0 0.00 0.00 645 __lambda_155 [196] + 0.00 0.00 645/154638249 Cyc_car [67] + 0.00 0.00 1935/771639154 cell_get [55] + 645 __lambda_295 [53] +----------------------------------------------- + 1 do_dispatch [101] + 1360 __lambda_247 [171] +[197] 0.0 0.00 0.00 1361 __lambda_245 [197] + 0.00 0.00 4083/771639154 cell_get [55] + 1361 __lambda_274 [24] +----------------------------------------------- + 1361 __lambda_249 [175] +[198] 0.0 0.00 0.00 1361 __lambda_248 [198] + 0.00 0.00 4083/771639154 cell_get [55] + 1361 __lambda_293 [193] +----------------------------------------------- + 225 __lambda_157 [187] +[199] 0.0 0.00 0.00 225 __lambda_144 [199] + 0.00 0.00 225/153035271 Cyc_vector_ref [29] + 0.00 0.00 675/771639154 cell_get [55] + 225 __lambda_156 [179] +----------------------------------------------- + 269 __lambda_143 [190] +[200] 0.0 0.00 0.00 269 __lambda_160 [200] + 0.00 0.00 225/153035271 Cyc_vector_ref [29] + 0.00 0.00 225/25906361 Cyc_fast_sub [98] + 225 __lambda_159 [1090] + 44 __lambda_126 [169] +----------------------------------------------- + 88 __lambda_124 [260] + 269 __lambda_125 [232] +[201] 0.0 0.00 0.00 357 __lambda_127 [201] + 0.00 0.00 357/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 1071/771639154 cell_get [55] + 269 __lambda_161 [1085] + 88 __lambda_137 [223] +----------------------------------------------- + 88 __lambda_129 [1093] +[202] 0.0 0.00 0.00 88 __lambda_128 [202] + 0.00 0.00 88/67248908 Cyc_set_cell [25] + 88 __lambda_124 [260] +----------------------------------------------- + 645 __lambda_295 [53] +[203] 0.0 0.00 0.00 645 __lambda_154 [203] + 0.00 0.00 1935/771639154 cell_get [55] + 0.00 0.00 211/167205531 Cyc_cdr [59] + 434 __lambda_276 [70] + 211 __lambda_156 [179] +----------------------------------------------- + 193 __lambda_282 [138] +[204] 0.0 0.00 0.00 193 __lambda_281 [204] + 0.00 0.00 193/153035271 Cyc_vector_ref [29] + 193 __lambda_280 [141] +----------------------------------------------- + 193 __lambda_284 [206] +[205] 0.0 0.00 0.00 193 __lambda_283 [205] + 0.00 0.00 193/153035271 Cyc_vector_ref [29] + 193 __lambda_282 [138] +----------------------------------------------- + 88 __lambda_132 [261] + 105 __lambda_182 [254] +[206] 0.0 0.00 0.00 193 __lambda_284 [206] + 0.00 0.00 193/153035271 Cyc_vector_ref [29] + 193 __lambda_283 [205] +----------------------------------------------- + 73 __lambda_204 [1096] +[207] 0.0 0.00 0.00 73 __lambda_203 [207] + 0.00 0.00 73/67248908 Cyc_set_cell [25] + 73 __lambda_195 [263] +----------------------------------------------- + 255 __lambda_200 [1086] +[208] 0.0 0.00 0.00 255 __lambda_197 [208] + 0.00 0.00 240/154638249 Cyc_car [67] + 0.00 0.00 720/771639154 cell_get [55] + 0.00 0.00 240/82499403 Cyc_fast_sum [90] + 240 __lambda_293 [193] + 15 __lambda_199 [234] +----------------------------------------------- + 44 __lambda_286 [1091] + 196 __lambda_292 [246] +[209] 0.0 0.00 0.00 240 __lambda_196 [209] + 0.00 0.00 240/154638249 Cyc_car [67] + 0.00 0.00 720/771639154 cell_get [55] + 0.00 0.00 240/82499403 Cyc_fast_sum [90] + 240 __lambda_242 [238] +----------------------------------------------- + 695 __lambda_274 [24] +[210] 0.0 0.00 0.00 695 __lambda_237 [210] + 0.00 0.00 2085/771639154 cell_get [55] + 455 __lambda_274 [24] + 240 __lambda_270 [186] +----------------------------------------------- + 121 __lambda_188 [217] +[211] 0.0 0.00 0.00 121 __lambda_187 [211] + 0.00 0.00 105/153035271 Cyc_vector_ref [29] + 0.00 0.00 121/81303063 Cyc_num_fast_gte_op [79] + 105 __lambda_186 [216] + 15 __lambda_165 [284] + 1 __lambda_171 [1191] +----------------------------------------------- + 61 __lambda_218 [1098] +[212] 0.0 0.00 0.00 61 __lambda_217 [212] + 0.00 0.00 61/67248908 Cyc_set_cell [25] + 61 __lambda_212 [228] +----------------------------------------------- + 61 __lambda_226 [1100] +[213] 0.0 0.00 0.00 61 __lambda_225 [213] + 0.00 0.00 61/67248908 Cyc_set_cell [25] + 61 __lambda_220 [229] +----------------------------------------------- + 104 __lambda_137 [223] +[214] 0.0 0.00 0.00 104 __lambda_136 [214] + 0.00 0.00 88/153035271 Cyc_vector_ref [29] + 0.00 0.00 104/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 88/82499403 Cyc_fast_sum [90] + 88 __lambda_135 [226] + 16 __lambda_105 [287] +----------------------------------------------- + 255 __lambda_202 [192] +[215] 0.0 0.00 0.00 255 __lambda_201 [215] + 0.00 0.00 255/154638249 Cyc_car [67] + 0.00 0.00 765/771639154 cell_get [55] + 255 __lambda_295 [53] +----------------------------------------------- + 105 __lambda_187 [211] +[216] 0.0 0.00 0.00 105 __lambda_186 [216] + 0.00 0.00 105/153035271 Cyc_vector_ref [29] + 0.00 0.00 105/82499403 Cyc_fast_sum [90] + 105 __lambda_185 [222] +----------------------------------------------- + 1 do_dispatch [101] + 16 __lambda_178 [305] + 104 __lambda_180 [170] +[217] 0.0 0.00 0.00 121 __lambda_188 [217] + 0.00 0.00 121/153035271 Cyc_vector_ref [29] + 121 __lambda_187 [211] +----------------------------------------------- + 105 __lambda_181 [1092] +[218] 0.0 0.00 0.00 105 __lambda_179 [218] + 0.00 0.00 44/153035271 Cyc_vector_ref [29] + 0.00 0.00 105/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 315/771639154 cell_get [55] + 0.00 0.00 44/82499403 Cyc_fast_sum [90] + 61 __lambda_227 [1101] + 44 __lambda_210 [1104] +----------------------------------------------- + 61 __lambda_212 [228] + 151 __lambda_215 [227] +[219] 0.0 0.00 0.00 212 __lambda_216 [219] + 0.00 0.00 151/154638249 Cyc_car [67] + 0.00 0.00 212/410327643 Cyc_is_pair [48] + 0.00 0.00 453/771639154 cell_get [55] + 151 __lambda_272 [63] + 61 __lambda_180 [170] +----------------------------------------------- + 44 __lambda_208 [1102] +[220] 0.0 0.00 0.00 44 __lambda_207 [220] + 0.00 0.00 44/67248908 Cyc_set_cell [25] + 44 __lambda_194 [274] +----------------------------------------------- + 105 __lambda_185 [222] +[221] 0.0 0.00 0.00 105 __lambda_184 [221] + 0.00 0.00 105/153035271 Cyc_vector_ref [29] + 105 __lambda_183 [149] +----------------------------------------------- + 105 __lambda_186 [216] +[222] 0.0 0.00 0.00 105 __lambda_185 [222] + 0.00 0.00 105/153035271 Cyc_vector_ref [29] + 105 __lambda_184 [221] +----------------------------------------------- + 16 __lambda_123 [304] + 88 __lambda_127 [201] +[223] 0.0 0.00 0.00 104 __lambda_137 [223] + 0.00 0.00 104/153035271 Cyc_vector_ref [29] + 104 __lambda_136 [214] +----------------------------------------------- + 455 __lambda_274 [24] +[224] 0.0 0.00 0.00 455 __lambda_234 [224] + 0.00 0.00 1365/771639154 cell_get [55] + 455 __lambda_238 [188] +----------------------------------------------- + 88 __lambda_135 [226] +[225] 0.0 0.00 0.00 88 __lambda_134 [225] + 0.00 0.00 88/153035271 Cyc_vector_ref [29] + 88 __lambda_133 [150] +----------------------------------------------- + 88 __lambda_136 [214] +[226] 0.0 0.00 0.00 88 __lambda_135 [226] + 0.00 0.00 88/153035271 Cyc_vector_ref [29] + 88 __lambda_134 [225] +----------------------------------------------- + 50 __lambda_272 [63] + 101 __lambda_274 [24] +[227] 0.0 0.00 0.00 151 __lambda_215 [227] + 0.00 0.00 151/167205531 Cyc_cdr [59] + 0.00 0.00 453/771639154 cell_get [55] + 151 __lambda_216 [219] +----------------------------------------------- + 61 __lambda_217 [212] +[228] 0.0 0.00 0.00 61 __lambda_212 [228] + 0.00 0.00 61/153035271 Cyc_vector_ref [29] + 0.00 0.00 183/771639154 cell_get [55] + 61 __lambda_216 [219] +----------------------------------------------- + 61 __lambda_225 [213] +[229] 0.0 0.00 0.00 61 __lambda_220 [229] + 0.00 0.00 61/153035271 Cyc_vector_ref [29] + 0.00 0.00 183/771639154 cell_get [55] + 61 __lambda_224 [230] +----------------------------------------------- + 30 __lambda_221 [267] + 60 __lambda_222 [239] + 61 __lambda_220 [229] +[230] 0.0 0.00 0.00 151 __lambda_224 [230] + 0.00 0.00 151/410327643 Cyc_is_pair [48] + 0.00 0.00 90/154638249 Cyc_car [67] + 0.00 0.00 270/771639154 cell_get [55] + 90 __lambda_293 [193] + 61 __lambda_219 [1099] +----------------------------------------------- + 1361 __lambda_274 [24] +[231] 0.0 0.00 0.00 1361 __lambda_244 [231] + 0.00 0.00 807/771639154 cell_get [55] + 1092 __lambda_246 [1081] + 269 __lambda_270 [186] +----------------------------------------------- + 269 __lambda_274 [24] +[232] 0.0 0.00 0.00 269 __lambda_125 [232] + 0.00 0.00 807/771639154 cell_get [55] + 269 __lambda_127 [201] +----------------------------------------------- + 255 __lambda_274 [24] +[233] 0.0 0.00 0.00 255 __lambda_198 [233] + 0.00 0.00 765/771639154 cell_get [55] + 255 __lambda_202 [192] +----------------------------------------------- + 15 __lambda_197 [208] + 240 __lambda_238 [188] +[234] 0.0 0.00 0.00 255 __lambda_199 [234] + 0.00 0.00 765/771639154 cell_get [55] + 255 __lambda_274 [24] +----------------------------------------------- + 240 __lambda_239 [185] +[235] 0.0 0.00 0.00 240 __lambda_233 [235] + 0.00 0.00 720/771639154 cell_get [55] + 240 __lambda_238 [188] +----------------------------------------------- + 240 __lambda_274 [24] +[236] 0.0 0.00 0.00 240 __lambda_235 [236] + 0.00 0.00 720/771639154 cell_get [55] + 240 __lambda_238 [188] +----------------------------------------------- + 58 __lambda_264 [139] + 182 __lambda_266 [194] +[237] 0.0 0.00 0.00 240 __lambda_236 [237] + 0.00 0.00 720/771639154 cell_get [55] + 240 __lambda_274 [24] +----------------------------------------------- + 240 __lambda_196 [209] +[238] 0.0 0.00 0.00 240 __lambda_242 [238] + 0.00 0.00 720/771639154 cell_get [55] + 240 __lambda_276 [70] +----------------------------------------------- + 90 __lambda_274 [24] +[239] 0.0 0.00 0.00 90 __lambda_222 [239] + 0.00 0.00 270/771639154 cell_get [55] + 0.00 0.00 60/167205531 Cyc_cdr [59] + 0.00 0.00 30/154638249 Cyc_car [67] + 60 __lambda_224 [230] + 30 __lambda_270 [186] +----------------------------------------------- + 16 __lambda_139 [1107] +[240] 0.0 0.00 0.00 16 __lambda_138 [240] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_123 [304] +----------------------------------------------- + 16 __lambda_190 [1109] +[241] 0.0 0.00 0.00 16 __lambda_189 [241] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_178 [305] +----------------------------------------------- + 16 __lambda_228 [243] +[242] 0.0 0.00 0.00 16 __lambda_211 [242] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_193 [265] +----------------------------------------------- + 16 __lambda_229 [1112] +[243] 0.0 0.00 0.00 16 __lambda_228 [243] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_211 [242] +----------------------------------------------- + 16 __lambda_259 [1115] +[244] 0.0 0.00 0.00 16 __lambda_258 [244] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_253 [306] +----------------------------------------------- + 16 __lambda_326 [1118] +[245] 0.0 0.00 0.00 16 __lambda_325 [245] + 0.00 0.00 16/67248908 Cyc_set_cell [25] + 16 __lambda_322 [288] +----------------------------------------------- + 2 do_dispatch [101] + 1706 __lambda_295 [53] +[246] 0.0 0.00 0.00 1708 __lambda_292 [246] + 0.00 0.00 178/82499403 Cyc_fast_sum [90] + 1274 __lambda_247 [171] + 196 __lambda_196 [209] + 178 Cyc_make_vector [251] + 60 __lambda_223 [258] +----------------------------------------------- + 15 __lambda_318 [1123] +[247] 0.0 0.00 0.00 15 __lambda_317 [247] + 0.00 0.00 15/67248908 Cyc_set_cell [25] + 15 __lambda_313 [309] +----------------------------------------------- + 0.00 0.00 1/24 __lambda_5 [403] + 0.00 0.00 1/24 __lambda_3 [400] + 0.00 0.00 1/24 __lambda_2 [399] + 0.00 0.00 1/24 __lambda_0 [385] + 0.00 0.00 1/24 __lambda_1561 [370] + 0.00 0.00 1/24 __lambda_1559 [398] + 0.00 0.00 1/24 __lambda_1557 [397] + 0.00 0.00 1/24 __lambda_1555 [396] + 0.00 0.00 1/24 __lambda_1554 [395] + 0.00 0.00 1/24 __lambda_1553 [394] + 0.00 0.00 1/24 __lambda_1552 [393] + 0.00 0.00 1/24 __lambda_1551 [392] + 0.00 0.00 1/24 __lambda_1550 [391] + 0.00 0.00 1/24 __lambda_1549 [390] + 0.00 0.00 1/24 __lambda_1548 [389] + 0.00 0.00 1/24 __lambda_1547 [388] + 0.00 0.00 1/24 __lambda_1546 [387] + 0.00 0.00 1/24 __lambda_1544 [386] + 0.00 0.00 1/24 __lambda_5 [373] + 0.00 0.00 1/24 __lambda_4 [402] + 0.00 0.00 1/24 __lambda_42 [372] + 0.00 0.00 1/24 __lambda_400 [371] + 0.00 0.00 1/24 __lambda_399 [401] + 0.00 0.00 1/24 __lambda_6 [404] +[248] 0.0 0.00 0.00 24 Cyc_global_set [248] + 0.00 0.00 24/67255054 gc_mut_update [39] +----------------------------------------------- + 10 __lambda_430 [121] + 12 __lambda_429 [298] +[249] 0.0 0.00 0.00 22 __lambda_431 [249] + 0.00 0.00 22/153035271 Cyc_vector_ref [29] + 0.00 0.00 22/81303063 Cyc_num_fast_gte_op [79] + 22 __lambda_430 [121] +----------------------------------------------- + 12 __lambda_433 [1129] +[250] 0.0 0.00 0.00 12 __lambda_432 [250] + 0.00 0.00 12/67248908 Cyc_set_cell [25] + 12 __lambda_429 [298] +----------------------------------------------- + 1 __lambda_476 [1272] + 1 __lambda_408 [1247] + 1 __lambda_407 [1246] + 1 __lambda_406 [1245] + 1 __lambda_405 [477] + 1 __lambda_404 [476] + 2 __lambda_306 [448] + 32 __lambda_301 [262] + 178 __lambda_292 [246] +[251] 0.0 0.00 0.00 218 Cyc_make_vector [251] + 0.00 0.00 218/153043652 Cyc_is_number [89] + 178 __lambda_291 [147] + 32 __lambda_300 [160] + 2 __lambda_305 [1165] + 1 __lambda_403 [1244] + 1 __lambda_404 [476] + 1 __lambda_405 [477] + 1 __lambda_406 [1245] + 1 __lambda_407 [1246] + 1 __lambda_475 [1271] +----------------------------------------------- + 5 __lambda_56 [1141] + 15 __lambda_253 [312] +[252] 0.0 0.00 0.00 20 __lambda_20 [252] + 0.00 0.00 60/167205531 Cyc_cdr [59] + 0.00 0.00 20/169600308 Cyc_st_add [46] + 20 __lambda_19 [113] +----------------------------------------------- + 15 __lambda_254 [282] +[253] 0.0 0.00 0.00 15 __lambda_14 [253] + 0.00 0.00 45/167205531 Cyc_cdr [59] + 0.00 0.00 15/169600308 Cyc_st_add [46] + 0.00 0.00 15/154638249 Cyc_car [67] + 15 __lambda_253 [312] +----------------------------------------------- + 105 __lambda_183 [149] +[254] 0.0 0.00 0.00 105 __lambda_182 [254] + 0.00 0.00 315/771639154 cell_get [55] + 105 __lambda_284 [206] +----------------------------------------------- + 1 __lambda_323 [123] + 16 __lambda_322 [288] +[255] 0.0 0.00 0.00 17 __lambda_324 [255] + 0.00 0.00 17/153035271 Cyc_vector_ref [29] + 0.00 0.00 17/81303063 Cyc_num_fast_gte_op [79] + 17 __lambda_323 [123] +----------------------------------------------- + 15 __lambda_388 [256] + 1 __lambda_387 [453] +[256] 0.0 0.00 0.00 1+15 __lambda_388 [256] + 0.00 0.00 15/153035271 Cyc_vector_ref [29] + 0.00 0.00 61/771639154 cell_get [55] + 0.00 0.00 15/82499403 Cyc_fast_sum [90] + 0.00 0.00 16/16 Cyc_num_fast_eq_op [505] + 1 __lambda_383 [276] + 15 __lambda_388 [256] +----------------------------------------------- + 44 __lambda_194 [274] + 73 __lambda_202 [192] +[257] 0.0 0.00 0.00 117 __lambda_206 [257] + 0.00 0.00 117/410327643 Cyc_is_pair [48] + 73 __lambda_205 [1097] + 44 __lambda_180 [170] +----------------------------------------------- + 30 __lambda_286 [1091] + 60 __lambda_292 [246] +[258] 0.0 0.00 0.00 90 __lambda_223 [258] + 0.00 0.00 270/771639154 cell_get [55] + 90 __lambda_274 [24] +----------------------------------------------- + 1 __lambda_164 [460] + 15 __lambda_165 [284] +[259] 0.0 0.00 0.00 16 __lambda_168 [259] + 0.00 0.00 15/153035271 Cyc_vector_ref [29] + 0.00 0.00 16/8768479 Cyc_num_fast_lt_op [99] + 0.00 0.00 16/85 Cyc_vector_length [500] + 15 __lambda_167 [272] + 1 __lambda_163 [1189] +----------------------------------------------- + 88 __lambda_128 [202] +[260] 0.0 0.00 0.00 88 __lambda_124 [260] + 0.00 0.00 264/771639154 cell_get [55] + 88 __lambda_127 [201] +----------------------------------------------- + 1 do_dispatch [101] + 87 __lambda_133 [150] +[261] 0.0 0.00 0.00 88 __lambda_132 [261] + 0.00 0.00 264/771639154 cell_get [55] + 88 __lambda_284 [206] +----------------------------------------------- + 2 __lambda_297 [433] + 32 __lambda_298 [271] +[262] 0.0 0.00 0.00 34 __lambda_301 [262] + 0.00 0.00 34/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 32/82499403 Cyc_fast_sum [90] + 32 Cyc_make_vector [251] + 1 __lambda_118 [418] + 1 __lambda_174 [419] +----------------------------------------------- + 73 __lambda_203 [207] +[263] 0.0 0.00 0.00 73 __lambda_195 [263] + 0.00 0.00 219/771639154 cell_get [55] + 73 __lambda_202 [192] +----------------------------------------------- + 16 __lambda_106 [273] +[264] 0.0 0.00 0.00 16 __lambda_141 [264] + 0.00 0.00 16/153035271 Cyc_vector_ref [29] + 16 __lambda_140 [1108] +----------------------------------------------- + 16 __lambda_211 [242] +[265] 0.0 0.00 0.00 16 __lambda_193 [265] + 0.00 0.00 16/153035271 Cyc_vector_ref [29] + 16 __lambda_192 [1111] +----------------------------------------------- + 1 __lambda_173 [462] + 15 __lambda_167 [272] +[266] 0.0 0.00 0.00 16 __lambda_262 [266] + 0.00 0.00 16/153035271 Cyc_vector_ref [29] + 16 __lambda_261 [1117] +----------------------------------------------- + 30 __lambda_264 [139] +[267] 0.0 0.00 0.00 30 __lambda_221 [267] + 0.00 0.00 30/167205531 Cyc_cdr [59] + 0.00 0.00 90/771639154 cell_get [55] + 30 __lambda_224 [230] +----------------------------------------------- + 15 __lambda_45 [1126] +[268] 0.0 0.00 0.00 15 __lambda_12 [268] + 0.00 0.00 15/169600308 Cyc_st_add [46] + 0.00 0.00 15/167205531 Cyc_cdr [59] + 0.00 0.00 15/154638249 Cyc_car [67] + 15 __lambda_44 [1125] +----------------------------------------------- + 16 __lambda_253 [306] + 17 __lambda_254 [277] +[269] 0.0 0.00 0.00 33 __lambda_257 [269] + 0.00 0.00 33/410327643 Cyc_is_pair [48] + 0.00 0.00 17/154638249 Cyc_car [67] + 0.00 0.00 51/771639154 cell_get [55] + 17 __lambda_293 [193] + 15 __lambda_166 [285] + 1 __lambda_172 [461] +----------------------------------------------- + 15 __lambda_314 [279] + 15 __lambda_313 [309] +[270] 0.0 0.00 0.00 30 __lambda_316 [270] + 0.00 0.00 30/410327643 Cyc_is_pair [48] + 0.00 0.00 15/154638249 Cyc_car [67] + 0.00 0.00 45/771639154 cell_get [55] + 15 __lambda_327 [1119] + 15 __lambda_383 [276] +----------------------------------------------- + 32 __lambda_299 [159] +[271] 0.0 0.00 0.00 32 __lambda_298 [271] + 0.00 0.00 96/771639154 cell_get [55] + 0.00 0.00 32/25906361 Cyc_fast_sub [98] + 32 __lambda_301 [262] +----------------------------------------------- + 15 __lambda_168 [259] +[272] 0.0 0.00 0.00 15 __lambda_167 [272] + 0.00 0.00 15/167205531 Cyc_cdr [59] + 0.00 0.00 45/771639154 cell_get [55] + 0.00 0.00 15/82499403 Cyc_fast_sum [90] + 15 __lambda_262 [266] +----------------------------------------------- + 1 __lambda_104 [457] + 16 __lambda_105 [287] +[273] 0.0 0.00 0.00 17 __lambda_106 [273] + 0.00 0.00 17/81303063 Cyc_num_fast_gte_op [79] + 0.00 0.00 48/771639154 cell_get [55] + 0.00 0.00 16/85 Cyc_vector_length [500] + 16 __lambda_141 [264] + 1 __lambda_103 [1176] +----------------------------------------------- + 44 __lambda_207 [220] +[274] 0.0 0.00 0.00 44 __lambda_194 [274] + 0.00 0.00 132/771639154 cell_get [55] + 44 __lambda_206 [257] +----------------------------------------------- + 1 __lambda_467 [1266] +[275] 0.0 0.00 0.00 1 __lambda_465 [275] + 0.00 0.00 9/153035271 Cyc_vector_ref [29] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_53 [475] +----------------------------------------------- + 1 __lambda_450 [415] + 1 __lambda_388 [256] + 3 __lambda_28 [406] + 15 __lambda_316 [270] +[276] 0.0 0.00 0.00 20 __lambda_383 [276] + 0.00 0.00 20/169600308 Cyc_st_add [46] + 20 __lambda_282 [23] +----------------------------------------------- + 17 __lambda_264 [139] +[277] 0.0 0.00 0.00 17 __lambda_254 [277] + 0.00 0.00 17/167205531 Cyc_cdr [59] + 0.00 0.00 51/771639154 cell_get [55] + 17 __lambda_257 [269] +----------------------------------------------- + 17 __lambda_274 [24] +[278] 0.0 0.00 0.00 17 __lambda_255 [278] + 0.00 0.00 17/154638249 Cyc_car [67] + 0.00 0.00 51/771639154 cell_get [55] + 17 __lambda_270 [186] +----------------------------------------------- + 15 __lambda_323 [123] +[279] 0.0 0.00 0.00 15 __lambda_314 [279] + 0.00 0.00 15/167205531 Cyc_cdr [59] + 0.00 0.00 45/771639154 cell_get [55] + 15 __lambda_316 [270] +----------------------------------------------- + 1 __lambda_532 [1314] + 1 __lambda_531 [1313] + 1 __lambda_511 [1302] + 1 __lambda_509 [1299] + 1 __lambda_507 [1297] + 1 __lambda_506 [1296] + 1 __lambda_504 [1294] + 1 __lambda_502 [1292] + 1 __lambda_501 [1291] + 1 __lambda_500 [1290] + 1 __lambda_499 [1288] + 1 __lambda_498 [1287] +[280] 0.0 0.00 0.00 12 __lambda_1 [280] + 0.00 0.00 12/169600308 Cyc_st_add [46] + 0.00 0.00 12/158564737 Cyc_is_null [84] + 12 __lambda_721 [289] +----------------------------------------------- + 7 __lambda_430 [121] +[281] 0.0 0.00 0.00 7 __lambda_396 [281] + 0.00 0.00 7/153035271 Cyc_vector_ref [29] + 7 __lambda_395 [173] +----------------------------------------------- + 2 __lambda_43 [311] + 3 __lambda_388 [1149] + 10 __lambda_241 [1131] +[282] 0.0 0.00 0.00 15 __lambda_254 [282] + 0.00 0.00 15/169600308 Cyc_st_add [46] + 15 __lambda_14 [253] +----------------------------------------------- + 5 __lambda_250 [1120] +[283] 0.0 0.00 0.00 5 __lambda_13 [283] + 0.00 0.00 10/167205531 Cyc_cdr [59] + 0.00 0.00 5/169600308 Cyc_st_add [46] + 0.00 0.00 5/154638249 Cyc_car [67] + 5 __lambda_57 [417] +----------------------------------------------- + 15 __lambda_187 [211] +[284] 0.0 0.00 0.00 15 __lambda_165 [284] + 0.00 0.00 45/771639154 cell_get [55] + 0.00 0.00 15/82499403 Cyc_fast_sum [90] + 15 __lambda_168 [259] +----------------------------------------------- + 15 __lambda_257 [269] +[285] 0.0 0.00 0.00 15 __lambda_166 [285] + 0.00 0.00 45/771639154 cell_get [55] + 0.00 0.00 15/82499403 Cyc_fast_sum [90] + 15 __lambda_231 [1114] +----------------------------------------------- + 1 __lambda_103 [1176] +[286] 0.0 0.00 0.00 1 __lambda_0 [286] + 0.00 0.00 6/153035271 Cyc_vector_ref [29] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_384 [409] +----------------------------------------------- + 16 __lambda_136 [214] +[287] 0.0 0.00 0.00 16 __lambda_105 [287] + 0.00 0.00 48/771639154 cell_get [55] + 0.00 0.00 16/25906361 Cyc_fast_sub [98] + 16 __lambda_106 [273] +----------------------------------------------- + 16 __lambda_325 [245] +[288] 0.0 0.00 0.00 16 __lambda_322 [288] + 0.00 0.00 48/771639154 cell_get [55] + 0.00 0.00 16/25906361 Cyc_fast_sub [98] + 0.00 0.00 16/85 Cyc_vector_length [500] + 16 __lambda_324 [255] +----------------------------------------------- + 1 __lambda_529 [1311] + 1 __lambda_496 [1285] + 2 __lambda_3 [414] + 3 __lambda_308 [368] + 3 __lambda_387 [431] + 12 __lambda_1 [280] +[289] 0.0 0.00 0.00 22 __lambda_721 [289] + 0.00 0.00 22/158564737 Cyc_is_null [84] + 0.00 0.00 22/771639154 cell_get [55] + 12 __lambda_0 [1128] + 3 __lambda_307 [1145] + 3 __lambda_389 [1150] + 2 __lambda_2 [1160] + 1 __lambda_495 [1284] + 1 __lambda_528 [1310] +----------------------------------------------- + 5 __lambda_57 [417] +[290] 0.0 0.00 0.00 5 __lambda_18 [290] + 0.00 0.00 10/167205531 Cyc_cdr [59] + 0.00 0.00 5/169600308 Cyc_st_add [46] + 5 __lambda_17 [129] +----------------------------------------------- + 1 Cyc_list2vector [134] +[291] 0.0 0.00 0.00 1 __lambda_2 [291] + 0.00 0.00 5/153035271 Cyc_vector_ref [29] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_176 [1192] +----------------------------------------------- + 2 __lambda_303 [1163] +[292] 0.0 0.00 0.00 2 __lambda_302 [292] + 0.00 0.00 2/67248908 Cyc_set_cell [25] + 2 __lambda_297 [433] +----------------------------------------------- + 2 __lambda_368 [1166] +[293] 0.0 0.00 0.00 2 __lambda_367 [293] + 0.00 0.00 2/67248908 Cyc_set_cell [25] + 2 __lambda_359 [434] +----------------------------------------------- + 2 __lambda_417 [1170] +[294] 0.0 0.00 0.00 2 __lambda_416 [294] + 0.00 0.00 2/67248908 Cyc_set_cell [25] + 2 __lambda_414 [435] +----------------------------------------------- + 2 __lambda_442 [1172] +[295] 0.0 0.00 0.00 2 __lambda_441 [295] + 0.00 0.00 2/67248908 Cyc_set_cell [25] + 2 __lambda_438 [436] +----------------------------------------------- + 3 __lambda_415 [296] + 2 __lambda_414 [435] +[296] 0.0 0.00 0.00 2+3 __lambda_415 [296] + 0.00 0.00 5/167205531 Cyc_cdr [59] + 0.00 0.00 15/771639154 cell_get [55] + 0.00 0.00 5/82499403 Cyc_fast_sum [90] + 0.00 0.00 5/410327643 Cyc_is_pair [48] + 2 __lambda_419 [375] + 3 __lambda_415 [296] +----------------------------------------------- + 15 __lambda_309 [308] +[297] 0.0 0.00 0.00 15 __lambda_320 [297] + 0.00 0.00 15/167205531 Cyc_cdr [59] + 15 __lambda_319 [1124] +----------------------------------------------- + 12 __lambda_432 [250] +[298] 0.0 0.00 0.00 12 __lambda_429 [298] + 0.00 0.00 36/771639154 cell_get [55] + 0.00 0.00 12/25906361 Cyc_fast_sub [98] + 0.00 0.00 12/85 Cyc_vector_length [500] + 12 __lambda_431 [249] +----------------------------------------------- + 15 __lambda_282 [23] +[299] 0.0 0.00 0.00 15 __lambda_315 [299] + 0.00 0.00 15/154638249 Cyc_car [67] + 15 __lambda_365 [1105] +----------------------------------------------- + 2 __lambda_359 [434] + 3 __lambda_360 [363] +[300] 0.0 0.00 0.00 5 __lambda_366 [300] + 0.00 0.00 7/154638249 Cyc_car [67] + 0.00 0.00 15/771639154 cell_get [55] + 0.00 0.00 5/410327643 Cyc_is_pair [48] + 5 __lambda_434 [1130] +----------------------------------------------- + 17 __lambda_286 [1091] +[301] 0.0 0.00 0.00 17 __lambda_256 [301] + 0.00 0.00 51/771639154 cell_get [55] + 17 __lambda_274 [24] +----------------------------------------------- + 2 __lambda_22 [1162] + 3 __lambda_43 [311] +[302] 0.0 0.00 0.00 5 __lambda_16 [302] + 0.00 0.00 5/169600308 Cyc_st_add [46] + 0.00 0.00 5/167205531 Cyc_cdr [59] + 5 __lambda_15 [128] +----------------------------------------------- + 1 __lambda_43 [432] + 1 __lambda_42 [471] + 2 __lambda_45 [382] +[303] 0.0 0.00 0.00 4 __lambda_47 [303] + 0.00 0.00 3/153035271 Cyc_vector_ref [29] + 0.00 0.00 4/410327643 Cyc_is_pair [48] + 3 __lambda_46 [384] + 1 __lambda_466 [155] +----------------------------------------------- + 16 __lambda_138 [240] +[304] 0.0 0.00 0.00 16 __lambda_123 [304] + 0.00 0.00 48/771639154 cell_get [55] + 16 __lambda_137 [223] +----------------------------------------------- + 16 __lambda_189 [241] +[305] 0.0 0.00 0.00 16 __lambda_178 [305] + 0.00 0.00 48/771639154 cell_get [55] + 16 __lambda_188 [217] +----------------------------------------------- + 16 __lambda_258 [244] +[306] 0.0 0.00 0.00 16 __lambda_253 [306] + 0.00 0.00 48/771639154 cell_get [55] + 16 __lambda_257 [269] +----------------------------------------------- + 2 __lambda_438 [436] + 3 __lambda_439 [379] +[307] 0.0 0.00 0.00 5 __lambda_440 [307] + 0.00 0.00 15/771639154 cell_get [55] + 0.00 0.00 5/410327643 Cyc_is_pair [48] + 0.00 0.00 3/154638249 Cyc_car [67] + 0.00 0.00 2/167205531 Cyc_cdr [59] + 3 __lambda_456 [127] + 2 __lambda_444 [376] +----------------------------------------------- + 15 __lambda_366 [1106] +[308] 0.0 0.00 0.00 15 __lambda_309 [308] + 0.00 0.00 45/771639154 cell_get [55] + 15 __lambda_320 [297] +----------------------------------------------- + 15 __lambda_317 [247] +[309] 0.0 0.00 0.00 15 __lambda_313 [309] + 0.00 0.00 45/771639154 cell_get [55] + 15 __lambda_316 [270] +----------------------------------------------- + 1 __lambda_163 [1189] +[310] 0.0 0.00 0.00 1 __lambda_1 [310] + 0.00 0.00 3/153035271 Cyc_vector_ref [29] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_121 [1184] +----------------------------------------------- + 5 __lambda_55 [1140] +[311] 0.0 0.00 0.00 5 __lambda_43 [311] + 0.00 0.00 5/169600308 Cyc_st_add [46] + 0.00 0.00 5/158564737 Cyc_is_null [84] + 3 __lambda_16 [302] + 2 __lambda_254 [282] +----------------------------------------------- + 15 __lambda_14 [253] +[312] 0.0 0.00 0.00 15 __lambda_253 [312] + 0.00 0.00 15/82499403 Cyc_fast_sum [90] + 15 __lambda_20 [252] +----------------------------------------------- + 1 do_dispatch [101] +[313] 0.0 0.00 0.00 1 __lambda_490 [313] + 0.00 0.00 3/153035271 Cyc_vector_ref [29] + 1 __lambda_247 [423] +----------------------------------------------- + 1 __lambda_122 [317] +[314] 0.0 0.00 0.00 1 __lambda_102 [314] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_93 [360] +----------------------------------------------- + 1 __lambda_108 [1177] +[315] 0.0 0.00 0.00 1 __lambda_107 [315] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_104 [457] +----------------------------------------------- + 1 __lambda_115 [1180] +[316] 0.0 0.00 0.00 1 __lambda_114 [316] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_111 [458] +----------------------------------------------- + 1 __lambda_142 [318] +[317] 0.0 0.00 0.00 1 __lambda_122 [317] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_102 [314] +----------------------------------------------- + 1 __lambda_162 [320] +[318] 0.0 0.00 0.00 1 __lambda_142 [318] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_122 [317] +----------------------------------------------- + 1 __lambda_41 [346] +[319] 0.0 0.00 0.00 1 __lambda_15 [319] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_3 [362] +----------------------------------------------- + 1 __lambda_177 [322] +[320] 0.0 0.00 0.00 1 __lambda_162 [320] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_142 [318] +----------------------------------------------- + 1 __lambda_170 [1190] +[321] 0.0 0.00 0.00 1 __lambda_169 [321] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_164 [460] +----------------------------------------------- + 1 __lambda_232 [323] +[322] 0.0 0.00 0.00 1 __lambda_177 [322] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_162 [320] +----------------------------------------------- + 1 __lambda_243 [324] +[323] 0.0 0.00 0.00 1 __lambda_232 [323] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_177 [322] +----------------------------------------------- + 1 __lambda_252 [325] +[324] 0.0 0.00 0.00 1 __lambda_243 [324] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_232 [323] +----------------------------------------------- + 1 __lambda_263 [326] +[325] 0.0 0.00 0.00 1 __lambda_252 [325] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_243 [324] +----------------------------------------------- + 1 __lambda_271 [327] +[326] 0.0 0.00 0.00 1 __lambda_263 [326] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_252 [325] +----------------------------------------------- + 1 __lambda_273 [328] +[327] 0.0 0.00 0.00 1 __lambda_271 [327] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_263 [326] +----------------------------------------------- + 1 __lambda_275 [329] +[328] 0.0 0.00 0.00 1 __lambda_273 [328] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_271 [327] +----------------------------------------------- + 1 __lambda_277 [132] +[329] 0.0 0.00 0.00 1 __lambda_275 [329] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_273 [328] +----------------------------------------------- + 1 __lambda_294 [331] +[330] 0.0 0.00 0.00 1 __lambda_285 [330] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_277 [132] +----------------------------------------------- + 1 __lambda_296 [332] +[331] 0.0 0.00 0.00 1 __lambda_294 [331] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_285 [330] +----------------------------------------------- + 1 __lambda_307 [333] +[332] 0.0 0.00 0.00 1 __lambda_296 [332] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_294 [331] +----------------------------------------------- + 1 __lambda_312 [334] +[333] 0.0 0.00 0.00 1 __lambda_307 [333] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_296 [332] +----------------------------------------------- + 1 __lambda_321 [335] +[334] 0.0 0.00 0.00 1 __lambda_312 [334] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_307 [333] +----------------------------------------------- + 1 __lambda_328 [336] +[335] 0.0 0.00 0.00 1 __lambda_321 [335] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_312 [334] +----------------------------------------------- + 1 __lambda_329 [1198] +[336] 0.0 0.00 0.00 1 __lambda_328 [336] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_321 [335] +----------------------------------------------- + 1 __lambda_375 [1225] +[337] 0.0 0.00 0.00 1 __lambda_374 [337] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_358 [466] +----------------------------------------------- + 1 __lambda_379 [1227] +[338] 0.0 0.00 0.00 1 __lambda_378 [338] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_357 [465] +----------------------------------------------- + 1 __lambda_390 [340] +[339] 0.0 0.00 0.00 1 __lambda_389 [339] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_387 [453] +----------------------------------------------- + 1 __lambda_386 [153] +[340] 0.0 0.00 0.00 1 __lambda_390 [340] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_389 [339] +----------------------------------------------- + 1 __lambda_392 [1232] +[341] 0.0 0.00 0.00 1 __lambda_391 [341] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_383 [450] +----------------------------------------------- + 1 __lambda_385 [154] +[342] 0.0 0.00 0.00 1 __lambda_392 [342] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_391 [1231] +----------------------------------------------- + 1 __lambda_395 [1236] +[343] 0.0 0.00 0.00 1 __lambda_394 [343] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_393 [1234] +----------------------------------------------- + 1 __lambda_399 [1240] +[344] 0.0 0.00 0.00 1 __lambda_398 [344] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_394 [1235] +----------------------------------------------- + 1 __lambda_402 [1243] +[345] 0.0 0.00 0.00 1 __lambda_401 [345] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_356 [464] +----------------------------------------------- + 1 __lambda_54 [358] +[346] 0.0 0.00 0.00 1 __lambda_41 [346] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_15 [319] +----------------------------------------------- + 1 __lambda_421 [1249] +[347] 0.0 0.00 0.00 1 __lambda_420 [347] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_413 [470] +----------------------------------------------- + 1 __lambda_425 [1251] +[348] 0.0 0.00 0.00 1 __lambda_424 [348] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_412 [469] +----------------------------------------------- + 1 __lambda_435 [350] +[349] 0.0 0.00 0.00 1 __lambda_428 [349] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_411 [468] +----------------------------------------------- + 1 __lambda_460 [354] +[350] 0.0 0.00 0.00 1 __lambda_435 [350] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_428 [349] +----------------------------------------------- + 1 __lambda_446 [1255] +[351] 0.0 0.00 0.00 1 __lambda_445 [351] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_437 [473] +----------------------------------------------- + 1 __lambda_452 [1258] +[352] 0.0 0.00 0.00 1 __lambda_451 [352] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_436 [472] +----------------------------------------------- + 1 __lambda_458 [1261] +[353] 0.0 0.00 0.00 1 __lambda_457 [353] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_454 [1260] +----------------------------------------------- + 1 __lambda_461 [1263] +[354] 0.0 0.00 0.00 1 __lambda_460 [354] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_435 [350] +----------------------------------------------- + 1 __lambda_49 [1282] +[355] 0.0 0.00 0.00 1 __lambda_48 [355] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_42 [471] +----------------------------------------------- + 1 __lambda_523 [1305] +[356] 0.0 0.00 0.00 1 __lambda_522 [356] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_492 [474] +----------------------------------------------- + 1 __lambda_536 [1316] +[357] 0.0 0.00 0.00 1 __lambda_535 [357] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_532 [1314] +----------------------------------------------- + 1 __lambda_93 [360] +[358] 0.0 0.00 0.00 1 __lambda_54 [358] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_41 [346] +----------------------------------------------- + 1 __lambda_327 [26] +[359] 0.0 0.00 0.00 1 __lambda_8 [359] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_7 [482] +----------------------------------------------- + 1 __lambda_102 [314] +[360] 0.0 0.00 0.00 1 __lambda_93 [360] + 0.00 0.00 1/67248908 Cyc_set_cell [25] + 1 __lambda_54 [358] +----------------------------------------------- + 1 __lambda_111 [458] + 3 __lambda_112 [378] +[361] 0.0 0.00 0.00 4 __lambda_113 [361] + 0.00 0.00 3/154638249 Cyc_car [67] + 0.00 0.00 4/410327643 Cyc_is_pair [48] + 0.00 0.00 9/771639154 cell_get [55] + 3 __lambda_251 [161] + 1 __lambda_110 [1179] +----------------------------------------------- + 1 __lambda_15 [319] +[362] 0.0 0.00 0.00 1 __lambda_3 [362] + 0.00 0.00 2/153035271 Cyc_vector_ref [29] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_311 [1197] +----------------------------------------------- + 3 __lambda_395 [173] +[363] 0.0 0.00 0.00 3 __lambda_360 [363] + 0.00 0.00 3/167205531 Cyc_cdr [59] + 0.00 0.00 9/771639154 cell_get [55] + 0.00 0.00 3/82499403 Cyc_fast_sum [90] + 3 __lambda_366 [300] +----------------------------------------------- + 3 __lambda_337 [408] +[364] 0.0 0.00 0.00 3 __lambda_329 [364] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 0.00 0.00 3/154638249 Cyc_car [67] + 3 __lambda_35 [130] +----------------------------------------------- + 1 __lambda_358 [466] + 2 __lambda_363 [369] +[365] 0.0 0.00 0.00 3 __lambda_373 [365] + 0.00 0.00 4/154638249 Cyc_car [67] + 0.00 0.00 3/410327643 Cyc_is_pair [48] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 3/771639154 cell_get [55] + 2 __lambda_327 [26] + 1 __lambda_377 [421] +----------------------------------------------- + 2 __lambda_44 [1125] +[366] 0.0 0.00 0.00 2 __lambda_23 [366] + 0.00 0.00 2/169600308 Cyc_st_add [46] + 0.00 0.00 2/167205531 Cyc_cdr [59] + 0.00 0.00 2/154638249 Cyc_car [67] + 2 __lambda_22 [1162] +----------------------------------------------- + 2 __lambda_390 [180] +[367] 0.0 0.00 0.00 2 __lambda_389 [367] + 0.00 0.00 2/153035271 Cyc_vector_ref [29] + 2 __lambda_388 [1169] +----------------------------------------------- + 3 do_dispatch [101] +[368] 0.0 0.00 0.00 3 __lambda_308 [368] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 0.00 0.00 3/158564737 Cyc_is_null [84] + 3 __lambda_721 [289] +----------------------------------------------- + 2 __lambda_395 [173] +[369] 0.0 0.00 0.00 2 __lambda_363 [369] + 0.00 0.00 4/82499403 Cyc_fast_sum [90] + 0.00 0.00 2/167205531 Cyc_cdr [59] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_373 [365] +----------------------------------------------- + 1 c_schemebase_entry_pt [535] +[370] 0.0 0.00 0.00 1 __lambda_1561 [370] + 0.00 0.00 1/24 Cyc_global_set [248] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_1560 [1188] +----------------------------------------------- + 1 c_schemeread_entry_pt [537] +[371] 0.0 0.00 0.00 1 __lambda_400 [371] + 0.00 0.00 1/24 Cyc_global_set [248] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_399 [401] +----------------------------------------------- + 1 c_scheme_char_entry_pt [534] +[372] 0.0 0.00 0.00 1 __lambda_42 [372] + 0.00 0.00 1/24 Cyc_global_set [248] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 c_schemeread_entry_pt [537] +----------------------------------------------- + 1 c_schemewrite_entry_pt [539] +[373] 0.0 0.00 0.00 1 __lambda_5 [373] + 0.00 0.00 1/24 Cyc_global_set [248] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_4 [402] +----------------------------------------------- + 1 __lambda_528 [1310] + 1 __lambda_495 [1284] +[374] 0.0 0.00 0.00 2 __lambda_304 [374] + 0.00 0.00 2/169600308 Cyc_st_add [46] + 0.00 0.00 2/154638249 Cyc_car [67] + 0.00 0.00 2/158564737 Cyc_is_null [84] + 0.00 0.00 2/2 Cyc_io_flush_output_port [522] + 1 __lambda_494 [1283] + 1 __lambda_527 [1309] +----------------------------------------------- + 1 __lambda_413 [470] + 2 __lambda_415 [296] +[375] 0.0 0.00 0.00 3 __lambda_419 [375] + 0.00 0.00 2/154638249 Cyc_car [67] + 0.00 0.00 3/410327643 Cyc_is_pair [48] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 3/771639154 cell_get [55] + 2 __lambda_418 [1171] + 1 __lambda_423 [422] +----------------------------------------------- + 1 __lambda_437 [473] + 2 __lambda_440 [307] +[376] 0.0 0.00 0.00 3 __lambda_444 [376] + 0.00 0.00 2/154638249 Cyc_car [67] + 0.00 0.00 3/410327643 Cyc_is_pair [48] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 3/771639154 cell_get [55] + 2 __lambda_443 [1173] + 1 __lambda_450 [415] +----------------------------------------------- + 2 __lambda_371 [381] + 2 __lambda_364 [380] + 3 __lambda_361 [383] +[377] 0.0 0.00 0.00 7 __lambda_397 [377] + 0.00 0.00 21/771639154 cell_get [55] + 7 __lambda_434 [1130] +----------------------------------------------- + 1 __lambda_246 [1081] + 2 __lambda_249 [175] +[378] 0.0 0.00 0.00 3 __lambda_112 [378] + 0.00 0.00 3/167205531 Cyc_cdr [59] + 0.00 0.00 9/771639154 cell_get [55] + 3 __lambda_113 [361] +----------------------------------------------- + 3 __lambda_455 [1142] +[379] 0.0 0.00 0.00 3 __lambda_439 [379] + 0.00 0.00 3/167205531 Cyc_cdr [59] + 0.00 0.00 9/771639154 cell_get [55] + 3 __lambda_440 [307] +----------------------------------------------- + 2 __lambda_365 [181] +[380] 0.0 0.00 0.00 2 __lambda_364 [380] + 0.00 0.00 4/154638249 Cyc_car [67] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_397 [377] +----------------------------------------------- + 2 __lambda_372 [182] +[381] 0.0 0.00 0.00 2 __lambda_371 [381] + 0.00 0.00 4/154638249 Cyc_car [67] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_397 [377] +----------------------------------------------- + 1 __lambda_272 [63] + 2 __lambda_274 [24] +[382] 0.0 0.00 0.00 3 __lambda_45 [382] + 0.00 0.00 9/771639154 cell_get [55] + 0.00 0.00 2/167205531 Cyc_cdr [59] + 0.00 0.00 1/154638249 Cyc_car [67] + 0.00 0.00 1/85 Cyc_vector_length [500] + 2 __lambda_47 [303] + 1 __lambda_92 [37] +----------------------------------------------- + 3 __lambda_362 [177] +[383] 0.0 0.00 0.00 3 __lambda_361 [383] + 0.00 0.00 3/154638249 Cyc_car [67] + 0.00 0.00 9/771639154 cell_get [55] + 3 __lambda_397 [377] +----------------------------------------------- + 3 __lambda_47 [303] +[384] 0.0 0.00 0.00 3 __lambda_46 [384] + 0.00 0.00 3/154638249 Cyc_car [67] + 0.00 0.00 9/771639154 cell_get [55] + 3 __lambda_272 [63] +----------------------------------------------- + 1 Cyc_string_append [514] +[385] 0.0 0.00 0.00 1 __lambda_0 [385] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 c_schemebase_entry_pt [535] +----------------------------------------------- + 1 __lambda_327 [26] +[386] 0.0 0.00 0.00 1 __lambda_1544 [386] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 c_schemetime_entry_pt [538] +----------------------------------------------- + 1 __lambda_1547 [388] +[387] 0.0 0.00 0.00 1 __lambda_1546 [387] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1545 [1185] +----------------------------------------------- + 1 __lambda_1548 [389] +[388] 0.0 0.00 0.00 1 __lambda_1547 [388] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1546 [387] +----------------------------------------------- + 1 __lambda_1549 [390] +[389] 0.0 0.00 0.00 1 __lambda_1548 [389] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1547 [388] +----------------------------------------------- + 1 __lambda_1550 [391] +[390] 0.0 0.00 0.00 1 __lambda_1549 [390] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1548 [389] +----------------------------------------------- + 1 __lambda_1551 [392] +[391] 0.0 0.00 0.00 1 __lambda_1550 [391] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1549 [390] +----------------------------------------------- + 1 __lambda_1552 [393] +[392] 0.0 0.00 0.00 1 __lambda_1551 [392] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1550 [391] +----------------------------------------------- + 1 __lambda_1553 [394] +[393] 0.0 0.00 0.00 1 __lambda_1552 [393] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1551 [392] +----------------------------------------------- + 1 __lambda_1554 [395] +[394] 0.0 0.00 0.00 1 __lambda_1553 [394] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1552 [393] +----------------------------------------------- + 1 __lambda_1555 [396] +[395] 0.0 0.00 0.00 1 __lambda_1554 [395] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1553 [394] +----------------------------------------------- + 1 __lambda_722 [1154] +[396] 0.0 0.00 0.00 1 __lambda_1555 [396] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1554 [395] +----------------------------------------------- + 1 __lambda_722 [1154] +[397] 0.0 0.00 0.00 1 __lambda_1557 [397] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1556 [1186] +----------------------------------------------- + 1 __lambda_722 [1154] +[398] 0.0 0.00 0.00 1 __lambda_1559 [398] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1558 [1187] +----------------------------------------------- + 1 __lambda_3 [400] +[399] 0.0 0.00 0.00 1 __lambda_2 [399] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_1 [1175] +----------------------------------------------- + 1 Cyc_string_append [514] +[400] 0.0 0.00 0.00 1 __lambda_3 [400] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_2 [399] +----------------------------------------------- + 1 __lambda_400 [371] +[401] 0.0 0.00 0.00 1 __lambda_399 [401] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 c_entry_pt_first_lambda [533] +----------------------------------------------- + 1 __lambda_5 [373] +[402] 0.0 0.00 0.00 1 __lambda_4 [402] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 c_scheme_char_entry_pt [534] +----------------------------------------------- + 1 Cyc_string_append [514] +[403] 0.0 0.00 0.00 1 __lambda_5 [403] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_4 [1241] +----------------------------------------------- + 1 __lambda_7 [482] +[404] 0.0 0.00 0.00 1 __lambda_6 [404] + 0.00 0.00 1/24 Cyc_global_set [248] + 1 __lambda_5 [481] +----------------------------------------------- + 3 __lambda_41 [1151] +[405] 0.0 0.00 0.00 3 __lambda_24 [405] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_40 [424] +----------------------------------------------- + 3 __lambda_42 [1152] +[406] 0.0 0.00 0.00 3 __lambda_28 [406] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_383 [276] +----------------------------------------------- + 1 __lambda_530 [1312] + 1 __lambda_505 [1295] + 1 __lambda_497 [1286] +[407] 0.0 0.00 0.00 3 __lambda_309 [407] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 apply_va [425] +----------------------------------------------- + 3 __lambda_27 [1144] +[408] 0.0 0.00 0.00 3 __lambda_337 [408] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_329 [364] +----------------------------------------------- + 1 __lambda_489 [1281] + 1 __lambda_355 [1224] + 1 __lambda_0 [286] +[409] 0.0 0.00 0.00 3 __lambda_384 [409] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 Cyc_list2vector [134] +----------------------------------------------- + 1 __lambda_484 [442] + 1 __lambda_483 [1278] + 1 __lambda_482 [1277] +[410] 0.0 0.00 0.00 3 __lambda_390 [410] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_387 [431] +----------------------------------------------- + 1 __lambda_1560 [1188] + 1 __lambda_1558 [1187] + 1 __lambda_1556 [1186] +[411] 0.0 0.00 0.00 3 __lambda_725 [411] + 0.00 0.00 3/169600308 Cyc_st_add [46] + 3 __lambda_719 [430] +----------------------------------------------- + 2 __lambda_247 [423] +[412] 0.0 0.00 0.00 2 __lambda_245 [412] + 0.00 0.00 4/158564737 Cyc_is_null [84] + 0.00 0.00 2/167205531 Cyc_cdr [59] + 2 __lambda_246 [455] +----------------------------------------------- + 1 __lambda_471 [1268] + 1 __lambda_310 [1196] +[413] 0.0 0.00 0.00 2 __lambda_367 [413] + 0.00 0.00 2/169600308 Cyc_st_add [46] + 0.00 0.00 2/410327643 Cyc_is_pair [48] + 2 __lambda_284 [20] +----------------------------------------------- + 1 __lambda_510 [1301] + 1 __lambda_508 [1298] +[414] 0.0 0.00 0.00 2 __lambda_3 [414] + 0.00 0.00 2/169600308 Cyc_st_add [46] + 0.00 0.00 2/158564737 Cyc_is_null [84] + 2 __lambda_721 [289] +----------------------------------------------- + 1 __lambda_444 [376] + 1 __lambda_436 [472] +[415] 0.0 0.00 0.00 2 __lambda_450 [415] + 0.00 0.00 2/154638249 Cyc_car [67] + 0.00 0.00 2/410327643 Cyc_is_pair [48] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_456 [127] + 1 __lambda_383 [276] +----------------------------------------------- + 0.00 0.00 1/1 main [7] +[416] 0.0 0.00 0.00 1 gc_thread_data_init [416] + 0.00 0.00 2/2275804334 ck_pr_md_load_int [13] + 0.00 0.00 2/28 vpbuffer_realloc [503] + 0.00 0.00 1/6 gc_thr_grow_move_buffer [513] +----------------------------------------------- + 5 __lambda_13 [283] +[417] 0.0 0.00 0.00 5 __lambda_57 [417] + 0.00 0.00 5/82499403 Cyc_fast_sum [90] + 5 __lambda_18 [290] +----------------------------------------------- + 1 __lambda_301 [262] +[418] 0.0 0.00 0.00 1 __lambda_118 [418] + 0.00 0.00 1/153035271 Cyc_vector_ref [29] + 1 __lambda_117 [1182] +----------------------------------------------- + 1 __lambda_301 [262] +[419] 0.0 0.00 0.00 1 __lambda_174 [419] + 0.00 0.00 1/153035271 Cyc_vector_ref [29] + 1 __lambda_173 [462] +----------------------------------------------- + 1 __lambda_323 [123] +[420] 0.0 0.00 0.00 1 __lambda_52 [420] + 0.00 0.00 1/153035271 Cyc_vector_ref [29] + 1 __lambda_51 [1300] +----------------------------------------------- + 1 __lambda_373 [365] + 1 __lambda_357 [465] +[421] 0.0 0.00 0.00 2 __lambda_377 [421] + 0.00 0.00 2/410327643 Cyc_is_pair [48] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 1/154638249 Cyc_car [67] + 1 __lambda_376 [1226] + 1 __lambda_355 [1224] +----------------------------------------------- + 1 __lambda_419 [375] + 1 __lambda_412 [469] +[422] 0.0 0.00 0.00 2 __lambda_423 [422] + 0.00 0.00 2/410327643 Cyc_is_pair [48] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 1/154638249 Cyc_car [67] + 1 __lambda_422 [1250] + 1 __lambda_408 [1247] +----------------------------------------------- + 1 __lambda_490 [313] + 1 __lambda_486 [1279] +[423] 0.0 0.00 0.00 2 __lambda_247 [423] + 0.00 0.00 2/169600308 Cyc_st_add [46] + 2 __lambda_245 [412] +----------------------------------------------- + 3 __lambda_24 [405] +[424] 0.0 0.00 0.00 3 __lambda_40 [424] + 0.00 0.00 3/154638249 Cyc_car [67] + 1 __lambda_481 [1276] + 1 __lambda_482 [1277] + 1 __lambda_483 [1278] +----------------------------------------------- + 1 __lambda_249 [454] + 3 __lambda_309 [407] +[425] 0.0 0.00 0.00 4 apply_va [425] + 0.00 0.00 4/410327643 Cyc_is_pair [48] + 4 apply [131] +----------------------------------------------- + 2 __lambda_385 [183] +[426] 0.0 0.00 0.00 2 __lambda_384 [426] + 0.00 0.00 6/771639154 cell_get [55] + 0.00 0.00 2/25906361 Cyc_fast_sub [98] + 2 __lambda_390 [180] +----------------------------------------------- + 1 __lambda_493 [447] + 1 __lambda_492 [474] +[427] 0.0 0.00 0.00 2 __lambda_521 [427] + 0.00 0.00 2/8768479 Cyc_num_fast_lt_op [99] + 1 __lambda_476 [1272] + 1 __lambda_477 [158] +----------------------------------------------- + 1 __lambda_455 [1142] +[428] 0.0 0.00 0.00 1 __lambda_448 [428] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 1/154638249 Cyc_car [67] + 1 __lambda_447 [1256] +----------------------------------------------- + 2 __lambda_395 [173] +[429] 0.0 0.00 0.00 2 __lambda_370 [429] + 0.00 0.00 2/154638249 Cyc_car [67] + 2 __lambda_369 [1167] +----------------------------------------------- + 3 __lambda_725 [411] +[430] 0.0 0.00 0.00 3 __lambda_719 [430] + 0.00 0.00 3/410327643 Cyc_is_pair [48] + 3 __lambda_724 [1156] +----------------------------------------------- + 3 __lambda_390 [410] +[431] 0.0 0.00 0.00 3 __lambda_387 [431] + 0.00 0.00 3/158564737 Cyc_is_null [84] + 3 __lambda_721 [289] +----------------------------------------------- + 1 __lambda_282 [23] +[432] 0.0 0.00 0.00 1 __lambda_43 [432] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_47 [303] +----------------------------------------------- + 2 __lambda_302 [292] +[433] 0.0 0.00 0.00 2 __lambda_297 [433] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_301 [262] +----------------------------------------------- + 2 __lambda_367 [293] +[434] 0.0 0.00 0.00 2 __lambda_359 [434] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_366 [300] +----------------------------------------------- + 2 __lambda_416 [294] +[435] 0.0 0.00 0.00 2 __lambda_414 [435] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_415 [296] +----------------------------------------------- + 2 __lambda_441 [295] +[436] 0.0 0.00 0.00 2 __lambda_438 [436] + 0.00 0.00 6/771639154 cell_get [55] + 2 __lambda_440 [307] +----------------------------------------------- + 1 __lambda_491 [443] +[437] 0.0 0.00 0.00 1 __lambda_251 [437] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_489 [1281] +----------------------------------------------- + 1 c_schemetime_entry_pt [538] +[438] 0.0 0.00 0.00 1 __lambda_3 [438] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 c_schemewrite_entry_pt [539] +----------------------------------------------- + 1 __lambda_475 [1271] +[439] 0.0 0.00 0.00 1 __lambda_399 [439] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_398 [1239] +----------------------------------------------- + 1 __lambda_472 [441] +[440] 0.0 0.00 0.00 1 __lambda_464 [440] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_463 [1265] +----------------------------------------------- + 1 __lambda_473 [1269] +[441] 0.0 0.00 0.00 1 __lambda_472 [441] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_464 [440] +----------------------------------------------- + 1 c_entry_pt_first_lambda [533] +[442] 0.0 0.00 0.00 1 __lambda_484 [442] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_390 [410] +----------------------------------------------- + 1 __lambda_474 [1270] +[443] 0.0 0.00 0.00 1 __lambda_491 [443] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_251 [437] +----------------------------------------------- + 1 __lambda_478 [1273] +[444] 0.0 0.00 0.00 1 __lambda_537 [444] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 __lambda_536 [1316] +----------------------------------------------- + 1 __lambda_503 [1293] +[445] 0.0 0.00 0.00 1 __lambda_538 [445] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 Cyc_string_append [514] +----------------------------------------------- + 1 c_schemecyclonecommon_entry_pt [536] +[446] 0.0 0.00 0.00 1 __lambda_6 [446] + 0.00 0.00 1/169600308 Cyc_st_add [46] + 1 Cyc_string_append [514] +----------------------------------------------- + 1 __lambda_466 [155] +[447] 0.0 0.00 0.00 1 __lambda_493 [447] + 0.00 0.00 3/771639154 cell_get [55] + 0.00 0.00 1/82499403 Cyc_fast_sum [90] + 1 __lambda_521 [427] +----------------------------------------------- + 1 __lambda_175 [463] + 1 __lambda_119 [459] +[448] 0.0 0.00 0.00 2 __lambda_306 [448] + 0.00 0.00 2/82499403 Cyc_fast_sum [90] + 2 Cyc_make_vector [251] +----------------------------------------------- + 3 __lambda_10 [1143] +[449] 0.0 0.00 0.00 3 __lambda_9 [449] + 0.00 0.00 5/771639154 cell_get [55] + 2 __lambda_388 [1149] + 1 __lambda_327 [26] +----------------------------------------------- + 1 __lambda_391 [341] +[450] 0.0 0.00 0.00 1 __lambda_383 [450] + 0.00 0.00 3/771639154 cell_get [55] + 0.00 0.00 1/25906361 Cyc_fast_sub [98] + 1 __lambda_390 [180] +----------------------------------------------- + 1 __lambda_766 [480] +[451] 0.0 0.00 0.00 1 __lambda_512 [451] + 0.00 0.00 3/771639154 cell_get [55] + 0.00 0.00 1/25906361 Cyc_fast_sub [98] + 1 __lambda_534 [120] +----------------------------------------------- + 1 __lambda_487 [1280] +[452] 0.0 0.00 0.00 1 __lambda_485 [452] + 0.00 0.00 1/8768479 Cyc_num_fast_lt_op [99] + 1 __lambda_486 [1279] +----------------------------------------------- + 1 __lambda_389 [339] +[453] 0.0 0.00 0.00 1 __lambda_387 [453] + 0.00 0.00 4/771639154 cell_get [55] + 1 __lambda_388 [256] +----------------------------------------------- + 1 __lambda_248 [157] +[454] 0.0 0.00 0.00 1 __lambda_249 [454] + 0.00 0.00 1/167205531 Cyc_cdr [59] + 1 apply_va [425] +----------------------------------------------- + 2 __lambda_245 [412] +[455] 0.0 0.00 0.00 2 __lambda_246 [455] + 0.00 0.00 1/154638249 Cyc_car [67] + 1 __lambda_473 [1269] + 1 __lambda_250 [1194] +----------------------------------------------- + 1 __lambda_481 [1276] + 1 __lambda_480 [1275] +[456] 0.0 0.00 0.00 2 Cyc_number2string2 [456] + 0.00 0.00 2/153043652 Cyc_is_number [89] + 1 __lambda_479 [1274] + 1 __lambda_480 [1275] +----------------------------------------------- + 1 __lambda_107 [315] +[457] 0.0 0.00 0.00 1 __lambda_104 [457] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_106 [273] +----------------------------------------------- + 1 __lambda_114 [316] +[458] 0.0 0.00 0.00 1 __lambda_111 [458] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_113 [361] +----------------------------------------------- + 1 __lambda_120 [1183] +[459] 0.0 0.00 0.00 1 __lambda_119 [459] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_306 [448] +----------------------------------------------- + 1 __lambda_169 [321] +[460] 0.0 0.00 0.00 1 __lambda_164 [460] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_168 [259] +----------------------------------------------- + 1 __lambda_257 [269] +[461] 0.0 0.00 0.00 1 __lambda_172 [461] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_231 [1114] +----------------------------------------------- + 1 __lambda_174 [419] +[462] 0.0 0.00 0.00 1 __lambda_173 [462] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_262 [266] +----------------------------------------------- + 1 __lambda_176 [1192] +[463] 0.0 0.00 0.00 1 __lambda_175 [463] + 0.00 0.00 3/771639154 cell_get [55] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_306 [448] +----------------------------------------------- + 1 __lambda_401 [345] +[464] 0.0 0.00 0.00 1 __lambda_356 [464] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_400 [1242] +----------------------------------------------- + 1 __lambda_378 [338] +[465] 0.0 0.00 0.00 1 __lambda_357 [465] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_377 [421] +----------------------------------------------- + 1 __lambda_374 [337] +[466] 0.0 0.00 0.00 1 __lambda_358 [466] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_373 [365] +----------------------------------------------- + 1 __lambda_410 [1248] +[467] 0.0 0.00 0.00 1 __lambda_409 [467] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_427 [1253] +----------------------------------------------- + 1 __lambda_428 [349] +[468] 0.0 0.00 0.00 1 __lambda_411 [468] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_459 [1262] +----------------------------------------------- + 1 __lambda_424 [348] +[469] 0.0 0.00 0.00 1 __lambda_412 [469] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_423 [422] +----------------------------------------------- + 1 __lambda_420 [347] +[470] 0.0 0.00 0.00 1 __lambda_413 [470] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_419 [375] +----------------------------------------------- + 1 __lambda_48 [355] +[471] 0.0 0.00 0.00 1 __lambda_42 [471] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_47 [303] +----------------------------------------------- + 1 __lambda_451 [352] +[472] 0.0 0.00 0.00 1 __lambda_436 [472] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_450 [415] +----------------------------------------------- + 1 __lambda_445 [351] +[473] 0.0 0.00 0.00 1 __lambda_437 [473] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_444 [376] +----------------------------------------------- + 1 __lambda_522 [356] +[474] 0.0 0.00 0.00 1 __lambda_492 [474] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_521 [427] +----------------------------------------------- + 1 __lambda_465 [275] +[475] 0.0 0.00 0.00 1 __lambda_53 [475] + 0.00 0.00 3/771639154 cell_get [55] + 1 __lambda_327 [1119] +----------------------------------------------- + 1 Cyc_make_vector [251] +[476] 0.0 0.00 0.00 1 __lambda_404 [476] + 0.00 0.00 1/82499403 Cyc_fast_sum [90] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 Cyc_make_vector [251] +[477] 0.0 0.00 0.00 1 __lambda_405 [477] + 0.00 0.00 1/82499403 Cyc_fast_sum [90] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 __lambda_0 [1158] +[478] 0.0 0.00 0.00 1 __lambda_513 [478] + 0.00 0.00 1/25906361 Cyc_fast_sub [98] + 0.00 0.00 1/2 Cyc_fast_div [521] + 1 __lambda_766 [480] +----------------------------------------------- + 1 __lambda_534 [120] +[479] 0.0 0.00 0.00 1 __lambda_765 [479] + 0.00 0.00 1/153043652 Cyc_is_number [89] + 1 __lambda_533 [1315] +----------------------------------------------- + 1 __lambda_513 [478] +[480] 0.0 0.00 0.00 1 __lambda_766 [480] + 0.00 0.00 1/153043652 Cyc_is_number [89] + 1 __lambda_512 [451] +----------------------------------------------- + 1 __lambda_6 [404] +[481] 0.0 0.00 0.00 1 __lambda_5 [481] + 0.00 0.00 1/771639154 cell_get [55] + 1 __lambda_388 [1149] +----------------------------------------------- + 1 __lambda_8 [359] +[482] 0.0 0.00 0.00 1 __lambda_7 [482] + 0.00 0.00 1/771639154 cell_get [55] + 1 __lambda_6 [404] +----------------------------------------------- + 0.00 0.00 12712/12712 gc_sweep [10] +[483] 0.0 0.00 0.00 12712 gc_is_heap_empty [483] +----------------------------------------------- + 0.00 0.00 3205/3205 gc_collector [2] +[484] 0.0 0.00 0.00 3205 gc_get_heap [484] +----------------------------------------------- + 0.00 0.00 13/3136 gc_mutator_thread_blocked [509] + 0.00 0.00 13/3136 gc_mutator_thread_runnable [510] + 0.00 0.00 612/3136 gc_post_handshake [195] + 0.00 0.00 1099/3136 gc_mut_cooperate [96] + 0.00 0.00 1399/3136 gc_collector [2] +[485] 0.0 0.00 0.00 3136 ck_pr_cas_int [485] +----------------------------------------------- + 0.00 0.00 2054/2054 gc_sweep [10] +[486] 0.0 0.00 0.00 2054 gc_heap_free [486] +----------------------------------------------- + 0.00 0.00 4/1855 gc_init_heap [541] + 0.00 0.00 1851/1855 gc_grow_heap [95] +[487] 0.0 0.00 0.00 1855 gc_heap_create [487] +----------------------------------------------- + 0.00 0.00 864/864 hs_hash [489] +[488] 0.0 0.00 0.00 864 MurmurHash64A [488] +----------------------------------------------- + 0.00 0.00 388/864 set_get [494] + 0.00 0.00 476/864 set_insert [491] +[489] 0.0 0.00 0.00 864 hs_hash [489] + 0.00 0.00 864/864 MurmurHash64A [488] +----------------------------------------------- + 0.00 0.00 2/476 c_entry_pt [532] + 0.00 0.00 6/476 c_schemeread_entry_pt [537] + 0.00 0.00 123/476 c_schemebase_entry_pt [535] + 0.00 0.00 345/476 add_symbol_by_name [495] +[490] 0.0 0.00 0.00 476 add_symbol [490] + 0.00 0.00 476/476 set_insert [491] +----------------------------------------------- + 0.00 0.00 476/476 add_symbol [490] +[491] 0.0 0.00 0.00 476 set_insert [491] + 0.00 0.00 476/864 hs_hash [489] +----------------------------------------------- + 0.00 0.00 4/388 c_schemetime_entry_pt [538] + 0.00 0.00 5/388 c_schemewrite_entry_pt [539] + 0.00 0.00 7/388 c_schemecyclonecommon_entry_pt [536] + 0.00 0.00 9/388 c_entry_pt [532] + 0.00 0.00 23/388 c_scheme_char_entry_pt [534] + 0.00 0.00 44/388 c_schemeread_entry_pt [537] + 0.00 0.00 296/388 c_schemebase_entry_pt [535] +[492] 0.0 0.00 0.00 388 find_or_add_symbol [492] + 0.00 0.00 388/388 find_symbol_by_name [493] + 0.00 0.00 345/345 add_symbol_by_name [495] +----------------------------------------------- + 0.00 0.00 388/388 find_or_add_symbol [492] +[493] 0.0 0.00 0.00 388 find_symbol_by_name [493] + 0.00 0.00 388/388 set_get [494] +----------------------------------------------- + 0.00 0.00 388/388 find_symbol_by_name [493] +[494] 0.0 0.00 0.00 388 set_get [494] + 0.00 0.00 388/864 hs_hash [489] +----------------------------------------------- + 0.00 0.00 345/345 find_or_add_symbol [492] +[495] 0.0 0.00 0.00 345 add_symbol_by_name [495] + 0.00 0.00 345/345 _strdup [1084] + 0.00 0.00 345/476 add_symbol [490] +----------------------------------------------- + 0.00 0.00 4/257 c_schemetime_entry_pt [538] + 0.00 0.00 5/257 c_schemewrite_entry_pt [539] + 0.00 0.00 7/257 c_entry_pt [532] + 0.00 0.00 7/257 c_schemecyclonecommon_entry_pt [536] + 0.00 0.00 23/257 c_scheme_char_entry_pt [534] + 0.00 0.00 38/257 c_schemeread_entry_pt [537] + 0.00 0.00 173/257 c_schemebase_entry_pt [535] +[496] 0.0 0.00 0.00 257 add_global [496] + 0.00 0.00 257/257 mcvar [498] + 0.00 0.00 257/257 malloc_make_pair [497] +----------------------------------------------- + 0.00 0.00 257/257 add_global [496] +[497] 0.0 0.00 0.00 257 malloc_make_pair [497] +----------------------------------------------- + 0.00 0.00 257/257 add_global [496] +[498] 0.0 0.00 0.00 257 mcvar [498] +----------------------------------------------- + 0.00 0.00 10/105 __lambda_249 [1139] + 0.00 0.00 10/105 __lambda_248 [1138] + 0.00 0.00 10/105 __lambda_247 [1137] + 0.00 0.00 10/105 __lambda_246 [1136] + 0.00 0.00 10/105 __lambda_245 [1135] + 0.00 0.00 10/105 __lambda_244 [1134] + 0.00 0.00 10/105 __lambda_243 [1133] + 0.00 0.00 10/105 __lambda_242 [1132] + 0.00 0.00 10/105 __lambda_241 [1131] + 0.00 0.00 15/105 __lambda_251 [1121] +[499] 0.0 0.00 0.00 105 Cyc_eq [499] +----------------------------------------------- + 0.00 0.00 1/85 __lambda_410 [1248] + 0.00 0.00 1/85 __lambda_394 [1235] + 0.00 0.00 1/85 __lambda_382 [1230] + 0.00 0.00 1/85 __lambda_176 [1192] + 0.00 0.00 1/85 __lambda_175 [463] + 0.00 0.00 1/85 __lambda_121 [1184] + 0.00 0.00 1/85 __lambda_120 [1183] + 0.00 0.00 1/85 __lambda_45 [382] + 0.00 0.00 1/85 __lambda_394 [343] + 0.00 0.00 12/85 __lambda_429 [298] + 0.00 0.00 16/85 __lambda_322 [288] + 0.00 0.00 16/85 __lambda_192 [1111] + 0.00 0.00 16/85 __lambda_168 [259] + 0.00 0.00 16/85 __lambda_106 [273] +[500] 0.0 0.00 0.00 85 Cyc_vector_length [500] +----------------------------------------------- + 1 __lambda_494 [1283] + 42 __lambda_282 [23] +[501] 0.0 0.00 0.00 43 Cyc_apply [501] + 43 apply [131] +----------------------------------------------- + 0.00 0.00 2/32 Cyc_write_va_list [526] + 0.00 0.00 2/32 Cyc_io_flush_output_port [522] + 0.00 0.00 3/32 Cyc_write_char [519] + 0.00 0.00 12/32 Cyc_display_va_list [512] + 0.00 0.00 13/32 Cyc_io_read_char [508] +[502] 0.0 0.00 0.00 32 Cyc_is_port [502] +----------------------------------------------- + 0.00 0.00 1/28 gc_initialize [542] + 0.00 0.00 2/28 gc_thread_data_init [416] + 0.00 0.00 25/28 vpbuffer_add [16] +[503] 0.0 0.00 0.00 28 vpbuffer_realloc [503] +----------------------------------------------- + 0.00 0.00 3/18 Cyc_string2number_ [518] + 0.00 0.00 15/18 Cyc_string_append [514] +[504] 0.0 0.00 0.00 18 Cyc_is_string [504] +----------------------------------------------- + 0.00 0.00 16/16 __lambda_388 [256] +[505] 0.0 0.00 0.00 16 Cyc_num_fast_eq_op [505] +----------------------------------------------- + 0.00 0.00 15/15 __lambda_251 [1121] +[506] 0.0 0.00 0.00 15 Cyc_is_eof_object [506] +----------------------------------------------- + 0.00 0.00 2/14 _Cyc_write [1157] + 0.00 0.00 12/14 Cyc_display_va_list [512] +[507] 0.0 0.00 0.00 14 Cyc_display [507] + 0.00 0.00 2/2 double2buffer [527] +----------------------------------------------- + 13 __lambda_44 [1125] +[508] 0.0 0.00 0.00 13 Cyc_io_read_char [508] + 0.00 0.00 13/32 Cyc_is_port [502] + 0.00 0.00 13/13 gc_mutator_thread_blocked [509] + 13 gc_mutator_thread_runnable [510] +----------------------------------------------- + 0.00 0.00 13/13 Cyc_io_read_char [508] +[509] 0.0 0.00 0.00 13 gc_mutator_thread_blocked [509] + 0.00 0.00 13/3136 ck_pr_cas_int [485] +----------------------------------------------- + 13 Cyc_io_read_char [508] +[510] 0.0 0.00 0.00 13 gc_mutator_thread_runnable [510] + 0.00 0.00 13/3136 ck_pr_cas_int [485] + 13 __lambda_251 [1121] +----------------------------------------------- + 0.00 0.00 12/12 __lambda_0 [1128] +[511] 0.0 0.00 0.00 12 Cyc_display_va [511] + 0.00 0.00 12/12 Cyc_display_va_list [512] +----------------------------------------------- + 0.00 0.00 12/12 Cyc_display_va [511] +[512] 0.0 0.00 0.00 12 Cyc_display_va_list [512] + 0.00 0.00 12/32 Cyc_is_port [502] + 0.00 0.00 12/14 Cyc_display [507] +----------------------------------------------- + 0.00 0.00 1/6 gc_thread_data_init [416] + 0.00 0.00 5/6 gc_thr_add_to_move_buffer [80] +[513] 0.0 0.00 0.00 6 gc_thr_grow_move_buffer [513] +----------------------------------------------- + 1 __lambda_538 [445] + 1 __lambda_479 [1274] + 1 __lambda_6 [446] + 1 __lambda_4 [1241] + 1 __lambda_1 [1175] +[514] 0.0 0.00 0.00 5 Cyc_string_append [514] + 0.00 0.00 15/18 Cyc_is_string [504] + 1 __lambda_502 [1292] + 1 __lambda_478 [1273] + 1 __lambda_0 [385] + 1 __lambda_3 [400] + 1 __lambda_5 [403] +----------------------------------------------- + 4 apply [131] +[515] 0.0 0.00 0.00 4 dispatch [515] + 4 do_dispatch [101] +----------------------------------------------- + 0.00 0.00 3/3 Cyc_string2number_ [518] +[516] 0.0 0.00 0.00 3 Cyc_check_obj [516] +----------------------------------------------- + 3 __lambda_330 [1147] +[517] 0.0 0.00 0.00 3 Cyc_string2number2_ [517] + 3 Cyc_string2number_ [518] +----------------------------------------------- + 3 Cyc_string2number2_ [517] +[518] 0.0 0.00 0.00 3 Cyc_string2number_ [518] + 0.00 0.00 3/3 Cyc_check_obj [516] + 0.00 0.00 3/18 Cyc_is_string [504] + 0.00 0.00 3/3 str2int [520] + 3 __lambda_41 [1151] +----------------------------------------------- + 0.00 0.00 3/3 __lambda_307 [1145] +[519] 0.0 0.00 0.00 3 Cyc_write_char [519] + 0.00 0.00 3/32 Cyc_is_port [502] +----------------------------------------------- + 0.00 0.00 3/3 Cyc_string2number_ [518] +[520] 0.0 0.00 0.00 3 str2int [520] +----------------------------------------------- + 0.00 0.00 1/2 __lambda_533 [1315] + 0.00 0.00 1/2 __lambda_513 [478] +[521] 0.0 0.00 0.00 2 Cyc_fast_div [521] +----------------------------------------------- + 0.00 0.00 2/2 __lambda_304 [374] +[522] 0.0 0.00 0.00 2 Cyc_io_flush_output_port [522] + 0.00 0.00 2/32 Cyc_is_port [502] +----------------------------------------------- + 0.00 0.00 1/2 __lambda_386 [153] + 0.00 0.00 1/2 __lambda_385 [154] +[523] 0.0 0.00 0.00 2 Cyc_num_fast_gt_op [523] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write_va_list [526] +[524] 0.0 0.00 0.00 2 Cyc_write [524] + 0.00 0.00 2/2 _Cyc_write [1157] +----------------------------------------------- + 0.00 0.00 2/2 __lambda_2 [1160] +[525] 0.0 0.00 0.00 2 Cyc_write_va [525] + 0.00 0.00 2/2 Cyc_write_va_list [526] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write_va [525] +[526] 0.0 0.00 0.00 2 Cyc_write_va_list [526] + 0.00 0.00 2/32 Cyc_is_port [502] + 0.00 0.00 2/2 Cyc_write [524] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_display [507] +[527] 0.0 0.00 0.00 2 double2buffer [527] +----------------------------------------------- + 0.00 0.00 1/1 main [7] +[528] 0.0 0.00 0.00 1 Cyc_heap_init [528] + 0.00 0.00 1/1 gc_start_collector [543] + 0.00 0.00 1/1 gc_init_heap [541] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1556 [1186] +[529] 0.0 0.00 0.00 1 Cyc_stderr [529] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1558 [1187] +[530] 0.0 0.00 0.00 1 Cyc_stdin [530] +----------------------------------------------- + 0.00 0.00 1/1 __lambda_1560 [1188] +[531] 0.0 0.00 0.00 1 Cyc_stdout [531] +----------------------------------------------- + 1 do_dispatch [101] +[532] 0.0 0.00 0.00 1 c_entry_pt [532] + 0.00 0.00 9/388 find_or_add_symbol [492] + 0.00 0.00 7/257 add_global [496] + 0.00 0.00 2/476 add_symbol [490] + 1 c_schemecyclonecommon_entry_pt [536] +----------------------------------------------- + 1 __lambda_399 [401] +[533] 0.0 0.00 0.00 1 c_entry_pt_first_lambda [533] + 1 __lambda_484 [442] +----------------------------------------------- + 1 __lambda_4 [402] +[534] 0.0 0.00 0.00 1 c_scheme_char_entry_pt [534] + 0.00 0.00 23/257 add_global [496] + 0.00 0.00 23/388 find_or_add_symbol [492] + 1 __lambda_42 [372] +----------------------------------------------- + 1 __lambda_0 [385] +[535] 0.0 0.00 0.00 1 c_schemebase_entry_pt [535] + 0.00 0.00 296/388 find_or_add_symbol [492] + 0.00 0.00 173/257 add_global [496] + 0.00 0.00 123/476 add_symbol [490] + 1 __lambda_1561 [370] +----------------------------------------------- + 1 c_entry_pt [532] +[536] 0.0 0.00 0.00 1 c_schemecyclonecommon_entry_pt [536] + 0.00 0.00 7/257 add_global [496] + 0.00 0.00 7/388 find_or_add_symbol [492] + 1 __lambda_6 [446] +----------------------------------------------- + 1 __lambda_42 [372] +[537] 0.0 0.00 0.00 1 c_schemeread_entry_pt [537] + 0.00 0.00 44/388 find_or_add_symbol [492] + 0.00 0.00 38/257 add_global [496] + 0.00 0.00 6/476 add_symbol [490] + 1 __lambda_400 [371] +----------------------------------------------- + 1 __lambda_1544 [386] +[538] 0.0 0.00 0.00 1 c_schemetime_entry_pt [538] + 0.00 0.00 4/257 add_global [496] + 0.00 0.00 4/388 find_or_add_symbol [492] + 1 __lambda_3 [438] +----------------------------------------------- + 1 __lambda_3 [438] +[539] 0.0 0.00 0.00 1 c_schemewrite_entry_pt [539] + 0.00 0.00 5/257 add_global [496] + 0.00 0.00 5/388 find_or_add_symbol [492] + 1 __lambda_5 [373] +----------------------------------------------- + 0.00 0.00 1/1 main [7] +[540] 0.0 0.00 0.00 1 gc_add_mutator [540] +----------------------------------------------- + 0.00 0.00 1/1 Cyc_heap_init [528] +[541] 0.0 0.00 0.00 1 gc_init_heap [541] + 0.00 0.00 4/1855 gc_heap_create [487] +----------------------------------------------- + 0.00 0.00 1/1 main [7] +[542] 0.0 0.00 0.00 1 gc_initialize [542] + 0.00 0.00 1/28 vpbuffer_realloc [503] +----------------------------------------------- + 0.00 0.00 1/1 Cyc_heap_init [528] +[543] 0.0 0.00 0.00 1 gc_start_collector [543] +----------------------------------------------- + 0.00 0.00 1/1 main [7] +[544] 0.0 0.00 0.00 1 set_env_variables [544] +----------------------------------------------- + 88 __lambda_264 [139] + 181 __lambda_266 [194] + 1092 __lambda_244 [231] +[1081] 0.0 0.00 0.00 1361 __lambda_246 [1081] + 680 __lambda_149 [189] + 680 __lambda_146 [167] + 1 __lambda_112 [378] +----------------------------------------------- + 434 __lambda_153 [1083] +[1082] 0.0 0.00 0.00 434 __lambda_152 [1082] + 434 __lambda_151 [178] +----------------------------------------------- + 434 __lambda_276 [70] +[1083] 0.0 0.00 0.00 434 __lambda_153 [1083] + 434 __lambda_152 [1082] +----------------------------------------------- + 0.00 0.00 345/345 add_symbol_by_name [495] +[1084] 0.0 0.00 0.00 345 _strdup [1084] +----------------------------------------------- + 269 __lambda_127 [201] +[1085] 0.0 0.00 0.00 269 __lambda_161 [1085] + 269 __lambda_143 [190] +----------------------------------------------- + 255 __lambda_295 [53] +[1086] 0.0 0.00 0.00 255 __lambda_200 [1086] + 255 __lambda_197 [208] +----------------------------------------------- + 240 __lambda_241 [1088] +[1087] 0.0 0.00 0.00 240 __lambda_240 [1087] + 240 __lambda_239 [185] +----------------------------------------------- + 240 __lambda_276 [70] +[1088] 0.0 0.00 0.00 240 __lambda_241 [1088] + 240 __lambda_240 [1087] +----------------------------------------------- + 225 __lambda_159 [1090] +[1089] 0.0 0.00 0.00 225 __lambda_158 [1089] + 225 __lambda_157 [187] +----------------------------------------------- + 225 __lambda_160 [200] +[1090] 0.0 0.00 0.00 225 __lambda_159 [1090] + 225 __lambda_158 [1089] +----------------------------------------------- + 178 __lambda_287 [143] +[1091] 0.0 0.00 0.00 178 __lambda_286 [1091] + 87 __lambda_247 [171] + 44 __lambda_196 [209] + 30 __lambda_223 [258] + 17 __lambda_256 [301] +----------------------------------------------- + 105 __lambda_278 [140] +[1092] 0.0 0.00 0.00 105 __lambda_181 [1092] + 105 __lambda_179 [218] +----------------------------------------------- + 88 __lambda_130 [1094] +[1093] 0.0 0.00 0.00 88 __lambda_129 [1093] + 88 __lambda_128 [202] +----------------------------------------------- + 88 __lambda_131 [1095] +[1094] 0.0 0.00 0.00 88 __lambda_130 [1094] + 88 __lambda_129 [1093] +----------------------------------------------- + 88 __lambda_278 [140] +[1095] 0.0 0.00 0.00 88 __lambda_131 [1095] + 88 __lambda_130 [1094] +----------------------------------------------- + 73 __lambda_205 [1097] +[1096] 0.0 0.00 0.00 73 __lambda_204 [1096] + 73 __lambda_203 [207] +----------------------------------------------- + 73 __lambda_206 [257] +[1097] 0.0 0.00 0.00 73 __lambda_205 [1097] + 73 __lambda_204 [1096] +----------------------------------------------- + 61 __lambda_219 [1099] +[1098] 0.0 0.00 0.00 61 __lambda_218 [1098] + 61 __lambda_217 [212] +----------------------------------------------- + 61 __lambda_224 [230] +[1099] 0.0 0.00 0.00 61 __lambda_219 [1099] + 61 __lambda_218 [1098] +----------------------------------------------- + 61 __lambda_227 [1101] +[1100] 0.0 0.00 0.00 61 __lambda_226 [1100] + 61 __lambda_225 [213] +----------------------------------------------- + 61 __lambda_179 [218] +[1101] 0.0 0.00 0.00 61 __lambda_227 [1101] + 61 __lambda_226 [1100] +----------------------------------------------- + 44 __lambda_209 [1103] +[1102] 0.0 0.00 0.00 44 __lambda_208 [1102] + 44 __lambda_207 [220] +----------------------------------------------- + 44 __lambda_210 [1104] +[1103] 0.0 0.00 0.00 44 __lambda_209 [1103] + 44 __lambda_208 [1102] +----------------------------------------------- + 44 __lambda_179 [218] +[1104] 0.0 0.00 0.00 44 __lambda_210 [1104] + 44 __lambda_209 [1103] +----------------------------------------------- + 15 __lambda_315 [299] + 15 __lambda_327 [26] +[1105] 0.0 0.00 0.00 30 __lambda_365 [1105] + 28 __lambda_283 [50] + 1 __lambda_308 [1195] + 1 __lambda_310 [1196] +----------------------------------------------- + 30 __lambda_283 [50] +[1106] 0.0 0.00 0.00 30 __lambda_366 [1106] + 15 __lambda_309 [308] + 15 __lambda_470 [1127] +----------------------------------------------- + 16 __lambda_140 [1108] +[1107] 0.0 0.00 0.00 16 __lambda_139 [1107] + 16 __lambda_138 [240] +----------------------------------------------- + 16 __lambda_141 [264] +[1108] 0.0 0.00 0.00 16 __lambda_140 [1108] + 16 __lambda_139 [1107] +----------------------------------------------- + 16 __lambda_191 [1110] +[1109] 0.0 0.00 0.00 16 __lambda_190 [1109] + 16 __lambda_189 [241] +----------------------------------------------- + 16 __lambda_192 [1111] +[1110] 0.0 0.00 0.00 16 __lambda_191 [1110] + 16 __lambda_190 [1109] +----------------------------------------------- + 16 __lambda_193 [265] +[1111] 0.0 0.00 0.00 16 __lambda_192 [1111] + 0.00 0.00 16/85 Cyc_vector_length [500] + 16 __lambda_191 [1110] +----------------------------------------------- + 16 __lambda_230 [1113] +[1112] 0.0 0.00 0.00 16 __lambda_229 [1112] + 16 __lambda_228 [243] +----------------------------------------------- + 16 __lambda_231 [1114] +[1113] 0.0 0.00 0.00 16 __lambda_230 [1113] + 16 __lambda_229 [1112] +----------------------------------------------- + 1 __lambda_172 [461] + 15 __lambda_166 [285] +[1114] 0.0 0.00 0.00 16 __lambda_231 [1114] + 16 __lambda_230 [1113] +----------------------------------------------- + 16 __lambda_260 [1116] +[1115] 0.0 0.00 0.00 16 __lambda_259 [1115] + 16 __lambda_258 [244] +----------------------------------------------- + 16 __lambda_261 [1117] +[1116] 0.0 0.00 0.00 16 __lambda_260 [1116] + 16 __lambda_259 [1115] +----------------------------------------------- + 16 __lambda_262 [266] +[1117] 0.0 0.00 0.00 16 __lambda_261 [1117] + 16 __lambda_260 [1116] +----------------------------------------------- + 16 __lambda_327 [1119] +[1118] 0.0 0.00 0.00 16 __lambda_326 [1118] + 16 __lambda_325 [245] +----------------------------------------------- + 1 __lambda_53 [475] + 15 __lambda_316 [270] +[1119] 0.0 0.00 0.00 16 __lambda_327 [1119] + 16 __lambda_326 [1118] +----------------------------------------------- + 15 __lambda_251 [1121] +[1120] 0.0 0.00 0.00 15 __lambda_250 [1120] + 10 __lambda_36 [117] + 5 __lambda_13 [283] +----------------------------------------------- + 2 __lambda_21 [1161] + 13 gc_mutator_thread_runnable [510] +[1121] 0.0 0.00 0.00 15 __lambda_251 [1121] + 0.00 0.00 15/15 Cyc_is_eof_object [506] + 0.00 0.00 15/105 Cyc_eq [499] + 15 __lambda_250 [1120] +----------------------------------------------- + 15 __lambda_19 [113] +[1122] 0.0 0.00 0.00 15 __lambda_252 [1122] + 15 __lambda_45 [1126] +----------------------------------------------- + 15 __lambda_319 [1124] +[1123] 0.0 0.00 0.00 15 __lambda_318 [1123] + 15 __lambda_317 [247] +----------------------------------------------- + 15 __lambda_320 [297] +[1124] 0.0 0.00 0.00 15 __lambda_319 [1124] + 15 __lambda_318 [1123] +----------------------------------------------- + 15 __lambda_12 [268] +[1125] 0.0 0.00 0.00 15 __lambda_44 [1125] + 13 Cyc_io_read_char [508] + 2 __lambda_23 [366] +----------------------------------------------- + 15 __lambda_252 [1122] +[1126] 0.0 0.00 0.00 15 __lambda_45 [1126] + 15 __lambda_12 [268] +----------------------------------------------- + 15 __lambda_366 [1106] +[1127] 0.0 0.00 0.00 15 __lambda_470 [1127] + 15 __lambda_327 [26] +----------------------------------------------- + 12 __lambda_721 [289] +[1128] 0.0 0.00 0.00 12 __lambda_0 [1128] + 0.00 0.00 12/12 Cyc_display_va [511] + 1 __lambda_497 [1286] + 1 __lambda_498 [1287] + 1 __lambda_499 [1288] + 1 __lambda_500 [1290] + 1 __lambda_501 [1291] + 1 __lambda_503 [1293] + 1 __lambda_505 [1295] + 1 __lambda_506 [1296] + 1 __lambda_508 [1298] + 1 __lambda_510 [1301] + 1 __lambda_530 [1312] + 1 __lambda_531 [1313] +----------------------------------------------- + 12 __lambda_434 [1130] +[1129] 0.0 0.00 0.00 12 __lambda_433 [1129] + 12 __lambda_432 [250] +----------------------------------------------- + 5 __lambda_366 [300] + 7 __lambda_397 [377] +[1130] 0.0 0.00 0.00 12 __lambda_434 [1130] + 12 __lambda_433 [1129] +----------------------------------------------- + 10 __lambda_242 [1132] +[1131] 0.0 0.00 0.00 10 __lambda_241 [1131] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_254 [282] +----------------------------------------------- + 10 __lambda_243 [1133] +[1132] 0.0 0.00 0.00 10 __lambda_242 [1132] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_241 [1131] +----------------------------------------------- + 10 __lambda_244 [1134] +[1133] 0.0 0.00 0.00 10 __lambda_243 [1133] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_242 [1132] +----------------------------------------------- + 10 __lambda_245 [1135] +[1134] 0.0 0.00 0.00 10 __lambda_244 [1134] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_243 [1133] +----------------------------------------------- + 10 __lambda_246 [1136] +[1135] 0.0 0.00 0.00 10 __lambda_245 [1135] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_244 [1134] +----------------------------------------------- + 10 __lambda_247 [1137] +[1136] 0.0 0.00 0.00 10 __lambda_246 [1136] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_245 [1135] +----------------------------------------------- + 10 __lambda_248 [1138] +[1137] 0.0 0.00 0.00 10 __lambda_247 [1137] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_246 [1136] +----------------------------------------------- + 10 __lambda_249 [1139] +[1138] 0.0 0.00 0.00 10 __lambda_248 [1138] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_247 [1137] +----------------------------------------------- + 10 __lambda_36 [117] +[1139] 0.0 0.00 0.00 10 __lambda_249 [1139] + 0.00 0.00 10/105 Cyc_eq [499] + 10 __lambda_248 [1138] +----------------------------------------------- + 5 __lambda_19 [113] +[1140] 0.0 0.00 0.00 5 __lambda_55 [1140] + 5 __lambda_43 [311] +----------------------------------------------- + 5 __lambda_17 [129] +[1141] 0.0 0.00 0.00 5 __lambda_56 [1141] + 5 __lambda_20 [252] +----------------------------------------------- + 4 __lambda_456 [127] +[1142] 0.0 0.00 0.00 4 __lambda_455 [1142] + 3 __lambda_439 [379] + 1 __lambda_448 [428] +----------------------------------------------- + 3 __lambda_11 [151] +[1143] 0.0 0.00 0.00 3 __lambda_10 [1143] + 3 __lambda_9 [449] +----------------------------------------------- + 3 __lambda_282 [23] +[1144] 0.0 0.00 0.00 3 __lambda_27 [1144] + 3 __lambda_337 [408] +----------------------------------------------- + 3 __lambda_721 [289] +[1145] 0.0 0.00 0.00 3 __lambda_307 [1145] + 0.00 0.00 3/3 Cyc_write_char [519] + 1 __lambda_496 [1285] + 1 __lambda_504 [1294] + 1 __lambda_529 [1311] +----------------------------------------------- + 3 __lambda_35 [130] +[1146] 0.0 0.00 0.00 3 __lambda_328 [1146] + 3 __lambda_336 [1148] +----------------------------------------------- + 3 Cyc_list2string [148] +[1147] 0.0 0.00 0.00 3 __lambda_330 [1147] + 3 Cyc_string2number2_ [517] +----------------------------------------------- + 3 __lambda_328 [1146] +[1148] 0.0 0.00 0.00 3 __lambda_336 [1148] + 3 Cyc_list2string [148] +----------------------------------------------- + 1 __lambda_5 [481] + 2 __lambda_9 [449] +[1149] 0.0 0.00 0.00 3 __lambda_388 [1149] + 3 __lambda_254 [282] +----------------------------------------------- + 3 __lambda_721 [289] +[1150] 0.0 0.00 0.00 3 __lambda_389 [1150] + 3 __lambda_11 [151] +----------------------------------------------- + 3 Cyc_string2number_ [518] +[1151] 0.0 0.00 0.00 3 __lambda_41 [1151] + 3 __lambda_24 [405] +----------------------------------------------- + 3 __lambda_15 [128] +[1152] 0.0 0.00 0.00 3 __lambda_42 [1152] + 3 __lambda_28 [406] +----------------------------------------------- + 3 __lambda_724 [1156] +[1153] 0.0 0.00 0.00 3 __lambda_718 [1153] + 3 __lambda_723 [1155] +----------------------------------------------- + 3 __lambda_723 [1155] +[1154] 0.0 0.00 0.00 3 __lambda_722 [1154] + 1 __lambda_1555 [396] + 1 __lambda_1557 [397] + 1 __lambda_1559 [398] +----------------------------------------------- + 3 __lambda_718 [1153] +[1155] 0.0 0.00 0.00 3 __lambda_723 [1155] + 3 __lambda_722 [1154] +----------------------------------------------- + 3 __lambda_719 [430] +[1156] 0.0 0.00 0.00 3 __lambda_724 [1156] + 3 __lambda_718 [1153] +----------------------------------------------- + 0.00 0.00 2/2 Cyc_write [524] +[1157] 0.0 0.00 0.00 2 _Cyc_write [1157] + 0.00 0.00 2/14 Cyc_display [507] +----------------------------------------------- + 1 __lambda_526 [1308] + 1 __lambda_514 [1303] +[1158] 0.0 0.00 0.00 2 __lambda_0 [1158] + 1 __lambda_513 [478] + 1 __lambda_525 [1307] +----------------------------------------------- + 1 __lambda_525 [1307] + 1 __lambda_520 [1304] +[1159] 0.0 0.00 0.00 2 __lambda_1 [1159] + 1 __lambda_514 [1303] + 1 __lambda_524 [1306] +----------------------------------------------- + 2 __lambda_721 [289] +[1160] 0.0 0.00 0.00 2 __lambda_2 [1160] + 0.00 0.00 2/2 Cyc_write_va [525] + 1 __lambda_507 [1297] + 1 __lambda_509 [1299] +----------------------------------------------- + 2 __lambda_15 [128] +[1161] 0.0 0.00 0.00 2 __lambda_21 [1161] + 2 __lambda_251 [1121] +----------------------------------------------- + 2 __lambda_23 [366] +[1162] 0.0 0.00 0.00 2 __lambda_22 [1162] + 2 __lambda_16 [302] +----------------------------------------------- + 2 __lambda_304 [1164] +[1163] 0.0 0.00 0.00 2 __lambda_303 [1163] + 2 __lambda_302 [292] +----------------------------------------------- + 2 __lambda_305 [1165] +[1164] 0.0 0.00 0.00 2 __lambda_304 [1164] + 2 __lambda_303 [1163] +----------------------------------------------- + 2 Cyc_make_vector [251] +[1165] 0.0 0.00 0.00 2 __lambda_305 [1165] + 2 __lambda_304 [1164] +----------------------------------------------- + 2 __lambda_369 [1167] +[1166] 0.0 0.00 0.00 2 __lambda_368 [1166] + 2 __lambda_367 [293] +----------------------------------------------- + 2 __lambda_370 [429] +[1167] 0.0 0.00 0.00 2 __lambda_369 [1167] + 2 __lambda_368 [1166] +----------------------------------------------- + 2 __lambda_387 [184] +[1168] 0.0 0.00 0.00 2 __lambda_386 [1168] + 2 __lambda_327 [26] +----------------------------------------------- + 2 __lambda_389 [367] +[1169] 0.0 0.00 0.00 2 __lambda_388 [1169] + 2 __lambda_327 [26] +----------------------------------------------- + 2 __lambda_418 [1171] +[1170] 0.0 0.00 0.00 2 __lambda_417 [1170] + 2 __lambda_416 [294] +----------------------------------------------- + 2 __lambda_419 [375] +[1171] 0.0 0.00 0.00 2 __lambda_418 [1171] + 2 __lambda_417 [1170] +----------------------------------------------- + 2 __lambda_443 [1173] +[1172] 0.0 0.00 0.00 2 __lambda_442 [1172] + 2 __lambda_441 [295] +----------------------------------------------- + 2 __lambda_444 [376] +[1173] 0.0 0.00 0.00 2 __lambda_443 [1173] + 2 __lambda_442 [1172] +----------------------------------------------- + 0.00 0.00 1/1 apply [131] +[1174] 0.0 0.00 0.00 1 __75halt [1174] +----------------------------------------------- + 1 __lambda_2 [399] +[1175] 0.0 0.00 0.00 1 __lambda_1 [1175] + 1 Cyc_string_append [514] +----------------------------------------------- + 1 __lambda_106 [273] +[1176] 0.0 0.00 0.00 1 __lambda_103 [1176] + 1 __lambda_0 [286] +----------------------------------------------- + 1 __lambda_109 [1178] +[1177] 0.0 0.00 0.00 1 __lambda_108 [1177] + 1 __lambda_107 [315] +----------------------------------------------- + 1 __lambda_110 [1179] +[1178] 0.0 0.00 0.00 1 __lambda_109 [1178] + 1 __lambda_108 [1177] +----------------------------------------------- + 1 __lambda_113 [361] +[1179] 0.0 0.00 0.00 1 __lambda_110 [1179] + 1 __lambda_109 [1178] +----------------------------------------------- + 1 __lambda_116 [1181] +[1180] 0.0 0.00 0.00 1 __lambda_115 [1180] + 1 __lambda_114 [316] +----------------------------------------------- + 1 __lambda_117 [1182] +[1181] 0.0 0.00 0.00 1 __lambda_116 [1181] + 1 __lambda_115 [1180] +----------------------------------------------- + 1 __lambda_118 [418] +[1182] 0.0 0.00 0.00 1 __lambda_117 [1182] + 1 __lambda_116 [1181] +----------------------------------------------- + 1 __lambda_121 [1184] +[1183] 0.0 0.00 0.00 1 __lambda_120 [1183] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_119 [459] +----------------------------------------------- + 1 __lambda_1 [310] +[1184] 0.0 0.00 0.00 1 __lambda_121 [1184] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_120 [1183] +----------------------------------------------- + 1 __lambda_1546 [387] +[1185] 0.0 0.00 0.00 1 __lambda_1545 [1185] + 1 __lambda_327 [26] +----------------------------------------------- + 1 __lambda_1557 [397] +[1186] 0.0 0.00 0.00 1 __lambda_1556 [1186] + 0.00 0.00 1/1 Cyc_stderr [529] + 1 __lambda_725 [411] +----------------------------------------------- + 1 __lambda_1559 [398] +[1187] 0.0 0.00 0.00 1 __lambda_1558 [1187] + 0.00 0.00 1/1 Cyc_stdin [530] + 1 __lambda_725 [411] +----------------------------------------------- + 1 __lambda_1561 [370] +[1188] 0.0 0.00 0.00 1 __lambda_1560 [1188] + 0.00 0.00 1/1 Cyc_stdout [531] + 1 __lambda_725 [411] +----------------------------------------------- + 1 __lambda_168 [259] +[1189] 0.0 0.00 0.00 1 __lambda_163 [1189] + 1 __lambda_1 [310] +----------------------------------------------- + 1 __lambda_171 [1191] +[1190] 0.0 0.00 0.00 1 __lambda_170 [1190] + 1 __lambda_169 [321] +----------------------------------------------- + 1 __lambda_187 [211] +[1191] 0.0 0.00 0.00 1 __lambda_171 [1191] + 1 __lambda_170 [1190] +----------------------------------------------- + 1 __lambda_2 [291] +[1192] 0.0 0.00 0.00 1 __lambda_176 [1192] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_175 [463] +----------------------------------------------- + 1 __lambda_527 [1309] +[1193] 0.0 0.00 0.00 1 __lambda_2 [1193] + 1 __lambda_526 [1308] +----------------------------------------------- + 1 __lambda_246 [455] +[1194] 0.0 0.00 0.00 1 __lambda_250 [1194] + 1 __lambda_248 [157] +----------------------------------------------- + 1 __lambda_365 [1105] +[1195] 0.0 0.00 0.00 1 __lambda_308 [1195] + 1 Cyc_list2vector [134] +----------------------------------------------- + 1 __lambda_365 [1105] +[1196] 0.0 0.00 0.00 1 __lambda_310 [1196] + 1 __lambda_367 [413] +----------------------------------------------- + 1 __lambda_3 [362] +[1197] 0.0 0.00 0.00 1 __lambda_311 [1197] + 1 __lambda_471 [1268] +----------------------------------------------- + 1 __lambda_330 [1199] +[1198] 0.0 0.00 0.00 1 __lambda_329 [1198] + 1 __lambda_328 [336] +----------------------------------------------- + 1 __lambda_331 [1200] +[1199] 0.0 0.00 0.00 1 __lambda_330 [1199] + 1 __lambda_329 [1198] +----------------------------------------------- + 1 __lambda_332 [1201] +[1200] 0.0 0.00 0.00 1 __lambda_331 [1200] + 1 __lambda_330 [1199] +----------------------------------------------- + 1 __lambda_333 [1202] +[1201] 0.0 0.00 0.00 1 __lambda_332 [1201] + 1 __lambda_331 [1200] +----------------------------------------------- + 1 __lambda_334 [1203] +[1202] 0.0 0.00 0.00 1 __lambda_333 [1202] + 1 __lambda_332 [1201] +----------------------------------------------- + 1 __lambda_335 [1204] +[1203] 0.0 0.00 0.00 1 __lambda_334 [1203] + 1 __lambda_333 [1202] +----------------------------------------------- + 1 __lambda_336 [1205] +[1204] 0.0 0.00 0.00 1 __lambda_335 [1204] + 1 __lambda_334 [1203] +----------------------------------------------- + 1 __lambda_337 [1206] +[1205] 0.0 0.00 0.00 1 __lambda_336 [1205] + 1 __lambda_335 [1204] +----------------------------------------------- + 1 __lambda_338 [1207] +[1206] 0.0 0.00 0.00 1 __lambda_337 [1206] + 1 __lambda_336 [1205] +----------------------------------------------- + 1 __lambda_339 [1208] +[1207] 0.0 0.00 0.00 1 __lambda_338 [1207] + 1 __lambda_337 [1206] +----------------------------------------------- + 1 __lambda_340 [1209] +[1208] 0.0 0.00 0.00 1 __lambda_339 [1208] + 1 __lambda_338 [1207] +----------------------------------------------- + 1 __lambda_341 [1210] +[1209] 0.0 0.00 0.00 1 __lambda_340 [1209] + 1 __lambda_339 [1208] +----------------------------------------------- + 1 __lambda_342 [1211] +[1210] 0.0 0.00 0.00 1 __lambda_341 [1210] + 1 __lambda_340 [1209] +----------------------------------------------- + 1 __lambda_343 [1212] +[1211] 0.0 0.00 0.00 1 __lambda_342 [1211] + 1 __lambda_341 [1210] +----------------------------------------------- + 1 __lambda_344 [1213] +[1212] 0.0 0.00 0.00 1 __lambda_343 [1212] + 1 __lambda_342 [1211] +----------------------------------------------- + 1 __lambda_345 [1214] +[1213] 0.0 0.00 0.00 1 __lambda_344 [1213] + 1 __lambda_343 [1212] +----------------------------------------------- + 1 __lambda_346 [1215] +[1214] 0.0 0.00 0.00 1 __lambda_345 [1214] + 1 __lambda_344 [1213] +----------------------------------------------- + 1 __lambda_347 [1216] +[1215] 0.0 0.00 0.00 1 __lambda_346 [1215] + 1 __lambda_345 [1214] +----------------------------------------------- + 1 __lambda_348 [1217] +[1216] 0.0 0.00 0.00 1 __lambda_347 [1216] + 1 __lambda_346 [1215] +----------------------------------------------- + 1 __lambda_349 [1218] +[1217] 0.0 0.00 0.00 1 __lambda_348 [1217] + 1 __lambda_347 [1216] +----------------------------------------------- + 1 __lambda_350 [1219] +[1218] 0.0 0.00 0.00 1 __lambda_349 [1218] + 1 __lambda_348 [1217] +----------------------------------------------- + 1 __lambda_351 [1220] +[1219] 0.0 0.00 0.00 1 __lambda_350 [1219] + 1 __lambda_349 [1218] +----------------------------------------------- + 1 __lambda_352 [1221] +[1220] 0.0 0.00 0.00 1 __lambda_351 [1220] + 1 __lambda_350 [1219] +----------------------------------------------- + 1 __lambda_353 [1222] +[1221] 0.0 0.00 0.00 1 __lambda_352 [1221] + 1 __lambda_351 [1220] +----------------------------------------------- + 1 __lambda_469 [1267] +[1222] 0.0 0.00 0.00 1 __lambda_353 [1222] + 1 __lambda_352 [1221] +----------------------------------------------- + 1 Cyc_list2vector [134] +[1223] 0.0 0.00 0.00 1 __lambda_354 [1223] + 1 __lambda_469 [1267] +----------------------------------------------- + 1 __lambda_377 [421] +[1224] 0.0 0.00 0.00 1 __lambda_355 [1224] + 1 __lambda_384 [409] +----------------------------------------------- + 1 __lambda_376 [1226] +[1225] 0.0 0.00 0.00 1 __lambda_375 [1225] + 1 __lambda_374 [337] +----------------------------------------------- + 1 __lambda_377 [421] +[1226] 0.0 0.00 0.00 1 __lambda_376 [1226] + 1 __lambda_375 [1225] +----------------------------------------------- + 1 __lambda_380 [1228] +[1227] 0.0 0.00 0.00 1 __lambda_379 [1227] + 1 __lambda_378 [338] +----------------------------------------------- + 1 __lambda_381 [1229] +[1228] 0.0 0.00 0.00 1 __lambda_380 [1228] + 1 __lambda_379 [1227] +----------------------------------------------- + 1 __lambda_382 [1230] +[1229] 0.0 0.00 0.00 1 __lambda_381 [1229] + 1 __lambda_380 [1228] +----------------------------------------------- + 1 __lambda_390 [180] +[1230] 0.0 0.00 0.00 1 __lambda_382 [1230] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_381 [1229] +----------------------------------------------- + 1 __lambda_392 [342] +[1231] 0.0 0.00 0.00 1 __lambda_391 [1231] + 1 __lambda_386 [153] +----------------------------------------------- + 1 __lambda_393 [1233] +[1232] 0.0 0.00 0.00 1 __lambda_392 [1232] + 1 __lambda_391 [341] +----------------------------------------------- + 1 __lambda_394 [1235] +[1233] 0.0 0.00 0.00 1 __lambda_393 [1233] + 1 __lambda_392 [1232] +----------------------------------------------- + 1 __lambda_394 [343] +[1234] 0.0 0.00 0.00 1 __lambda_393 [1234] + 1 __lambda_385 [154] +----------------------------------------------- + 1 __lambda_398 [344] +[1235] 0.0 0.00 0.00 1 __lambda_394 [1235] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_393 [1233] +----------------------------------------------- + 1 __lambda_396 [1237] +[1236] 0.0 0.00 0.00 1 __lambda_395 [1236] + 1 __lambda_394 [343] +----------------------------------------------- + 1 __lambda_397 [1238] +[1237] 0.0 0.00 0.00 1 __lambda_396 [1237] + 1 __lambda_395 [1236] +----------------------------------------------- + 1 __lambda_398 [1239] +[1238] 0.0 0.00 0.00 1 __lambda_397 [1238] + 1 __lambda_396 [1237] +----------------------------------------------- + 1 __lambda_399 [439] +[1239] 0.0 0.00 0.00 1 __lambda_398 [1239] + 1 __lambda_397 [1238] +----------------------------------------------- + 1 __lambda_400 [1242] +[1240] 0.0 0.00 0.00 1 __lambda_399 [1240] + 1 __lambda_398 [344] +----------------------------------------------- + 1 __lambda_5 [403] +[1241] 0.0 0.00 0.00 1 __lambda_4 [1241] + 1 Cyc_string_append [514] +----------------------------------------------- + 1 __lambda_356 [464] +[1242] 0.0 0.00 0.00 1 __lambda_400 [1242] + 1 __lambda_399 [1240] +----------------------------------------------- + 1 __lambda_403 [1244] +[1243] 0.0 0.00 0.00 1 __lambda_402 [1243] + 1 __lambda_401 [345] +----------------------------------------------- + 1 Cyc_make_vector [251] +[1244] 0.0 0.00 0.00 1 __lambda_403 [1244] + 1 __lambda_402 [1243] +----------------------------------------------- + 1 Cyc_make_vector [251] +[1245] 0.0 0.00 0.00 1 __lambda_406 [1245] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 Cyc_make_vector [251] +[1246] 0.0 0.00 0.00 1 __lambda_407 [1246] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 __lambda_423 [422] +[1247] 0.0 0.00 0.00 1 __lambda_408 [1247] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 Cyc_list2vector [134] +[1248] 0.0 0.00 0.00 1 __lambda_410 [1248] + 0.00 0.00 1/85 Cyc_vector_length [500] + 1 __lambda_409 [467] +----------------------------------------------- + 1 __lambda_422 [1250] +[1249] 0.0 0.00 0.00 1 __lambda_421 [1249] + 1 __lambda_420 [347] +----------------------------------------------- + 1 __lambda_423 [422] +[1250] 0.0 0.00 0.00 1 __lambda_422 [1250] + 1 __lambda_421 [1249] +----------------------------------------------- + 1 __lambda_426 [1252] +[1251] 0.0 0.00 0.00 1 __lambda_425 [1251] + 1 __lambda_424 [348] +----------------------------------------------- + 1 __lambda_427 [1253] +[1252] 0.0 0.00 0.00 1 __lambda_426 [1252] + 1 __lambda_425 [1251] +----------------------------------------------- + 1 __lambda_409 [467] +[1253] 0.0 0.00 0.00 1 __lambda_427 [1253] + 1 __lambda_426 [1252] +----------------------------------------------- + 1 __lambda_85 [42] +[1254] 0.0 0.00 0.00 1 __lambda_44 [1254] + 1 __lambda_326 [31] +----------------------------------------------- + 1 __lambda_447 [1256] +[1255] 0.0 0.00 0.00 1 __lambda_446 [1255] + 1 __lambda_445 [351] +----------------------------------------------- + 1 __lambda_448 [428] +[1256] 0.0 0.00 0.00 1 __lambda_447 [1256] + 1 __lambda_446 [1255] +----------------------------------------------- + 1 __lambda_282 [23] +[1257] 0.0 0.00 0.00 1 __lambda_449 [1257] + 1 Cyc_list2vector [134] +----------------------------------------------- + 1 __lambda_453 [1259] +[1258] 0.0 0.00 0.00 1 __lambda_452 [1258] + 1 __lambda_451 [352] +----------------------------------------------- + 1 __lambda_454 [1260] +[1259] 0.0 0.00 0.00 1 __lambda_453 [1259] + 1 __lambda_452 [1258] +----------------------------------------------- + 1 __lambda_457 [353] +[1260] 0.0 0.00 0.00 1 __lambda_454 [1260] + 1 __lambda_453 [1259] +----------------------------------------------- + 1 __lambda_459 [1262] +[1261] 0.0 0.00 0.00 1 __lambda_458 [1261] + 1 __lambda_457 [353] +----------------------------------------------- + 1 __lambda_411 [468] +[1262] 0.0 0.00 0.00 1 __lambda_459 [1262] + 1 __lambda_458 [1261] +----------------------------------------------- + 1 __lambda_462 [1264] +[1263] 0.0 0.00 0.00 1 __lambda_461 [1263] + 1 __lambda_460 [354] +----------------------------------------------- + 1 __lambda_463 [1265] +[1264] 0.0 0.00 0.00 1 __lambda_462 [1264] + 1 __lambda_461 [1263] +----------------------------------------------- + 1 __lambda_464 [440] +[1265] 0.0 0.00 0.00 1 __lambda_463 [1265] + 1 __lambda_462 [1264] +----------------------------------------------- + 1 __lambda_468 [156] +[1266] 0.0 0.00 0.00 1 __lambda_467 [1266] + 1 __lambda_465 [275] +----------------------------------------------- + 1 __lambda_354 [1223] +[1267] 0.0 0.00 0.00 1 __lambda_469 [1267] + 1 __lambda_353 [1222] +----------------------------------------------- + 1 __lambda_311 [1197] +[1268] 0.0 0.00 0.00 1 __lambda_471 [1268] + 1 __lambda_367 [413] +----------------------------------------------- + 1 __lambda_246 [455] +[1269] 0.0 0.00 0.00 1 __lambda_473 [1269] + 1 __lambda_472 [441] +----------------------------------------------- + 1 __lambda_282 [23] +[1270] 0.0 0.00 0.00 1 __lambda_474 [1270] + 1 __lambda_491 [443] +----------------------------------------------- + 1 Cyc_make_vector [251] +[1271] 0.0 0.00 0.00 1 __lambda_475 [1271] + 1 __lambda_399 [439] +----------------------------------------------- + 1 __lambda_521 [427] +[1272] 0.0 0.00 0.00 1 __lambda_476 [1272] + 1 Cyc_make_vector [251] +----------------------------------------------- + 1 Cyc_string_append [514] +[1273] 0.0 0.00 0.00 1 __lambda_478 [1273] + 1 __lambda_537 [444] +----------------------------------------------- + 1 Cyc_number2string2 [456] +[1274] 0.0 0.00 0.00 1 __lambda_479 [1274] + 1 Cyc_string_append [514] +----------------------------------------------- + 1 Cyc_number2string2 [456] +[1275] 0.0 0.00 0.00 1 __lambda_480 [1275] + 1 Cyc_number2string2 [456] +----------------------------------------------- + 1 __lambda_40 [424] +[1276] 0.0 0.00 0.00 1 __lambda_481 [1276] + 1 Cyc_number2string2 [456] +----------------------------------------------- + 1 __lambda_40 [424] +[1277] 0.0 0.00 0.00 1 __lambda_482 [1277] + 1 __lambda_390 [410] +----------------------------------------------- + 1 __lambda_40 [424] +[1278] 0.0 0.00 0.00 1 __lambda_483 [1278] + 1 __lambda_390 [410] +----------------------------------------------- + 1 __lambda_485 [452] +[1279] 0.0 0.00 0.00 1 __lambda_486 [1279] + 1 __lambda_247 [423] +----------------------------------------------- + 1 Cyc_list2vector [134] +[1280] 0.0 0.00 0.00 1 __lambda_487 [1280] + 1 __lambda_485 [452] +----------------------------------------------- + 1 __lambda_251 [437] +[1281] 0.0 0.00 0.00 1 __lambda_489 [1281] + 1 __lambda_384 [409] +----------------------------------------------- + 1 __lambda_50 [1289] +[1282] 0.0 0.00 0.00 1 __lambda_49 [1282] + 1 __lambda_48 [355] +----------------------------------------------- + 1 __lambda_304 [374] +[1283] 0.0 0.00 0.00 1 __lambda_494 [1283] + 1 Cyc_apply [501] +----------------------------------------------- + 1 __lambda_721 [289] +[1284] 0.0 0.00 0.00 1 __lambda_495 [1284] + 1 __lambda_304 [374] +----------------------------------------------- + 1 __lambda_307 [1145] +[1285] 0.0 0.00 0.00 1 __lambda_496 [1285] + 1 __lambda_721 [289] +----------------------------------------------- + 1 __lambda_0 [1128] +[1286] 0.0 0.00 0.00 1 __lambda_497 [1286] + 1 __lambda_309 [407] +----------------------------------------------- + 1 __lambda_0 [1128] +[1287] 0.0 0.00 0.00 1 __lambda_498 [1287] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_0 [1128] +[1288] 0.0 0.00 0.00 1 __lambda_499 [1288] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_51 [1300] +[1289] 0.0 0.00 0.00 1 __lambda_50 [1289] + 1 __lambda_49 [1282] +----------------------------------------------- + 1 __lambda_0 [1128] +[1290] 0.0 0.00 0.00 1 __lambda_500 [1290] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_0 [1128] +[1291] 0.0 0.00 0.00 1 __lambda_501 [1291] + 1 __lambda_1 [280] +----------------------------------------------- + 1 Cyc_string_append [514] +[1292] 0.0 0.00 0.00 1 __lambda_502 [1292] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_0 [1128] +[1293] 0.0 0.00 0.00 1 __lambda_503 [1293] + 1 __lambda_538 [445] +----------------------------------------------- + 1 __lambda_307 [1145] +[1294] 0.0 0.00 0.00 1 __lambda_504 [1294] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_0 [1128] +[1295] 0.0 0.00 0.00 1 __lambda_505 [1295] + 1 __lambda_309 [407] +----------------------------------------------- + 1 __lambda_0 [1128] +[1296] 0.0 0.00 0.00 1 __lambda_506 [1296] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_2 [1160] +[1297] 0.0 0.00 0.00 1 __lambda_507 [1297] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_0 [1128] +[1298] 0.0 0.00 0.00 1 __lambda_508 [1298] + 1 __lambda_3 [414] +----------------------------------------------- + 1 __lambda_2 [1160] +[1299] 0.0 0.00 0.00 1 __lambda_509 [1299] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_52 [420] +[1300] 0.0 0.00 0.00 1 __lambda_51 [1300] + 1 __lambda_50 [1289] +----------------------------------------------- + 1 __lambda_0 [1128] +[1301] 0.0 0.00 0.00 1 __lambda_510 [1301] + 1 __lambda_3 [414] +----------------------------------------------- + 1 __lambda_533 [1315] +[1302] 0.0 0.00 0.00 1 __lambda_511 [1302] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_1 [1159] +[1303] 0.0 0.00 0.00 1 __lambda_514 [1303] + 1 __lambda_0 [1158] +----------------------------------------------- + 1 __lambda_477 [158] +[1304] 0.0 0.00 0.00 1 __lambda_520 [1304] + 1 __lambda_1 [1159] +----------------------------------------------- + 1 __lambda_524 [1306] +[1305] 0.0 0.00 0.00 1 __lambda_523 [1305] + 1 __lambda_522 [356] +----------------------------------------------- + 1 __lambda_1 [1159] +[1306] 0.0 0.00 0.00 1 __lambda_524 [1306] + 1 __lambda_523 [1305] +----------------------------------------------- + 1 __lambda_0 [1158] +[1307] 0.0 0.00 0.00 1 __lambda_525 [1307] + 1 __lambda_1 [1159] +----------------------------------------------- + 1 __lambda_2 [1193] +[1308] 0.0 0.00 0.00 1 __lambda_526 [1308] + 1 __lambda_0 [1158] +----------------------------------------------- + 1 __lambda_304 [374] +[1309] 0.0 0.00 0.00 1 __lambda_527 [1309] + 1 __lambda_2 [1193] +----------------------------------------------- + 1 __lambda_721 [289] +[1310] 0.0 0.00 0.00 1 __lambda_528 [1310] + 1 __lambda_304 [374] +----------------------------------------------- + 1 __lambda_307 [1145] +[1311] 0.0 0.00 0.00 1 __lambda_529 [1311] + 1 __lambda_721 [289] +----------------------------------------------- + 1 __lambda_0 [1128] +[1312] 0.0 0.00 0.00 1 __lambda_530 [1312] + 1 __lambda_309 [407] +----------------------------------------------- + 1 __lambda_0 [1128] +[1313] 0.0 0.00 0.00 1 __lambda_531 [1313] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_535 [357] +[1314] 0.0 0.00 0.00 1 __lambda_532 [1314] + 1 __lambda_1 [280] +----------------------------------------------- + 1 __lambda_765 [479] +[1315] 0.0 0.00 0.00 1 __lambda_533 [1315] + 0.00 0.00 1/2 Cyc_fast_div [521] + 1 __lambda_511 [1302] +----------------------------------------------- + 1 __lambda_537 [444] +[1316] 0.0 0.00 0.00 1 __lambda_536 [1316] + 1 __lambda_535 [357] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + + +Index by function name + + [501] Cyc_apply [175] __lambda_249 (earley.c) [1130] __lambda_434 (earley.c) + [67] Cyc_car [454] __lambda_249 (base.c) [350] __lambda_435 (earley.c) + [59] Cyc_cdr [1139] __lambda_249 (read.c) [472] __lambda_436 (earley.c) + [516] Cyc_check_obj [191] __lambda_250 (earley.c) [473] __lambda_437 (earley.c) + [507] Cyc_display [1194] __lambda_250 (base.c) [436] __lambda_438 (earley.c) + [511] Cyc_display_va [1120] __lambda_250 (read.c) [379] __lambda_439 (earley.c) + [512] Cyc_display_va_list [161] __lambda_251 (earley.c) [1254] __lambda_44 (earley.c) + [499] Cyc_eq [437] __lambda_251 (base.c) [1125] __lambda_44 (read.c) + [521] Cyc_fast_div [1121] __lambda_251 (read.c) [307] __lambda_440 (earley.c) + [119] Cyc_fast_mul [325] __lambda_252 (earley.c) [295] __lambda_441 (earley.c) + [98] Cyc_fast_sub [1122] __lambda_252 (read.c) [1172] __lambda_442 (earley.c) + [90] Cyc_fast_sum [306] __lambda_253 (earley.c) [1173] __lambda_443 (earley.c) + [107] Cyc_get_global_variables [312] __lambda_253 (read.c) [376] __lambda_444 (earley.c) + [248] Cyc_global_set [277] __lambda_254 (earley.c) [351] __lambda_445 (earley.c) + [528] Cyc_heap_init (runtime-main.h) [282] __lambda_254 (read.c) [1255] __lambda_446 (earley.c) + [522] Cyc_io_flush_output_port [278] __lambda_255 (earley.c) [1256] __lambda_447 (earley.c) + [508] Cyc_io_read_char [301] __lambda_256 (earley.c) [428] __lambda_448 (earley.c) + [506] Cyc_is_eof_object [269] __lambda_257 (earley.c) [1257] __lambda_449 (earley.c) + [84] Cyc_is_null [244] __lambda_258 (earley.c) [382] __lambda_45 (earley.c) + [89] Cyc_is_number [1115] __lambda_259 (earley.c) [1126] __lambda_45 (read.c) + [48] Cyc_is_pair [1116] __lambda_260 (earley.c) [415] __lambda_450 (earley.c) + [502] Cyc_is_port [1117] __lambda_261 (earley.c) [352] __lambda_451 (earley.c) + [504] Cyc_is_string [266] __lambda_262 (earley.c) [1258] __lambda_452 (earley.c) + [78] Cyc_is_vector [326] __lambda_263 (earley.c) [1259] __lambda_453 (earley.c) + [108] Cyc_length [139] __lambda_264 (earley.c) [1260] __lambda_454 (earley.c) + [97] Cyc_length_as_object [135] __lambda_265 (earley.c) [1142] __lambda_455 (earley.c) + [148] Cyc_list2string [194] __lambda_266 (earley.c) [127] __lambda_456 (earley.c) + [134] Cyc_list2vector [126] __lambda_267 (earley.c) [353] __lambda_457 (earley.c) + [251] Cyc_make_vector [124] __lambda_268 (earley.c) [1261] __lambda_458 (earley.c) + [505] Cyc_num_fast_eq_op [125] __lambda_269 (earley.c) [1262] __lambda_459 (earley.c) + [523] Cyc_num_fast_gt_op [1144] __lambda_27 (read.c) [384] __lambda_46 (earley.c) + [79] Cyc_num_fast_gte_op [186] __lambda_270 (earley.c) [354] __lambda_460 (earley.c) + [99] Cyc_num_fast_lt_op [327] __lambda_271 (earley.c) [1263] __lambda_461 (earley.c) + [106] Cyc_num_lte_op [63] __lambda_272 (earley.c) [1264] __lambda_462 (earley.c) + [456] Cyc_number2string2 [328] __lambda_273 (earley.c) [1265] __lambda_463 (earley.c) + [109] Cyc_set_car [24] __lambda_274 (earley.c) [440] __lambda_464 (earley.c) + [25] Cyc_set_cell [329] __lambda_275 (earley.c) [275] __lambda_465 (earley.c) + [46] Cyc_st_add [70] __lambda_276 (earley.c) [155] __lambda_466 (earley.c) + [8] Cyc_start_trampoline [132] __lambda_277 (earley.c) [1266] __lambda_467 (earley.c) + [529] Cyc_stderr [140] __lambda_278 (earley.c) [156] __lambda_468 (earley.c) + [530] Cyc_stdin [136] __lambda_279 (earley.c) [1267] __lambda_469 (earley.c) + [531] Cyc_stdout [406] __lambda_28 (read.c) [303] __lambda_47 (earley.c) + [517] Cyc_string2number2_ [141] __lambda_280 (earley.c) [1127] __lambda_470 (earley.c) + [518] Cyc_string2number_ [204] __lambda_281 (earley.c) [1268] __lambda_471 (earley.c) + [514] Cyc_string_append [85] __lambda_281 (base.c) [441] __lambda_472 (earley.c) + [500] Cyc_vector_length [138] __lambda_282 (earley.c) [1269] __lambda_473 (earley.c) + [29] Cyc_vector_ref [23] __lambda_282 (base.c) [1270] __lambda_474 (earley.c) + [103] Cyc_vector_set [205] __lambda_283 (earley.c) [1271] __lambda_475 (earley.c) + [524] Cyc_write [50] __lambda_283 (base.c) [1272] __lambda_476 (earley.c) + [519] Cyc_write_char [206] __lambda_284 (earley.c) [158] __lambda_477 (earley.c) + [525] Cyc_write_va [20] __lambda_284 (base.c) [1273] __lambda_478 (earley.c) + [526] Cyc_write_va_list [330] __lambda_285 (earley.c) [1274] __lambda_479 (earley.c) + [11] GC [102] __lambda_285 (base.c) [355] __lambda_48 (earley.c) + [488] MurmurHash64A (ck_ht_hash.h) [1091] __lambda_286 (earley.c) [1275] __lambda_480 (earley.c) + [1157] _Cyc_write (runtime.c) [143] __lambda_287 (earley.c) [1276] __lambda_481 (earley.c) + [1174] __75halt [144] __lambda_288 (earley.c) [1277] __lambda_482 (earley.c) + [116] __halt [145] __lambda_289 (earley.c) [1278] __lambda_483 (earley.c) + [286] __lambda_0 (earley.c) [146] __lambda_290 (earley.c) [442] __lambda_484 (earley.c) + [385] __lambda_0 (common.c) [147] __lambda_291 (earley.c) [452] __lambda_485 (earley.c) + [1158] __lambda_0 (time.c) [246] __lambda_292 (earley.c) [1279] __lambda_486 (earley.c) + [1128] __lambda_0 (write.c) [193] __lambda_293 (earley.c) [1280] __lambda_487 (earley.c) + [310] __lambda_1 (earley.c) [331] __lambda_294 (earley.c) [1281] __lambda_489 (earley.c) + [1175] __lambda_1 (common.c) [53] __lambda_295 (earley.c) [1282] __lambda_49 (earley.c) + [1159] __lambda_1 (time.c) [332] __lambda_296 (earley.c) [313] __lambda_490 (earley.c) + [280] __lambda_1 (write.c) [433] __lambda_297 (earley.c) [443] __lambda_491 (earley.c) + [1143] __lambda_10 (read.c) [271] __lambda_298 (earley.c) [474] __lambda_492 (earley.c) + [314] __lambda_102 (earley.c) [159] __lambda_299 (earley.c) [447] __lambda_493 (earley.c) + [1176] __lambda_103 (earley.c) [362] __lambda_3 (earley.c) [1283] __lambda_494 (earley.c) + [457] __lambda_104 (earley.c) [400] __lambda_3 (common.c) [1284] __lambda_495 (earley.c) + [287] __lambda_105 (earley.c) [438] __lambda_3 (time.c) [1285] __lambda_496 (earley.c) + [273] __lambda_106 (earley.c) [414] __lambda_3 (write.c) [1286] __lambda_497 (earley.c) + [315] __lambda_107 (earley.c) [160] __lambda_300 (earley.c) [1287] __lambda_498 (earley.c) + [1177] __lambda_108 (earley.c) [262] __lambda_301 (earley.c) [1288] __lambda_499 (earley.c) + [1178] __lambda_109 (earley.c) [292] __lambda_302 (earley.c) [403] __lambda_5 (common.c) + [151] __lambda_11 (read.c) [1163] __lambda_303 (earley.c) [373] __lambda_5 (write.c) + [1179] __lambda_110 (earley.c) [1164] __lambda_304 (earley.c) [481] __lambda_5 (read.c) + [458] __lambda_111 (earley.c) [374] __lambda_304 (base.c) [1289] __lambda_50 (earley.c) + [378] __lambda_112 (earley.c) [1165] __lambda_305 (earley.c) [1290] __lambda_500 (earley.c) + [361] __lambda_113 (earley.c) [448] __lambda_306 (earley.c) [1291] __lambda_501 (earley.c) + [316] __lambda_114 (earley.c) [333] __lambda_307 (earley.c) [1292] __lambda_502 (earley.c) + [1180] __lambda_115 (earley.c) [1145] __lambda_307 (base.c) [1293] __lambda_503 (earley.c) + [1181] __lambda_116 (earley.c) [1195] __lambda_308 (earley.c) [1294] __lambda_504 (earley.c) + [1182] __lambda_117 (earley.c) [368] __lambda_308 (base.c) [1295] __lambda_505 (earley.c) + [418] __lambda_118 (earley.c) [308] __lambda_309 (earley.c) [1296] __lambda_506 (earley.c) + [459] __lambda_119 (earley.c) [407] __lambda_309 (base.c) [1297] __lambda_507 (earley.c) + [268] __lambda_12 (read.c) [1196] __lambda_310 (earley.c) [1298] __lambda_508 (earley.c) + [1183] __lambda_120 (earley.c) [1197] __lambda_311 (earley.c) [1299] __lambda_509 (earley.c) + [1184] __lambda_121 (earley.c) [334] __lambda_312 (earley.c) [1300] __lambda_51 (earley.c) + [317] __lambda_122 (earley.c) [309] __lambda_313 (earley.c) [1301] __lambda_510 (earley.c) + [304] __lambda_123 (earley.c) [279] __lambda_314 (earley.c) [1302] __lambda_511 (earley.c) + [260] __lambda_124 (earley.c) [299] __lambda_315 (earley.c) [451] __lambda_512 (earley.c) + [232] __lambda_125 (earley.c) [270] __lambda_316 (earley.c) [478] __lambda_513 (earley.c) + [169] __lambda_126 (earley.c) [247] __lambda_317 (earley.c) [1303] __lambda_514 (earley.c) + [201] __lambda_127 (earley.c) [1123] __lambda_318 (earley.c) [420] __lambda_52 (earley.c) + [202] __lambda_128 (earley.c) [1124] __lambda_319 (earley.c) [1304] __lambda_520 (earley.c) + [1093] __lambda_129 (earley.c) [297] __lambda_320 (earley.c) [427] __lambda_521 (earley.c) + [283] __lambda_13 (read.c) [61] __lambda_320 (base.c) [356] __lambda_522 (earley.c) + [1094] __lambda_130 (earley.c) [335] __lambda_321 (earley.c) [1305] __lambda_523 (earley.c) + [1095] __lambda_131 (earley.c) [34] __lambda_321 (base.c) [1306] __lambda_524 (earley.c) + [261] __lambda_132 (earley.c) [288] __lambda_322 (earley.c) [1307] __lambda_525 (earley.c) + [150] __lambda_133 (earley.c) [75] __lambda_322 (base.c) [1308] __lambda_526 (earley.c) + [225] __lambda_134 (earley.c) [123] __lambda_323 (earley.c) [1309] __lambda_527 (earley.c) + [226] __lambda_135 (earley.c) [88] __lambda_323 (base.c) [1310] __lambda_528 (earley.c) + [214] __lambda_136 (earley.c) [255] __lambda_324 (earley.c) [1311] __lambda_529 (earley.c) + [223] __lambda_137 (earley.c) [35] __lambda_324 (base.c) [475] __lambda_53 (earley.c) + [240] __lambda_138 (earley.c) [245] __lambda_325 (earley.c) [1312] __lambda_530 (earley.c) + [1107] __lambda_139 (earley.c) [38] __lambda_325 (base.c) [1313] __lambda_531 (earley.c) + [253] __lambda_14 (read.c) [1118] __lambda_326 (earley.c) [1314] __lambda_532 (earley.c) + [1108] __lambda_140 (earley.c) [31] __lambda_326 (base.c) [1315] __lambda_533 (earley.c) + [264] __lambda_141 (earley.c) [1119] __lambda_327 (earley.c) [120] __lambda_534 (earley.c) + [318] __lambda_142 (earley.c) [26] __lambda_327 (base.c) [357] __lambda_535 (earley.c) + [190] __lambda_143 (earley.c) [336] __lambda_328 (earley.c) [1316] __lambda_536 (earley.c) + [199] __lambda_144 (earley.c) [1146] __lambda_328 (read.c) [444] __lambda_537 (earley.c) + [168] __lambda_145 (earley.c) [1198] __lambda_329 (earley.c) [445] __lambda_538 (earley.c) + [167] __lambda_146 (earley.c) [364] __lambda_329 (read.c) [358] __lambda_54 (earley.c) + [164] __lambda_147 (earley.c) [1199] __lambda_330 (earley.c) [94] __lambda_55 (earley.c) + [165] __lambda_148 (earley.c) [1147] __lambda_330 (read.c) [1140] __lambda_55 (read.c) + [189] __lambda_149 (earley.c) [1200] __lambda_331 (earley.c) [92] __lambda_56 (earley.c) + [319] __lambda_15 (earley.c) [1201] __lambda_332 (earley.c) [1141] __lambda_56 (read.c) + [128] __lambda_15 (read.c) [1202] __lambda_333 (earley.c) [87] __lambda_57 (earley.c) + [176] __lambda_150 (earley.c) [1203] __lambda_334 (earley.c) [417] __lambda_57 (read.c) + [178] __lambda_151 (earley.c) [1204] __lambda_335 (earley.c) [72] __lambda_58 (earley.c) + [1082] __lambda_152 (earley.c) [1205] __lambda_336 (earley.c) [27] __lambda_59 (earley.c) + [1083] __lambda_153 (earley.c) [1148] __lambda_336 (read.c) [446] __lambda_6 (common.c) + [203] __lambda_154 (earley.c) [1206] __lambda_337 (earley.c) [404] __lambda_6 (read.c) + [386] __lambda_1544 (base.c) [408] __lambda_337 (read.c) [86] __lambda_60 (earley.c) + [1185] __lambda_1545 (base.c) [1207] __lambda_338 (earley.c) [64] __lambda_61 (earley.c) + [387] __lambda_1546 (base.c) [1208] __lambda_339 (earley.c) [49] __lambda_62 (earley.c) + [388] __lambda_1547 (base.c) [1209] __lambda_340 (earley.c) [33] __lambda_63 (earley.c) + [389] __lambda_1548 (base.c) [1210] __lambda_341 (earley.c) [32] __lambda_64 (earley.c) + [390] __lambda_1549 (base.c) [1211] __lambda_342 (earley.c) [54] __lambda_65 (earley.c) + [196] __lambda_155 (earley.c) [1212] __lambda_343 (earley.c) [60] __lambda_66 (earley.c) + [391] __lambda_1550 (base.c) [1213] __lambda_344 (earley.c) [66] __lambda_67 (earley.c) + [392] __lambda_1551 (base.c) [1214] __lambda_345 (earley.c) [91] __lambda_68 (earley.c) + [393] __lambda_1552 (base.c) [1215] __lambda_346 (earley.c) [40] __lambda_69 (earley.c) + [394] __lambda_1553 (base.c) [1216] __lambda_347 (earley.c) [482] __lambda_7 (read.c) + [395] __lambda_1554 (base.c) [1217] __lambda_348 (earley.c) [52] __lambda_70 (earley.c) + [396] __lambda_1555 (base.c) [1218] __lambda_349 (earley.c) [82] __lambda_71 (earley.c) + [1186] __lambda_1556 (base.c) [130] __lambda_35 (char.c) [1153] __lambda_718 (base.c) + [397] __lambda_1557 (base.c) [1219] __lambda_350 (earley.c) [430] __lambda_719 (base.c) + [1187] __lambda_1558 (base.c) [1220] __lambda_351 (earley.c) [81] __lambda_72 (earley.c) + [398] __lambda_1559 (base.c) [1221] __lambda_352 (earley.c) [289] __lambda_721 (base.c) + [179] __lambda_156 (earley.c) [1222] __lambda_353 (earley.c) [1154] __lambda_722 (base.c) + [1188] __lambda_1560 (base.c) [1223] __lambda_354 (earley.c) [1155] __lambda_723 (base.c) + [370] __lambda_1561 (base.c) [1224] __lambda_355 (earley.c) [1156] __lambda_724 (base.c) + [187] __lambda_157 (earley.c) [464] __lambda_356 (earley.c) [411] __lambda_725 (base.c) + [1089] __lambda_158 (earley.c) [465] __lambda_357 (earley.c) [74] __lambda_73 (earley.c) + [1090] __lambda_159 (earley.c) [466] __lambda_358 (earley.c) [83] __lambda_74 (earley.c) + [302] __lambda_16 (read.c) [434] __lambda_359 (earley.c) [69] __lambda_75 (earley.c) + [200] __lambda_160 (earley.c) [117] __lambda_36 (char.c) [65] __lambda_76 (earley.c) + [1085] __lambda_161 (earley.c) [363] __lambda_360 (earley.c) [479] __lambda_765 (base.c) + [320] __lambda_162 (earley.c) [383] __lambda_361 (earley.c) [480] __lambda_766 (base.c) + [1189] __lambda_163 (earley.c) [177] __lambda_362 (earley.c) [30] __lambda_77 (earley.c) + [460] __lambda_164 (earley.c) [369] __lambda_363 (earley.c) [21] __lambda_78 (earley.c) + [284] __lambda_165 (earley.c) [380] __lambda_364 (earley.c) [36] __lambda_79 (earley.c) + [285] __lambda_166 (earley.c) [181] __lambda_365 (earley.c) [359] __lambda_8 (read.c) + [272] __lambda_167 (earley.c) [1105] __lambda_365 (base.c) [58] __lambda_80 (earley.c) + [259] __lambda_168 (earley.c) [300] __lambda_366 (earley.c) [56] __lambda_81 (earley.c) + [321] __lambda_169 (earley.c) [1106] __lambda_366 (base.c) [71] __lambda_82 (earley.c) + [129] __lambda_17 (read.c) [293] __lambda_367 (earley.c) [57] __lambda_83 (earley.c) + [1190] __lambda_170 (earley.c) [413] __lambda_367 (base.c) [44] __lambda_84 (earley.c) + [1191] __lambda_171 (earley.c) [1166] __lambda_368 (earley.c) [42] __lambda_85 (earley.c) + [461] __lambda_172 (earley.c) [1167] __lambda_369 (earley.c) [51] __lambda_86 (earley.c) + [462] __lambda_173 (earley.c) [429] __lambda_370 (earley.c) [73] __lambda_87 (earley.c) + [419] __lambda_174 (earley.c) [381] __lambda_371 (earley.c) [76] __lambda_88 (earley.c) + [463] __lambda_175 (earley.c) [182] __lambda_372 (earley.c) [77] __lambda_89 (earley.c) + [1192] __lambda_176 (earley.c) [365] __lambda_373 (earley.c) [449] __lambda_9 (read.c) + [322] __lambda_177 (earley.c) [337] __lambda_374 (earley.c) [68] __lambda_90 (earley.c) + [305] __lambda_178 (earley.c) [1225] __lambda_375 (earley.c) [43] __lambda_91 (earley.c) + [218] __lambda_179 (earley.c) [1226] __lambda_376 (earley.c) [37] __lambda_92 (earley.c) + [290] __lambda_18 (read.c) [421] __lambda_377 (earley.c) [360] __lambda_93 (earley.c) + [170] __lambda_180 (earley.c) [338] __lambda_378 (earley.c) [112] _cons + [1092] __lambda_181 (earley.c) [1227] __lambda_379 (earley.c) [1084] _strdup + [254] __lambda_182 (earley.c) [1228] __lambda_380 (earley.c) [496] add_global + [149] __lambda_183 (earley.c) [1229] __lambda_381 (earley.c) [62] add_mutation + [221] __lambda_184 (earley.c) [1230] __lambda_382 (earley.c) [490] add_symbol + [222] __lambda_185 (earley.c) [450] __lambda_383 (earley.c) [495] add_symbol_by_name + [216] __lambda_186 (earley.c) [276] __lambda_383 (base.c) [131] apply + [211] __lambda_187 (earley.c) [426] __lambda_384 (earley.c) [425] apply_va + [217] __lambda_188 (earley.c) [409] __lambda_384 (base.c) [152] assoc + [241] __lambda_189 (earley.c) [183] __lambda_385 (earley.c) [532] c_entry_pt (earley.c) + [113] __lambda_19 (read.c) [154] __lambda_385 (base.c) [533] c_entry_pt_first_lambda (earley.c) + [1109] __lambda_190 (earley.c) [1168] __lambda_386 (earley.c) [534] c_scheme_char_entry_pt + [1110] __lambda_191 (earley.c) [153] __lambda_386 (base.c) [535] c_schemebase_entry_pt + [1111] __lambda_192 (earley.c) [184] __lambda_387 (earley.c) [536] c_schemecyclonecommon_entry_pt + [265] __lambda_193 (earley.c) [453] __lambda_387 (base.c) [537] c_schemeread_entry_pt + [274] __lambda_194 (earley.c) [431] __lambda_387 (read.c) [538] c_schemetime_entry_pt + [263] __lambda_195 (earley.c) [1169] __lambda_388 (earley.c) [539] c_schemewrite_entry_pt + [209] __lambda_196 (earley.c) [256] __lambda_388 (base.c) [55] cell_get + [208] __lambda_197 (earley.c) [1149] __lambda_388 (read.c) [28] ck_cc_popcount (ck_cc.h) + [233] __lambda_198 (earley.c) [367] __lambda_389 (earley.c) [18] ck_pr_barrier (ck_pr.h) + [234] __lambda_199 (earley.c) [339] __lambda_389 (base.c) [485] ck_pr_cas_int (ck_pr.h) + [291] __lambda_2 (earley.c) [1150] __lambda_389 (read.c) [172] ck_pr_fence_load (ck_pr.h) + [399] __lambda_2 (common.c) [180] __lambda_390 (earley.c) [13] ck_pr_md_load_int (ck_pr.h) + [1193] __lambda_2 (time.c) [340] __lambda_390 (base.c) [163] ck_pr_md_load_ptr (ck_pr.h) + [1160] __lambda_2 (write.c) [410] __lambda_390 (read.c) [45] ck_pr_md_store_uint (ck_pr.h) + [252] __lambda_20 (read.c) [341] __lambda_391 (earley.c) [122] clear_mutations + [1086] __lambda_200 (earley.c) [1231] __lambda_391 (base.c) [115] debug_dump_globals + [215] __lambda_201 (earley.c) [1232] __lambda_392 (earley.c) [515] dispatch + [192] __lambda_202 (earley.c) [342] __lambda_392 (base.c) [101] do_dispatch + [207] __lambda_203 (earley.c) [1233] __lambda_393 (earley.c) [527] double2buffer + [1096] __lambda_204 (earley.c) [1234] __lambda_393 (base.c) [105] equal + [1097] __lambda_205 (earley.c) [1235] __lambda_394 (earley.c) [104] equalp + [257] __lambda_206 (earley.c) [343] __lambda_394 (base.c) [492] find_or_add_symbol + [220] __lambda_207 (earley.c) [173] __lambda_395 (earley.c) [493] find_symbol_by_name + [1102] __lambda_208 (earley.c) [1236] __lambda_395 (base.c) [540] gc_add_mutator + [1103] __lambda_209 (earley.c) [281] __lambda_396 (earley.c) [17] gc_alloc + [1161] __lambda_21 (read.c) [1237] __lambda_396 (base.c) [15] gc_allocated_bytes + [1104] __lambda_210 (earley.c) [377] __lambda_397 (earley.c) [2] gc_collector + [242] __lambda_211 (earley.c) [1238] __lambda_397 (base.c) [6] gc_collector_mark_gray (gc.c) + [228] __lambda_212 (earley.c) [344] __lambda_398 (earley.c) [3] gc_collector_trace + [227] __lambda_215 (earley.c) [1239] __lambda_398 (base.c) [22] gc_copy_obj + [219] __lambda_216 (earley.c) [1240] __lambda_399 (earley.c) [4] gc_empty_collector_stack + [212] __lambda_217 (earley.c) [439] __lambda_399 (base.c) [47] gc_fixup_moved_obj + [1098] __lambda_218 (earley.c) [401] __lambda_399 (read.c) [174] gc_free_old_thread_data + [1099] __lambda_219 (earley.c) [1241] __lambda_4 (common.c) [484] gc_get_heap + [1162] __lambda_22 (read.c) [402] __lambda_4 (write.c) [95] gc_grow_heap + [229] __lambda_220 (earley.c) [424] __lambda_40 (read.c) [166] gc_handshake + [267] __lambda_221 (earley.c) [1242] __lambda_400 (earley.c) [487] gc_heap_create + [239] __lambda_222 (earley.c) [371] __lambda_400 (read.c) [486] gc_heap_free + [258] __lambda_223 (earley.c) [345] __lambda_401 (earley.c) [93] gc_heap_last + [230] __lambda_224 (earley.c) [1243] __lambda_402 (earley.c) [541] gc_init_heap + [213] __lambda_225 (earley.c) [1244] __lambda_403 (earley.c) [542] gc_initialize + [1100] __lambda_226 (earley.c) [476] __lambda_404 (earley.c) [483] gc_is_heap_empty + [1101] __lambda_227 (earley.c) [477] __lambda_405 (earley.c) [133] gc_is_stack_obj + [243] __lambda_228 (earley.c) [1245] __lambda_406 (earley.c) [5] gc_mark_black + [1112] __lambda_229 (earley.c) [1246] __lambda_407 (earley.c) [114] gc_mark_globals + [366] __lambda_23 (read.c) [1247] __lambda_408 (earley.c) [137] gc_mark_gray + [1113] __lambda_230 (earley.c) [467] __lambda_409 (earley.c) [142] gc_mark_gray2 + [1114] __lambda_231 (earley.c) [346] __lambda_41 (earley.c) [12] gc_minor + [323] __lambda_232 (earley.c) [1151] __lambda_41 (read.c) [14] gc_move + [235] __lambda_233 (earley.c) [1248] __lambda_410 (earley.c) [96] gc_mut_cooperate + [224] __lambda_234 (earley.c) [468] __lambda_411 (earley.c) [39] gc_mut_update + [236] __lambda_235 (earley.c) [469] __lambda_412 (earley.c) [509] gc_mutator_thread_blocked + [237] __lambda_236 (earley.c) [470] __lambda_413 (earley.c) [510] gc_mutator_thread_runnable + [210] __lambda_237 (earley.c) [435] __lambda_414 (earley.c) [195] gc_post_handshake + [188] __lambda_238 (earley.c) [296] __lambda_415 (earley.c) [543] gc_start_collector + [185] __lambda_239 (earley.c) [294] __lambda_416 (earley.c) [111] gc_sum_pending_writes + [405] __lambda_24 (read.c) [1170] __lambda_417 (earley.c) [10] gc_sweep + [1087] __lambda_240 (earley.c) [1171] __lambda_418 (earley.c) [80] gc_thr_add_to_move_buffer + [1088] __lambda_241 (earley.c) [375] __lambda_419 (earley.c) [513] gc_thr_grow_move_buffer + [1131] __lambda_241 (read.c) [471] __lambda_42 (earley.c) [416] gc_thread_data_init + [238] __lambda_242 (earley.c) [372] __lambda_42 (char.c) [19] gc_try_alloc + [1132] __lambda_242 (read.c) [1152] __lambda_42 (read.c) [162] gc_wait_handshake + [324] __lambda_243 (earley.c) [347] __lambda_420 (earley.c) [100] gc_zero_read_write_counts + [1133] __lambda_243 (read.c) [1249] __lambda_421 (earley.c) [489] hs_hash (runtime.c) + [231] __lambda_244 (earley.c) [1250] __lambda_422 (earley.c) [497] malloc_make_pair + [1134] __lambda_244 (read.c) [422] __lambda_423 (earley.c) [118] mark_stack_or_heap_obj (gc.c) + [197] __lambda_245 (earley.c) [348] __lambda_424 (earley.c) [498] mcvar + [412] __lambda_245 (base.c) [1251] __lambda_425 (earley.c) [110] memberp + [1135] __lambda_245 (read.c) [1252] __lambda_426 (earley.c) [544] set_env_variables + [1081] __lambda_246 (earley.c) [1253] __lambda_427 (earley.c) [494] set_get (runtime.c) + [455] __lambda_246 (base.c) [349] __lambda_428 (earley.c) [491] set_insert (runtime.c) + [1136] __lambda_246 (read.c) [298] __lambda_429 (earley.c) [520] str2int + [171] __lambda_247 (earley.c) [432] __lambda_43 (earley.c) [16] vpbuffer_add + [423] __lambda_247 (base.c) [311] __lambda_43 (read.c) [41] vpbuffer_free + [1137] __lambda_247 (read.c) [121] __lambda_430 (earley.c) [503] vpbuffer_realloc + [198] __lambda_248 (earley.c) [249] __lambda_431 (earley.c) [9] + [157] __lambda_248 (base.c) [250] __lambda_432 (earley.c) + [1138] __lambda_248 (read.c) [1129] __lambda_433 (earley.c)