The predicates listed below are not supported by the Runtime Kernel, since their
purpose is to aid the development process rather than to be used in application
programs. qld
or qcon
will print Undefined
warning
messages if you try to build a runtime system with calls to any of
these predicates. At run time, these calls will raise existence
errors in a runtime system.
debug/0
, nodebug/0
, trace/0
, notrace/0
,
spy/1
, nospy/1
, nospyall/0
, debugging/0
,
leash/1
, add_spypoint/1
, current_spypoint/1
,
remove_spypoint/1
,
help/[0,1]
, manual/[0,1]
add_advice/3
, check_advice/[0,1]
,
current_advice/3
, nocheck_advice/[0,1]
,
remove_advice/3
,
break/0
If you call any of these predicates from compile-time code, such as from an
embedded command or in a definition of term_expansion/2
, the call will
raise existence errors when using qpc
.
Any use of these predicates should be eliminated from both your run-time and your compile-time code, unless you can be sure that they won't be called or you don't mind them raising existence errors.
In addition, the predicates
load_foreign_files/2
and load_foreign_executable/1
are
not available in the Runtime Kernel but may
be used in embedded commands. That is, you can use them at compile
time, in order to link foreign code into your program, but you cannot
use them when the runtime system is running.
Since the compiler is not included in a runtime system, the effect of the load predicates is altered in a runtime system. Whenever one of these predicates would normally compile a file into memory, it instead loads that file into memory as dynamic. This is equivalent to
load_files(file, all_dynamic(true)
).
This should not normally make any significant difference, except that loading the file is faster and running it is slower.
The predicate multifile_assertz/1
cannot be used on compiled (static)
predicates in a runtime system. This restriction does not apply to
predicates that are loaded by compile(
File)
at run time, since
such predicates are really loaded as dynamic.