Overview
******************************
The Huxon language is a programming language designed to simplify the development of IoT algorithms and applications.
Rather than being a standalone programming language, Huxon language is embedded in C++.
This means that you can use Huxon directives inside C++ to define a representation of a Huxon algorithm.
The main elements of a Huxon algorithm are:
- **Sources**: generate data at a given rate, inside the Huxon language sources are provided by sensors
- **Channels**: combine data from one or more input elements, the rate at which the output data is generated and its type depend on the channel logic
- **Processing Nodes**: read data from a channel, modify it using custom C++ logic and generate a new output
All the elements inside a Huxon algorithm run in parallel and execute their functionality as soon as new data is available.
By combining multiple elements it is possible to define a data processing pipeline that runs continuously and produce data in real time,
obtained from many sensors displaced in (possibly) distant locations.
.. image:: img/data_processing_graph.png
:width: 600px
:alt: DevContainer Build
Algorithms written using the Huxon language can be uploaded to `Huxon `_ and used for creating virtual sensors.
A **virtual sensor** is simply a Huxon algorithm in which each declared sensor is assigned by the user to a corresponding physical sensor of an infrastructure.
The virtual sensors created from a Huxon algorithm can then be deployed on a physical infrastructure with `Huxon `_.
During the deployment, Huxon takes care of partitioning and mapping the elements of the algorithm on the physical nodes of the infrastructure,
hence automatically creating a distributed implementation of the specified Huxon algorithm.
To get started using the Huxon language, we suggest to:
1. access the :ref:`prerequisites and setup` section to download the necessary tools
2. go through the :ref:`tutorial` section for a guided introduction to the Huxon language