D є статично типізованою мовою: з моменту, як змінна була оголошена, її тип не може бути змінений. Це дозволяє компілятору запобігати помилок з самого початку і забезпечити дотримання обмежень під час компіляції. Хороша безпека типів дає підтримку, потрiбну для того, щоб великі програми були більш безпечними і більш легкими в обслуговуванні.
immutableНа додаток до статичної типiзацiї, D забезпечує кваліфікатори типу, які
накладають додатковi обмеження щодо певних об'єктів. Наприклад,
immutable об'єкт може бути тiльки iнiцiалiзованим, але не може
змінюватися пiзнiше.
immutable int err = 5;
// або: immutable err = 5 і int буде виведено.
err = 5; // не скомпiлюється
Таким чином immutable об'єкти можуть бути безпечно розподілені між
різними потоками, так як вони ніколи не будуть змінюватись за значенням.
Це означає, що immutable об'єкти можуть бути беспечно закешовані.
constОб'єкти const теж не можуть бути змінені. Це обмеження дiє тільки для
поточної області видимостi. Вказівник const може вказувати на
mutable або на immutable об'єкти. Це означає, що об'єкт є const
для поточної області, але хтось ще може змінити його у майбутньому.
Просто з immutable ви будете впевнені, що значення об'єкта ніколи не
буде змінено. Для API є звичайним прийняття const об'єктiв, щоб
гарантувати, що вхідні дані не будуть змiненi.
immutable a = 10;
int b = 5;
const int* pa = &a;
const int* pb = &b;
*pa = 7; // заборонено
Як immutable так і const забезпечують транзитивність, яка гарантує
застосування const як до самого типу, так i рекурсивно до кожного
компоненту цього типу.