Languages that do provide access to nonstandard facilities often do so through a Foreign Function Interface (FFI) mechanism (matching impedances for calls out to the system) and/or a user-defined primitive (UDP) mechanism (in which hand-written C code performs the same kind of impedance matching and call-out). FFIs are expensive (normally involving explicit synthesis of a dummy stack frame for each call-out) and their acceptability depends on the ratios of internal processing and external workload performed per call-out. UDPs demand specialised knowledge from the programmer (the ability to shift a level of abstraction — and usually representation — within the implementation hierarchy) and are prohibitively disruptive for exploratory and high-availability systems (edit, recompile, stop and re-launch the world). Both approaches are limited to pragmatics (environmental effects); no specialisation of semantics is possible. Modification of the language (syntax, semantics) demands knowledge even more specialised than that needed to add primitives, and is in the domain of far fewer programmers. (It also assumes availability of the language implementation for inspection, modification and recompilation.)
~
PIUMARTA, Ian, 2006. Accessible language-based environments of recursive theories. Viewpoints Research Institute. pdf , p. 5.
=> Combined Object-Lambda Architectures