موبائل ڈویلپمنٹ میں Rust: مقامی ماڈیولز اور کراس پلیٹ فارم SDK

مصنف: IT Sectr اشاعت: 2026-02-11 مطالعے کا وقت: 10 منٹ

Rust — ایک نظام پروگرامنگ زبان ہے جو مرتب وقت پر میموری کی حفاظت کی ضمانت دیتی ہے۔ Graydon Hoare کی قیادت میں 2010 میں Mozilla Research نے تیار کیا۔ Rust کمزوریوں کی پوری کلاسوں کو روکتا ہے: null پوائنٹرز، معلق حوالہ جات اور ڈیٹا ریس۔ موبائل ڈویلپمنٹ میں، Rust کا استعمال مقامی ماڈیولز، کراس پلیٹ فارم SDK اور WebAssembly کے لیے کیا جاتا ہے۔ Stack Overflow Survey (2025) کے مطابق، Rust مسلسل نویں سال «سب سے محبوب زبان» ہے۔

اہم نکات

  • Rust — ملکیت (ownership) کے نظام کے ذریعے کوڑا کرکٹ جمع کرنے والے کے بغیر میموری کی حفاظت فراہم کرنے والی نظام زبان
  • Borrow checker — ایک تجزیہ کار جو مرتب وقت پر حوالہ جات کی جانچ کرتا ہے، ڈیٹا ریس کو روکتا ہے
  • مقامی ماڈیولز Rust میں cargo-ndk اور cargo-lipo کے ذریعے Android کے لیے .so اور iOS کے لیے .a میں مرتب ہوتے ہیں
  • WebAssembly (Wasm) براؤزر اور موبائل آلات پر Rust کوڈ کو قریب قریب مقامی کارکردگی کے ساتھ چلانے کی اجازت دیتا ہے
  • FFI (غیر ملکی فنکشن انٹرفیس) — C مطابق ABI کے ذریعے Java، Kotlin اور Swift سے Rust کو کال کرنے کا طریقہ کار

Rust کیا ہے؟

Rust ایک جامد طور پر ٹائپ کردہ نظام پروگرامنگ زبان ہے جس میں صفر لاگت تجرید (zero-cost abstractions) ہیں۔ Rust اپنے ملکیت (ownership)، ادھار (borrowing) اور زندگی کے ادوار (lifetimes) کے نظام کی بدولت کوڑا کرکٹ جمع کرنے والے کے بغیر میموری کی حفاظت کی ضمانت دیتا ہے۔ Rust مرتب کرنے والا سب سے سخت مرتب کرنے والوں میں سے ایک ہے: یہ اس کوڈ کو مسترد کرتا ہے جو C++ میں غیر متعین رویے کا سبب بنے گا۔

Rust LLVM کے ذریعے تمام فن تعمیرات کے لیے مقامی کوڈ میں مرتب ہوتا ہے: ARM، x86، RISC-V، WebAssembly۔ ٹول چین میں شامل ہیں: rustup (انسٹالر)، rustc (مرتب کرنے والا)، cargo (پیکیج مینیجر اور بلڈ ٹول)۔ Cargo.toml — package.json کی طرح، crates.io سے انحصارات پر مشتمل ہے۔ تازہ ترین مستحکم ورژن Rust 1.81 (2025) ہے۔

موبائل ڈویلپمنٹ میں Rust کے کلیدی اطلاقی شعبے: مقامی لائبریریاں (Android NDK، iOS)، کراس پلیٹ فارم SDK (Firefox، Dropbox)، کارکردگی کے لحاظ سے اہم حصوں میں C++ کی تبدیلی، ہائبرڈ ایپلیکیشنز کے لیے WebAssembly۔ Google AOSP (Android Open Source Project) میں Bluetooth، Wi-Fi اور NFC اجزاء کے لیے Rust استعمال کرتا ہے۔

موبائل ڈویلپمنٹ کے لیے Rust کی تنصیب اور ترتیب

Android کے لیے کراس کمپائلیشن کے لیے ہدف ٹول چینز کی ضرورت ہے: rustup target add aarch64-linux-android armv7-linux-androideabi۔ iOS کے لیے — aarch64-apple-ios x86_64-apple-ios۔ cargo-ndk (Android کے لیے) اور cargo-lipo (iOS کے لیے) بلڈ عمل کو آسان بناتے ہیں۔

sh
# موبائل ڈویلپمنٹ کے لیے Rust اور ہدف پلیٹ فارمز کی تنصیب
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ rustup target add aarch64-linux-android
$ rustup target add armv7-linux-androideabi
$ rustup target add aarch64-apple-ios
$ rustup target add x86_64-apple-ios

# Android بلڈ کے لیے cargo-ndk کی تنصیب
$ cargo install cargo-ndk

# Android کے لیے بلڈ
$ cargo ndk -t arm64-v8a -o ./jniLibs build --release

ملکیت کا نظام: ownership، borrowing اور lifetimes

Ownership (ملکیت) Rust کا بنیادی تصور ہے۔ ہر قدر کا بالکل ایک مالک ہوتا ہے۔ تفویض کرنے یا فنکشن میں منتقل کرنے پر، ملکیت منتقل (move) ہو جاتی ہے۔ منتقلی کے بعد، پرانا مالک قدر استعمال نہیں کر سکتا۔ یہ دوہری میموری آزاد کرنے اور معلق پوائنٹرز کو ختم کرتا ہے۔

Borrowing (ادھار) ملکیت منتقل کیے بغیر عارضی طور پر قدر کے حوالے کے استعمال کی اجازت دیتا ہے۔ &T حوالہ (ناقابل تغیر) — کوئی بھی تعداد میں قارئین۔ &mut T حوالہ (قابل تغیر) — بالکل ایک مصنف، کوئی قاری نہیں۔ مرتب کرنے والا مرتب وقت پر ان قوانین کی جانچ کرتا ہے۔

rust
fn process_data(data: &mut Vec<i32>) {
    for item in data.iter_mut() {
        *item *= 2;
    }
}

fn main() {
    let mut numbers = vec![1, 2, 3, 4, 5];
    process_data(&mut numbers);
    println!("Processed: {:?}", numbers);

    let first = &numbers[0];  // ناقابل تغیر ادھار
    println!("First: {}", first);
}

process_data Vec کا ایک قابل تغیر حوالہ لیتا ہے اور ہر عنصر کو دوگنا کرتا ہے۔ iter_mut() قابل تغیر حوالہ جات کے ساتھ ایک تکرار کنندہ لوٹاتا ہے۔ *item تفویض کے لیے حوالہ کو ڈی ریفرنس کرتا ہے۔ process_data کے بعد، numbers قابل رسائی رہتا ہے — ملکیت منتقل نہیں ہوئی، صرف ادھار لی گئی۔

Lifetimes: حوالہ جات کی زندگی کا دورانیہ

Lifetimes ('a) — حوالہ جات کی زندگی کے ادوار کو جوڑنے والی تشریحات۔ مرتب کرنے والا ان کا استعمال اس بات کی تصدیق کے لیے کرتا ہے کہ حوالہ اس ڈیٹا سے زیادہ زندہ نہ رہے جس کی طرف وہ اشارہ کرتا ہے۔ زیادہ تر معاملات میں، lifetimes خود بخود اخذ ہو جاتی ہیں — آپ کو صرف حوالہ جات والے فنکشن دستخطوں میں ان کی وضاحت کرنی ہوتی ہے۔

rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let string1 = String::from("rust");
    let result;
    {
        let string2 = String::from("mobile");
        result = longest(string1.as_str(), string2.as_str());
        println!("Longest: {}", result);
    } // string2 اس بریس تک زندہ ہے، result اندر درست ہے
    // println!("{}", result); // غلطی: string2 مر گیا
}

Android اور iOS مقامی ماڈیولز کے لیے Rust

Rust Android (.so NDK کے ذریعے) اور iOS (.a جامد لائبریریاں) کے لیے مقامی لائبریریوں میں مرتب ہوتا ہے۔ Google Android Open Source Project (AOSP) میں Rust کی سرکاری طور پر حمایت کرتا ہے — Rust Bluetooth (ava)، DNS-over-HTTP3 اور CriticalNotification اجزاء کے لیے استعمال ہوتا ہے۔ Google (2025) کے مطابق، Android میں Rust نے ہدف اجزاء میں 70% میموری کمزوریوں کو ختم کر دیا۔

Android کے لیے cargo-ndk استعمال ہوتا ہے، جو منتخب ABI کے لیے صحیح ٹول چین کے ساتھ Cargo کو لپیٹ دیتا ہے۔ Android کے لیے بلڈ میں شامل ہے: aarch64-linux-android (64-bit ARM، جدید آلات)، armv7-linux-androideabi (32-bit ARM)، x86_64-linux-android (ایمولیٹر)۔

rust
// Cargo.toml — Android/iOS کے لیے لائبریری ترتیب
[package]
name = "mobile_crypto"
version = "0.1.0"

[lib]
crate-type = ["staticlib", "cdylib"]

[dependencies]
serde = { version = "1", features = ["derive"] }
libc = "0.2"

crate-type: staticlib — iOS (.a) کے لیے، cdylib — Android (.so) کے لیے۔ serde — Kotlin/Swift کے ساتھ ڈیٹا کے تبادلے کے لیے سیریلائزیشن۔ libc — FFI کے لیے C مطابق اقسام۔

مثال: Rust میں تصویری پروسیسنگ

rust
use std::ffi::{CStr, CString};
use std::os::raw::c_char;

/// تصویری پروسیسنگ کے لیے C مطابق فنکشن
#[no_mangle]
pub unsafe extern "C" fn process_image(
    input: *const u8,
    len: usize,
    output: *mut u8,
    out_len: *mut usize,
) {
    let input_slice = std::slice::from_raw_parts(input, len);
    let result: Vec<u8> = input_slice.iter()
        .map(|b| b ^ 0xFF)
        .collect();
    let result_len = result.len();
    std::ptr::copy_nonoverlapping(result.as_ptr(), output, result_len);
    *out_len = result_len;
}

#[no_mangle] C مطابق ABI کے لیے نام مینگلنگ کو غیر فعال کرتا ہے۔ extern "C" C کالنگ کنونشن کی وضاحت کرتا ہے۔ unsafe — ایک نشان کہ Rust سے باہر سے کال حفاظت کی ضمانت نہیں دیتی۔ std::ptr::copy_nonoverlapping نتیجہ بائٹس کو آؤٹ پٹ بفر میں کاپی کرتا ہے۔

Rust میں کراس پلیٹ فارم SDK

Rust کراس پلیٹ فارم SDK کے لیے مثالی امیدوار ہے جو ایک کوڈ بیس سے Android اور iOS پر کام کرتے ہیں۔ Mozilla (Firefox)، Dropbox (فائل مطابقت پذیری) اور Meta (Libra بلاک چین) جیسی کمپنیوں نے اپنی موبائل ایپلیکیشنز کے اہم اجزاء کے لیے Rust کا انتخاب کیا۔

C++ پر Rust لائبریریوں کے فوائد: مرتب کرنے والا کراس پلیٹ فارم کوڈ میں میموری لیک اور ڈیٹا ریس کی عدم موجودگی کی ضمانت دیتا ہے۔ ایک بار Rust میں لکھا اور جانچا گیا کوڈ تمام پلیٹ فارمز پر یکساں کام کرتا ہے۔ Cargo CMake یا vcpkg کے بغیر انحصار کو مقامی طور پر منظم کرتا ہے۔

لائبریری/Crateمقصد
tonicRust میں gRPC کلائنٹ/سرور
reqwestasync/await کے ساتھ HTTP کلائنٹ
ringخفیہ نگاری (AES، RSA، ECDSA)
sqlxغیر مطابقت پذیر SQLite، PostgreSQL
wasm-bindgenRust کا JavaScript/WASM کے ساتھ انضمام
ndk-glueRust میں Android NativeActivity
uniffiKotlin/Swift کے لیے FFI بائنڈنگ جنریشن

موبائل ایپس کے لیے Rust اور WebAssembly

Rust WebAssembly (Wasm) میں مرتب ہوتا ہے — ایک بائنری فارمیٹ جو براؤزر اور موبائل آلات پر عمل پذیر ہے۔ Wasm ویب ماحول میں قریب قریب مقامی کارکردگی فراہم کرتا ہے۔ موبائل ڈویلپمنٹ میں، Wasm کا استعمال ہائبرڈ ایپلیکیشنز (WebView + Wasm) میں پیچیدہ حسابات کے لیے ہوتا ہے: 3D رینڈرنگ، تصویری شناخت، خفیہ کاری۔

wasm-pack Rust کو .wasm میں مرتب کرتا ہے اور JS ریپر بناتا ہے۔ wasm-bindgen Rust فنکشنز کو JavaScript کالز سے جوڑتا ہے۔ موبائل ڈیوائس پر، Wasm رنر WebView میں یا Wasmer/Wasmtime SDK کے ذریعے چل سکتا ہے۔

rust
use wasm_bindgen::prelude::*;

/// Wasm میں فبوناچی نمبروں کا حساب (JS سے کال کیا گیا)
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u64 {
    match n {
        0 => 0,
        1 => 1,
        _ => {
            let mut a = 0;
            let mut b = 1;
            for _ in 2..=n {
                let temp = a + b;
                a = b;
                b = temp;
            }
            b
        }
    }
}

#[wasm_bindgen] fibonacci فنکشن کے لیے JavaScript ریپر بناتا ہے۔ براؤزر میں، کال wasm.fibonacci(10) جیسی نظر آتی ہے۔ u32/u64 اقسام خود بخود Number/BigInt میں تبدیل ہو جاتی ہیں۔ اس طرح کے فنکشن کے لیے Wasm ماڈیول صرف ~5 KB کا ہے — کم سے کم اضافی بوجھ۔

FFI: Kotlin اور Swift سے Rust کو کال کرنا

FFI (Foreign Function Interface) — دوسری زبانوں سے Rust کوڈ کال کرنے کا طریقہ کار ہے۔ extern "C" اور #[no_mangle] والے Rust فنکشن C مطابق ABI کے ساتھ برآمد ہوتے ہیں۔ Kotlin سے، یہ فنکشن JNI کے ذریعے، Swift سے — @_cdecl ("name") یا CBridge.h کے ذریعے کال کیے جاتے ہیں۔

UniFFI — FFI بائنڈنگ بنانے کے لیے Mozilla کا آلہ ہے۔ آپ .udl فائل میں API بیان کرتے ہیں، اور UniFFI خود بخود Kotlin اور Swift ریپر تیار کرتا ہے۔ Firefox Android اور Firefox iOS میں Rust اجزاء کے لیے یہ معیاری طریقہ ہے۔

rust
// UniFFI انٹرفیس کے ساتھ Rust لائبریری
uniffi::setup_scaffolding!();

#[derive(uniffi::Enum)]
pub enum EncryptionError {
    InvalidKey,
    EncryptionFailed,
}

#[derive(uniffi::Record)]
pub struct EncryptedData {
    pub ciphertext: Vec<u8>,
    pub nonce: Vec<u8>,
}

#[uniffi::export]
pub fn encrypt(key: &[u8], plaintext: &[u8]) -> Result<EncryptedData, EncryptionError> {
    // AES-256-GCM نفاذ
    todo!()
}

UniFFI encrypt طریقہ کے ساتھ Kotlin کلاس تیار کرتا ہے، جو ByteArray لیتا ہے اور EncryptedData لوٹاتا ہے۔ Swift میں، ciphertext (Data) اور nonce (Data) فیلڈز کے ساتھ EncryptedData ساخت بنائی جاتی ہے۔ خرابیاں Kotlin/Swift مستثنیات میں تبدیل ہو جاتی ہیں۔

Rust بمقابلہ C++: موبائل ڈویلپمنٹ کے لیے موازنہ

Rust اور C++ موبائل ڈویلپمنٹ میں نظام پروگرامنگ کے لیے دو اہم زبانیں ہیں۔ دونوں ARM کے لیے مقامی کوڈ میں مرتب ہوتی ہیں اور C ABI کے ذریعے FFI کو سپورٹ کرتی ہیں۔ بنیادی فرق میموری حفاظت کا ماڈل ہے: Rust مرتب وقت پر اسے چیک کرتا ہے، C++ ڈویلپر کے نظم و ضبط پر انحصار کرتا ہے۔

معیارRustC++
میموری حفاظتضمانت شدہ (ownership)ڈویلپر کی ذمہ داری
کوڑا کرکٹ جمع کرنے والانہیں (RAII + ownership)نہیں (دستی انتظام)
میموری لیکمرتب کرنے والے نے روکاممکن (new بغیر delete)
ڈیٹا ریسروکا گیا (Send + Sync)ممکن
Android NDKcargo-ndk کے ذریعےCMake / NDK Build کے ذریعے
iOS سپورٹcargo-lipo + .aXcode + .a
بلڈ سسٹمCargo (بلٹ ان)CMake / Ninja
بلڈ وقت2–5 منٹ (صاف)5–15 منٹ (صاف)
ایکوسسٹمcrates.io (200k+ کریٹ)vcpkg / Conan (100k+ لائبریریاں)

Rust C++ سے زیادہ محفوظ اور زیادہ پیداواری ہے — مرتب کرنے والا ان غلطیوں کو پکڑتا ہے جو C++ میں رن ٹائم پر ظاہر ہوں گی۔ C++ کے پاس زیادہ امیر موبائل لائبریری ایکو سسٹم ہے۔ نئے پروجیکٹس کے لیے Rust ترجیح رکھتا ہے؛ موجودہ C++ کوڈ بتدریج منتقل کیا جاتا ہے۔

اکثر پوچھے گئے سوالات

موبائل ڈویلپمنٹ کے لیے Rust C++ سے کیسے مختلف ہے؟

بنیادی فرق مرتب وقت پر میموری کی حفاظت ہے۔ Rust میں اپنے ملکیت کے نظام اور borrow checker کی بدولت nullptr، معلق پوائنٹرز یا ڈیٹا ریس نہیں ہے۔ C++ ڈویلپر کے نظم و ضبط پر انحصار کرتا ہے، Rust مرتب کرنے والے کی جانچ پر انحصار کرتا ہے۔

کیا Rust Android ڈویلپمنٹ میں استعمال کیا جا سکتا ہے؟

ہاں، Android NDK کے ذریعے۔ Google AOSP (Android Open Source Project) میں Rust کی سرکاری حمایت کرتا ہے۔ Rust cargo-ndk کے ذریعے .so لائبریریوں میں مرتب ہوتا ہے۔ JNI کے ذریعے FFI C++ کی طرح کام کرتا ہے۔

cargo کیا ہے اور یہ Rust ڈویلپمنٹ میں کیسے مدد کرتا ہے؟

Cargo Rust کا پیکیج مینیجر اور بلڈ سسٹم ہے۔ یہ crates.io سے انحصار ڈاؤن لوڈ کرتا ہے، پروجیکٹ مرتب کرتا ہے اور ٹیسٹ چلاتا ہے۔ موبائل ڈویلپمنٹ میں، cargo-ndk Android ABI کے لیے کراس کمپائلیشن کے لیے Cargo کو بڑھاتا ہے۔

کیا Rust صرف Android کے لیے ہے یا iOS کے لیے بھی موزوں ہے؟

Rust دونوں پلیٹ فارمز کو سپورٹ کرتا ہے۔ iOS کے لیے، cargo-lipo یونیورسل بائنری (arm64 + x86_64 سمیلیٹر) بنانے کے لیے استعمال ہوتا ہے۔ Rust کوڈ ایک جامد .a لائبریری میں مرتب ہوتا ہے اور Xcode کے ذریعے منسلک ہوتا ہے۔

کیا 2026 میں موبائل ڈویلپمنٹ کے لیے Rust سیکھنا قابل قدر ہے؟

ہاں، Rust کراس پلیٹ فارم SDK اور مقامی ماڈیولز کے لیے معیار بنتا جا رہا ہے۔ Google، Meta اور Mozilla Rust میں سرمایہ کاری کر رہے ہیں۔ کارکردگی کے لحاظ سے اہم اجزاء کے لیے، Rust C++ سے زیادہ محفوظ اور پیداواری ہے۔

خلاصہ

  • Rust — ownership، borrowing اور lifetimes کی بدولت GC کے بغیر میموری حفاظت والی نظام زبان
  • Borrow checker مرتب وقت پر ڈیٹا ریس اور معلق پوائنٹرز کو روکتا ہے
  • مقامی ماڈیولز cargo-ndk (Android .so) اور cargo-lipo (iOS .a) سے بنائے جاتے ہیں
  • UniFFI Kotlin اور Swift کے لیے FFI بائنڈنگ تیار کرتا ہے — موبائل SDK کے لیے Mozilla معیار
  • WebAssembly موبائل WebView میں Rust کو قریب قریب مقامی کارکردگی سے چلاتا ہے
  • Google AOSP میں Rust استعمال کرتا ہے — ہدف اجزاء میں میموری کی کمزوریاں 70% کم ہوئیں
  • Rust بمقابلہ C++: Rust زیادہ محفوظ، C++ امیر ایکو سسٹم والا؛ نئے مقامی ماڈیولز کے لیے Rust ترجیح

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں