
============
Replacements
============

########
Booleans
########

The boolean literal keywords ``true`` and ``false`` can be replaced with
``affirmative`` and ``negative``. They compile to basic ``true`` and ``false``
keywords.

########################
The ``SYSROOT`` variable
########################

``SYSROOT`` or ``~/`` is a special thing in that it allows you to make boring
stuff look a bit less boring. In compiled Nonstraightforward code, you can find
a constant named ``SYSROOT`` declared at the very top. It looks something like
this:

.. code-block:: javascript

    const SYSROOT = {
        stdout: { write: ln: console.log },
        stderr: { write: ln: console.error },
        get random() {
            return Math.random();
        },
        get urandom() {
            return SYSROOT.random;
        },
        get zero() { return 0; },
    };

``~/usr/bin``
-------------

``~/usr/bin/variable`` is a convenient way to access a variable. It compiles to
a normal variable, but it looks better than a raw identifier.

``~/dev``
---------

``~/dev`` or ``SYSROOT.dev``, named after the virtual filesystem thing in POSIX,
is a thing containing ``stdout``, ``stderr``, ``random``, ``urandom``, and
``zero``.

``stdout`` and ``stderr``
^^^^^^^^^^^^^^^^^^^^^^^^^

``stdout`` and ``stderr`` are both objects that contain an object that looks
like ``{ write: { ln: ... } }``. The innermost object in ``stdout`` contains
``console.log`` and ``stderr`` has ``console.error``.

``random`` and ``urandom``
^^^^^^^^^^^^^^^^^^^^^^^^^^

These are both just getters that return the value of ``Math.random()``.

``zero``
^^^^^^^^

This is just a getter that returns zero.
