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) |
((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 1) |
((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 2) |
((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 3) |
((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 4) |
((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-get 5) |
((pretty-aligned-ontop closure (n cs) (match cs (nil [0]) (((? x) ? xs) (str-merge "\n" (pretty-ind n x) (pretty-aligned-ontop n xs)))) nil) (image closure (alt url) (list (quote image) alt url) nil)) |
(env-get 6) |
((code closure (c) (list (quote code) c) nil) (pretty-toplevel-list closure (c) (match c (nil [0]) (((? x)) (str-merge " " (pretty nil x))) (((? x) ? y) (if (eq (type-of y) type-list) (str-merge " " (pretty nil x) "\n" (pretty-toplevel-list y)) (str-merge |
(env-get 7) |
((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 8) |
((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) (image-pair closure (cap0 tx |
(env-get 9) |
((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-program-disp-gif-ta |
(env-get 10) |
((memory-size newline (section 3 "mem-size" ((para ("`mem-size` returns the size of the LBM memory.")) (code ((mem-size))) nil)) newline hline) (str-merge-list closure (strs) (match strs (nil [0]) (((? s) ? ss) (str-merge s (str-merge-list ss)))) nil)) |
(env-get 11) |
((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 12) |
((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 13) |
((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) (pretty-list closure (c) |
(env-get 14) |
((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) (table closure (header data) (list (quote table) header da |
(env-get 15) |
((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 16) |
((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 17) |
((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 18) |
((bullet closure (ss) (verb (map (lambda (x) (str-merge " - " x "\n")) ss)) nil) (section closure (i str strs) (list (quote section) i str strs) nil)) |
(env-get 19) |
((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-table c |
(env-get 20) |
((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 21) |
((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) (verb closure (str) (list (quote verb) str) nil) (gif-frame closure (n) (str-merge ". |
(env-get 22) |
((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) (hline closure nil ( |
(env-get 23) |
((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) (str-merge closure nil (str-join |
(env-get 24) |
((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) (lead |
(env-get 25) |
((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 26) |
((version newline (section 3 "lbm-version" ((para ("`lbm-version` returns the version of the lbm runtime system.")) (code ((lbm-version))) nil)) newline hline) (render-program-table closure (rend c) (progn (rend "<table>\n") (rend "<tr>\n") (rend "<td> Ex |
(env-get 27) |
((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) (defun macro (name args body) (me-defun name args body)) (render-code-table closure (rend c) (progn (re |
(env-get 28) |
((word newline (section 3 "word-size" ((para ("`word-size` returns 4 on 32bit LBM and 8 on 64bits.")) (code ((word-size))) nil)) newline hline) (to-dot closure (x) (str-merge "digraph SExpression {\n" " node [shape=ellipse, fontsize=12];\n" " edge [f |
(env-get 29) |
((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 30) |
((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 31) |
((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) (set-pic-prefix closure (s) (setq pic |
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) |
((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 |
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) |
255023 |
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) |
254953 |
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) |
11828u |
(lbm-heap-state 'get-num-alloc-arrays) |
887u |
(lbm-heap-state 'get-gc-num) |
1u |
(lbm-heap-state 'get-gc-num-marked) |
4030u |
(lbm-heap-state 'get-gc-num-recovered-cells) |
9995970u |
(lbm-heap-state 'get-gc-num-recovered-arrays) |
0u |
(lbm-heap-state 'get-gc-num-least-free) |
9995970u |
(lbm-heap-state 'get-gc-num-last-free) |
9995970u |
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) |
0u |
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) |
2592u |
symtab-size-names
returns the size in bytes of the string names stored in the symbol table.
Example | Result |
(symtab-size-names) |
0u |
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) |
2592u |
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)) |
20683 |
(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