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) |
((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) (png-count . 0)) |
(env-get 1) |
((memory-size newline (section 3 "mem-size" ((para ("`mem-size` returns the size of the LBM memory.")) (code ((mem-size))) nil)) newline hline) (to-dot closure (x) (str-merge "digraph SExpression {\n" " node [shape=ellipse, fontsize=12];\n" " edge [fo |
(env-get 2) |
((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 3) |
((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 4) |
((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) (verb closure (str) (list |
(env-get 5) |
((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) (hline closure nil (quote hline) nil) (end)) |
(env-get 6) |
((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 7) |
((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 8) |
((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 9) |
((is-read-eval-txt closure (x) (match x ((read-eval . _) t) (_ nil)) nil) (info para ("This document was generated by LispBM version 0.30.3")) (render-program-table closure (rend c) (progn (rend "<table>\n") (rend "<tr>\n") (rend "<td> Example </td> <td> |
(env-get 10) |
((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-re |
(env-get 11) |
((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 12) |
((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) (png-file closure nil (progn (var n png-count) (setq png-count (+ png-count 1)) (str- |
(env-get 13) |
((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)) |
(env-get 14) |
((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)) |
(env-get 15) |
((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 16) |
((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 17) |
((version newline (section 3 "lbm-version" ((para ("`lbm-version` returns the version of the lbm runtime system.")) (code ((lbm-version))) nil)) newline hline) (render-code-disp-table closure (rend c) (progn (rend "<table>\n") (rend "<tr>\n") (rend "<td> |
(env-get 18) |
((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) (program-disp closure (c) (list (quote program-disp) c) nil) (bullet closure (ss) (verb (map (lambda (x |
(env-get 19) |
((word newline (section 3 "word-size" ((para ("`word-size` returns 4 on 32bit LBM and 8 on 64bits.")) (code ((word-size))) nil)) newline hline) (render-program-disp-gif-pairs closure (rend cs) (match cs (nil t) (((? x) ? xs) (let ((x-str (pretty (quote t |
(env-get 20) |
((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 21) |
((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 22) |
((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) (glob-yeet)) |
(env-get 23) |
((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 24) |
((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 25) |
((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 26) |
((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 27) |
((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 28) |
nil |
(env-get 29) |
nil |
(env-get 30) |
((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 31) |
((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) (s-exp-graph closure (img-na |
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) |
((memory-size newline (section 3 "mem-size" ((para ("`mem-size` returns the size of the LBM memory.")) (code ((mem-size))) nil)) newline hline) (to-dot closure (x) (str-merge "digraph SExpression {\n" " node [shape=ellipse, fontsize=12];\n" " edge [fo |
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) |
254011 |
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) |
253941 |
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) |
11603u |
(lbm-heap-state 'get-num-alloc-arrays) |
882u |
(lbm-heap-state 'get-gc-num) |
1u |
(lbm-heap-state 'get-gc-num-marked) |
3993u |
(lbm-heap-state 'get-gc-num-recovered-cells) |
9996007u |
(lbm-heap-state 'get-gc-num-recovered-arrays) |
0u |
(lbm-heap-state 'get-gc-num-least-free) |
9996007u |
(lbm-heap-state 'get-gc-num-last-free) |
9996007u |
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) |
3861u |
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) |
1635u |
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)) |
21507 |
(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