The greatest efficiency is obtained when enforcement of protection is supported directly by hardware (or microcode).
Insofar as software support is required, language-based enforcement has the advantage that static access enforcement can be verified off-line at compile time.
Also, since an intelligent compiler can tailor the enforcement mechanism to meet the specified need, the fixed overhead of kernel calls can often be avoided.
In summary, the specification of protection in a programming language allows the high-level description of policies for the allocation and use of resources.
A language implementation can provide software for protection enforcement when automatic hardware-supported checking is unavailable.
In addition, it can interpret protection specifications to generate calls on whatever protection system is provided by the hardware and the operating system.