# HDP Jargon

This page is a glossary of terms used in the Data Processor. If you want to check out how to interact with the Data Processor, please check out the [Data Processor API](https://docs.herodotus.dev/herodotus-docs/developers/api-docs).

## Task

A task is a unit of processing. A task should be something **complete and unique**. It should have all the relevant data defined and also specify what computation we need to perform (either implicitly or explicitly).

* Regardless of type, a task should have three common behaviors: `encode`, `commit`, and `decode`. Because of this, we can batch both Data Lake Compute-type tasks and Module-type tasks in the same Merkle tree!
* We have two different types of tasks, and for each task type, we are providing detailed explanation pages:
  * [Data Lake](https://docs.herodotus.dev/herodotus-docs/developers/data-processor/jargon/what-is-datalake)
  * [Module](https://docs.herodotus.dev/herodotus-docs/developers/data-processor/jargon/what-is-module)
* Data Lake tasks are generally faster for processing large datasets with simple aggregation, but Module tasks allow for fully arbitrary computations to be verified as well.

## Program Registry

The Program Registry is a server that uploads compiled Cairo programs (also known as CASM files), which are needed to call a module. Check out the detailed API documentation [here](https://docs.herodotus.dev/herodotus-docs/developers/api-docs/program-registry).

The program hash is a unique calculation of the program bytecode. Based on the compiler version, the computation might vary slightly. You can also retrieve the exact hash via the `cairo-run` command from [cairo-lang](https://github.com/starkware-libs/cairo-lang).

Our main motivation is to have a registry of Cairo programs so that we can retrieve the compiled Cairo program using the given program hash.
