The runtime extensions, if present, can be either compiled in a minimal or a full mode. In the minimal mode only set-eval-quota
is present. Minimal mode is the default when compiling LBM. To get the full mode the -DFULL_RTS_LIB
flag must be used when compiling.
The default behavior is to print error messages even if the error is trapped. Trapped errors can be hidden by calling this function at the beginning of a program.
Example | Result |
(hide-trapped-error) |
t |
If you have hidden trapped errors they can be toggled back to being showed again using this function.
Example | Result |
(show-trapped-error) |
t |
env-get
can be used to reify, turn into value, parts of the global environment. The global environment is stored as a hashtable and an index into this hashtable is used to extract the bindings stored under that hash.
Example | Result |
(env-get 0) |
((render closure (rend ss) (match ss (nil t) (((? x) ? xs) (progn (render-it rend x) (render rend xs)))) nil) (s+ closure (s ss) (cons s ss) nil)) |
(env-get 1) |
((code closure (c) (list (quote code) c) nil) (ref-entry closure (str strs) (list (quote newline) (section 3 str strs) (quote newline) (quote hline)) nil) (para closure (str) (list (quote para) str) nil)) |
(env-get 2) |
((chapter-threads section 2 "Threads" ((newline (section 3 "mailbox-get" ((para ("`mailbox-get` returns the mailbox contents of a thread as a list." "The form of a `mailbox-get` expression is `(mailbox-get pid)`." "Note that `mailbox-get` does **NOT** emp |
(env-get 3) |
((num-free newline (section 3 "mem-num-free" ((para ("`mem-num-free` returns the number of free words in the LBM memory." "This is the memory where arrays and strings are stored.")) (code ((mem-num-free))) nil)) newline hline) (to-dot closure (x) (str-mer |
(env-get 4) |
((longest-free newline (section 3 "mem-longest-free" ((para ("`mem-longest-free` returns the length in words of the longest" "consecutive sequence of free words in the LBM memory.")) (code ((mem-num-free))) nil)) newline hline) (render-code-disp-pairs clo |
(env-get 5) |
((memory-size newline (section 3 "mem-size" ((para ("`mem-size` returns the size of the LBM memory.")) (code ((mem-size))) nil)) newline hline) (frame-i . 0) (str-merge closure nil (str-join (rest-args)) nil) (bold closure (str) (list (quote bold) str) ni |
(env-get 6) |
((heap-state newline (section 3 "lbm-heap-state" ((para ("`lbm-heap-state` can be used to query information about heap usage.")) (code ((lbm-heap-state (quote get-heap-size)) (lbm-heap-state (quote get-heap-bytes)) (lbm-heap-state (quote get-num-alloc-cel |
(env-get 7) |
((chapter-memory section 2 "Memory" ((newline (section 3 "mem-num-free" ((para ("`mem-num-free` returns the number of free words in the LBM memory." "This is the memory where arrays and strings are stored.")) (code ((mem-num-free))) nil)) newline hline) ( |
(env-get 8) |
((gc-stack newline (section 3 "set-gc-stack-size" ((para ("With `set-gc-stack-size` you can change the size of the stack used for heap traversal" "by the garbage collector.")) (code ((set-gc-stack-size 100))) nil)) newline hline) (gif-frame closure (n) (s |
(env-get 9) |
((gc-is-always-gc newline (section 3 "is-always-gc" ((para ("The `is-always-gc` predicate is true if LBM is built with the LBM_ALWAYS_GC debug flag.")) (code ((is-always-gc))) nil)) newline hline) (code-png closure (img colors c) (list (quote code-png) im |
(env-get 10) |
((chapter-gc section 2 "GC" ((newline (section 3 "set-gc-stack-size" ((para ("With `set-gc-stack-size` you can change the size of the stack used for heap traversal" "by the garbage collector.")) (code ((set-gc-stack-size 100))) nil)) newline hline) (newli |
(env-get 11) |
((environment-get newline (section 3 "env-get" ((para ("`env-get` can be used to reify, turn into value, parts of the global environment." "The global environment is stored as a hashtable and an index into this hashtable" "is used to extract the bindings |
(env-get 12) |
((environment-set newline (section 3 "env-set" ((para ("`env-set` destructively sets an entry in the global environment hashtable.")) (program (((if (eq (env-get 1) nil) (env-set 1 (list (quote (a . 75))))) (env-get 1)))) (para ("Note that in the example |
(env-get 13) |
((code-disp closure (c) (list (quote code-disp) c) nil)) |
(env-get 14) |
((local-environment-get newline (section 3 "local-env-get" ((para ("`local-env-get` can be used to reify, turn into value, the local environment.")) (code ((local-env-get))) (program (((let ((a 50)) (local-env-get))))) nil)) newline hline) (render-code-di |
(env-get 15) |
((chapter-environments section 2 "Environments" ((newline (section 3 "env-get" ((para ("`env-get` can be used to reify, turn into value, parts of the global environment." "The global environment is stored as a hashtable and an index into this hashtable" " |
(env-get 16) |
((symbol-table-size newline (section 3 "symtab-size" ((para ("`symtab-size` returns the size of the symbol table in bytes.")) (code ((symtab-size))) nil)) newline hline) (render-program-disp-table closure (rend c) (progn (rend "<table>\n") (rend "<tr>\n") |
(env-get 17) |
((symbol-table-size-flash newline (section 3 "symtab-size-flash" ((para ("`symtab-size-flash` returns the size in bytes of the portion of the symbol table" "that is stored in flash.")) (code ((symtab-size-flash))) nil)) newline hline) (png-count . 0) (pro |
(env-get 18) |
((symbol-table-size-names newline (section 3 "symtab-size-names" ((para ("`symtab-size-names` returns the size in bytes of the string names stored in" "the symbol table.")) (code ((symtab-size-names))) nil)) newline hline) (gif-count . 0) (image closure ( |
(env-get 19) |
((symbol-table-size-names-flash newline (section 3 "symtab-size-names-flash" ((para ("`symtab-size-names` returns the size in bytes of the string names stored in" "the symbol table in flash.")) (code ((symtab-size-names-flash))) nil)) newline hline) (gif- |
(env-get 20) |
((chapter-symboltable section 2 "Symbol table" ((newline (section 3 "symtab-size" ((para ("`symtab-size` returns the size of the symbol table in bytes.")) (code ((symtab-size))) nil)) newline hline) (newline (section 3 "symtab-size-flash" ((para ("`symtab |
(env-get 21) |
((version newline (section 3 "lbm-version" ((para ("`lbm-version` returns the version of the lbm runtime system.")) (code ((lbm-version))) nil)) newline hline) (pretty-aligned-ontop closure (n cs) (match cs (nil [0]) (((? x) ? xs) (str-merge "\n" (pretty- |
(env-get 22) |
((arch newline (section 3 "is-64bit" ((para ("`is-64bit` returns true if a 64bit version of lbm is running.")) (code ((is-64bit))) nil)) newline hline) (render-program-res-pairs closure (rend cs) (match cs (nil t) (((? x) ? xs) (let ((x-str (if (is-read-e |
(env-get 23) |
((word newline (section 3 "word-size" ((para ("`word-size` returns 4 on 32bit LBM and 8 on 64bits.")) (code ((word-size))) nil)) newline hline) (leading-zeroes closure (n) (if (< n 10) (str-merge "000" (to-str n)) (if (< n 100) (str-merge "00" (to-str n) |
(env-get 24) |
((chapter-versioning section 2 "Version" ((newline (section 3 "lbm-version" ((para ("`lbm-version` returns the version of the lbm runtime system.")) (code ((lbm-version))) nil)) newline hline) (newline (section 3 "is-64bit" ((para ("`is-64bit` returns tru |
(env-get 25) |
((hide-em newline (section 3 "hide-trapped-error" ((para ("The default behavior is to print error messages even if the error is trapped." "Trapped errors can be hidden by calling this function at the beginning of a program.")) (code ((hide-trapped-error)) |
(env-get 26) |
((show-em newline (section 3 "show-trapped-errors" ((para ("If you have hidden trapped errors they can be toggled back to being showed again" "using this function.")) (code ((show-trapped-error))) nil)) newline hline) (pretty-list closure (c) (match c (ni |
(env-get 27) |
((chapter-errors section 2 "Errors" ((newline (section 3 "hide-trapped-error" ((para ("The default behavior is to print error messages even if the error is trapped." "Trapped errors can be hidden by calling this function at the beginning of a program.")) |
(env-get 28) |
((manual (section 1 "LispBM Runtime Extensions Reference Manual" ((para ("The runtime extensions, if present, can be either compiled" "in a minimal or a full mode." "In the minimal mode only `set-eval-quota` is present." "Minimal mode is the default when |
(env-get 29) |
((render-manual closure nil (let ((h (fopen "runtimeref.md" "w")) (r (lambda (s) (fwrite-str h s)))) (progn (gc) (var t0 (systime)) (render r manual) (print "Runtime reference manual was generated in " (secs-since t0) " seconds"))) nil) (evaluation-quota |
(env-get 30) |
((chapter-scheduling section 2 "Scheduling" ((newline (section 3 "set-eval-quota" ((para ("`set-eval-quota` sets the number of evaluation steps that is" "given to each context when given turn to execute by the round-robin" "scheduler.")) (code ((set-eval- |
(env-get 31) |
((threads-mailbox-get newline (section 3 "mailbox-get" ((para ("`mailbox-get` returns the mailbox contents of a thread as a list." "The form of a `mailbox-get` expression is `(mailbox-get pid)`." "Note that `mailbox-get` does **NOT** empty the mailbox.")) |
env-set
destructively sets an entry in the global environment hashtable.
Example | Result |
(if (eq (env-get 1) nil) (env-set 1 (list '(a . 75))))
(env-get 1) |
((code closure (c) (list (quote code) c) nil) (ref-entry closure (str strs) (list (quote newline) (section 3 str strs) (quote newline) (quote hline)) nil) (para closure (str) (list (quote para) str) nil)) |
Note that in the example code above there is no guarantee that the symbol a
actually hashes to index 1 in the environment table. So a
is most likely impossible to look up from this environment. The use case for env-set
and env-get
are rather that they are together. Use env-get
to extract index i
from the table, then modify it in some way and end by using env-set
to the same index i
.
local-env-get
can be used to reify, turn into value, the local environment.
Example | Result |
(local-env-get) |
nil |
Example | Result |
(let ((a 50))
(local-env-get)) |
((a . 50)) |
With set-gc-stack-size
you can change the size of the stack used for heap traversal by the garbage collector.
Example | Result |
(set-gc-stack-size 100) |
t |
The is-always-gc
predicate is true if LBM is built with the LBM_ALWAYS_GC debug flag.
Example | Result |
(is-always-gc) |
nil |
mem-num-free
returns the number of free words in the LBM memory. This is the memory where arrays and strings are stored.
Example | Result |
(mem-num-free) |
253925 |
mem-longest-free
returns the length in words of the longest consecutive sequence of free words in the LBM memory.
Example | Result |
(mem-num-free) |
253855 |
mem-size
returns the size of the LBM memory.
Example | Result |
(mem-size) |
262144 |
lbm-heap-state
can be used to query information about heap usage.
Example | Result |
(lbm-heap-state 'get-heap-size) |
10000000u |
(lbm-heap-state 'get-heap-bytes) |
80000000u |
(lbm-heap-state 'get-num-alloc-cells) |
11808u |
(lbm-heap-state 'get-num-alloc-arrays) |
884u |
(lbm-heap-state 'get-gc-num) |
1u |
(lbm-heap-state 'get-gc-num-marked) |
4010u |
(lbm-heap-state 'get-gc-num-recovered-cells) |
9995990u |
(lbm-heap-state 'get-gc-num-recovered-arrays) |
0u |
(lbm-heap-state 'get-gc-num-least-free) |
9995990u |
(lbm-heap-state 'get-gc-num-last-free) |
9995990u |
set-eval-quota
sets the number of evaluation steps that is given to each context when given turn to execute by the round-robin scheduler.
Example | Result |
(set-eval-quota 30) |
t |
symtab-size
returns the size of the symbol table in bytes.
Example | Result |
(symtab-size) |
3973u |
symtab-size-flash
returns the size in bytes of the portion of the symbol table that is stored in flash.
Example | Result |
(symtab-size-flash) |
0u |
symtab-size-names
returns the size in bytes of the string names stored in the symbol table.
Example | Result |
(symtab-size-names) |
1699u |
symtab-size-names
returns the size in bytes of the string names stored in the symbol table in flash.
Example | Result |
(symtab-size-names-flash) |
0u |
mailbox-get
returns the mailbox contents of a thread as a list. The form of a mailbox-get
expression is (mailbox-get pid)
. Note that mailbox-get
does NOT empty the mailbox.
Example | Result |
(define f (lambda nil (progn
(sleep 1)
(f)))) |
(closure nil (progn (sleep 1) (f)) nil) |
(define pid (spawn f)) |
21689 |
(send pid "hello world") |
t |
(send pid (list 1 2 3)) |
t |
(send pid 'apa) |
t |
(mailbox-get pid) |
("hello world" (1 2 3) apa) |
lbm-version
returns the version of the lbm runtime system.
Example | Result |
(lbm-version) |
(0 30 3) |
is-64bit
returns true if a 64bit version of lbm is running.
Example | Result |
(is-64bit) |
nil |
word-size
returns 4 on 32bit LBM and 8 on 64bits.
Example | Result |
(word-size) |
4 |
This document was generated by LispBM version 0.30.3