Miscellaneous native operations
===============================

This is a list of various non-type-specific operations that have
custom native implementations.  If an operation has no native
implementation, mypyc will use fallback generic implementations that
are often not as fast.

.. note::

  Operations specific to various primitive types are described
  in the following sections.

Operators
---------

* ``x is y`` (this is very fast for all types)

Functions
---------

* ``isinstance(obj, type: type)``
* ``isinstance(obj, type: tuple)``
* ``cast(<type>, obj)``
* ``type(obj)``
* ``len(obj)``
* ``abs(obj)``
* ``id(obj)``
* ``iter(obj)``
* ``next(iter: Iterator)``
* ``hash(obj)``
* ``getattr(obj, attr)``
* ``getattr(obj, attr, default)``
* ``setattr(obj, attr, value)``
* ``hasattr(obj, attr)``
* ``delattr(obj, name)``
* ``slice(start, stop, step)``
* ``globals()``
* ``sorted(obj)``

Method decorators
-----------------

* ``@property``
* ``@staticmethod``
* ``@classmethod``
* ``@abc.abstractmethod``

Statements
----------

These variants of statements have custom implementations:

* ``for ... in seq:`` (for loop over a sequence)
* ``for ... in enumerate(...):``
* ``for ... in zip(...):``
