The WRITABLE option specifies that the compiler may treat static storage as writable (and if it does, this would make the resultant code non-reentrant).
.-WRITABLE-----------------------. >>-+-NOWRITABLE--+----------------+-+-------------------------->< | .-FWS-. | '-(--+-PRV--+--)-'
This option has no effect on programs compiled with the RENT option.
The NORENT WRITABLE options allow the compiler to use a static pointer
So, under the NORENT WRITABLE options, a module using CONTROLLED variables or performing I/O would not be reentrant.
The NORENT NOWRITABLE options require the compiler not to use a static pointer
So, under the NORENT NOWRITABLE options, a module using CONTROLLED variables or performing I/O will be reentrant.
The FWS and PRV suboptions determine how the compiler handles CONTROLLED variables:
Hence, under the NORENT NOWRITABLE(PRV) options, old and new code may share CONTROLLED variables.
However, this also means that under the NORENT NOWRITABLE(PRV) options, the use of CONTROLLED variables is subject to all the restrictions as under the old compiler.
Under the NORENT NOWRITABLE(FWS) options, an application may not perform as well as if it were compiled with the RENT or WRITABLE options if the application
The performance of an application under NORENT NOWRITABLE(FWS) may be especially bad if it uses many CONTROLLED variables in many PROCEDUREs.
Under the NOWRITABLE option, the following may not be declared in a PACKAGE outside a PROCEDURE:
Code compiled with NORENT WRITABLE cannot be mixed with code compiled with NORENT NOWRITABLE if they share any external CONTROLLED variables. In general, you should avoid mixing code compiled with WRITABLE with code compiled with NOWRITABLE.