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 рекурсивно до кожного
компоненту цього типу.