Rust — ایک نظام پروگرامنگ زبان ہے جو مرتب وقت پر میموری کی حفاظت کی ضمانت دیتی ہے۔ Graydon Hoare کی قیادت میں 2010 میں Mozilla Research نے تیار کیا۔ Rust کمزوریوں کی پوری کلاسوں کو روکتا ہے: null پوائنٹرز، معلق حوالہ جات اور ڈیٹا ریس۔ موبائل ڈویلپمنٹ میں، Rust کا استعمال مقامی ماڈیولز، کراس پلیٹ فارم SDK اور WebAssembly کے لیے کیا جاتا ہے۔ Stack Overflow Survey (2025) کے مطابق، 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 استعمال کرتا ہے۔
Android کے لیے کراس کمپائلیشن کے لیے ہدف ٹول چینز کی ضرورت ہے: rustup target add aarch64-linux-android armv7-linux-androideabi۔ iOS کے لیے — aarch64-apple-ios x86_64-apple-ios۔ cargo-ndk (Android کے لیے) اور cargo-lipo (iOS کے لیے) بلڈ عمل کو آسان بناتے ہیں۔
# موبائل ڈویلپمنٹ کے لیے 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 --releaseOwnership (ملکیت) Rust کا بنیادی تصور ہے۔ ہر قدر کا بالکل ایک مالک ہوتا ہے۔ تفویض کرنے یا فنکشن میں منتقل کرنے پر، ملکیت منتقل (move) ہو جاتی ہے۔ منتقلی کے بعد، پرانا مالک قدر استعمال نہیں کر سکتا۔ یہ دوہری میموری آزاد کرنے اور معلق پوائنٹرز کو ختم کرتا ہے۔
Borrowing (ادھار) ملکیت منتقل کیے بغیر عارضی طور پر قدر کے حوالے کے استعمال کی اجازت دیتا ہے۔ &T حوالہ (ناقابل تغیر) — کوئی بھی تعداد میں قارئین۔ &mut T حوالہ (قابل تغیر) — بالکل ایک مصنف، کوئی قاری نہیں۔ مرتب کرنے والا مرتب وقت پر ان قوانین کی جانچ کرتا ہے۔
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 ('a) — حوالہ جات کی زندگی کے ادوار کو جوڑنے والی تشریحات۔ مرتب کرنے والا ان کا استعمال اس بات کی تصدیق کے لیے کرتا ہے کہ حوالہ اس ڈیٹا سے زیادہ زندہ نہ رہے جس کی طرف وہ اشارہ کرتا ہے۔ زیادہ تر معاملات میں، lifetimes خود بخود اخذ ہو جاتی ہیں — آپ کو صرف حوالہ جات والے فنکشن دستخطوں میں ان کی وضاحت کرنی ہوتی ہے۔
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 مر گیا
}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 (ایمولیٹر)۔
// 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 مطابق اقسام۔
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 کے لیے مثالی امیدوار ہے جو ایک کوڈ بیس سے Android اور iOS پر کام کرتے ہیں۔ Mozilla (Firefox)، Dropbox (فائل مطابقت پذیری) اور Meta (Libra بلاک چین) جیسی کمپنیوں نے اپنی موبائل ایپلیکیشنز کے اہم اجزاء کے لیے Rust کا انتخاب کیا۔
C++ پر Rust لائبریریوں کے فوائد: مرتب کرنے والا کراس پلیٹ فارم کوڈ میں میموری لیک اور ڈیٹا ریس کی عدم موجودگی کی ضمانت دیتا ہے۔ ایک بار Rust میں لکھا اور جانچا گیا کوڈ تمام پلیٹ فارمز پر یکساں کام کرتا ہے۔ Cargo CMake یا vcpkg کے بغیر انحصار کو مقامی طور پر منظم کرتا ہے۔
| لائبریری/Crate | مقصد |
|---|---|
| tonic | Rust میں gRPC کلائنٹ/سرور |
| reqwest | async/await کے ساتھ HTTP کلائنٹ |
| ring | خفیہ نگاری (AES، RSA، ECDSA) |
| sqlx | غیر مطابقت پذیر SQLite، PostgreSQL |
| wasm-bindgen | Rust کا JavaScript/WASM کے ساتھ انضمام |
| ndk-glue | Rust میں Android NativeActivity |
| uniffi | Kotlin/Swift کے لیے FFI بائنڈنگ جنریشن |
Rust WebAssembly (Wasm) میں مرتب ہوتا ہے — ایک بائنری فارمیٹ جو براؤزر اور موبائل آلات پر عمل پذیر ہے۔ Wasm ویب ماحول میں قریب قریب مقامی کارکردگی فراہم کرتا ہے۔ موبائل ڈویلپمنٹ میں، Wasm کا استعمال ہائبرڈ ایپلیکیشنز (WebView + Wasm) میں پیچیدہ حسابات کے لیے ہوتا ہے: 3D رینڈرنگ، تصویری شناخت، خفیہ کاری۔
wasm-pack Rust کو .wasm میں مرتب کرتا ہے اور JS ریپر بناتا ہے۔ wasm-bindgen Rust فنکشنز کو JavaScript کالز سے جوڑتا ہے۔ موبائل ڈیوائس پر، Wasm رنر WebView میں یا Wasmer/Wasmtime SDK کے ذریعے چل سکتا ہے۔
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 (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 اجزاء کے لیے یہ معیاری طریقہ ہے۔
// 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++ موبائل ڈویلپمنٹ میں نظام پروگرامنگ کے لیے دو اہم زبانیں ہیں۔ دونوں ARM کے لیے مقامی کوڈ میں مرتب ہوتی ہیں اور C ABI کے ذریعے FFI کو سپورٹ کرتی ہیں۔ بنیادی فرق میموری حفاظت کا ماڈل ہے: Rust مرتب وقت پر اسے چیک کرتا ہے، C++ ڈویلپر کے نظم و ضبط پر انحصار کرتا ہے۔
| معیار | Rust | C++ |
|---|---|---|
| میموری حفاظت | ضمانت شدہ (ownership) | ڈویلپر کی ذمہ داری |
| کوڑا کرکٹ جمع کرنے والا | نہیں (RAII + ownership) | نہیں (دستی انتظام) |
| میموری لیک | مرتب کرنے والے نے روکا | ممکن (new بغیر delete) |
| ڈیٹا ریس | روکا گیا (Send + Sync) | ممکن |
| Android NDK | cargo-ndk کے ذریعے | CMake / NDK Build کے ذریعے |
| iOS سپورٹ | cargo-lipo + .a | Xcode + .a |
| بلڈ سسٹم | Cargo (بلٹ ان) | CMake / Ninja |
| بلڈ وقت | 2–5 منٹ (صاف) | 5–15 منٹ (صاف) |
| ایکوسسٹم | crates.io (200k+ کریٹ) | vcpkg / Conan (100k+ لائبریریاں) |
Rust C++ سے زیادہ محفوظ اور زیادہ پیداواری ہے — مرتب کرنے والا ان غلطیوں کو پکڑتا ہے جو C++ میں رن ٹائم پر ظاہر ہوں گی۔ C++ کے پاس زیادہ امیر موبائل لائبریری ایکو سسٹم ہے۔ نئے پروجیکٹس کے لیے Rust ترجیح رکھتا ہے؛ موجودہ C++ کوڈ بتدریج منتقل کیا جاتا ہے۔
اکثر پوچھے گئے سوالات
بنیادی فرق مرتب وقت پر میموری کی حفاظت ہے۔ Rust میں اپنے ملکیت کے نظام اور borrow checker کی بدولت nullptr، معلق پوائنٹرز یا ڈیٹا ریس نہیں ہے۔ C++ ڈویلپر کے نظم و ضبط پر انحصار کرتا ہے، Rust مرتب کرنے والے کی جانچ پر انحصار کرتا ہے۔
ہاں، Android NDK کے ذریعے۔ Google AOSP (Android Open Source Project) میں Rust کی سرکاری حمایت کرتا ہے۔ Rust cargo-ndk کے ذریعے .so لائبریریوں میں مرتب ہوتا ہے۔ JNI کے ذریعے FFI C++ کی طرح کام کرتا ہے۔
Cargo Rust کا پیکیج مینیجر اور بلڈ سسٹم ہے۔ یہ crates.io سے انحصار ڈاؤن لوڈ کرتا ہے، پروجیکٹ مرتب کرتا ہے اور ٹیسٹ چلاتا ہے۔ موبائل ڈویلپمنٹ میں، cargo-ndk Android ABI کے لیے کراس کمپائلیشن کے لیے Cargo کو بڑھاتا ہے۔
Rust دونوں پلیٹ فارمز کو سپورٹ کرتا ہے۔ iOS کے لیے، cargo-lipo یونیورسل بائنری (arm64 + x86_64 سمیلیٹر) بنانے کے لیے استعمال ہوتا ہے۔ Rust کوڈ ایک جامد .a لائبریری میں مرتب ہوتا ہے اور Xcode کے ذریعے منسلک ہوتا ہے۔
ہاں، Rust کراس پلیٹ فارم SDK اور مقامی ماڈیولز کے لیے معیار بنتا جا رہا ہے۔ Google، Meta اور Mozilla Rust میں سرمایہ کاری کر رہے ہیں۔ کارکردگی کے لحاظ سے اہم اجزاء کے لیے، Rust C++ سے زیادہ محفوظ اور پیداواری ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں