What we call “level of abstraction” of any programming language is a measure of the expressive power that that language avails to the programmer: the higher that level, the larger the computational effect of a single statement of the program.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, the farther it gets from the actual operation of the underlying processor hardware. The execution of one single program statement (i.e., the achievement of the computational effects that such statement is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions. When the language compiler (or interpreter) transforms the program text into an executable binary, it effectively applies that correspondence.
Interestingly, not all of that transformation can happen statically, before execution, because a sizable fraction of such transformations applies to elements of the “program state”, i.e., the machinery needed to cause program-level entities to exist and be operated on by program execution. The simplest possible example of such machinery is what is to exist – during program execution – for the abstraction of procedure calls to become usable by the programmer. The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, such very high-level features as concurrency and distribution, which are present in some advanced programming languages, involve semantics that is not even remotely primitive to the processor hardware. Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries (standard routines) dedicated to making the relevant semantics happen at run time and therefore causing those features to accomplish what their language specification claims.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, the farther it gets from the actual operation of the underlying processor hardware. The execution of one single program statement (i.e., the achievement of the computational effects that such statement is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions. When the language compiler (or interpreter) transforms the program text into an executable binary, it effectively applies that correspondence.
Interestingly, not all of that transformation can happen statically, before execution, because a sizable fraction of such transformations applies to elements of the “program state”, i.e., the machinery needed to cause program-level entities to exist and be operated on by program execution. The simplest possible example of such machinery is what is to exist – during program execution – for the abstraction of procedure calls to become usable by the programmer. The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, such very high-level features as concurrency and distribution, which are present in some advanced programming languages, involve semantics that is not even remotely primitive to the processor hardware. Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries (standard routines) dedicated to making the relevant semantics happen at run time and therefore causing those features to accomplish what their language specification claims.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
- Docente: Tullio Vardanega