مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

سلام، هابر! ترجمه ای از پست استفان ولفرام را به شما تقدیم می کنم "مخزن تابع Wolfram: راه اندازی یک پلت فرم باز برای گسترش زبان Wolfram".

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

پیش نیازهای یکنواختی زبان ولفرام

امروز ما همراه با زبان برنامه نویسی در آستانه موفقیت های بزرگ ایستاده ایم زبان ولفرام. همین سه هفته پیش راه اندازی کردیم موتور Wolfram رایگان برای توسعه دهندگانبرای کمک به کاربران ما برای ادغام زبان Wolfram در پروژه های نرم افزاری در مقیاس بزرگ خود. امروز در حال راه اندازی هستیم مخزن تابع Wolfram، به منظور ارائه یک پلت فرم هماهنگ برای توابع ایجاد شده برای گسترش زبان Wolfram، و همچنین یک مخزن از توابع را برای هر کسی که می تواند در توسعه محصول نرم افزار ما کمک کند باز می کنیم.

مخزن تابع Wolfram چیزی است که به دلیل ماهیت منحصر به فرد زبان Wolfram نه تنها به عنوان یک زبان برنامه نویسی، بلکه به عنوان یک زبان برنامه نویسی امکان پذیر شده است. زبان محاسباتی در مقیاس کامل. در زبان‌های برنامه‌نویسی سنتی، افزودن قابلیت‌های جدید قابل توجه معمولاً شامل ایجاد کل کتابخانه‌های اضافی است که ممکن است هنگام استفاده با هم کار کنند یا نکنند. با این حال، در زبان ولفرام خیلی چیزها در خود زبان ساخته شده است، که می توان به طور قابل توجهی عملکرد آن را با افزودن توابع جدید که بلافاصله در ساختار کل نگر کل زبان ادغام می شوند، گسترش داد.

به عنوان مثال، مخزن تابع Wolfram قبلاً شامل است 532 ویژگی جدید در 26 دسته موضوعی ساختار یافته است:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

به همین ترتیب بیش از 6000 عملکرد استاندارد، که در زبان Wolfram تعبیه شده است، هر تابع از مخزن دارای یک صفحه مستندات با شرح دقیق آنها و نمونه هایی از کار است:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

برای رسیدن به صفحه، شی بالا (عملکرد BLOB) را کپی کنید، آن را در خط ورودی قرار دهید و سپس تابع را اجرا کنید - این تابع قبلاً در زبان Wolfram ساخته شده است و به طور پیش فرض با شروع با پشتیبانی می شود. نسخه 12.0:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

در اینجا لازم به ذکر است که هنگام پردازش LogoQRCode برای مثال، نیازی به راه‌اندازی یک «کتابخانه پردازش تصویر» ندارید - زیرا ما قبلاً یک روش الگوریتمی سازگار و با دقت را در زبان Wolfram پیاده‌سازی کرده‌ایم. پردازش تصویر، که می تواند بلافاصله توسط توابع مختلف زبان گرافیکی پردازش شود:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

امیدوارم با حمایت جامعه فوق العاده و با استعدادکه در چند دهه گذشته (بر اساس زبان ولفرام) در حال رشد و گسترش بوده است. مخزن تابع Wolfram به آینده قابل پیش‌بینی این امکان را می‌دهد که به طور قابل توجهی دامنه عملکردهای (احتمالاً مهم، تخصصی در زمینه‌های مختلف علم و فناوری) موجود در زبان را گسترش دهد. بنابراین، امکان استفاده از محتوای زبان (کارکردهای داخلی آن) و اصول توسعهکه بر اساس زبان پیاده سازی می شوند. (در اینجا لازم به ذکر است که زبان Wolfram در حال حاضر بیش از سابقه 30 ساله توسعه و رشد پایدار).
توابع موجود در مخزن ممکن است حاوی قطعات کوچک یا بزرگی از کد باشد که به زبان Wolfram نوشته شده است. به عنوان مثال، اینها می توانند تماس باشند API ها و سرویس های خارجی یا کتابخانه های خارجی به زبان های دیگر. ویژگی منحصر به فرد این رویکرد این است که وقتی به عملکردهای سطح کاربر دقت کنید، هیچ تناقض احتمالی وجود نخواهد داشت زیرا این رویکرد بر روی ساختار سازگار زبان Wolfram ساخته شده است - و هر تابع به طور خودکار به درستی کار می کند - دقیقاً همانطور که او باید.
پوسته و ساختار برنامه‌نویسی مخزن ویژگی Wolfram به گونه‌ای طراحی شده است که همه می‌توانند به ساده‌ترین و راحت‌ترین روش در امر مشترک مشارکت داشته باشند - در واقع، فقط با پر کردن فایل متنی notepad (با پسوند nb) WL. توابع خودکار داخلی به شما امکان می دهد تا عملکردهای جدید اضافه شده به مخزن را بررسی کنید تا از ادغام آنها با زبان اطمینان حاصل کنید. شرکت ما به جای پیچیدگی زیاد توابع جدید، روی طیف وسیعی از کاربرانی که می‌توانند توابع خود را در زبان ادغام کنند، شرط می‌بندد - و اگرچه روند بررسی وجود دارد، ما بر چیزی مانند این اصرار نداریم. تجزیه و تحلیل طراحی پر زحمت یا استانداردهای سختگیرانه برای کامل بودن و قابلیت اطمینان ویژگی‌های کاربر جدید، برخلاف آزمایش دقیق‌تر ویژگی‌های تعبیه‌شده در زبان اصلی که ما استفاده می‌کنیم.

معاوضه ها و جزئیات زیادی در این رویکرد وجود دارد، اما هدف ما بهینه سازی مخزن ویژگی Wolfram هم برای تجربه کاربر و هم برای اطمینان از اینکه ویژگی های کاربر جدید به طور معناداری در توسعه زبان کمک می کند، است. همانطور که رشد می کنیم، شکی ندارم که باید روش های جدیدی را برای پردازش و اعتبارسنجی توابع ساخته شده در مخزن ابداع کنیم، به ویژه برای سازماندهی تعداد زیادی از توابع و یافتن موارد مورد نیاز کاربران. با این حال، مایه دلگرمی است که مسیری که انتخاب کرده‌ایم شروع خوبی است. من شخصا چندین ویژگی اضافه کرد به پایگاه داده اصلی بسیاری از آنها بر اساس کدهایی هستند که من شخصاً برای مدتی طولانی توسعه داده ام. و فقط چند دقیقه طول کشید تا آنها را به مخزن فشار دهم. اکنون که آنها در مخزن هستند، در نهایت می توانم - بلافاصله و در هر زمان - از این توابع در صورت نیاز استفاده کنم، بدون اینکه نگران جستجوی فایل ها، دانلود بسته ها و غیره باشم.

افزایش بهره وری در عین کاهش هزینه ها

حتی قبل از اینترنت، راه‌هایی برای اشتراک‌گذاری کدهای Wolfram Language وجود داشت (اولین پروژه متمرکز اصلی ما بود منبع ریاضی، برای Mathematica در سال 1991 بر اساس CD-ROM و غیره ایجاد شد). البته رویکرد پیشنهادی برای پیاده سازی بر اساس مخزن تابع Wolfram ابزار قدرتمندتر و قابل اعتمادتری برای اجرای وظایف فوق است.

برای بیش از 30 سال، شرکت ما با پشتکار تلاش کرده است تا یکپارچگی ساختار زبان Wolfram را حفظ کند، و این برای اطمینان از اینکه زبان Wolfram نه تنها به یک زبان برنامه نویسی، بلکه به یک زبان برنامه نویسی تبدیل می شود، حیاتی است. زبان محاسباتی کامل. و بنابراین، جوهر رویکرد برای اجرای مخزن تابع Wolfram استفاده از یک رویکرد یکپارچه برای برنامه نویسی و توسعه توابع جدید است که به طور متوالی اضافه می شوند و در چارچوب زبان قرار می گیرند تا بتواند توسعه و تکامل یابد.

فرآیندهای محاسباتی مختلفی در ساختار پیاده سازی هر تابع رخ می دهد. در اینجا لازم به ذکر است که لازم است عملکرد دارای ظاهری واضح و یکنواخت و خوانایی بصری برای کاربر باشد. در این زمینه، توابع داخلی زبان Wolfram با بیش از 6000 مثال متوالی از نحوه برنامه ریزی صحیح توابع ارائه شده است (اینها ما هستند. ویدیوهای برنامه نویسی زندهکه شامل صدها ساعت فرآیند ایجاد برنامه های استاندارد). چیزی که این رویکرد در نهایت باعث می‌شود که مخزن ویژگی Wolfram قادر به عملکرد خوب باشد، ماهیت ساختاری زبان Wolfram است، با تعداد زیادی کتابخانه‌های اضافی و متنوع که قبلاً در زبان ساخته شده‌اند. به عنوان مثال، اگر تابعی دارید که تصاویر را پردازش می کند، یا آرایه های پراکندهیا ساختارهای مولکولیو داده های جغرافیایی یا برخی دیگر - بازنمایی نمادین ثابت آنها از قبل در زبان وجود دارد، و به لطف این، عملکرد شما بلافاصله با سایر عملکردهای زبان سازگار می شود.

ایجاد یک مخزن که در واقع به خوبی کار می کند یک کار فرابرنامه نویسی جالب است. به عنوان مثال، بیش از حد محدودیت ها در برنامه اجازه نمی دهد تا یکپارچگی و جهانی بودن الگوریتم را به دست آوریم. همانطور که با تعداد ناکافی محدودیت های عملکردی، نمی توانید دنباله ای از اجرای الگوریتم به اندازه کافی صحیح را پیاده سازی کنید. چندین نمونه قبلی از اجرای مصالحه این رویکردها، که توسط شرکت ما اجرا شده بود، کاملاً پایدار عمل کردند - اینها عبارتند از: پروژه تظاهرات تنگستن، در سال 2007 راه اندازی شد و اکنون به صورت آنلاین با بیش از 12000 نسخه نمایشی تعاملی با کاربر اجرا می شود. که در پایگاه داده Wolfram بیش از 600 پایگاه داده آماده قابل استفاده در زبان ولفرام وجود دارد و ذخیره سازی شبکه عصبی Wolfram تقریبا هر هفته با شبکه های عصبی جدید پر می شود (در حال حاضر 118 مورد از آنها وجود دارد) و آنها بلافاصله از طریق عملکرد متصل می شوند. NetModel در زبان ولفرام

همه نمونه های فوق دارای یک ویژگی اساسی هستند - اشیا و توابع جمع آوری شده در پروژه دارای درجه بسیار بالایی از ساختار و توزیع فرآیندها هستند. البته، جزئیات ساختار آنچه یک نسخه آزمایشی یا یک شبکه عصبی یا چیز دیگری است می‌تواند بسیار متفاوت باشد، اما ساختار اساسی برای هر مخزن فعلی همیشه یکسان باقی می‌ماند. پس نظر شما کاربر گرامی در مورد ایجاد چنین مخزنی که افزونه هایی به زبان Wolfram اضافه می کند چیست؟ زبان Wolfram به گونه ای طراحی شده است که بسیار انعطاف پذیر است، بنابراین می توان آن را به هر طریقی گسترش داد و تغییر داد. این شرایط برای توانایی ایجاد سریع پروژه های مختلف نرم افزاری در مقیاس بزرگ در زبان Wolfram بسیار مهم است. در اینجا لازم به ذکر است که با افزایش انعطاف پذیری زبان، هزینه پروژه های اجرا شده در چنین زبانی ناگزیر افزایش خواهد یافت. این به این دلیل است که کاربر هر چه بیشتر از چنین زبانی استفاده کند، عملکرد اختصاصی بیشتری دریافت می کند، اما نباید فراموش کنیم که این رویکرد ممکن است جنبه های منفی نیز از نظر عدم اطمینان از سازگاری یکنواخت ماژول های برنامه داشته باشد.

یک مشکل رایج در مورد کتابخانه ها در زبان های برنامه نویسی سنتی وجود دارد - برای مثال اگر از یک کتابخانه استفاده کنید، کد به درستی کار می کند، اما اگر سعی کنید از چندین کتابخانه استفاده کنید، هیچ تضمینی وجود ندارد که آنها به درستی با یکدیگر تعامل داشته باشند. . همچنین، در زبان های برنامه نویسی سنتی - بر خلاف یک زبان محاسباتی کامل - هیچ راهی برای تضمین وجود نمایش های داخلی سازگار برای هر توابع یا نوع داده ای غیر از ساختارهای اصلی آنها وجود ندارد. اما، در واقع، مشکل حتی بزرگ‌تر از آن چیزی است که در نگاه اول به نظر می‌رسد: اگر کسی در حال ساخت یک عملکرد عمودی در مقیاس بزرگ باشد، بدون هزینه‌های هنگفت برنامه‌نویسی پروژه متمرکز که به زبان Wolfram وارد می‌کنیم، غیرممکن است که دستیابی به ثبات بنابراین مهم است که همه ماژول های نرم افزار همیشه به درستی با هم کار کنند.

بنابراین ایده پشت مخزن ویژگی Wolfram این است که با اضافه کردن برنامه‌های افزودنی به زبان در قطعات نسبتاً کوچک کد از طریق ویژگی‌های فردی که به‌عنوان ماژول‌های منسجم آسان‌تر توسعه داده می‌شوند، از مشکلی که در بالا ذکر شد اجتناب شود. همانطور که گفته شد، ویژگی های برنامه نویسی وجود دارد که نمی توان آنها را با استفاده از توابع فردی راحت کرد (و شرکت ما در حال برنامه ریزی برای انتشار یک الگوریتم برنامه نویسی بهینه در آینده نزدیک برای کمک به پیاده سازی بسته های نرم افزاری در مقیاس بزرگ است). با این حال، بر اساس توابعی که قبلاً در زبان Wolfram تعبیه شده است، امکانات برنامه نویسی زیادی وجود دارد که بر اساس توابع جداگانه پیاده سازی می شوند. ایده در اینجا این است که با تلاش نسبتاً کمی برنامه نویسی می توان تعدادی عملکرد جدید و بسیار مفید ایجاد کرد که انسجام کافی در طراحی ایجاد کند، آنها به خوبی با یکدیگر هماهنگ شوند و همچنین، علاوه بر این، آنها در آینده به راحتی و به طور گسترده در زبان مورد استفاده قرار خواهد گرفت.

این رویکرد البته یک سازش است. اگر یک بسته بزرگتر پیاده سازی می شد، می توان دنیای کاملا جدیدی از عملکرد را تصور کرد که بسیار قدرتمند و مفید خواهد بود. اگر نیاز به دریافت عملکرد جدیدی وجود دارد که با همه چیز مطابقت دارد، اما مایل نیستید تلاش زیادی برای توسعه پروژه انجام دهید، متأسفانه این می تواند منجر به کاهش دامنه پروژه شما شود. ایده پشت مخزن ویژگی Wolfram این است که عملکردی را برای یک بخش مشخص از پروژه ارائه دهد؛ این رویکرد عملکرد قدرتمندی را اضافه می کند و در عین حال حفظ ثبات خوب در یک پروژه برنامه نویسی را آسان تر می کند.

به افزودن توابع سفارشی به مخزن تابع کمک کنید

تیم ما سخت کار کرده است تا کاربران بتوانند در ویژگی های مخزن Wolfram سهولت داشته باشند. روی دسکتاپ (از قبل در نسخه 12.0، می توانید به سادگی از طریق برگه های منوی اصلی به طور متوالی بروید: File > New > RepositoryItem > Function Repository Item و دریافت خواهید کرد:نوت بوک تعریف" (به صورت برنامه ای در داخل میز کار. همچنین می توانید از تابع آنالوگ استفاده کنید - ایجاد نوت بوک["FunctionResource"]):

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

دو مرحله اصلی وجود دارد که باید انجام دهید: اول، در واقع کد عملکرد خود را بنویسید و دوم، اسنادی را بنویسید که نشان می دهد عملکرد شما چگونه باید کار کند.
برای مشاهده نمونه کارهایی که باید انجام دهید، روی دکمه "Open Sample" در بالا کلیک کنید:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

اساساً، شما در حال تلاش برای ایجاد چیزی شبیه به یک تابع داخلی در زبان Wolfram هستید. به جز اینکه می تواند کاری بسیار خاص تر از یک عملکرد داخلی انجام دهد. در عین حال، انتظارات در مورد کامل بودن و قابلیت اطمینان آن بسیار کمتر خواهد بود.
شما باید نامی را برای تابع خود انتخاب کنید که از دستورالعمل های نامگذاری تابع زبان Wolfram پیروی کند. علاوه بر این، باید اسنادی را برای عملکرد خود ایجاد کنید، مشابه توابع داخلی زبان. بعداً در این مورد با جزئیات بیشتر صحبت خواهم کرد. در حال حاضر، فقط توجه کنید که در ردیف دکمه های بالای فایل دفترچه یادداشت تعریف یک دکمه وجود دارد. "دستورالعمل های سبک"، که توضیح می دهد چه کاری باید انجام شود و یک دکمه Tools که ابزارهایی را برای قالب بندی اسناد عملکرد شما ارائه می دهد.
هنگامی که مطمئن شدید همه چیز به درستی پر شده است و آماده هستید، روی دکمه "بررسی" کلیک کنید. این کاملا طبیعی است که شما هنوز تمام جزئیات را متوجه نشده اید. بنابراین عملکرد "بررسی" به طور خودکار اجرا می شود و بسیاری از بررسی های سبک و سازگاری را انجام می دهد. اغلب، فوراً از شما می‌خواهد که اصلاحات را تأیید و بپذیرید (به عنوان مثال: "این خط باید با دو نقطه تمام شود" و از شما می‌خواهد که یک دو نقطه را وارد کنید). گاهی اوقات او از شما می خواهد که خودتان چیزی را اضافه یا تغییر دهید. ما دائماً ویژگی‌های جدیدی را به عملکرد خودکار دکمه Check اضافه می‌کنیم، اما اساساً هدف آن این است که اطمینان حاصل شود که هر چیزی که به مخزن ویژگی ارسال می‌کنید تا حد امکان از دستورالعمل‌های سبک پیروی می‌کند.

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

بنابراین، پس از اجرای "بررسی"، می توانید از "پیش نمایش" استفاده کنید. "Preview" یک پیش نمایش از صفحه مستنداتی که برای عملکرد خود تعریف کرده اید ایجاد می کند. همچنین می توانید یک پیش نمایش برای یک فایل ایجاد شده در رایانه خود یا برای یک فایل واقع در فضای ذخیره سازی ابری ایجاد کنید. اگر به دلایلی از آنچه در پیش نمایش می بینید راضی نیستید، کافی است به عقب برگردید و اصلاحات لازم را انجام دهید و سپس دوباره روی دکمه Preview کلیک کنید.
اکنون آماده هستید تا عملکرد خود را به مخزن فشار دهید. دکمه Deploy چهار گزینه را در اختیار شما قرار می دهد:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

نکته مهم در این مرحله این است که می توانید تابع خود را به مخزن تابع Wolfram ارسال کنید تا در دسترس همه باشد. در عین حال، می توانید عملکرد خود را برای تعداد محدودی از کاربران نیز قرار دهید. به عنوان مثال، می توانید تابعی ایجاد کنید که به صورت محلی در رایانه شما میزبانی شود تا در هنگام استفاده از آن رایانه خاص در دسترس باشد. یا می توانید آن را در خود پست کنید حساب ابری، به طوری که هنگام اتصال به ابر در دسترس شما باشد. همچنین می توانید این ویژگی را از طریق حساب ابری خود به صورت عمومی میزبانی کنید (استقرار دهید). این در مخزن مرکزی ویژگی Wolfram نخواهد بود، اما می‌توانید به شخصی یک URL بدهید که به او امکان می‌دهد ویژگی شما را از حساب شما دریافت کند. (در آینده، ما همچنین از مخازن مرکزی در سراسر شرکت خود پشتیبانی خواهیم کرد.)

بنابراین فرض کنید می‌خواهید عملکرد خود را به پایگاه دانش تابع Wolfram ارسال کنید. برای انجام این کار، روی دکمه "ارسال" به مخزن کلیک کنید. پس در این لحظه چه اتفاقی می افتد؟ درخواست شما بلافاصله برای بررسی و تایید توسط تیم اختصاصی ما از متصدیان در صف قرار می گیرد.

همانطور که درخواست شما در مراحل تأیید پیشرفت می کند (که معمولاً چندین روز طول می کشد)، ارتباطاتی در مورد وضعیت آن و احتمالاً پیشنهاداتی برای استفاده در آینده دریافت خواهید کرد. اما هنگامی که ویژگی شما تایید شد، فوراً در مخزن ویژگی Wolfram منتشر خواهد شد و برای استفاده همه در دسترس خواهد بود. (و این در ظاهر خواهد شد خلاصه اخبار از ویژگی های جدید و غیره)

چه چیزی باید در انبار باشد؟

لازم به ذکر است که شرکت ما از استانداردهای بسیار بالایی برای کامل بودن، قابلیت اطمینان و کیفیت کلی برخوردار است و از 6000+ عملکردی که در بیش از 30 سال گذشته در زبان Wolfram ساخته ایم، همگی شرایط فوق را برآورده می کنند. هدف مخزن توابع Wolfram استفاده از تمام ساختار و عملکردی است که قبلاً در زبان Wolfram وجود دارد تا تا آنجا که ممکن است توابع سبک تر (یعنی توابع عملکرد بالاتر) اضافه شود.

البته، توابع موجود در مخزن تابع Wolfram باید با اصول طراحی زبان Wolfram مطابقت داشته باشند - تا بتوانند به طور کامل با سایر توابع و انتظارات کاربران در مورد نحوه عملکرد صحیح عملکرد تعامل داشته باشند. با این حال، توابع لازم نیست از کامل بودن یا قابلیت اطمینان یکسانی برخوردار باشند.

در توابع داخلی زبان Wolfram، ما سخت کار می کنیم تا توابع برنامه نویسی را تا حد امکان عمومی کنیم. همانطور که گفته شد، هنگامی که در مخزن تابع Wolfram وجود دارد هیچ اشکالی وجود ندارد که یک تابع در آن وجود داشته باشد که به سادگی موارد بسیار خاص اما مفید را مدیریت کند. به عنوان مثال، تابع SendMailFromNotebook می تواند فایل ها را در یک قالب خاص دریافت کند و به یک روش خاص ایمیل ایجاد کند. نمودار چند ضلعی نمودارهایی را فقط با رنگ های خاص و برچسب زدن و غیره ایجاد می کند.

نکته دیگر مربوط به توابع داخلی این است که شرکت ما تمام تلاش خود را برای رسیدگی به تمام موارد غیر معمول، رسیدگی صحیح به ورودی های نادرست و غیره انجام می دهد. در یک مخزن تابع، وجود یک تابع خاص که موارد اصلی حل یک مشکل را مدیریت می کند و همه موارد دیگر را نادیده می گیرد، کاملا طبیعی است.

نکته واضح این است که بهتر است توابعی داشته باشیم که بیشتر انجام دهند و آن را بهتر انجام دهند، اما بهینه سازی برای یک مخزن توابع - برخلاف توابع داخلی زبان Wolfram - باید توابع بیشتری همراه با توابع بیشتری داشته باشد تا اینکه به دنبال آن باشد. فرآیندهای پیاده سازی هر تابع خاص.

حالا بیایید نمونه ای از تست توابع در یک مخزن را بررسی کنیم. انتظارات سازگاری برای چنین توابعی به طور طبیعی بسیار کمتر از توابع زبان داخلی است. این امر مخصوصاً در مواردی که توابع به منابع خارجی مانند APIها وابسته هستند، صادق است، انجام آزمایش‌های ثابت به طور مداوم مهم است، که به طور خودکار در الگوریتم‌های تأیید اتفاق می‌افتد. در فایل nb، می‌توانید به صراحت تعاریف را مشخص کنید (در بخش اطلاعات اضافی) و به تعداد تست‌هایی که توسط رشته‌های ورودی و خروجی یا اشیاء با کاراکتر کامل از نوع تعریف شده‌اند، مشخص کنید. تست تایید، به اندازه ای که صلاح می دانید. علاوه بر این، سیستم دائماً در تلاش است تا نمونه‌های مستندی را که ارائه می‌دهید به یک فرآیند تأیید تبدیل کند (و گاهی اوقات این می‌تواند کاملاً منابع فشرده باشد، برای مثال، برای تابعی که نتیجه آن به اعداد تصادفی یا زمان روز بستگی دارد).

در نتیجه، مخزن تابع تعدادی پیچیدگی اجرایی خواهد داشت. برخی از آنها تنها یک خط کد خواهند بود، برخی دیگر ممکن است شامل هزاران یا ده ها هزار خط باشند که احتمالاً از بسیاری از توابع کمکی استفاده می کنند. چه زمانی ارزش افزودن تابعی را دارد که برای تعریف به کد بسیار کمی نیاز دارد؟ اساساً اگر برای یک تابع وجود داشته باشد نام یادگاری خوب، که کاربران اگر آن را در یک قطعه کد ببینند به راحتی متوجه می شوند، سپس می توان آن را از قبل اضافه کرد. در غیر این صورت، احتمالاً بهتر است هر بار که نیاز به استفاده از آن دارید، کد را دوباره به برنامه خود اضافه کنید.

هدف اصلی یک مخزن تابع (همانطور که از نامش پیداست) معرفی ویژگی های جدید به زبان است. اگر می خواهید داده های جدید اضافه کنید یا موجودیت های جدید، استفاده کنید مخزن داده ولفرام. اما اگر بخواهید انواع جدیدی از اشیاء را برای محاسبات خود معرفی کنید چه؟

در واقع دو راه وجود دارد. ممکن است بخواهید یک نوع شی جدید را معرفی کنید که در توابع جدید در مخزن تابع استفاده می شود. و در این مورد، همیشه می توانید فقط نمایش نمادین آن را یادداشت کنید و هنگام وارد کردن یا خروجی کردن توابع در مخزن تابع از آن استفاده کنید.

اما اگر بخواهید یک شی را نمایش دهید و سپس از طریق توابع موجود در زبان Wolfram تعریف کنید که می خواهید با آن کار کنید، چه؟ زبان ولفرام همیشه مکانیزم سبکی برای این کار داشته است که به آن می گویند ارزش های بالا. با برخی محدودیت ها (به ویژه برای عملکردهایی که نمی تواند استدلال های آنها را ارزیابی کند، یک مخزن تابع به شما امکان می دهد به سادگی یک تابع را نشان دهید و مقادیری را برای آن تعریف کنید. (افزایش انتظار سازگاری هنگام ایجاد یک طرح اصلی جدید که به طور کامل در زبان Wolfram یکپارچه شده است، به طور کلی رویه بسیار مهمی است که صرفاً با افزایش هزینه پروژه به دست نمی آید و کاری است که شرکت ما به عنوان بخشی از پروژه ها انجام می دهد. برای توسعه طولانی مدت زبان، این وظیفه هدفی نیست که به عنوان بخشی از توسعه مخزن تعیین شود).

بنابراین، چه چیزی ممکن است در کد تابع در یک مخزن تابع باشد؟ همه چیز در زبان Wolfram ساخته شده استالبته (حداقل اگر نشان دهنده نباشد تهدیدات برای امنیت و عملکرد خود برنامه، به عنوان یک محیط محاسباتی) و همچنین هر تابعی از مخزن تابع. با این حال، عملکردهای دیگری نیز وجود دارد: یک تابع در یک مخزن تابع می تواند یک API یا in را فراخوانی کند ولفرام ابریا از منبع دیگری. البته در این مورد خطراتی نیز وجود دارد. با توجه به این واقعیت که هیچ تضمینی وجود ندارد که API تغییر نخواهد کرد و عملکرد در فروشگاه عملکرد متوقف می شود. برای کمک به شناسایی مشکلاتی مانند این، یادداشتی در صفحه مستندات (در بخش نیازمندی‌ها) برای هر ویژگی وجود دارد که به چیزی بیش از عملکرد زبان Wolfram داخلی متکی است. (البته، وقتی صحبت از داده های واقعی می شود، حتی با این عملکرد نیز ممکن است مشکلاتی وجود داشته باشد - زیرا داده های دنیای واقعی دائماً در حال تغییر هستند و گاهی اوقات حتی تعاریف و ساختار آن تغییر می کند.)

آیا تمام کدهای مخزن ویژگی Wolfram باید در Wolfram نوشته شود؟ مطمئناً کد داخل API خارجی نباید به زبان Wolfram نوشته شود که حتی کد زبان را هم نمی سازد. در واقع، اگر تابعی را تقریباً در هر زبان خارجی یا کتابخانه ای پیدا کردید، می توانید یک بسته بندی ایجاد کنید که به شما امکان می دهد از آن در مخزن تابع Wolfram استفاده کنید. (معمولاً برای این کار باید از توابع داخلی استفاده کنید ارزیابی خارجی یا عملکرد خارجی در کد زبان Wolfram.)

پس فایده انجام این کار چیست؟ اساسا، این به شما امکان می دهد از کل سیستم یکپارچه Wolfram Language و کل مجموعه یکپارچه نرم افزاری آن استفاده کنید. اگر پیاده‌سازی پایه را از یک کتابخانه یا زبان خارجی بدست آورید، می‌توانید از ساختار نمادین غنی زبان Wolfram برای ایجاد یک عملکرد سطح بالای مناسب استفاده کنید که به کاربران امکان می‌دهد به راحتی از هر عملکردی که قبلاً پیاده‌سازی شده‌اند استفاده کنند. حداقل، این باید در یک دنیای ایده‌آل که در آن همه بلوک‌های سازنده بارگیری کتابخانه‌ها و غیره وجود دارند، امکان‌پذیر باشد، در این صورت آنها به‌طور خودکار توسط زبان Wolfram مدیریت می‌شوند. (لازم به ذکر است که در عمل ممکن است مشکلاتی با راه اندازی زبان های خارجی سیستم کامپیوتری خاص و فضای ذخیره سازی ابری ممکن است مشکلات امنیتی بیشتری ایجاد کند).

به هر حال، وقتی برای اولین بار به کتابخانه های خارجی معمولی نگاه می کنید، اغلب به نظر پیچیده تر از آن به نظر می رسند که فقط در چند عملکرد پوشش داده شوند، اما در بسیاری از موارد، بسیاری از پیچیدگی ها از ایجاد زیرساخت های مورد نیاز برای کتابخانه و همه عملکردها ناشی می شود. حمایتش کن با این حال، هنگام استفاده از زبان Wolfram، معمولاً زیرساخت از قبل در بسته ها ساخته شده است، و بنابراین نیازی به افشای جزئیات همه این توابع پشتیبانی وجود ندارد، بلکه فقط توابعی را برای "بالاترین" توابع خاص برنامه در کتابخانه ایجاد کنید. .

"اکوسیستم" پایگاه دانش

اگر توابعی را نوشته اید که به طور منظم از آنها استفاده می کنید، آنها را به مخزن تابع Wolfram ارسال کنید! اگر چیزی بیشتر از این (توسعه زبان) به دست نیامد، حتی در این صورت استفاده از توابع برای استفاده شخصی برای شما بسیار راحت تر خواهد بود. با این حال، منطقی است که فرض کنیم اگر به طور منظم از توابع استفاده کنید، شاید سایر کاربران نیز آنها را مفید بدانند.

به طور طبیعی، ممکن است در موقعیتی قرار بگیرید که نتوانید - یا نمی خواهید - عملکردهای خود را به اشتراک بگذارید یا در صورت دسترسی به منابع اطلاعاتی خصوصی. حتی در چنین مواردی، می توانید به سادگی توابع را در حساب ابری خود مستقر کنید. مشخص کردن حقوق دسترسی به آنها (اگر سازمان شما دارد ابر خصوصی Wolfram Enterprise، سپس به زودی می تواند مخزن ویژگی های خصوصی خود را میزبانی کند که می تواند از داخل سازمان شما مدیریت شود و تعیین کنید که آیا بازدیدها توسط کاربران شخص ثالث مشاهده شود یا خیر.)

توابعی که به مخزن تابع Wolfram ارسال می کنید لازم نیست کامل باشند. آنها فقط باید مفید باشند. این کمی شبیه بخش "خطاها" در مستندات کلاسیک یونیکس است - در "بخش تعاریف" یک بخش "یادداشت‌های نویسنده" وجود دارد که در آن می‌توانید محدودیت‌ها، مشکلات و غیره را که قبلاً در مورد عملکرد خود می‌دانید، توضیح دهید. علاوه بر این، هنگامی که ویژگی خود را به مخزن ارسال می کنید، می توانید یادداشت های ارسالی را اضافه کنید که توسط یک تیم اختصاصی از متصدیان خوانده می شود.

هنگامی که یک ویژگی منتشر می شود، صفحه آن همیشه دارای دو پیوند در پایین است:در مورد این ویژگی پیام ارسال کنید"و"در انجمن Wolfram بحث کنید" اگر یادداشتی را پیوست می‌کنید (مثلاً درباره اشکالات به من بگویید)، می‌توانید کادری را علامت بزنید که می‌گوید می‌خواهید پیام و اطلاعات تماس شما با نویسنده ویژگی به اشتراک گذاشته شود.

گاهی اوقات شما فقط می خواهید از توابع موجود در مخزن تابع Wolfram، مانند توابع داخلی، بدون نگاه کردن به کد آنها استفاده کنید. با این حال، اگر می خواهید به داخل آن نگاهی بیندازید، همیشه یک دکمه Notepad در بالا وجود دارد. روی آن کلیک کنید و کپی خود را از دفترچه یادداشت تعریف اصلی که به مخزن ویژگی ارسال شده است، دریافت خواهید کرد. گاهی اوقات می توانید از آن به عنوان مثال برای نیازهای خود استفاده کنید. در همان زمان، شما همچنین می توانید اصلاح خود را از این تابع ایجاد کنید. ممکن است بخواهید این توابع را که از مخزن پیدا کرده اید در رایانه خود یا در حساب ذخیره سازی ابری شته خود پست کنید، شاید بخواهید آنها را به پایگاه دانش عملکرد ارسال کنید، شاید به عنوان نسخه بهبودیافته و توسعه یافته عملکرد اصلی.

در آینده، ما قصد داریم از فورکینگ به سبک Git برای مخازن ویژگی ها پشتیبانی کنیم، اما در حال حاضر سعی می کنیم آن را ساده نگه داریم، و همیشه فقط یک نسخه پذیرفته شده از هر ویژگی را در زبان داریم. اغلب اوقات (مگر اینکه توسعه‌دهندگان از حفظ ویژگی‌هایی که توسعه داده‌اند دست بکشند و به ارسال‌های کاربران پاسخ دهند)، نویسنده اصلی ویژگی کنترل به‌روزرسانی‌های آن را در دست می‌گیرد و نسخه‌های جدید را ارائه می‌کند، که سپس بررسی می‌شوند و در صورت گذراندن مراحل بازبینی ، به زبان منتشر شده است.

بیایید این سوال را در نظر بگیریم که چگونه "نسخه سازی" توابع توسعه یافته کار می کند. در حال حاضر، هنگامی که از یک تابع از مخزن تابع استفاده می کنید، تعریف آن به طور دائم در رایانه شما (یا در حساب ابری شما اگر از ابر استفاده می کنید) ذخیره می شود. اگر نسخه جدیدی از یک ویژگی در دسترس باشد، دفعه بعد که از آن استفاده می کنید پیامی دریافت خواهید کرد که به شما اطلاع می دهد. و اگر می خواهید عملکرد را به نسخه جدید به روز کنید، می توانید با استفاده از دستور این کار را انجام دهید به روز رسانی منابع. («function blob» در واقع اطلاعات نسخه‌سازی بیشتری را ذخیره می‌کند و ما قصد داریم در آینده این اطلاعات را برای کاربران خود در دسترس‌تر کنیم.)

یکی از چیزهای زیبا در مورد مخزن تابع Wolfram این است که هر برنامه Wolfram Language در هر مکانی می تواند از توابع آن استفاده کند. اگر برنامه ای در یک دفترچه یادداشت ظاهر می شود، اغلب راحت است که توابع مخزن را به عنوان توابع "شئ باینری عملکرد" ​​(شاید با یک مجموعه نسخه مناسب) خوانا فرمت کنید.

همیشه می توانید با استفاده از متن به هر تابعی در مخزن تابع دسترسی داشته باشید تابع منبع[...]. و اگر کد یا اسکریپت هایی را مستقیماً برای Wolfram Engine بنویسید، به عنوان مثال، بسیار راحت است با استفاده از ویرایشگر کد IDE یا متنی (به ویژه باید توجه داشت که مخزن تابع کاملاً سازگار است موتور Wolfram رایگان برای توسعه دهندگان).

چگونه کار می کند؟

در داخل توابع موجود در مخزن Wolfram این کار دقیقاً با استفاده از همان امکان پذیر است سیستم های منابع پایه ها، مانند تمام مخازن موجود دیگر ما (ذخیره اطلاعات، مخزن شبکه عصبی, مجموعه پروژه های دمو و غیره)، مانند سایر منابع سیستم Wolfram، ResourceFunction در نهایت بر اساس عملکرد ResourceObject.

در نظر بگیرید ResourceFunction:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

در داخل می توانید برخی از اطلاعات را با استفاده از عملکرد مشاهده کنید اطلاعات:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

راه اندازی یک تابع منبع چگونه کار می کند؟ ساده ترین مورد یک مورد کاملاً محلی است. در اینجا یک مثال است که یک تابع (در این مورد فقط یک تابع خالص) را می گیرد و آن را به عنوان یک تابع منبع برای یک جلسه برنامه مشخص تعریف می کند:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

هنگامی که تعریف را انجام دادید، می توانید از تابع منبع استفاده کنید:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

توجه داشته باشید که یک نماد سیاه در این حباب تابع وجود دارد مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram. این بدان معناست که تابع BLOB به تابع منبع درون حافظه تعریف شده برای جلسه جاری اشاره دارد. یک ویژگی منبعی که به طور دائم در رایانه یا حساب ابری شما ذخیره می شود دارای نماد خاکستری است مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram. و یک نماد نارنجی برای یک ویژگی منبع رسمی در مخزن ویژگی Wolfram وجود دارد مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram.

بنابراین وقتی از منوی Expand در Notebook Definition استفاده می کنید چه اتفاقی می افتد؟ ابتدا تمام تعاریف موجود در دفترچه یادداشت را می گیرد و از آنها یک نماد ایجاد می کند ResourceObject). (و اگر از یک IDE یا برنامه مبتنی بر متن استفاده می کنید، می توانید به صراحت ایجاد کنید ResourceObject)

استقرار محلی یک تابع از یک مخزن در رایانه شما با استفاده از دستور انجام می شود LocalCache برای یک شی منبع که آن را به عنوان ذخیره کنید LocalObject در سیستم فایل شما استقرار در یک حساب ابری با استفاده از دستور انجام می شود CloudDeploy برای یک شی منبع، و استقرار ابر عمومی است CloudPublish. در تمام موارد ResourceRegister همچنین برای ثبت نام تابع منبع استفاده می شود، بنابراین تابع منبع["نام"] کار خواهد کرد.

اگر روی دکمه ارسال برای یک مخزن تابع کلیک کنید، چه اتفاقی در زیر آن می افتد منبع ارسال کنید بر روی یک شی منبع فراخوانی شده است. (و اگر از رابط ورودی متن استفاده می کنید، می توانید تماس بگیرید منبع ارسال کنید به طور مستقیم.)

به طور پیش فرض، ارسال ها با نام مرتبط با Wolfram ID شما انجام می شود. اما اگر از طرف یک تیم توسعه یا سازمان برنامه ای ارسال می کنید، می توانید شناسه ناشر جداگانه تنظیم کنید و در عوض از آن به عنوان نام برای تعامل با دیدگاه های خود استفاده کنید.

پس از اینکه هر یک از توابع خود را به پایگاه دانش تابع ارسال کردید، برای بررسی در صف قرار می گیرد. اگر نظراتی را در پاسخ دریافت کنید، معمولاً به شکل یک فایل متنی با "سلول های نظر" اضافی اضافه می شوند. همیشه می توانید با مراجعه به سایت وضعیت درخواست خود را بررسی کنید پورتال اعضای سیستم منابع. اما پس از تایید ویژگی شما، (از طریق ایمیل) به شما اطلاع داده می شود و ویژگی شما در مخزن ویژگی Wolfram پست می شود.

برخی نکات ظریف در کار

در نگاه اول ممکن است به نظر برسد که می‌توانید فقط یک دفترچه تعریف را بردارید و آن را به کلمه در یک مخزن توابع قرار دهید، با این حال، در واقع ظرافت‌های زیادی درگیر است - و مدیریت آنها مستلزم انجام برخی فرابرنامه‌نویسی بسیار پیچیده، مدیریت پردازش نمادین است. به عنوان کدی که تابع را تعریف می کند و خود Notepad نیز تعریف می شود. بیشتر اینها در داخل، پشت صحنه اتفاق می‌افتد، اما اگر می‌خواهید به پایگاه دانش ویژگی‌ها کمک کنید، می‌تواند پیامدهایی داشته باشد که ارزش درک آن را دارد.

اولین ظرافت فوری: هنگامی که دفترچه Definition را پر می کنید، می توانید به سادگی با استفاده از نامی مانند به عملکرد خود در همه جا مراجعه کنید. MyFunction، که مانند یک نام معمولی برای یک تابع در زبان Wolfram به نظر می رسد، اما برای اسناد مخزن تابع این جایگزین شده است. تابع منبع["MyFunction"] این همان چیزی است که کاربران در هنگام کار با عملکرد از آن استفاده می کنند.

نکته ظریف دوم: وقتی یک تابع منبع را از Notebook تعریف می‌سازید، تمام وابستگی‌های درگیر در تعریف تابع باید ثبت شده و صریحاً گنجانده شوند. با این حال، برای اطمینان از اینکه تعاریف ماژولار باقی می مانند، باید همه چیز را در یک حالت منحصر به فرد قرار دهید فضای نام. (البته، توابعی که همه این کارها را انجام می دهند، در مخزن تابع هستند.)

معمولاً هیچ ردی از کد مورد استفاده برای پیکربندی این فضای نام را نخواهید دید. اما اگر به دلایلی یک نماد اجرا نشده را در داخل تابع خود فراخوانی کنید، خواهید دید که این نماد در بافت داخلی تابع قرار دارد. با این حال، هنگام پردازش دفترچه یادداشت تعریف، حداقل نماد مربوط به خود تابع است قابل تنظیم برای بهترین نمایش به عنوان یک BLOB کاربردی به جای یک شخصیت خام در زمینه داخلی.

مخزن تابع برای تعریف توابع جدید است. و این توابع ممکن است گزینه هایی داشته باشند. اغلب این پارامترها (به عنوان مثال، روش یا سایز عکس) می تواند برای توابع داخلی و همچنین برای آنهایی که نمادهای داخلی برای آنها وجود دارد استفاده شود. اما گاهی اوقات یک ویژگی جدید ممکن است به گزینه های جدیدی نیاز داشته باشد. به منظور حفظ مدولار بودن، این پارامترها باید نمادهایی باشند که در یک زمینه داخلی منحصر به فرد (یا چیزی شبیه توابع کل منبع، یعنی خودشان) تعریف شده باشند. برای سادگی، مخزن تابع به شما اجازه می دهد تا گزینه های جدیدی را در تعاریف رشته تعریف کنید. و برای راحتی کاربر، این تعاریف (با فرض استفاده از آنها OptionValue и OptionsPattern) همچنین پردازش می شوند تا هنگام استفاده از توابع، پارامترها نه تنها به عنوان رشته، بلکه به عنوان نمادهای سراسری با نام های مشابه نیز مشخص شوند.

اکثر توابع هر بار که فراخوانی می شوند به سادگی همان کاری را انجام می دهند که قرار است انجام دهند، اما برخی از توابع قبل از اجرا در یک جلسه خاص باید مقداردهی اولیه شوند - و برای حل این مشکل، یک بخش "Initialization" در بخش Definition وجود دارد.

توابع از یک مخزن می توانند از توابع دیگری استفاده کنند که قبلاً در مخزن هستند؛ برای تنظیم تعاریف برای یک مخزن تابع که شامل دو (یا چند) تابع است که به یکدیگر ارجاع می دهند، باید آنها را در جلسه برنامه خود مستقر کنید تا بتوانید مرجع مانند آنها تابع منبع["نام"]، سپس می توانید ترکیبی از این توابع مورد نیاز خود را ایجاد کنید، مثال هایی (من متوجه نشدم) و یک تابع جدید را بر اساس مواردی که قبلاً قبلاً ارسال شده است به مخزن اضافه کنید. (یا قبلاً یا قبلاً - هر دو کلمه دست و پا چلفتی هستند)

چشم انداز توسعه وقتی مخزن واقعا بزرگ شود چه اتفاقی باید بیفتد؟

امروز ما به تازگی مخزن ویژگی Wolfram را راه اندازی می کنیم، اما با گذشت زمان انتظار داریم که اندازه و عملکرد آن به طور چشمگیری افزایش یابد، و با رشد آن در توسعه، مشکلات مختلفی وجود خواهد داشت که قبلاً پیش بینی می کردیم ممکن است ایجاد شود.

اولین مشکل به نام توابع و منحصر به فرد بودن آنها مربوط می شود. مخزن تابع به گونه ای طراحی شده است که مانند توابع داخلی در زبان Wolfram، شما می توانید به هر تابع داده شده به سادگی با تعیین نام آن ارجاع دهید. اما این ناگزیر به این معنی است که نام توابع باید در سراسر مخزن منحصر به فرد باشد، به طوری که، برای مثال، تنها یک تابع منبع["MyFavoriteFunction"].

این ممکن است در ابتدا یک مشکل بزرگ به نظر برسد، اما ارزش درک این را دارد که اساساً همان مشکل مواردی مانند دامنه های اینترنتی یا دسته های رسانه های اجتماعی است. و واقعیت این است که سیستم به سادگی نیاز به یک ثبت کننده دارد - و این یکی از نقش هایی است که شرکت ما برای پایگاه دانش عملکرد Wolfram انجام خواهد داد. (برای نسخه‌های خصوصی یک مخزن، ثبت‌کننده‌های آن‌ها ممکن است مدیر باشند.) البته، یک دامنه اینترنتی را می‌توان بدون داشتن چیزی روی آن ثبت کرد، اما در یک مخزن تابع، تنها زمانی می‌توان نام تابع را ثبت کرد که تعریف واقعی از آن وجود داشته باشد. کارکرد.

بخشی از نقش ما در مدیریت پایگاه دانش تابع Wolfram این است که اطمینان حاصل کنیم نام انتخاب شده برای یک تابع با توجه به تعریف تابع منطقی است و از قراردادهای نامگذاری زبان Wolfram پیروی می کند. ما بیش از 30 سال تجربه نام‌گذاری توابع داخلی به زبان Wolfram داریم و تیم متصدیان ما این تجربه را به مخزن تابع نیز می‌آورند. البته همیشه استثنا وجود دارد. به عنوان مثال، ممکن است ترجیح داده شود که یک نام کوتاه برای برخی از تابع ها داشته باشید، اما بهتر است با نامی طولانی تر و خاص تر "دفاع کنید" زیرا احتمال کمتری وجود دارد که با فردی روبرو شوید که بخواهد نام تابع مشابهی را در آینده ایجاد کند. .

(در اینجا لازم به ذکر است که صرفاً افزودن چند تگ عضو به ابهام‌زدایی توابع، اثر مورد نظر را نخواهد داشت. زیرا تا زمانی که اصرار نداشته باشید که همیشه یک برچسب را اختصاص دهید، باید برای هر تابع معین یک تگ پیش‌فرض تعریف کنید و همچنین تگ‌های نویسنده را نیز اختصاص دهید. که باز هم به هماهنگی جهانی نیاز دارد.)

همانطور که پایگاه دانش توابع Wolfram رشد می کند، یکی از مشکلاتی که احتمالاً به وجود می آید، قابلیت کشف توابع است که سیستم برای آن فراهم می کند. تابع جستجو (و فایل های تعریف ممکن است شامل کلمات کلیدی و غیره باشند). برای توابع داخلی در زبان Wolfram، انواع ارجاعات متقابل در اسناد وجود دارد تا به "تبلیغ" توابع کمک کند. توابع موجود در مخزن تابع می توانند به توابع داخلی اشاره کنند. اما برعکسش چطور؟ برای انجام این کار، ما قصد داریم با طرح های مختلف آزمایش کنیم تا توابع مخزن را در صفحات اسناد برای توابع داخلی نشان دهیم.

برای توابع داخلی در زبان Wolfram یک لایه به اصطلاح تشخیص وجود دارد که توسط شبکه "صفحات راهنما"، که لیست های سازمان یافته ای از ویژگی های مربوط به مناطق خاص را ارائه می دهد. متعادل کردن صحیح صفحات man همیشه دشوار است و با رشد زبان Wolfram، صفحات man اغلب نیاز به سازماندهی کامل دارند. قرار دادن توابع از یک مخزن به دسته‌های گسترده، و حتی تقسیم مداوم آن دسته‌ها بسیار آسان است، اما داشتن صفحات مرجع زبان به‌درستی سازمان‌دهی شده بسیار ارزشمندتر است. هنوز مشخص نیست که چگونه می توان آنها را برای کل پایگاه دانش عملکرد ایجاد کرد. مثلا، CreateResourceObjectGallery در مخزن ویژگی، هر کسی می‌تواند یک صفحه وب حاوی «انتخاب‌های» خود از مخزن پست کند:

مخزن تابع Wolfram: پلت فرم دسترسی باز برای پسوندهای زبان Wolfram

مخزن تابع Wolfram به عنوان یک مخزن تابع پایدار پیکربندی شده است، جایی که هر تابعی در آن همیشه کار می کند. البته ممکن است نسخه‌های جدیدی از ویژگی‌ها در دسترس باشند و ما انتظار داریم که برخی از ویژگی‌ها به مرور زمان منسوخ شوند. اگر توابع در برنامه ها استفاده شوند کار خواهند کرد، اما صفحات اسناد آنها به توابع جدید و پیشرفته تر پیوند داده می شود.

مخزن ویژگی Wolfram برای کمک به شما در کشف سریع ویژگی های جدید و یادگیری روش های جدید برای استفاده از زبان Wolfram طراحی شده است. ما بسیار خوشبین هستیم که برخی از مواردی که در مخزن ویژگی کاوش شده است در نهایت منطقی به نظر می رسد که به بخش های داخلی زبان اصلی Wolfram تبدیل شود. در دهه گذشته ما مجموعه مشابهی داشته ایم ویژگی هایی که در اصل در Wolfram | آلفا. و یکی از درس‌هایی که از این تجربه گرفته می‌شود این است که دستیابی به استانداردهای کیفیت و سازگاری که در هر چیزی که در زبان Wolfram ساخته شده است روی آن تمرکز می‌کنیم، نیاز به کار زیادی دارد که اغلب از تلاش اولیه برای اجرای ایده دشوارتر است. با این حال، یک تابع در پایگاه دانش تابع می تواند به عنوان یک اثبات بسیار مفید برای مفهوم یک تابع آینده باشد که در نهایت ممکن است در زبان Wolfram ساخته شود.

مهمترین چیز در اینجا این است که یک تابع در یک مخزن تابع چیزی است که در حال حاضر برای استفاده هر کاربر در دسترس است. این امکان وجود دارد که یک ویژگی زبان مادری بتواند بسیار بهتر و کارآمدتر باشد، اما یک مخزن ویژگی به کاربران این امکان را می دهد که فوراً به همه ویژگی های جدید دسترسی داشته باشند. و مهمتر از همه، این مفهوم به همه اجازه می دهد تا هر ویژگی جدیدی را که می خواهند اضافه کنند.

پیش از این در تاریخ زبان ولفرام، این ایده به خوبی کار نمی کرد، اما در این مرحله آنقدر تلاش برای زبان و درک عمیقی از اصول طراحی زبان انجام شده است که اکنون بسیار به نظر می رسد. برای جامعه بزرگی از کاربران امکان افزودن ویژگی هایی وجود دارد که یکپارچگی طراحی را حفظ می کند تا آنها را برای طیف گسترده ای از کاربران مفید کند.

روحیه باورنکردنی استعداد(؟) در جامعه کاربران Wolfram Language وجود دارد. (البته این انجمن شامل بسیاری از افراد برجسته تحقیق و توسعه در زمینه های مختلف می شود.) امیدوارم که مخزن ویژگی Wolfram بستری موثر برای بازگشایی و انتشار این روحیه استعداد فراهم کند. فقط با هم می توانیم چیزی ایجاد کنیم که به طور قابل توجهی منطقه ای را که می توان پارادایم محاسباتی زبان Wolfram را در آن اعمال کرد گسترش دهد.

در بیش از 30 سال، ما راه طولانی را با زبان Wolfram پیموده ایم. حالا با هم، بیایید جلوتر برویم. من قویاً همه کاربران محترم زبان Wolfram در سراسر جهان را تشویق می کنم که از مخزن عملکردی به عنوان یک پلتفرم برای این کار و همچنین پروژه نرم افزاری جدید مانند Free Wolfram Engine برای توسعه دهندگان استفاده کنند.

منبع: www.habr.com

اضافه کردن نظر