okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
4d9ce5d
main
1//// Offline: what a worker spawn copies. gleam run -m manual/copy_probe 2//// 3//// Prints the heap words a process spawned over each value carries, so a 4//// value that should be shared (installed extensions) shows as nothing and 5//// a per-session one (the composition) shows what it actually costs. 6 7import albedo/harness/extension 8import albedo/harness/extension/composition 9import albedo/harness/runtime 10import gleam/int 11import gleam/io 12import gleam/list 13import harness/session_fixture 14 15@external ( erlang , "albedo_copy_test_support" , "captured_words" ) 16fn captured_words ( term : a) -> Int 17 18@external ( erlang , "erlang" , "element" ) 19fn element ( index : Int , term : a) -> b 20 21fn report ( name : String , term : a) -> Nil { 22io . println ( 23name <> ": " <> int . to_string ( captured_words ( term ) * 8 / 1024 ) <> " KiB" , 24) 25} 26 27pub fn main () -> Nil { 28let workspace = "/tmp" 29let assert Ok ( host ) = runtime . start ( ":memory:" ) 30session_fixture . initialise ( host ) 31session_fixture . create ( host , "probe" , workspace ) 32let assert Ok ( session ) = runtime . open_session ( host , "probe" , workspace ) 33report ( "empty closure" , Nil ) 34report ( "Runtime" , host ) 35report ( "installed extensions" , runtime . installed ( host )) 36report ( "Session" , session ) 37// Session(id, cwd, kernel, owner, composition, ...): the composition is 38// element 6 of the record tuple, after the constructor tag. 39let composed = element ( 6 , session ) 40report ( " composition.extensions" , composition . extensions ( composed )) 41// Composition(extensions, static, managed, failures): managed is element 4. 42let managed : List ( extension . Prepared ) = element ( 4 , composed ) 43list . each ( managed , fn ( prepared ) { 44report ( " managed " <> prepared . extension , prepared . value ) 45}) 46report ( " instructions" , runtime . instructions ( session )) 47report ( " context" , runtime . context ( session )) 48runtime . stop ( host ) 49}