General overview



Design principles:


As you probably already know there are several other intepreted languages for Arduino, but a lot of these have a "basic-like" syntax and must be fully loaded in SRAM (from sd or inserted manually line by line) to be executed.
What I did is to design an interpreter that automatically load in SRAM a line of program at time and to design a syntax more "human-readable" than the other interpreted languages for Arduino I found out there.
Obviously if in one hand we can realize as many programs as we can store on an sd card (and all of these programs can be arbitrarily big), on the other hand this is not really the most efficient way to execute code...but you know , you can't have everything!
AVIL can be classified as an interpreted strongly typed language.

Scalability:


Since an Arduino is, generally, a low resource environment, the possibility to decrease/increase the SRAM/flash memory space used by AVIL is provided.
This is done basically in two way:

It this way you can adapt the interpreter 's memory footprint to your needs!
See configurations page for further informations.

Portability:


As previously mentioned AVIL was originally designed for Arduino but it's also designed to be portable on other platform (you can , for example compile and run an AVIL interpreter on your PC)
For this reason all the functions having some depency on the platform (physical I/O's handling, files manipulation, custom functions) are implemented by "calls" to the System Interface.
The same interface provide an abstraction layer to hide the implementation of some generic functions the intepreter's business logic needs (user input/output fo example).
So on Arduino a general overview of the system architecture may look like this: