منصوبے کے بارے میں

tessella ایک آزاد Rust پروجیکٹ ہے جو MapLibre اسٹائل اسپیسیفیکیشن کے لیے ایک فرنٹ اینڈ نافذ کرتا ہے۔ یہ میپ فرنٹ اینڈ کے تمام کام انجام دیتا ہے — جیسے اسٹائلز کی پارسنگ، ایکسپریشنز کی تشخیص، ذرائع اور ٹائلز کا انتظام، نیٹ ورک اور کیشنگ، لے آؤٹ اور بکٹ جنریشن، گلیف اور اسپرائٹ اٹلس، ٹرانسفارم اور کیمرہ ہینڈلنگ، اور رینڈر آرکیسٹریشن — لیکن یہ کچھ ڈرا (draw) نہیں کرتا۔ اس کے بجائے، یہ ایک کیپچر اسٹریم جاری کرتا ہے: جیومیٹری، یونیفارمز، ٹیکسچرز، ڈرا آرڈر، اور کیمرہ اسٹیٹ ایک فلیٹ envelope ABI میں۔ یہ علیحدگی فرنٹ اینڈ کو GPU-free اور خالص Rust بناتی ہے، تاکہ اسے گرافکس اسٹیک کے بغیر aarch64 اور riscv64 پر کراس-کمپائل کیا جا سکے، جبکہ رینڈرر ایک تبدیل ہونے والا (swappable) کنزیومر بن جاتا ہے۔ اسٹیٹ جہاں تک ممکن ہو پراسیس-اسکوپڈ ہے اور صرف ضرورت پڑنے پر فی-ویو (per-view) ہے۔ ایک ہی اسٹائل، فائل-سورس اسٹیک، ٹائل اسٹور، بکٹ سیٹ، اور گلیف اٹلس مختلف ویوز کے درمیان مشترک ہوتے ہیں، کیونکہ بکٹس کیمرہ-فری ہوتے ہیں اور زوم انٹرپولیشن یونیفارمز میں ہوتا ہے۔ فی-ویو اسٹیٹ صرف ٹرانسفارم، کور فیصلوں، سمبل پلیسمنٹ، اور چند یونیفارم بلاکس تک محدود ہے۔ پروجیکٹ کا دعویٰ ہے کہ چار میپ ویوز کی لاگت ایک جیومیٹری اسٹریم پلس چار چھوٹے ویو اسٹریمز ہے، جبکہ فیچز، ڈیکوڈز، اور بکٹ بلڈز ویو کاؤنٹ میں ہموار رہتے ہیں، جس کی تصدیق CI کاؤنٹرز سے ہوتی ہے۔ ٹریفک تبدیلی کے تناسب سے ہوتی ہے: ایک پارکڈ میپ صفر بائٹس جاری کرتا ہے، خالص کیمرہ موشن ایک کیمرہ بلاک جاری کرتا ہے، اور صرف تبدیلی (churn) جیومیٹری جاری کرتی ہے۔ ایک SPSC رنگ ٹرانسپورٹ coalescable envelopes کے لیے مطلق اسٹیٹ رائٹس استعمال کرتا ہے، جو کنزیومر کے رکنے کی صورت میں occupancy کو محدود کرتا ہے۔ ورک اسپیس میں مختلف کریٹس (crates) شامل ہیں: facade (tessella، فی الحال ورژن 0.0.0 پر ایک نام-ریزرویشن اسٹب ہے)، style (tessella-style)، sources (tessella-source)، tiles (tessella-tile)، storage (tessella-storage)، layout (tessella-layout)، placement (tessella-place)، orchestration (tessella-orchestrate)، capture ABI (tessella-capture-abi)، اور glyph handling (tessella-glyph)۔ صرف tessella کریٹ crates.io پر شائع ہے؛ باقی تب تک publish = false ہیں جب تک کہ ان میں مواد شامل نہ ہو جائے۔ موجودہ حیثیت R0 مکمل ہے۔ پروڈیوسر ایک hermetic اسٹائل کے لیے اپنی مکمل اسٹریم جاری کرتا ہے۔ ایک C++ اوریکل (oracle) نافذا، mbgl-capture-probe، اسی اسٹائل اور کیمرہ کے لیے کیپچر اسٹریم کی ایک کینونیکل سیریلائزیشن جاری کرتا ہے، اور دونوں کا فرق (diff) نکالا جاتا ہے۔ موازنہ جیومیٹری، یونیفارم بفرز، ٹیکسچرز، کلپ ماسکس، پینٹر آرڈر، اور کیمرہ بلاک کا کیا جاتا ہے، جس کا پروجیکشن تمام سولہ عناصر میں بٹ بائی بٹ میچ کرتا ہے۔ صرف ہمارا — ویو ڈیکلریشن اور ریلیز پیئر DR-18 — ترتیب (sequence) پر چیک کیا جاتا ہے: ایک ویو استعمال سے پہلے ڈیکلیئر کیا جاتا ہے، جیومیٹری اس آرڈر سے پہلے آتی ہے جو اسے ڈرا کرتا ہے، اور آرڈر اس کیمرہ سے پہلے آتا ہے جو اس کے epoch کا نام رکھتا ہے۔ ایک سیٹلڈ ویو صفر بائٹس لکھتا ہے۔ کیپچر ABI منجمد (frozen) ہے، جس میں ایک جنریٹڈ C ہیڈر ہے جو فی-فیلڈ آفسیٹ assertions لے کر چلتا ہے جو C11 اور C++17 دونوں کے طور پر کمپائل ہوتے ہیں۔ دو معلوم ارادی اختلافات دستاویز شدہ ہیں: GeoJSON پولیگون ورٹیکس آرڈر اوریکل کے مقابلے میں ایک روٹیشن ہے کیونکہ mbgl wagyu کے ذریعے رنگز کو نارملائز کرتا ہے، اس لیے diff رنگز کا موازنہ سائیکلز کے طور پر کرتا ہے (DR-19)۔ اس کے علاوہ، پروجیکشن بیئرنگ اور پچ سے انکار کرتا ہے کیونکہ پروب غیر گھومنے والا (unrotated) ہے اور کوٹیرنین پاتھ کے مقابلے میں چیک کرنے کے لیے کچھ نہیں ہے۔ R1 — ویکٹر ٹائلز، نیٹ ورک اور کیش، لائن لیئر، ڈیٹا-ڈریون بائنڈرز، ایکسپریشن VM — ابھی شروع نہیں ہوا ہے۔ plan.md ریویو 0.9 پر ریکارڈ کے ڈیزائن کی دستاویز فراہم کرتا ہے۔ کنزیومرز میں ایک Filament-backed کنزیومر اور impeller-rs (ایک خالص-Rust Impeller دوبارہ نافذا) شامل ہیں جو entity/HAL لیول پر استعمال کر رہے ہیں۔ میپس کے لیے SSBO-capable بیک اینڈ کی ضرورت ہوتی ہے — آج Vulkan، اور GLES 3.1+ اگر کوئی کنزیومر اسے نافذ کرے۔ riscv64 صرف ایک پروڈیوسر، سوک (soak)، اور کراس-کمپائل لین ہے؛ ایک VisionFive 2 tessella کو بلڈ کر سکتا ہے لیکن اس کے ساتھ ڈرا نہیں کر سکتا۔ بلڈنگ کے لیے rust-toolchain.toml میں Rust 1.94.1 کا ٹول چین پن کیا گیا ہے، وہی ورژن جو Yocto wrynose (6.0) oe-core میں فراہم کرتا ہے۔ CI ایک ایڈوائزری اسٹیبل لین رکھتا ہے۔ کراس-کمپائلیشن لین aarch64-unknown-linux-gnu اور riscv64gc-unknown-linux-gnu کے لیے صرف cargo check ہیں۔ ٹیسٹ cargo clippy اور cargo test استعمال کرتے ہیں۔ گولڈن اوریکل ریفرنس ڈمپس tests/golden میں موجود ہیں تاکہ Rust سائیڈ کو C++ بلڈ کے بغیر چیک کیا جا سکے۔ tessella-capture-abi میں جنریٹڈ mbgl-derived مررز ایک پن شدہ maplibre-native ٹری سے آتے ہیں اور کمٹ کیے گئے ہیں؛ mbgl-codegen کے لیے ایک cargo run انہیں دوبارہ جنریٹ یا چیک کرتا ہے۔ include/ میں فلیٹ C ہیڈر Rust تعریفات سے جنریٹ کیا گیا ہے جس میں سائز، الائنمنٹ، اور فیلڈ آفسیٹس کے لیے اسٹیٹک assertions موجود ہیں۔ tessella آزاد ہے، MapLibre آرگنائزیشن سے وابستہ یا اس کی توثیق شدہ نہیں ہے، اور mln نیم اسپیس استعمال نہیں کرتا۔ لائسنس BSD-2-Clause ہے۔