Kekekalan

Semua jenis dalam Q# adalah jenis nilai . Q# tidak memiliki konsep referensi atau penunjuk. Sebaliknya, ini memungkinkan Anda untuk menetapkan ulang nilai baru ke variabel yang dideklarasikan sebelumnya melalui ekspresi penugasan. Misalnya, tidak ada perbedaan dalam perilaku antara penetapan ulang untuk variabel jenis Int atau variabel jenis Int[]. Pertimbangkan urutan pernyataan berikut:

    mutable arr1 = new Int[3];
    let arr2 = arr1;
    arr1 w/= 0 <- 3;

Pernyataan pertama membuat instans array bilangan bulat baru [0,0,0] dan menetapkannya ke arr1. Pernyataan berikutnya menetapkan nilai tersebut ke variabel dengan nama arr2. Pernyataan terakhir membuat instans array baru berdasarkan arr1 dengan nilai yang sama kecuali untuk nilai pada indeks 0 yang diatur ke 3. Array yang baru dibuat kemudian ditetapkan ke variabel arr1. Baris terakhir menggunakan sintaks yang disingkat untuk pernyataan evaluasi dan penentuan kembali , dan secara setara dapat ditulis sebagai arr1 = arr1 w/ 0 <- 1;.
Setelah menjalankan tiga pernyataan, arr1 akan berisi nilai [3,0,0] sementara arr2 tetap tidak berubah dan berisi nilai [0,0,0].

Q# dengan jelas membedakan mutabilitas handel dan perilaku jenis. Mutabilitas dalam Q# adalah konsep yang berlaku untuk simbol bukan jenis atau nilai; ini berlaku untuk handel yang memungkinkan Anda mengakses nilai daripada ke nilai itu sendiri. Ini tidak diwakili dalam sistem jenis, secara implisit atau eksplisit.

Tentu saja, ini hanyalah deskripsi perilaku yang ditentukan secara resmi; di bawah tenda, implementasi aktual menggunakan skema penghitungan referensi untuk menghindari menyalin memori sebanyak mungkin. Modifikasi secara khusus dilakukan selama hanya ada satu handel yang saat ini valid yang mengakses nilai tertentu.