স্কিপ করে মূল কন্টেন্ট এ যান

পয়েন্টার

পরিচিতি

এই ডকুমেন্টটি Wave-এ পয়েন্টারের ব্যবহারের পদ্ধতি সম্পর্কে ব্যাখ্যা করে। Wave একটি নিম্ন স্তরের সিস্টেম প্রোগ্রামিং ভাষা যা নির্দিষ্ট মেমরি ঠিকানার পরিচালনা সক্ষম করার জন্য পয়েন্টার ফিচার সরবরাহ করে। একটি পয়েন্টার হল একটি ভেরিয়েবল যা নির্দিষ্ট ধরনের মেমরি ঠিকানাকে নির্দেশ করে, এবং এর মাধ্যমে মানের সরাসরি অ্যাক্সেস এবং সংশোধন করা সম্ভব।


পয়েন্টার ঘোষণা

Wave-এ পয়েন্টার ptr<টাইপ> ফরম্যাটে ঘোষণা করা হয়। উদাহরণস্বরূপ, একটি পূর্ণসংখ্যার পয়েন্টার নিম্নরূপ ঘোষিত হতে পারে:

var p: ptr<i32>;

এই ঘোষণা i32 টাইপের মান নির্দেশ করে এমন একটি পয়েন্টার p তৈরি করে।


পয়েন্টার আরম্ভ

পয়েন্টার ভেরিয়েবলের ঠিকানা & অপারেটর ব্যবহার করে আরম্ভ করা যেতে পারে:

var a: i32 = ১০;
var p: ptr<i32> = &a;

এখানে &a ভেরিয়েবল a-এর মেমরি ঠিকানাকে নির্দেশ করে এবং p সেই ঠিকানার পয়েন্টার হয়ে যায়।


পয়েন্টার ডেরেফারেন্সিং

পয়েন্টার নির্দেশ করা মান পড়া বা পরিবর্তন করতে deref কীওয়ার্ড ব্যবহার করা হয়। এটিকে ডেরেফারেন্সিং বলা হয়:

var a: i32 = ১০;
var p: ptr<i32> = &a;

println("{}", deref p); // ১০ আউটপুট

deref p = ২০;
println("{}", a); // ২০ আউটপুট

NULL পয়েন্টার

Wave-এ NULL পয়েন্টার null কীওয়ার্ডের মাধ্যমে প্রকাশ করা হয়। পয়েন্টার ভেরিয়েবল null দিয়ে আরম্ভ করা যেতে পারে এবং এই ক্ষেত্রে এটি কোনো বৈধ মেমরিকে নির্দেশ করে না:

var p: ptr<i32> = null;

NULL পয়েন্টার ডেরেফারেন্স করার সময় কম্পাইলার একটি ত্রুটি ঘটাবে।


বহু পয়েন্টার

Wave বহু পয়েন্টারকে সমর্থন করে। পয়েন্টারগুলিকে একাধিক স্তরে নেস্টেড করে ঘোষণা এবং ব্যবহার করা যেতে পারে:

var x: i32 = ১;
var p1: ptr<i32> = &x;
var p2: ptr<ptr<i32>> = &p1;
var p3: ptr<ptr<ptr<i32>>> = &p2;

println("{}", deref p1); // ১
println("{}", deref deref p2); // ১
println("{}", deref deref deref p3); // ১

অ্যারে এবং পয়েন্টার

পয়েন্টার অ্যারের উপাদান বা পুরো অ্যারেটিকে নির্দেশ করতে পারে।

অ্যারের উপাদান নির্দেশ করা পয়েন্টার

var a: i32 = ১০;
var b: i32 = ২০;
var arr: array<ptr<i32>, ২> = [&a, &b];

println("deref arr[0] = {}, deref arr[1] = {}", deref arr[0], deref arr[1]); // ১০, ২০

সম্পূর্ণ অ্যারেটিকে নির্দেশ করা পয়েন্টার

var arr: ptr<array<i32, ৩>> = &[১, ২, ৩];
println("{}", arr); // মেমরি ঠিকানা আউটপুট

নিরাপত্তা এবং আয়ত্ত

Wave Rust-এর মতো জটিল মালিকানা এবং লাইফটাইম সিস্টেম বাস্তবায়ন করে পয়েন্টার ব্যবহারের সময় মেমরি স্থিতিশীলতা নিশ্চিত করার লক্ষ্যে। ফলে অবৈধ পয়েন্টার ডেরেফারেন্সিং, ডবল মুক্ত, ওয়াংগিং পয়েন্টার ইত্যাদি সমস্যার উদ্ভব রোধে এটি কঠোরভাবে পরীক্ষা করে।

fun main() {
let x: i32 = ৪২;
let p: ptr<i32> = &x;

println("x = {}", deref p);

deref p = ৯৯;
println("x = {}", x);
}

আউটপুট:

x = ৪২
x = ৯৯

উপসংহার

পয়েন্টারগুলি Wave-এর উচ্চ কার্যক্ষম নিম্ন স্তরের প্রোগ্রামিংয়ের জন্য একটি অত্যাবশ্যক ফিচার। সরাসরি মেমরি নিয়ন্ত্রণের প্রয়োজনীয় সিস্টেম ডেভেলপমেন্ট, নেটিভ লাইব্রেরি, হার্ডওয়্যার নিয়ন্ত্রণে এটি বিশেষভাবে উপযোগী, এবং Wave-এর নিরাপদ কম্পাইলার নির্মাণের কারণে পয়েন্টার ব্যবহারের সময় হতে পারে এমন ঝুঁকির অবস্থাগুলি কার্যকরভাবে প্রতিরোধ করতে পারে।