It would be silly to spend so much time in programming without being able to reuse the code we (and others) have put so much effort into making.
That's why we can call library packages using the code-word with.
When we are in the declaration of a process, we can specify what libraries she (Ada) needs to use.
For that we use the code-word use.
Using with is equivalent to buying a book, and having it on your shelf. You have it in hard memory.
Using use is equivalent to getting that book to your table. You have it in soft memory.
They are both called Context clauses, sometimes, as they change the context of the code.
Encapsulating makes a reasonable division of work in packages of tools that are incredibly powerful when used properly. π¦
In the shown cases below we are calling the Standard Ada library package. ππ¦π
You can recognize it because the main package is called Ada. You can call sub-packages (packages inside a package) by the dot notation that represents an element in the way set.element
In this case, we call for the (sub)package for Text Input and Output: Text_IO.
Put is a process inside Text_IO. As such, it could be called as Ada.Text_IO.Put(...), you can try it. But, as we used Text_IO, that means that every process inside is on the workspace.
The way I see it, the use is like getting your tools ready on your workspace.
And the dot notation is like going to pick them from their shelf.