ہیلو، حبر! میں آپ کی توجہ اسٹیفن وولفرام کی پوسٹ کا ترجمہ پیش کرتا ہوں۔
وولفرم زبان کی مستقل مزاجی کے لیے شرائط
آج ہم پروگرامنگ زبان کے ساتھ مل کر عظیم کامیابیوں کی دہلیز پر کھڑے ہیں۔
وولفرم فنکشن ریپوزٹری ایک ایسی چیز ہے جسے وولفرم لینگویج کی منفرد نوعیت نے نہ صرف ایک پروگرامنگ زبان کے طور پر بلکہ
مثال کے طور پر، Wolfram فنکشن ریپوزٹری پہلے سے موجود ہے۔
اسی طرح سے زیادہ
صفحہ پر جانے کے لیے، مندرجہ بالا آبجیکٹ (فنکشن BLOB) کو کاپی کریں، اسے ان پٹ لائن میں چسپاں کریں اور پھر فنکشن کو چلائیں - یہ پہلے سے ہی Wolfram زبان میں بنی ہوئی ہے اور اس سے شروع ہونے والے ڈیفالٹ کی مدد سے
یہاں یہ یاد رکھنا چاہیے کہ جب پروسیسنگ
مجھے امید ہے کہ حمایت کے ساتھ
ریپوزٹری کے افعال میں Wolfram Language میں لکھے گئے کوڈ کے چھوٹے یا بڑے ٹکڑے شامل ہو سکتے ہیں۔ مثال کے طور پر، یہ کالیں ہو سکتی ہیں۔
وولفرام فیچر ریپوزٹری کا شیل اور پروگرامنگ ڈھانچہ اس طرح ڈیزائن کیا گیا ہے کہ ہر کوئی اپنے لیے سب سے آسان اور آسان طریقے سے مشترکہ مقصد میں اپنا حصہ ڈال سکتا ہے - حقیقت میں، صرف
اس نقطہ نظر میں بہت سارے تجارتی معاملات اور تفصیلات ہیں، لیکن ہمارا مقصد صارفین کے فائدے کے لیے Wolfram فیچر ریپوزٹری کو بہتر بنانا ہے اور اس بات کو یقینی بنانا ہے کہ صارف کی نئی خصوصیات زبان کی ترقی میں معنی خیز کردار ادا کریں۔ جیسے جیسے ہم بڑھتے ہیں، مجھے اس میں کوئی شک نہیں ہے کہ ہمیں ریپوزٹری میں بنائے گئے فنکشنز کو سنبھالنے اور ان کی توثیق کرنے کے لیے نئے طریقے ایجاد کرنے ہوں گے، کم از کم فنکشنز کی ایک بڑی تعداد کو منظم کرنے اور ان کو تلاش کرنے کے لیے جن کی صارفین کو ضرورت ہے۔ تاہم، یہ حوصلہ افزا ہے کہ ہم نے جو راستہ چنا ہے وہ ایک اچھی شروعات ہے۔ میں ذاتی طور پر
اخراجات کو کم کرتے ہوئے کارکردگی میں اضافہ
انٹرنیٹ سے پہلے بھی، وولفرم لینگویج کوڈ کا اشتراک کرنے کے طریقے موجود تھے (ہمارا پہلا بڑا مرکزی منصوبہ تھا۔
30 سال سے زیادہ عرصے سے، ہماری کمپنی نے Wolfram زبان کے ڈھانچے کی سالمیت کو برقرار رکھنے کے لیے تندہی سے کام کیا ہے، اور یہ اس بات کو یقینی بنانے کے لیے اہم ہے کہ Wolfram زبان نہ صرف ایک پروگرامنگ زبان بن جائے، بلکہ
ہر فنکشن کے نفاذ کے ڈھانچے میں مختلف کمپیوٹیشنل عمل پائے جاتے ہیں۔ یہاں یہ بات ذہن نشین رہے کہ یہ ضروری ہے کہ فنکشن ایک واضح اور یکساں ظاہری شکل اور صارف کے لیے بصری پڑھنے کی اہلیت رکھتا ہو۔ اس تناظر میں، وولفرم لینگویج کے بلٹ ان فنکشنز کو 6000 سے زیادہ ترتیب وار مثالوں کے ساتھ پیش کیا گیا ہے کہ فنکشنز کو صحیح طریقے سے کیسے پروگرام کیا جائے (یہ ہمارے
ایک ذخیرہ بنانا جو حقیقت میں اچھی طرح سے کام کرتا ہے ایک دلچسپ میٹا پروگرامنگ کام ہے۔ مثال کے طور پر، پروگرام میں حد سے زیادہ پابندیاں الگورتھم کی مطلوبہ یکجہتی اور عالمگیریت حاصل کرنے کی اجازت نہیں دے گی۔ بالکل اسی طرح جیسے ناکافی تعداد میں فنکشنل پابندیوں کے ساتھ، آپ الگورتھم پر عمل درآمد کی کافی حد تک درست ترتیب کو لاگو کرنے کے قابل نہیں ہوں گے۔ ان طریقوں کے سمجھوتہ پر عمل درآمد کی کئی پچھلی مثالیں، جو ہماری کمپنی کے ذریعے لاگو کی گئی ہیں، کافی مستحکم طریقے سے کام کرتی ہیں - یہ ہیں:
مندرجہ بالا تمام مثالوں میں ایک بنیادی خصوصیت ہے - پروجیکٹ میں جمع کردہ اشیاء اور فنکشنز میں بہت اعلی درجے کی ساخت اور عمل کی تقسیم ہے۔ بلاشبہ، ڈیمو یا نیورل نیٹ ورک یا کوئی اور چیز کی ساخت کی تفصیل بہت مختلف ہو سکتی ہے، لیکن کسی بھی موجودہ ذخیرہ کے لیے بنیادی ڈھانچہ ہمیشہ ایک ہی رہتا ہے۔ تو آپ کی کیا رائے ہے، پیارے صارف، ایسا ذخیرہ بنانے کے بارے میں جو Wolfram زبان میں توسیع کا اضافہ کرے؟ Wolfram Language کو انتہائی لچکدار بنانے کے لیے ڈیزائن کیا گیا ہے، اس لیے اس میں کسی بھی طرح سے توسیع اور ترمیم کی جا سکتی ہے۔ یہ صورت حال Wolfram Language میں مختلف بڑے پیمانے پر سافٹ ویئر پروجیکٹس کو تیزی سے بنانے کی صلاحیت کے لیے انتہائی اہم ہے۔ یہاں یہ بات ذہن نشین رہے کہ جیسے جیسے زبان کی لچک بڑھے گی، ایسی زبان میں لاگو ہونے والے منصوبوں کی لاگت لامحالہ بڑھ جائے گی۔ یہ اس حقیقت کی وجہ سے ہے کہ صارف جتنی زیادہ اس طرح کی زبان استعمال کرتا ہے، اتنی ہی زیادہ سرشار فعالیت اسے حاصل ہوتی ہے، لیکن ہمیں یہ نہیں بھولنا چاہیے کہ پروگرام کے ماڈیولز کی مستقل مزاجی کو یقینی بنانے میں ناکامی کے لحاظ سے اس نقطہ نظر کے منفی پہلو بھی ہو سکتے ہیں۔
روایتی پروگرامنگ زبانوں میں لائبریریوں کے ساتھ ایک عام مسئلہ ہے - اگر آپ ایک لائبریری استعمال کرتے ہیں، مثال کے طور پر، کوڈ صحیح طریقے سے کام کرے گا، لیکن اگر آپ متعدد لائبریریوں کو استعمال کرنے کی کوشش کریں گے، تو اس بات کی کوئی گارنٹی نہیں ہے کہ وہ ایک دوسرے کے ساتھ صحیح طریقے سے تعامل کریں گی۔ . اس کے علاوہ، روایتی پروگرامنگ زبانوں میں - ایک مکمل کمپیوٹنگ زبان کے برعکس - ان کے بنیادی ڈھانچے کے علاوہ کسی بھی فنکشن یا ڈیٹا کی اقسام کے لیے مستقل بلٹ ان نمائندگیوں کی موجودگی کی ضمانت دینے کا کوئی طریقہ نہیں ہے۔ لیکن، درحقیقت، مسئلہ اس سے بھی بڑا ہے جتنا کہ پہلی نظر میں لگتا ہے: اگر کوئی ایک بڑے پیمانے پر عمودی فعالیت بنا رہا ہے، تو مرکزی پروجیکٹ پروگرامنگ کے بھاری اخراجات کے بغیر جسے ہم وولفرام زبان میں ڈالتے ہیں، یہ ناممکن ہے۔ مستقل مزاجی حاصل کریں. اس لیے یہ ضروری ہے کہ تمام سافٹ ویئر ماڈیول ہمیشہ ایک ساتھ صحیح طریقے سے کام کریں۔
لہذا وولفرم فیچر ریپوزٹری کے پیچھے خیال یہ ہے کہ انفرادی خصوصیات کے ذریعے کوڈ کے نسبتاً چھوٹے ٹکڑوں میں زبان میں توسیعات شامل کرکے اوپر بیان کردہ مسئلے سے بچنا ہے جو مربوط ماڈیولز کے طور پر تیار کرنا آسان ہے۔ یہ کہا جا رہا ہے، پروگرامنگ کی ایسی خصوصیات ہیں جنہیں انفرادی فنکشنز کا استعمال کرتے ہوئے آسان نہیں بنایا جا سکتا ہے (اور ہماری کمپنی مستقبل قریب میں ایک بہتر پروگرامنگ الگورتھم جاری کرنے کا منصوبہ بنا رہی ہے تاکہ بڑے پیمانے پر سافٹ ویئر پیکجوں کو لاگو کرنے میں مدد ملے)۔ تاہم، Wolfram Language میں پہلے سے بنائے گئے فنکشنز کی بنیاد پر، پروگرامنگ کے بہت سے امکانات ہیں جو انفرادی افعال کی بنیاد پر لاگو ہوتے ہیں۔ یہاں خیال یہ ہے کہ پروگرامنگ کی نسبتاً کم کوشش کے ساتھ بہت سے نئے اور بہت مفید فنکشنز بنانا ممکن ہے جو ڈیزائن میں کافی ہم آہنگی فراہم کریں گے، وہ ایک دوسرے کے ساتھ اچھی طرح سے مربوط ہوں گے، اور اس کے علاوہ، وہ مستقبل میں زبان میں آسانی سے اور وسیع پیمانے پر استعمال کرنے کے قابل ہو جائے گا۔
یہ نقطہ نظر، یقینا، ایک سمجھوتہ ہے. اگر ایک بڑے پیکج کو لاگو کیا گیا تو، فعالیت کی ایک پوری نئی دنیا کا تصور کیا جا سکتا ہے جو انتہائی طاقتور اور مفید ہو گا۔ اگر نئی فعالیت حاصل کرنے کی ضرورت ہے جو ہر چیز کے ساتھ فٹ ہو جائے، لیکن آپ پروجیکٹ کو تیار کرنے کے لیے بہت زیادہ محنت خرچ کرنے کو تیار نہیں ہیں، تو بدقسمتی سے، یہ آپ کے پروجیکٹ کے دائرہ کار میں کمی کا باعث بن سکتا ہے۔ Wolfram فیچر ریپوزٹری کے پیچھے آئیڈیا کسی پروجیکٹ کے متعین حصے کو فعالیت فراہم کرنا ہے؛ یہ نقطہ نظر طاقتور فعالیت کا اضافہ کرے گا جبکہ پروگرامنگ پروجیکٹ میں اچھی مستقل مزاجی کو برقرار رکھنا آسان بنائے گا۔
فنکشن ریپوزٹری میں حسب ضرورت فنکشنز شامل کرنے میں مدد کریں۔
ہماری ٹیم نے صارفین کے لیے Wolfram repository کی خصوصیات میں اپنا حصہ ڈالنا آسان بنانے کے لیے سخت محنت کی ہے۔ ڈیسک ٹاپ پر (پہلے ہی میں
آپ کو دو اہم اقدامات کرنے کی ضرورت ہوگی: پہلا، اصل میں اپنے فنکشن کے لیے کوڈ لکھیں اور، دوسرا، دستاویز لکھیں کہ آپ کے فنکشن کو کیسے کام کرنا چاہیے۔
آپ کو کیا کرنے کی ضرورت ہے اس کی مثال دیکھنے کے لیے سب سے اوپر "اوپن نمونہ" بٹن پر کلک کریں:
بنیادی طور پر، آپ Wolfram Language میں بلٹ ان فنکشن کی طرح کچھ بنانے کی کوشش کر رہے ہیں۔ سوائے اس کے کہ یہ بلٹ ان فنکشن سے کہیں زیادہ مخصوص کام کرسکتا ہے۔ ایک ہی وقت میں، اس کی مکملیت اور وشوسنییتا کے بارے میں توقعات بہت کم ہوں گی۔
آپ کو اپنے فنکشن کو ایک نام دینے کی ضرورت ہے جو Wolfram Language کے فنکشن کے نام کے رہنما خطوط پر عمل کرتا ہے۔ اس کے علاوہ، آپ کو اپنے فنکشن کے لیے دستاویزات تیار کرنے کی ضرورت ہوگی، جو زبان کے بلٹ ان فنکشنز کی طرح ہے۔ میں اس کے بارے میں بعد میں مزید تفصیل سے بات کروں گا۔ ابھی کے لیے، صرف یہ دیکھیں کہ ڈیفینیشن نوٹ بک فائل کے اوپری حصے میں بٹنوں کی قطار میں ایک بٹن موجود ہے۔
جب آپ کو یقین ہو کہ سب کچھ صحیح طریقے سے بھرا ہوا ہے اور آپ تیار ہیں تو "چیک" بٹن پر کلک کریں۔ یہ مکمل طور پر عام ہے کہ آپ نے ابھی تک تمام تفصیلات کا پتہ نہیں لگایا ہے۔ لہذا "چیک" فنکشن خود بخود چلے گا اور بہت سارے انداز اور مستقل مزاجی کی جانچ کرے گا۔ اکثر، یہ آپ کو فوری طور پر درستگی کی تصدیق اور قبول کرنے کا اشارہ کرے گا (مثال کے طور پر: "یہ لائن بڑی آنت کے ساتھ ختم ہونی چاہیے،" اور یہ آپ کو بڑی آنت میں داخل ہونے کا اشارہ کرے گا)۔ کبھی کبھی وہ آپ سے خود کچھ شامل کرنے یا تبدیل کرنے کو کہے گی۔ ہم چیک بٹن کی خودکار فعالیت میں مسلسل نئی خصوصیات شامل کرتے رہیں گے، لیکن بنیادی طور پر اس کا مقصد اس بات کو یقینی بنانا ہے کہ آپ جو بھی فیچر ریپوزٹری میں جمع کراتے ہیں وہ پہلے سے ہی زیادہ سے زیادہ طرز کے رہنما خطوط کی قریب سے پیروی کرتا ہے۔
لہذا، "چیک" چلانے کے بعد، آپ "پیش نظارہ" استعمال کرسکتے ہیں. "پیش نظارہ" دستاویزی صفحہ کا ایک پیش نظارہ بناتا ہے جسے آپ نے اپنے فنکشن کے لیے بیان کیا ہے۔ آپ اپنے کمپیوٹر پر بنائی گئی فائل یا کلاؤڈ اسٹوریج میں موجود فائل کے لیے بھی پیش نظارہ بنا سکتے ہیں۔ اگر، کسی وجہ سے، آپ اس سے مطمئن نہیں ہیں جو آپ پیش نظارہ میں دیکھتے ہیں، بس واپس جائیں اور ضروری اصلاحات کریں، اور پھر پیش نظارہ بٹن پر دوبارہ کلک کریں۔
اب آپ اپنے فنکشن کو ریپوزٹری میں دھکیلنے کے لیے تیار ہیں۔ تعیناتی بٹن آپ کو چار اختیارات دیتا ہے:
اس مرحلے پر اہم بات یہ ہے کہ آپ اپنے فنکشن کو Wolfram فنکشن ریپوزٹری میں جمع کر سکتے ہیں تاکہ یہ کسی کے لیے دستیاب ہو۔ ایک ہی وقت میں، آپ اپنے فنکشن کو محدود تعداد میں صارفین کے لیے بھی رکھ سکتے ہیں۔ مثال کے طور پر، آپ ایک ایسا فنکشن بنا سکتے ہیں جو آپ کے کمپیوٹر پر مقامی طور پر ہوسٹ کیا جاتا ہے تاکہ جب آپ اس مخصوص کمپیوٹر کو استعمال کریں تو یہ دستیاب ہو۔ یا آپ اسے اپنے میں پوسٹ کر سکتے ہیں۔
تو ہم کہتے ہیں کہ آپ دراصل اپنے فنکشن کو Wolfram فنکشن نالج بیس میں جمع کروانا چاہتے ہیں۔ ایسا کرنے کے لیے، آپ ریپوزٹری میں "جمع کروائیں" بٹن پر کلک کریں۔ تو پھر اس وقت کیا ہو رہا ہے؟ ہماری سرشار ٹیم کیوریٹرز کے ذریعہ آپ کی درخواست کو فوری طور پر نظرثانی اور منظوری کے لیے قطار میں کھڑا کر دیا گیا ہے۔
جیسا کہ آپ کی درخواست منظوری کے عمل سے گزرتی ہے (جس میں عام طور پر کئی دن لگتے ہیں)، آپ کو اس کی حیثیت سے متعلق مواصلات اور ممکنہ طور پر مستقبل کے استعمال کے لیے تجاویز موصول ہوں گی۔ لیکن ایک بار جب آپ کی خصوصیت منظور ہو جاتی ہے، تو اسے فوری طور پر Wolfram Feature Repository میں شائع کر دیا جائے گا اور ہر کسی کے استعمال کے لیے دستیاب ہوگا۔ (اور یہ اس میں ظاہر ہوگا۔
اسٹوریج میں کیا ہونا چاہئے؟
واضح رہے کہ ہماری کمپنی کی تکمیل، بھروسے اور مجموعی معیار کے لیے بہت اعلیٰ معیارات ہیں، اور 6000+ فنکشنز میں سے جو ہم نے پچھلے 30+ سالوں میں وولفرم زبان میں پہلے سے ہی بنائے ہیں، سبھی مندرجہ بالا تقاضوں کو پورا کرتے ہیں۔ Wolfram Function Repository کا ہدف یہ ہے کہ Wolfram Language میں پہلے سے موجود تمام ساخت اور فعالیت کو استعمال کیا جائے تاکہ زیادہ سے زیادہ ہلکے فنکشنز (یعنی اعلیٰ کارکردگی کے افعال) کو شامل کیا جا سکے۔
بلاشبہ، وولفرم فنکشن ریپوزٹری میں فنکشنز کو وولفرم لینگویج کے ڈیزائن کے اصولوں کے مطابق ہونا چاہیے - تاکہ وہ دوسرے فنکشنز اور صارفین کی توقعات کے ساتھ مکمل طور پر تعامل کر سکیں کہ فنکشن کو صحیح طریقے سے کیسے کام کرنا چاہیے۔ تاہم، افعال کا مساوی مکمل یا قابل اعتماد ہونا ضروری نہیں ہے۔
Wolfram زبان کے بلٹ ان فنکشنز میں، ہم پروگرامنگ کے فنکشنز کو ممکن حد تک عام بنانے کے لیے سخت محنت کرتے ہیں۔ یہ کہا جا رہا ہے، جب Wolfram فنکشن ریپوزٹری میں اس میں فنکشن رکھنے میں کوئی حرج نہیں ہے جو صرف کچھ خاص لیکن مفید کیس کو ہینڈل کرتا ہے۔ مثال کے طور پر، فنکشن
بلٹ ان فنکشنز سے متعلق ایک اور نکتہ یہ ہے کہ ہماری کمپنی تمام غیر معمولی معاملات کو ہینڈل کرنے، غلط ان پٹ کو صحیح طریقے سے ہینڈل کرنے کے لیے ہر ممکن کوشش کرتی ہے، وغیرہ۔ فنکشن ریپوزٹری میں، یہ مکمل طور پر معمول کی بات ہے کہ وہاں ایک خاص فنکشن ہو جو کسی مسئلے کو حل کرنے کے اہم معاملات کو سنبھالتا ہے اور باقی تمام چیزوں کو نظر انداز کرتا ہے۔
واضح نکتہ یہ ہے کہ ایسے فنکشنز کا ہونا بہتر ہے جو زیادہ کام کریں اور بہتر طریقے سے کریں، لیکن فنکشن ریپوزٹری کے لیے اصلاح - جیسا کہ وولفرم لینگویج کے بلٹ ان فنکشنز کے برخلاف - زیادہ فنکشنز کے ساتھ بنڈل ہونا چاہیے ہر مخصوص فنکشن کے نفاذ کے عمل۔
اب آئیے ایک ذخیرہ میں افعال کی جانچ کی ایک مثال دیکھیں۔ اس طرح کے فنکشنز کے لیے مستقل مزاجی کی توقعات قدرتی طور پر بلٹ ان لینگویج فنکشنز کے مقابلے میں بہت کم ہیں۔ یہ خاص طور پر ان صورتوں میں درست ہے جہاں افعال کا انحصار بیرونی وسائل جیسے APIs پر ہوتا ہے، یہ ضروری ہے کہ مسلسل مسلسل ٹیسٹ کروائے جائیں، جو خود بخود تصدیقی الگورتھم کے اندر ہوتے ہیں۔ nb فائل میں، آپ واضح طور پر تعریفیں (اضافی معلومات کے سیکشن میں) بیان کر سکتے ہیں اور ان پٹ اور آؤٹ پٹ سٹرنگز یا قسم کی مکمل کریکٹر آبجیکٹ کے ذریعے بیان کردہ زیادہ سے زیادہ ٹیسٹ بتا سکتے ہیں۔
نتیجے کے طور پر، فنکشن ریپوزٹری میں عمل درآمد کی متعدد پیچیدگیاں ہوں گی۔ کچھ کوڈ کی صرف ایک لائن ہوگی، دوسروں میں ہزاروں یا دسیوں ہزار لائنیں شامل ہوسکتی ہیں، ممکنہ طور پر بہت سے مددگار افعال کا استعمال کرتے ہوئے. ایسا فنکشن شامل کرنا کب قابل ہے جس کی وضاحت کے لیے بہت کم کوڈ کی ضرورت ہو؟ بنیادی طور پر، اگر کسی فنکشن کے لیے موجود ہے۔
فنکشن ریپوزٹری کا بنیادی مقصد (جیسا کہ اس کے نام سے پتہ چلتا ہے) زبان میں نئی خصوصیات متعارف کرانا ہے۔ اگر آپ نیا ڈیٹا شامل کرنا چاہتے ہیں یا
اصل میں دو طریقے ہیں۔ آپ ایک نئی آبجیکٹ کی قسم متعارف کروانا چاہتے ہیں جو فنکشن ریپوزٹری میں نئے فنکشنز میں استعمال ہوگی۔ اور اس صورت میں، آپ ہمیشہ صرف اس کی علامتی نمائندگی کو لکھ سکتے ہیں اور فنکشن ریپوزٹری میں فنکشنز کو ان پٹ یا آؤٹ پٹ کرتے وقت استعمال کرسکتے ہیں۔
لیکن کیا ہوگا اگر آپ کسی چیز کی نمائندگی کرنا چاہتے ہیں اور پھر Wolfram Language میں موجود فنکشنز کے ذریعے اس کی وضاحت کرنا چاہتے ہیں کہ آپ اس کے ساتھ کام کرنا چاہتے ہیں؟ Wolfram Language میں ہمیشہ اس کے لیے ہلکا پھلکا طریقہ کار ہوتا ہے، جسے کہا جاتا ہے۔
تو، فنکشن ریپوزٹری میں فنکشن کوڈ میں کیا ہو سکتا ہے؟
کیا Wolfram فیچر ریپوزٹری کے تمام کوڈ کو Wolfram میں لکھا جانا چاہیے؟ یقینی طور پر، بیرونی API کے اندر موجود کوڈ کو Wolfram زبان میں نہیں لکھا جانا چاہیے، جس سے زبان کا کوڈ بھی نہیں بنتا۔ درحقیقت، اگر آپ کو تقریباً کسی بھی بیرونی زبان یا لائبریری میں کوئی فنکشن ملتا ہے، تو آپ ایک ریپر بنا سکتے ہیں جو آپ کو Wolfram فنکشن ریپوزٹری میں استعمال کرنے کی اجازت دیتا ہے۔ (عام طور پر آپ کو اس کے لیے بلٹ ان فنکشنز کا استعمال کرنا چاہیے۔
تو ایسا کرنے کا کیا فائدہ؟ بنیادی طور پر، یہ آپ کو پورے مربوط Wolfram Language سسٹم اور اس کے سافٹ ویئر کی صلاحیتوں کے پورے متحد سیٹ کو استعمال کرنے کی اجازت دیتا ہے۔ اگر آپ کسی بیرونی لائبریری یا زبان سے بنیادی نفاذ حاصل کرتے ہیں، تو آپ Wolfram Language کے بھرپور علامتی ڈھانچے کو استعمال کر کے ایک آسان اعلیٰ سطحی فنکشن تشکیل دے سکتے ہیں جو صارفین کو پہلے سے نافذ کردہ کسی بھی فعالیت کو آسانی سے استعمال کرنے کی اجازت دیتا ہے۔ کم از کم، یہ ایک مثالی دنیا میں ممکن ہونا چاہیے جہاں لائبریریوں وغیرہ کی لوڈنگ کے تمام بلڈنگ بلاکس موجود ہوں، ایسی صورت میں وہ خود بخود Wolfram Language کے ذریعے سنبھال لیں گے۔ (واضح رہے کہ عملی طور پر اس کے ساتھ مسائل ہوسکتے ہیں۔
ویسے، جب آپ پہلی بار عام بیرونی لائبریریوں پر نظر ڈالتے ہیں، تو وہ اکثر بہت پیچیدہ لگتی ہیں کہ صرف چند فنکشنز کا احاطہ کیا جا سکتا ہے، لیکن بہت سے معاملات میں، زیادہ تر پیچیدگی لائبریری کے لیے درکار انفراسٹرکچر اور تمام فنکشنز کو بنانے سے ہوتی ہے۔ اس کی حمایت کریں تاہم، Wolfram Language کا استعمال کرتے وقت، بنیادی ڈھانچہ عام طور پر پہلے سے ہی پیکجوں میں بنایا جاتا ہے، اور اس لیے ان تمام سپورٹ فنکشنز کو تفصیل سے ظاہر کرنے کی ضرورت نہیں ہے، لیکن لائبریری میں صرف "سب سے اوپر" ایپلیکیشن کے مخصوص فنکشنز کے لیے فنکشنز بنائیں۔ .
علم کی بنیاد کا "ایکو سسٹم"
اگر آپ نے ایسے فنکشن لکھے ہیں جو آپ باقاعدگی سے استعمال کرتے ہیں، تو انہیں Wolfram Function Repository میں جمع کروائیں! اگر اس سے کچھ زیادہ نہیں نکلتا (زبان کی ترقی)، تب بھی آپ کے لیے فنکشنز کو ذاتی استعمال کے لیے استعمال کرنا زیادہ آسان ہوگا۔ تاہم، یہ سمجھنا منطقی ہے کہ اگر آپ فنکشنز کو باقاعدگی سے استعمال کرتے ہیں، تو شاید دوسرے صارفین بھی انہیں مفید پائیں گے۔
قدرتی طور پر، آپ اپنے آپ کو ایسی صورت حال میں پا سکتے ہیں جہاں آپ اپنے فنکشنز کو شیئر کرنے یا نجی معلومات کے وسائل تک رسائی حاصل کرنے کی صورت میں - یا نہیں چاہتے۔ یہاں تک کہ ایسے معاملات میں، آپ آسانی سے اپنے کلاؤڈ اکاؤنٹ میں فنکشنز کو تعینات کر سکتے ہیں،
Wolfram فنکشن ریپوزٹری میں آپ جو فنکشن جمع کراتے ہیں وہ کامل ہونا ضروری نہیں ہے۔ وہ صرف مفید ہونا ضروری ہے. یہ کلاسک یونکس دستاویزات میں "خرابی" سیکشن کی طرح ہے - "تعریفات سیکشن" میں ایک "مصنف کے نوٹس" سیکشن ہے جہاں آپ ان حدود، مسائل وغیرہ کو بیان کر سکتے ہیں جو آپ اپنے فنکشن کے بارے میں پہلے سے جانتے ہیں۔ مزید برآں، جب آپ اپنی خصوصیت کو ریپوزٹری میں جمع کراتے ہیں، تو آپ جمع کرانے والے نوٹ شامل کر سکتے ہیں جو کہ کیورٹرز کی ایک سرشار ٹیم پڑھے گی۔
ایک بار فیچر شائع ہونے کے بعد، اس کے صفحے کے نیچے ہمیشہ دو لنکس ہوتے ہیں:
بعض اوقات آپ صرف وولفرم فنکشن ریپوزٹری سے فنکشنز استعمال کرنا چاہتے ہیں، جیسے بلٹ ان فنکشنز، ان کے کوڈ کو دیکھے بغیر۔ تاہم، اگر آپ اندر ایک نظر ڈالنا چاہتے ہیں، تو ہمیشہ سب سے اوپر ایک نوٹ پیڈ بٹن ہوتا ہے۔ اس پر کلک کریں اور آپ کو اصل ڈیفینیشن نوٹ بک کی اپنی کاپی مل جائے گی جو فیچر ریپوزٹری میں جمع کرائی گئی تھی۔ کبھی کبھی آپ اسے اپنی ضروریات کے لیے بطور مثال استعمال کر سکتے ہیں۔ ایک ہی وقت میں، آپ اس فنکشن کی اپنی ترمیم بھی تیار کر سکتے ہیں۔ ہو سکتا ہے کہ آپ ان فنکشنز کو پوسٹ کرنا چاہیں جو آپ نے اپنے کمپیوٹر پر یا اپنے aphid کلاؤڈ اسٹوریج اکاؤنٹ میں ریپوزٹری سے پائے ہیں، شاید آپ انہیں فنکشن نالج بیس میں جمع کرنا چاہتے ہیں، شاید اصل فنکشن کے ایک بہتر، توسیع شدہ ورژن کے طور پر۔
مستقبل میں، ہم فیچر ریپوزٹریز کے لیے گٹ اسٹائل فورکنگ کو سپورٹ کرنے کا ارادہ رکھتے ہیں، لیکن فی الحال ہم اسے آسان رکھنے کی کوشش کر رہے ہیں، اور ہمارے پاس ہمیشہ زبان میں ہر فیچر کا صرف ایک ہی قبول شدہ ورژن ہوتا ہے۔ زیادہ کثرت سے نہیں (جب تک کہ ڈویلپر اپنی تیار کردہ خصوصیات کو برقرار رکھنا چھوڑ دیتے ہیں اور صارف کی گذارشات کا جواب نہیں دیتے ہیں)، خصوصیت کا اصل مصنف اس میں اپ ڈیٹس کا کنٹرول سنبھالتا ہے اور نئے ورژن جمع کرتا ہے، جن کا پھر جائزہ لیا جاتا ہے اور، اگر وہ جائزہ لینے کے عمل کو پاس کرتے ہیں۔ ، زبان میں شائع ہوا۔
آئیے اس سوال پر غور کریں کہ ترقی یافتہ افعال کی "ورژننگ" کیسے کام کرتی ہے۔ ابھی، جب آپ فنکشن ریپوزٹری سے کوئی فنکشن استعمال کرتے ہیں، تو اس کی تعریف آپ کے کمپیوٹر پر مستقل طور پر محفوظ ہو جائے گی (یا آپ کے کلاؤڈ اکاؤنٹ میں اگر آپ کلاؤڈ استعمال کر رہے ہیں)۔ اگر کسی خصوصیت کا نیا ورژن دستیاب ہے، تو اگلی بار جب آپ اسے استعمال کریں گے تو آپ کو اس کی اطلاع دینے والا پیغام موصول ہوگا۔ اور اگر آپ فنکشن کو نئے ورژن میں اپ ڈیٹ کرنا چاہتے ہیں، تو آپ اسے کمانڈ کا استعمال کر کے کر سکتے ہیں۔
Wolfram Function Repository کے بارے میں ایک خوبصورت چیز یہ ہے کہ کوئی بھی Wolfram Language پروگرام، کہیں بھی اس سے فنکشن استعمال کر سکتا ہے۔ اگر کوئی پروگرام نوٹ پیڈ میں ظاہر ہوتا ہے، تو یہ اکثر آسان ہوتا ہے کہ ذخیرہ کے افعال کو پڑھنے میں آسان "فنکشن بائنری آبجیکٹ" فنکشنز (شاید مناسب ورژن سیٹ کے ساتھ) کے طور پر فارمیٹ کریں۔
آپ ہمیشہ متن کا استعمال کرتے ہوئے فنکشن ریپوزٹری میں کسی بھی فنکشن تک رسائی حاصل کرسکتے ہیں۔
یہ کس طرح کام کرتا ہے؟
وولفرم ریپوزٹری میں فنکشنز کے اندر یہ بالکل اسی طرح کا استعمال کرتے ہوئے ممکن ہے۔
غور کریں
اندر آپ فنکشن کا استعمال کرتے ہوئے کچھ معلومات دیکھ سکتے ہیں۔
ریسورس فنکشن کا سیٹ اپ کیسے کام کرتا ہے؟ سب سے آسان ایک خالصتا مقامی کیس ہے۔ یہاں ایک مثال ہے جو ایک فنکشن لیتی ہے (اس معاملے میں صرف ایک خالص فنکشن) اور اسے دیئے گئے پروگرام سیشن کے لئے وسائل کے فنکشن کے طور پر بیان کرتی ہے۔
ایک بار جب آپ تعریف کر لیتے ہیں، تو آپ ریسورس فنکشن استعمال کر سکتے ہیں:
نوٹ کریں کہ اس فنکشن بلاب میں ایک سیاہ آئیکن ہے۔ . اس کا مطلب ہے کہ BLOB فنکشن سے مراد ان میموری ریسورس فنکشن ہے جو موجودہ سیشن کے لیے بیان کیا گیا ہے۔ ایک وسائل کی خصوصیت جو آپ کے کمپیوٹر یا کلاؤڈ اکاؤنٹ پر مستقل طور پر محفوظ ہوتی ہے اس میں سرمئی آئیکن ہوتا ہے۔ . اور وولفرم فیچر ریپوزٹری میں ایک آفیشل ریسورس فیچر کے لیے نارنجی رنگ کا آئیکن ہے۔ .
تو کیا ہوتا ہے جب آپ ڈیفینیشن نوٹ بک میں Expand مینو استعمال کرتے ہیں؟ سب سے پہلے، یہ نوٹ پیڈ میں تمام تعریفیں لیتا ہے اور ان سے ایک علامتی تخلیق کرتا ہے۔
آپ کے کمپیوٹر پر ریپوزٹری سے کسی فنکشن کی مقامی تعیناتی کمانڈ کا استعمال کرتے ہوئے کی جاتی ہے۔
اگر آپ فنکشن ریپوزٹری کے لیے جمع کرائیں بٹن پر کلک کرتے ہیں تو اس کے نیچے کیا ہوتا ہے۔
پہلے سے طے شدہ طور پر، گذارشات آپ کے Wolfram ID سے وابستہ نام کے تحت کی جاتی ہیں۔ لیکن اگر آپ کسی ترقیاتی ٹیم یا تنظیم کی جانب سے درخواست جمع کروا رہے ہیں، تو آپ کر سکتے ہیں۔
فنکشن نالج بیس میں آپ کے کسی بھی فنکشن کو جمع کرانے کے بعد، اسے نظرثانی کے لیے قطار میں کھڑا کردیا جائے گا۔ اگر آپ کو جواب میں تبصرے موصول ہوتے ہیں، تو وہ عام طور پر ایک ٹیکسٹ فائل کی شکل میں ہوں گے جس میں اضافی "تبصرہ سیلز" شامل کیے جائیں گے۔ آپ ہمیشہ جا کر اپنی درخواست کا اسٹیٹس چیک کر سکتے ہیں۔
کام میں کچھ باریکیاں
پہلی نظر میں ایسا لگتا ہے کہ آپ صرف ایک تعریفی نوٹ بک لے سکتے ہیں اور اسے لفظی طور پر فنکشن ریپوزٹری میں ڈال سکتے ہیں، تاہم، حقیقت میں اس میں بہت ساری باریکیاں شامل ہیں - اور ان کو سنبھالنے کے لیے کچھ خوبصورت پیچیدہ میٹا پروگرامنگ کرنے کی ضرورت ہوتی ہے، علامتی پروسیسنگ کو سنبھالنا۔ کوڈ کے طور پر جو فنکشن کی وضاحت کرتا ہے، اور نوٹ پیڈ خود بیان کیا گیا ہے۔ اس میں سے زیادہ تر اندرونی طور پر، پردے کے پیچھے ہوتا ہے، لیکن اس کے کچھ مضمرات ہوسکتے ہیں جو سمجھنے کے قابل ہیں اگر آپ فیچر نالج بیس میں حصہ ڈالنے جا رہے ہیں۔
پہلی فوری لطیفیت: جب آپ ڈیفینیشن نوٹ بک کو پُر کرتے ہیں، تو آپ آسانی سے ہر جگہ اپنے فنکشن کا حوالہ دے سکتے ہیں۔ مائی فنکشن، جو Wolfram Language میں کسی فنکشن کے لیے باقاعدہ نام کی طرح لگتا ہے، لیکن فنکشن ریپوزٹری دستاویزات کے لیے اسے تبدیل کر دیا گیا ہے۔
دوسری باریک بینی: جب آپ ڈیفینیشن نوٹ بک سے ریسورس فنکشن بناتے ہیں تو فنکشن ڈیفینیشن میں شامل تمام انحصار کو پکڑنا اور واضح طور پر شامل کرنا ضروری ہے۔ تاہم، اس بات کو یقینی بنانے کے لیے کہ تعریفیں ماڈیولر رہیں، آپ کو ہر چیز کو منفرد میں ڈالنے کی ضرورت ہے۔
عام طور پر آپ کو اس نام کی جگہ کو ترتیب دینے کے لیے استعمال ہونے والے کوڈ کا کوئی سراغ نہیں ملے گا۔ لیکن اگر کسی وجہ سے آپ اپنے فنکشن کے اندر ایک انڈر ایگزیکیٹڈ سمبل کو کہتے ہیں تو آپ دیکھیں گے کہ یہ علامت فنکشن کے اندرونی تناظر میں ہے۔ تاہم، ڈیفینیشن نوٹ پیڈ پر کارروائی کرتے وقت، کم از کم علامت خود فنکشن سے مطابقت رکھتی ہے۔
فنکشن ریپوزٹری نئے فنکشنز کی وضاحت کے لیے ہے۔ اور ان افعال میں آپشنز ہو سکتے ہیں۔ اکثر یہ پیرامیٹرز (مثال کے طور پر،
زیادہ تر فنکشنز صرف وہی کرتے ہیں جو انہیں ہر بار بلایا جاتا ہے، لیکن کچھ فنکشنز کو کسی خاص سیشن میں چلانے سے پہلے شروع کرنے کی ضرورت ہوتی ہے - اور اس مسئلے کو حل کرنے کے لیے، ڈیفینیشن سیکشن میں ایک "ابتدائی" سیکشن ہوتا ہے۔
ریپوزٹری کے فنکشنز دوسرے فنکشنز کو استعمال کرسکتے ہیں جو پہلے سے ریپوزٹری میں موجود ہیں؛ فنکشن ریپوزٹری کے لیے تعریفیں ترتیب دینے کے لیے جس میں دو (یا زیادہ) فنکشنز شامل ہوں جو ایک دوسرے کا حوالہ دیتے ہیں، آپ کو انہیں اپنے پروگرام سیشن میں تعینات کرنا ہوگا تاکہ آپ ان کی طرح حوالہ
ترقی کے امکانات۔ جب ذخیرہ واقعی بڑا ہو جائے تو کیا ہونا چاہیے؟
آج ہم صرف Wolfram Feature Repository کو لانچ کر رہے ہیں، لیکن وقت گزرنے کے ساتھ ساتھ ہم توقع کرتے ہیں کہ اس کے سائز اور فعالیت میں ڈرامائی طور پر اضافہ ہو سکتا ہے، اور جیسے جیسے یہ ترقی میں بڑھتا جائے گا وہاں مختلف مسائل پیدا ہوں گے جن کا ہم پہلے ہی اندازہ لگا رہے ہیں۔
پہلا مسئلہ فنکشن کے ناموں اور ان کی انفرادیت سے متعلق ہے۔ فنکشن ریپوزٹری کو اس طرح سے ڈیزائن کیا گیا ہے کہ وولفرم لینگویج میں بلٹ ان فنکشنز کی طرح، آپ کسی بھی فنکشن کو صرف اس کا نام بتا کر حوالہ دے سکتے ہیں۔ لیکن اس کا لامحالہ مطلب یہ ہے کہ فنکشن کے نام تمام ذخیرے میں عالمی سطح پر منفرد ہونے چاہئیں، تاکہ مثال کے طور پر صرف ایک ہی ہو
یہ شروع میں ایک بڑا مسئلہ لگتا ہے، لیکن یہ سمجھنے کے قابل ہے کہ یہ بنیادی طور پر وہی مسئلہ ہے جیسا کہ انٹرنیٹ ڈومینز یا سوشل میڈیا ہینڈلز کا۔ اور حقیقت یہ ہے کہ سسٹم کو صرف ایک رجسٹرار کی ضرورت ہے - اور یہ ان کرداروں میں سے ایک ہے جو ہماری کمپنی وولفرم فنکشن نالج بیس کے لیے انجام دے گی۔ (کسی ریپوزٹری کے پرائیویٹ ورژنز کے لیے، ان کے رجسٹرار ایڈمنسٹریٹر ہو سکتے ہیں۔) بلاشبہ، انٹرنیٹ ڈومین کو بغیر کسی چیز کے رجسٹر کیا جا سکتا ہے، لیکن فنکشن ریپوزٹری میں، فنکشن کا نام صرف اس صورت میں رجسٹر کیا جا سکتا ہے جب اس کی اصل تعریف موجود ہو۔ فنکشن
Wolfram فنکشن نالج بیس کو منظم کرنے میں ہمارے کردار کا ایک حصہ یہ یقینی بنانا ہے کہ فنکشن کے لیے منتخب کردہ نام فنکشن کی تعریف کے مطابق منطقی ہے اور یہ Wolfram Language کے نام دینے کے کنونشن کی پیروی کرتا ہے۔ ہمارے پاس Wolfram Language میں بلٹ ان فنکشنز کو نام دینے کا 30 سال سے زیادہ کا تجربہ ہے، اور ہماری کیوریٹرز کی ٹیم اس تجربے کو فنکشن ریپوزٹری میں بھی لائے گی۔ یقینا، ہمیشہ مستثنیات ہیں. مثال کے طور پر، کسی فنکشن کے لیے مختصر نام رکھنا افضل معلوم ہو سکتا ہے، لیکن لمبے، زیادہ مخصوص نام کے ساتھ "دفاع" کرنا بہتر ہے کیونکہ آپ کا مستقبل میں اس سے ملتا جلتا نام رکھنے کے خواہشمند کسی سے ملنے کا امکان کم ہے۔ .
(یہاں یہ بات ذہن نشین رہے کہ فنکشنز کو غیر واضح کرنے کے لیے محض کچھ ممبر ٹیگ شامل کرنے سے مطلوبہ اثر نہیں ہوگا۔ کیونکہ جب تک آپ ہمیشہ ٹیگ تفویض کرنے پر اصرار نہیں کرتے، آپ کو کسی بھی فنکشن کے لیے ڈیفالٹ ٹیگ کی وضاحت کرنے کی ضرورت ہوگی، اور مصنف کے ٹیگ بھی مختص کرنا ہوں گے۔ جس کے لیے دوبارہ عالمی ہم آہنگی کی ضرورت ہوگی۔)
جیسے جیسے وولفرم فنکشنز کا علمی بنیاد بڑھتا ہے، ان میں سے ایک مسئلہ جو ممکنہ طور پر پیدا ہو گا وہ ہے فنکشنز کی دریافت، جس کے لیے نظام فراہم کرتا ہے۔
Wolfram Language میں بلٹ ان فنکشنز کے لیے ایک نام نہاد پتہ لگانے کی پرت ہے جو فراہم کرتی ہے۔
Wolfram فنکشن ریپوزٹری کو ایک مستقل فنکشن ریپوزٹری کے طور پر کنفیگر کیا گیا ہے، جہاں اس میں کوئی بھی فنکشن ہمیشہ کام کرے گا۔ بلاشبہ، خصوصیات کے نئے ورژن دستیاب ہو سکتے ہیں، اور ہم توقع کرتے ہیں کہ یقیناً کچھ خصوصیات وقت کے ساتھ ساتھ متروک ہو جائیں گی۔ فنکشنز کام کریں گے اگر وہ پروگراموں میں استعمال ہوں، لیکن ان کے دستاویزات کے صفحات نئے، زیادہ جدید فنکشنز سے منسلک ہوں گے۔
Wolfram Feature Repository کو آپ کو نئی خصوصیات کو تیزی سے دریافت کرنے اور Wolfram زبان کو استعمال کرنے کے نئے طریقے سیکھنے میں مدد کرنے کے لیے ڈیزائن کیا گیا ہے۔ ہم بہت پر امید ہیں کہ فیچر ریپوزٹری میں جو کچھ دریافت کیا گیا ہے وہ آخر کار وولفرم لینگویج کے بنیادی حصے بننا سمجھ میں آجائے گا۔ پچھلی دہائی میں ہمارے پاس ایسا ہی سیٹ ہے۔
یہاں سب سے اہم بات یہ ہے کہ فنکشن ریپوزٹری میں ایک فنکشن ایسی چیز ہے جو ہر صارف کے لیے اس وقت استعمال کرنے کے لیے دستیاب ہے۔ یہ ممکن ہے کہ مادری زبان کی خصوصیت بہت بہتر اور زیادہ پرفارمنس ہو، لیکن فیچر ریپوزٹری صارفین کو تمام نئی خصوصیات تک فوری رسائی کی اجازت دے گی۔ اور، سب سے اہم بات، یہ تصور ہر کسی کو اپنی مرضی کے مطابق نئی خصوصیات شامل کرنے کی اجازت دیتا ہے۔
وولفرم زبان کی تاریخ میں اس سے پہلے یہ خیال اس طرح کام نہیں کرتا تھا جیسا کہ اس نے کیا ہے، لیکن اس مرحلے پر زبان میں اتنی محنت کی گئی ہے، اور زبان کے ڈیزائن کے اصولوں کی اتنی گہری سمجھ ہے کہ اب ایسا لگتا ہے۔ صارفین کی ایک بڑی کمیونٹی کے لیے ایسی خصوصیات شامل کرنا ممکن ہے جو ڈیزائن کی مستقل مزاجی کو برقرار رکھیں گی تاکہ وہ صارفین کی وسیع رینج کے لیے مفید ہوں۔
Wolfram Language صارف کمیونٹی میں ٹیلنٹ (؟) کا ایک ناقابل یقین جذبہ ہے۔ (یقیناً، اس کمیونٹی میں مختلف شعبوں میں بہت سے سرکردہ آر اینڈ ڈی لوگ شامل ہیں۔) مجھے امید ہے کہ وولفرم فیچر ریپوزٹری ٹیلنٹ کے اس جذبے کو کھولنے اور پھیلانے کے لیے ایک موثر پلیٹ فارم فراہم کرے گی۔ صرف مل کر ہی ہم کوئی ایسی چیز بنا سکتے ہیں جو اس علاقے کو نمایاں طور پر وسعت دے گا جس پر وولفرم لینگویج کمپیوٹنگ پیراڈائم کو لاگو کیا جا سکتا ہے۔
30 سال سے زیادہ عرصے میں، ہم نے Wolfram زبان کے ساتھ ایک طویل سفر طے کیا ہے۔ اب ایک ساتھ مل کر، اور بھی آگے بڑھیں۔ میں دنیا بھر میں وولفرم زبان کے تمام معزز صارفین کی پرزور ترغیب دیتا ہوں کہ وہ اس کے لیے ایک پلیٹ فارم کے طور پر فنکشنل ریپوزٹری کو استعمال کریں، ساتھ ہی نئے سافٹ ویئر پروجیکٹ جیسے فری وولفرام انجن فار ڈیولپرز۔
ماخذ: www.habr.com