blob: c79fac12d92bf9eb0048bd43b3b141cf1bcfaf95 [file] [log] [blame] [edit]
========================================================================
Cogent
========================================================================
:Version: 3.0.0
:License: GPL-2.0-only
:Homepage: <https://ts.data61.csiro.au/projects/TS/cogent.pml>
:Repository: <https://github.com/NICTA/cogent>
Welcome to Cogent's documentation!
==================================
Cogent is a restricted, polymorphic,
higher-order and purely functional language
with uniqueness types
and without the need for a trusted runtime
or garbage collector.
**Cogent is restricted.**
Cogent is *not* a general-purpose language.
It omits certain features
that one might come to expect
from a programming language.
For instance, Cogent doesn't support general recursion.
**Cogent is polymorphic.**
Parametrically.
This is similar to templates in C++,
or generics in Rust.
**Cogent is higher-order.**
Functions are values---they can be function arguments.
**Cogent is purely functional,**
in the sense of
the functional programming paradigm:
functions are stateless,
and the result of a function is deterministically defined
by the arguments to the function,
just like a mathematical function.
**Cogent has uniqueness types**:
as a means to control references,
every linear object
(roughly equivalent to heap-allocated object)
can only have one unique reference.
**Cogent has no trusted runtime.**
Cogent compiler generates C code,
so the trusted component is limited to
the C runtime system.
**Cogent has no garbage collector.**
Since Cogent compiler generates C code,
we would manage memory manually,
like we do in any C program.
**Cogent has a certifying compiler.**
Cogent is designed for writing and formally
verifying systems code. That's why we compromise
on language expressiveness for verifiability.
This documentation is for anyone who wants to try out or use Cogent.
We assume that you have a basic understanding of the Cogent project already,
including what Cogent is about,
the approach that we take in this research,
and what Cogent brings you.
If you don't, you may want to first read about
the `Cogent project`_.
.. _Cogent project: http://ts.data61.csiro.au/projects/TS/cogent.pml
.. toctree::
:caption: Table of contents
:maxdepth: 2
:numbered:
preamble
quickstart
install
surface
antiquote
compiler
verification
meta
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`