Running code and getting its results. Evaluating code to provide language services such as completions and diagnostics. Sharing data and variables between multiple languages and across remote machines ...