.NET

BCL (Base Class Library) - це серце Framework Class Library, що включає простір імен System 

і усі базові класи: Console, String, Int32, DataTime, Random +1000 класів, що використовуються 

і для віконних програм, і для сайтів, і для мобільних програм.

В щоденній роботі ми використовуємо саме BCL, а все інше ми тягнемо з менеджера пакетів NuGet.

Framework Class Library = BCL + WinForm + WPF + Xamarin + 

Windows Store App + WebForm + + ASP.NET + Desktop + Xbox...

Вже йде розділення на різні технології: вікна, мобільні, інтернет.

Framework

CLR (Common Language Runtime) - програма, яка потрібна для запуску ваших програм написаних на С#. Ваш код транслюється (перетворюється) в проміжний байт-код 

Intermediate Language (il, cil, msil), який і виконує програма clr.exe (що іде з Windows).

Машинний код створюється під час виконання програми (Runtime), цей тип компіляції називається (Just in Time) і його робить JIT-компілятор (що іде з CLR).

Мінус: при запуску така програма працю повільніше за С++.

Плюс : працює всюди, де є CLR і не треба робити збірки під різні архітектури процесорів:

86x, 64x, ARM. 

Ми наче запускаємо програму в пісочниці, що дає змогу використати Garbage Collection.

Інші мови можуть конвертуватися в IL-код: C++/CLI, F#, J#, IronPhyton, VB.NET, Delphi.NET... Але тут є обмеження специфікації, наприклад C++/CLI код не може містити множинного успадкування.

CTS (Common Type System) - це система загальних типів у IL-коді, що визначає спосіб оголошення, використання і керування типами в середовищі CLR.

CLS (Common Language Specification) - обмежена специфікація IL-коду, що дає змогу одночасно використовувати багато мов програмування.

NGen.exe - конвертує IL в бінарний код.