Класи пам'ятi

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

Додатково

Основнi посилання

Розширеннi посилання

rdmd playground.d