کرس لیٹنر، LLVM کے بانی اور چیف آرکیٹیکٹ اور سوئفٹ پروگرامنگ لینگویج کے خالق، اور Tim Davis، جو پہلے Google کے AI پروجیکٹس جیسے Tensorflow اور JAX کے سربراہ تھے، نے ایک نئی پروگرامنگ لینگویج، Mojo کی نقاب کشائی کی، جو تحقیق کے لیے استعمال میں آسانی اور تیز رفتار پروٹو ٹائپنگ کو جوڑتی ہے۔ یہ ازگر کے مانوس نحو کے ذریعے حاصل کیا جاتا ہے، جبکہ مؤخر الذکر مقامی تالیف، میموری کی حفاظت کے طریقہ کار، اور ہارڈویئر ایکسلریشن کے ذریعے حاصل کیا جاتا ہے۔
پروجیکٹ مشین لرننگ کی ترقی پر توجہ مرکوز کرتا ہے، لیکن اسے ایک عام مقصد کی زبان کے طور پر بھی پیش کیا جاتا ہے جو سسٹم پروگرامنگ کی صلاحیتوں کے ساتھ Python کو بڑھاتا ہے اور کاموں کی ایک وسیع رینج کے لیے موزوں ہے۔ مثال کے طور پر، زبان کا اطلاق اعلی کارکردگی والے کمپیوٹنگ اور ڈیٹا پروسیسنگ اور تبدیلی جیسے شعبوں پر ہوتا ہے۔ Mojo کی ایک دلچسپ خصوصیت یہ ہے کہ ایموجی علامت "🔥" کو کوڈ فائلز کے لیے ایک توسیع کے طور پر بیان کرنے کی صلاحیت ہے (جیسے، "helloworld.🔥")، ٹیکسٹ ایکسٹینشن ".mojo" کے علاوہ۔
زبان فی الحال انتہائی ترقی سے گزر رہی ہے، اور جانچ کے لیے صرف ایک آن لائن انٹرفیس دستیاب ہے۔ مقامی نظاموں پر چلنے کے لیے اسٹینڈ اسٹون تعمیرات کو بعد میں شائع کرنے کا وعدہ کیا گیا ہے، انٹرایکٹو ویب ماحول پر رائے حاصل کرنے کے بعد۔ کمپائلر، جے آئی ٹی، اور دیگر متعلقہ پیشرفتوں کے لیے سورس کوڈ کو اندرونی فن تعمیر مکمل ہونے کے بعد اوپن سورس کرنے کا منصوبہ بنایا گیا ہے (ایک ورکنگ پروٹو ٹائپ کے لیے بند دروازے کی ترقی کا ماڈل LLVM، کلینگ اور سوئفٹ کے ابتدائی ترقی کے مرحلے کی یاد دلاتا ہے)۔ چونکہ موجو کا نحو پائتھون پر مبنی ہے، اور اس کا ٹائپ سسٹم C/C++ سے ملتا جلتا ہے، اس لیے مستقبل کے منصوبوں میں موجودہ C/C++ اور Python پروجیکٹس کی Mojo میں منتقلی کو آسان بنانے کے لیے ٹولنگ تیار کرنا شامل ہے، نیز Python اور Mojo کوڈ کو ملا کر ہائبرڈ پروجیکٹس کی ترقی میں سہولت فراہم کرنا۔
اس پروجیکٹ کو کمپیوٹیشن کے لیے متضاد نظاموں کے موجودہ ہارڈویئر وسائل سے فائدہ اٹھانے کے لیے ڈیزائن کیا گیا ہے۔ مثال کے طور پر، GPUs، خصوصی مشین لرننگ ایکسلریٹر، اور سنگل انسٹرکشن ویکٹر پروسیسرز (SIMD) کو Mojo ایپلی کیشنز کو چلانے اور کمپیوٹیشن کو متوازی بنانے کے لیے استعمال کیا جا سکتا ہے۔ اصلاح کے لیے موجودہ CPython پر انحصار کرنے کے بجائے علیحدہ Python سب سیٹ تیار کرنے کی جو وجوہات بتائی گئی ہیں، ان میں تالیف پر توجہ مرکوز کرنا، سسٹم پروگرامنگ کی صلاحیتوں کا انضمام، اور بنیادی طور پر مختلف اندرونی فن تعمیر کا استعمال شامل ہے جو GPUs اور مختلف ہارڈویئر ایکسلریٹروں پر کوڈ کے نفاذ کو قابل بناتا ہے۔ اسی وقت، Mojo ڈویلپرز CPython کے ساتھ زیادہ سے زیادہ مطابقت برقرار رکھنے کا ارادہ رکھتے ہیں۔
موجو کو JIT (صرف وقت میں) اور آگے کے وقت (AOT) موڈ دونوں میں استعمال کیا جا سکتا ہے۔ کمپائلر خودکار اصلاح، کیشنگ، اور تقسیم شدہ تالیف کے لیے جدید ٹیکنالوجیز کو شامل کرتا ہے۔ موجو سورس کوڈ کو لو لیول انٹرمیڈیٹ کوڈ (MLIR) میں تبدیل کیا گیا ہے، جو LLVM پروجیکٹ کے ذریعے تیار کیا گیا ہے اور ڈیٹا فلو گراف پروسیسنگ کو بہتر بنانے کے لیے اضافی صلاحیتیں پیش کرتا ہے۔ کمپائلر مشین کوڈ جنریشن کے لیے مختلف MLIR- فعال بیک اینڈس کو سپورٹ کرتا ہے۔
اضافی ہارڈویئر ایکسلریشن کا فائدہ اٹھانے سے گہرے کمپیوٹیشنز کے لیے کارکردگی کے فوائد حاصل ہوتے ہیں جو C/C++ ایپلی کیشنز کو پیچھے چھوڑ دیتے ہیں۔ مثال کے طور پر، منڈیل بروٹ سیٹ جنریشن ایپلی کیشن کی جانچ کرتے وقت، مرتب کردہ Mojo ایپلیکیشن (r7iz.metal-16xl) AWS کلاؤڈ (0.03 سیکنڈ بمقابلہ 0.20 سیکنڈ) میں چلتے وقت C++ کے نفاذ سے 6 گنا تیز تھی، معیاری استعمال کرتے وقت Python ایپلیکیشن سے 35,000 گنا تیز تھی بمقابلہ 1027 سیکنڈ)، اور PYPY (0.03 سیکنڈ بمقابلہ 46.1 سیکنڈ) استعمال کرتے وقت 1500 گنا تیز۔
مشین لرننگ کی کارکردگی کا جائزہ لیتے وقت، Mojo میں لکھا ہوا Modular Inference Engine AI اسٹیک، زبان کے ماڈل پر کارروائی کرتے وقت Intel پروسیسر پر 3x تیز، سفارشی ماڈل چلاتے وقت 6.4x تیز، اور TensorFlow پر مبنی حل کے مقابلے بصری معلومات پراسیسنگ ماڈل چلاتے وقت 2.1x تیز تھا۔ AMD پروسیسرز پر، Mojo نے 3.2x، 5x، اور 2.2x کارکردگی کے فوائد حاصل کیے، جبکہ ARM پروسیسرز پر، اس نے 5.3x، 7.5x، اور 1.7x کارکردگی میں اضافہ حاصل کیا۔ PyTorch پر مبنی حل Intel CPUs پر Mojo سے 1.4x، 1.1x، اور 1.5x، AMD CPUs پر 2.1x، 1.2x، اور 1.5x، اور ARM CPUs پر 4x، 4.3x، اور 1.3x سے پیچھے رہ گیا۔

زبان جامد ٹائپنگ اور لو لیول میموری سیفٹی فیچرز کو سپورٹ کرتی ہے جو زنگ کی یاد تازہ کرتی ہے، جیسے کہ حوالہ لائف ٹائم ٹریکنگ اور ایک ادھار چیکر۔ پوائنٹر سیفٹی فیچرز کے علاوہ، زبان نچلی سطح کی صلاحیتیں بھی پیش کرتی ہے، جیسے پوائنٹر کی قسم کا استعمال کرتے ہوئے غیر محفوظ موڈ میں براہ راست میموری تک رسائی، انفرادی SIMD ہدایات کا استعمال، اور ہارڈویئر ایکسٹینشنز جیسے TensorCores اور AMX تک رسائی۔

تمام متغیرات کے لیے واضح طور پر بیان کردہ اقسام کے ساتھ فنکشنز کے لیے کلاسک اور آپٹمائزڈ Python کوڈ کی علیحدگی کو آسان بنانے کے لیے، "def" کی بجائے ایک علیحدہ "fn" کلیدی لفظ استعمال کرنے کی تجویز ہے۔ اسی طرح، کلاسز کے لیے، اگر کمپائل کے وقت میموری میں جامد ڈیٹا پیکنگ کی ضرورت ہو (جیسا کہ C میں)، "کلاس" کے بجائے "struct" کی قسم استعمال کی جا سکتی ہے۔ C/C++ ماڈیولز کی سادہ درآمد بھی ممکن ہے۔ مثال کے طور پر، ریاضی کی لائبریری سے cos فنکشن کو درآمد کرنے کے لیے، آپ "math.h" سے درآمد cos کی وضاحت کر سکتے ہیں۔
ماخذ: opennet.ru
