src/Pure/ML/ml_heap.ML
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 77765 8db468bd1ec6
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62508
d0b68218ea55 discontinued RAW session: bootstrap directly from isabelle_process RAW_ML_SYSTEM;
wenzelm
parents: 62468
diff changeset
     1
(*  Title:      Pure/ML/ml_heap.ML
62467
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     3
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     4
ML heap operations.
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     5
*)
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     6
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     7
signature ML_HEAP =
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
     8
sig
62825
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
     9
  val obj_size: 'a -> int
77692
3e746e684f4b clarified operations for ML object sizes;
wenzelm
parents: 69826
diff changeset
    10
  val sizeof1: 'a -> int
77765
8db468bd1ec6 more operations for profiling;
wenzelm
parents: 77692
diff changeset
    11
  val sizeof_list: 'a list -> int
77692
3e746e684f4b clarified operations for ML object sizes;
wenzelm
parents: 69826
diff changeset
    12
  val sizeof: 'a list -> int
67622
5289d3bdb261 more operations;
wenzelm
parents: 62825
diff changeset
    13
  val full_gc: unit -> unit
69826
1bea05713dde physical vs. logical events, the latter takes GC time into account;
wenzelm
parents: 67622
diff changeset
    14
  val gc_now: unit -> Time.time
62467
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    15
  val share_common_data: unit -> unit
62825
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    16
  val save_child: string -> unit
62467
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    17
end;
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    18
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    19
structure ML_Heap: ML_HEAP =
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    20
struct
62825
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    21
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    22
val obj_size = PolyML.objSize;
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    23
77692
3e746e684f4b clarified operations for ML object sizes;
wenzelm
parents: 69826
diff changeset
    24
fun sizeof1 x = obj_size x * ML_System.platform_obj_size;
77765
8db468bd1ec6 more operations for profiling;
wenzelm
parents: 77692
diff changeset
    25
8db468bd1ec6 more operations for profiling;
wenzelm
parents: 77692
diff changeset
    26
fun sizeof_list xs = 3 * length xs * ML_System.platform_obj_size;
8db468bd1ec6 more operations for profiling;
wenzelm
parents: 77692
diff changeset
    27
fun sizeof xs = obj_size xs * ML_System.platform_obj_size - sizeof_list xs;
77692
3e746e684f4b clarified operations for ML object sizes;
wenzelm
parents: 69826
diff changeset
    28
67622
5289d3bdb261 more operations;
wenzelm
parents: 62825
diff changeset
    29
val full_gc = PolyML.fullGC;
5289d3bdb261 more operations;
wenzelm
parents: 62825
diff changeset
    30
69826
1bea05713dde physical vs. logical events, the latter takes GC time into account;
wenzelm
parents: 67622
diff changeset
    31
fun gc_now () = #timeGCReal (PolyML.Statistics.getLocalStats ());
1bea05713dde physical vs. logical events, the latter takes GC time into account;
wenzelm
parents: 67622
diff changeset
    32
62825
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    33
fun share_common_data () = PolyML.shareCommonData PolyML.rootFunction;
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    34
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    35
fun save_child name =
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    36
  PolyML.SaveState.saveChild (name, List.length (PolyML.SaveState.showHierarchy ()));
e6e80a8bf624 structure PolyML is sealed after bootstrap: all ML system access is managed by Isabelle;
wenzelm
parents: 62630
diff changeset
    37
62467
c1b88e647e2f clarified ML heap operations;
wenzelm
parents:
diff changeset
    38
end;