سلام، هابر! ترجمه ای از پست استفان ولفرام را به شما تقدیم می کنم
پیش نیازهای یکنواختی زبان ولفرام
امروز ما همراه با زبان برنامه نویسی در آستانه موفقیت های بزرگ ایستاده ایم
مخزن تابع Wolfram چیزی است که به دلیل ماهیت منحصر به فرد زبان Wolfram نه تنها به عنوان یک زبان برنامه نویسی، بلکه به عنوان یک زبان برنامه نویسی امکان پذیر شده است.
به عنوان مثال، مخزن تابع Wolfram قبلاً شامل است
به همین ترتیب بیش از
برای رسیدن به صفحه، شی بالا (عملکرد BLOB) را کپی کنید، آن را در خط ورودی قرار دهید و سپس تابع را اجرا کنید - این تابع قبلاً در زبان Wolfram ساخته شده است و به طور پیش فرض با شروع با پشتیبانی می شود.
در اینجا لازم به ذکر است که هنگام پردازش
امیدوارم با حمایت
توابع موجود در مخزن ممکن است حاوی قطعات کوچک یا بزرگی از کد باشد که به زبان Wolfram نوشته شده است. به عنوان مثال، اینها می توانند تماس باشند
پوسته و ساختار برنامهنویسی مخزن ویژگی Wolfram به گونهای طراحی شده است که همه میتوانند به سادهترین و راحتترین روش در امر مشترک مشارکت داشته باشند - در واقع، فقط
معاوضه ها و جزئیات زیادی در این رویکرد وجود دارد، اما هدف ما بهینه سازی مخزن ویژگی Wolfram هم برای تجربه کاربر و هم برای اطمینان از اینکه ویژگی های کاربر جدید به طور معناداری در توسعه زبان کمک می کند، است. همانطور که رشد می کنیم، شکی ندارم که باید روش های جدیدی را برای پردازش و اعتبارسنجی توابع ساخته شده در مخزن ابداع کنیم، به ویژه برای سازماندهی تعداد زیادی از توابع و یافتن موارد مورد نیاز کاربران. با این حال، مایه دلگرمی است که مسیری که انتخاب کردهایم شروع خوبی است. من شخصا
افزایش بهره وری در عین کاهش هزینه ها
حتی قبل از اینترنت، راههایی برای اشتراکگذاری کدهای Wolfram Language وجود داشت (اولین پروژه متمرکز اصلی ما بود
برای بیش از 30 سال، شرکت ما با پشتکار تلاش کرده است تا یکپارچگی ساختار زبان Wolfram را حفظ کند، و این برای اطمینان از اینکه زبان Wolfram نه تنها به یک زبان برنامه نویسی، بلکه به یک زبان برنامه نویسی تبدیل می شود، حیاتی است.
فرآیندهای محاسباتی مختلفی در ساختار پیاده سازی هر تابع رخ می دهد. در اینجا لازم به ذکر است که لازم است عملکرد دارای ظاهری واضح و یکنواخت و خوانایی بصری برای کاربر باشد. در این زمینه، توابع داخلی زبان Wolfram با بیش از 6000 مثال متوالی از نحوه برنامه ریزی صحیح توابع ارائه شده است (اینها ما هستند.
ایجاد یک مخزن که در واقع به خوبی کار می کند یک کار فرابرنامه نویسی جالب است. به عنوان مثال، بیش از حد محدودیت ها در برنامه اجازه نمی دهد تا یکپارچگی و جهانی بودن الگوریتم را به دست آوریم. همانطور که با تعداد ناکافی محدودیت های عملکردی، نمی توانید دنباله ای از اجرای الگوریتم به اندازه کافی صحیح را پیاده سازی کنید. چندین نمونه قبلی از اجرای مصالحه این رویکردها، که توسط شرکت ما اجرا شده بود، کاملاً پایدار عمل کردند - اینها عبارتند از:
همه نمونه های فوق دارای یک ویژگی اساسی هستند - اشیا و توابع جمع آوری شده در پروژه دارای درجه بسیار بالایی از ساختار و توزیع فرآیندها هستند. البته، جزئیات ساختار آنچه یک نسخه آزمایشی یا یک شبکه عصبی یا چیز دیگری است میتواند بسیار متفاوت باشد، اما ساختار اساسی برای هر مخزن فعلی همیشه یکسان باقی میماند. پس نظر شما کاربر گرامی در مورد ایجاد چنین مخزنی که افزونه هایی به زبان Wolfram اضافه می کند چیست؟ زبان Wolfram به گونه ای طراحی شده است که بسیار انعطاف پذیر است، بنابراین می توان آن را به هر طریقی گسترش داد و تغییر داد. این شرایط برای توانایی ایجاد سریع پروژه های مختلف نرم افزاری در مقیاس بزرگ در زبان Wolfram بسیار مهم است. در اینجا لازم به ذکر است که با افزایش انعطاف پذیری زبان، هزینه پروژه های اجرا شده در چنین زبانی ناگزیر افزایش خواهد یافت. این به این دلیل است که کاربر هر چه بیشتر از چنین زبانی استفاده کند، عملکرد اختصاصی بیشتری دریافت می کند، اما نباید فراموش کنیم که این رویکرد ممکن است جنبه های منفی نیز از نظر عدم اطمینان از سازگاری یکنواخت ماژول های برنامه داشته باشد.
یک مشکل رایج در مورد کتابخانه ها در زبان های برنامه نویسی سنتی وجود دارد - برای مثال اگر از یک کتابخانه استفاده کنید، کد به درستی کار می کند، اما اگر سعی کنید از چندین کتابخانه استفاده کنید، هیچ تضمینی وجود ندارد که آنها به درستی با یکدیگر تعامل داشته باشند. . همچنین، در زبان های برنامه نویسی سنتی - بر خلاف یک زبان محاسباتی کامل - هیچ راهی برای تضمین وجود نمایش های داخلی سازگار برای هر توابع یا نوع داده ای غیر از ساختارهای اصلی آنها وجود ندارد. اما، در واقع، مشکل حتی بزرگتر از آن چیزی است که در نگاه اول به نظر میرسد: اگر کسی در حال ساخت یک عملکرد عمودی در مقیاس بزرگ باشد، بدون هزینههای هنگفت برنامهنویسی پروژه متمرکز که به زبان Wolfram وارد میکنیم، غیرممکن است که دستیابی به ثبات بنابراین مهم است که همه ماژول های نرم افزار همیشه به درستی با هم کار کنند.
بنابراین ایده پشت مخزن ویژگی Wolfram این است که با اضافه کردن برنامههای افزودنی به زبان در قطعات نسبتاً کوچک کد از طریق ویژگیهای فردی که بهعنوان ماژولهای منسجم آسانتر توسعه داده میشوند، از مشکلی که در بالا ذکر شد اجتناب شود. همانطور که گفته شد، ویژگی های برنامه نویسی وجود دارد که نمی توان آنها را با استفاده از توابع فردی راحت کرد (و شرکت ما در حال برنامه ریزی برای انتشار یک الگوریتم برنامه نویسی بهینه در آینده نزدیک برای کمک به پیاده سازی بسته های نرم افزاری در مقیاس بزرگ است). با این حال، بر اساس توابعی که قبلاً در زبان Wolfram تعبیه شده است، امکانات برنامه نویسی زیادی وجود دارد که بر اساس توابع جداگانه پیاده سازی می شوند. ایده در اینجا این است که با تلاش نسبتاً کمی برنامه نویسی می توان تعدادی عملکرد جدید و بسیار مفید ایجاد کرد که انسجام کافی در طراحی ایجاد کند، آنها به خوبی با یکدیگر هماهنگ شوند و همچنین، علاوه بر این، آنها در آینده به راحتی و به طور گسترده در زبان مورد استفاده قرار خواهد گرفت.
این رویکرد البته یک سازش است. اگر یک بسته بزرگتر پیاده سازی می شد، می توان دنیای کاملا جدیدی از عملکرد را تصور کرد که بسیار قدرتمند و مفید خواهد بود. اگر نیاز به دریافت عملکرد جدیدی وجود دارد که با همه چیز مطابقت دارد، اما مایل نیستید تلاش زیادی برای توسعه پروژه انجام دهید، متأسفانه این می تواند منجر به کاهش دامنه پروژه شما شود. ایده پشت مخزن ویژگی Wolfram این است که عملکردی را برای یک بخش مشخص از پروژه ارائه دهد؛ این رویکرد عملکرد قدرتمندی را اضافه می کند و در عین حال حفظ ثبات خوب در یک پروژه برنامه نویسی را آسان تر می کند.
به افزودن توابع سفارشی به مخزن تابع کمک کنید
تیم ما سخت کار کرده است تا کاربران بتوانند در ویژگی های مخزن Wolfram سهولت داشته باشند. روی دسکتاپ (از قبل در
دو مرحله اصلی وجود دارد که باید انجام دهید: اول، در واقع کد عملکرد خود را بنویسید و دوم، اسنادی را بنویسید که نشان می دهد عملکرد شما چگونه باید کار کند.
برای مشاهده نمونه کارهایی که باید انجام دهید، روی دکمه "Open Sample" در بالا کلیک کنید:
اساساً، شما در حال تلاش برای ایجاد چیزی شبیه به یک تابع داخلی در زبان Wolfram هستید. به جز اینکه می تواند کاری بسیار خاص تر از یک عملکرد داخلی انجام دهد. در عین حال، انتظارات در مورد کامل بودن و قابلیت اطمینان آن بسیار کمتر خواهد بود.
شما باید نامی را برای تابع خود انتخاب کنید که از دستورالعمل های نامگذاری تابع زبان Wolfram پیروی کند. علاوه بر این، باید اسنادی را برای عملکرد خود ایجاد کنید، مشابه توابع داخلی زبان. بعداً در این مورد با جزئیات بیشتر صحبت خواهم کرد. در حال حاضر، فقط توجه کنید که در ردیف دکمه های بالای فایل دفترچه یادداشت تعریف یک دکمه وجود دارد.
هنگامی که مطمئن شدید همه چیز به درستی پر شده است و آماده هستید، روی دکمه "بررسی" کلیک کنید. این کاملا طبیعی است که شما هنوز تمام جزئیات را متوجه نشده اید. بنابراین عملکرد "بررسی" به طور خودکار اجرا می شود و بسیاری از بررسی های سبک و سازگاری را انجام می دهد. اغلب، فوراً از شما میخواهد که اصلاحات را تأیید و بپذیرید (به عنوان مثال: "این خط باید با دو نقطه تمام شود" و از شما میخواهد که یک دو نقطه را وارد کنید). گاهی اوقات او از شما می خواهد که خودتان چیزی را اضافه یا تغییر دهید. ما دائماً ویژگیهای جدیدی را به عملکرد خودکار دکمه Check اضافه میکنیم، اما اساساً هدف آن این است که اطمینان حاصل شود که هر چیزی که به مخزن ویژگی ارسال میکنید تا حد امکان از دستورالعملهای سبک پیروی میکند.
بنابراین، پس از اجرای "بررسی"، می توانید از "پیش نمایش" استفاده کنید. "Preview" یک پیش نمایش از صفحه مستنداتی که برای عملکرد خود تعریف کرده اید ایجاد می کند. همچنین می توانید یک پیش نمایش برای یک فایل ایجاد شده در رایانه خود یا برای یک فایل واقع در فضای ذخیره سازی ابری ایجاد کنید. اگر به دلایلی از آنچه در پیش نمایش می بینید راضی نیستید، کافی است به عقب برگردید و اصلاحات لازم را انجام دهید و سپس دوباره روی دکمه Preview کلیک کنید.
اکنون آماده هستید تا عملکرد خود را به مخزن فشار دهید. دکمه Deploy چهار گزینه را در اختیار شما قرار می دهد:
نکته مهم در این مرحله این است که می توانید تابع خود را به مخزن تابع Wolfram ارسال کنید تا در دسترس همه باشد. در عین حال، می توانید عملکرد خود را برای تعداد محدودی از کاربران نیز قرار دهید. به عنوان مثال، می توانید تابعی ایجاد کنید که به صورت محلی در رایانه شما میزبانی شود تا در هنگام استفاده از آن رایانه خاص در دسترس باشد. یا می توانید آن را در خود پست کنید
بنابراین فرض کنید میخواهید عملکرد خود را به پایگاه دانش تابع Wolfram ارسال کنید. برای انجام این کار، روی دکمه "ارسال" به مخزن کلیک کنید. پس در این لحظه چه اتفاقی می افتد؟ درخواست شما بلافاصله برای بررسی و تایید توسط تیم اختصاصی ما از متصدیان در صف قرار می گیرد.
همانطور که درخواست شما در مراحل تأیید پیشرفت می کند (که معمولاً چندین روز طول می کشد)، ارتباطاتی در مورد وضعیت آن و احتمالاً پیشنهاداتی برای استفاده در آینده دریافت خواهید کرد. اما هنگامی که ویژگی شما تایید شد، فوراً در مخزن ویژگی Wolfram منتشر خواهد شد و برای استفاده همه در دسترس خواهد بود. (و این در ظاهر خواهد شد
چه چیزی باید در انبار باشد؟
لازم به ذکر است که شرکت ما از استانداردهای بسیار بالایی برای کامل بودن، قابلیت اطمینان و کیفیت کلی برخوردار است و از 6000+ عملکردی که در بیش از 30 سال گذشته در زبان Wolfram ساخته ایم، همگی شرایط فوق را برآورده می کنند. هدف مخزن توابع Wolfram استفاده از تمام ساختار و عملکردی است که قبلاً در زبان Wolfram وجود دارد تا تا آنجا که ممکن است توابع سبک تر (یعنی توابع عملکرد بالاتر) اضافه شود.
البته، توابع موجود در مخزن تابع Wolfram باید با اصول طراحی زبان Wolfram مطابقت داشته باشند - تا بتوانند به طور کامل با سایر توابع و انتظارات کاربران در مورد نحوه عملکرد صحیح عملکرد تعامل داشته باشند. با این حال، توابع لازم نیست از کامل بودن یا قابلیت اطمینان یکسانی برخوردار باشند.
در توابع داخلی زبان Wolfram، ما سخت کار می کنیم تا توابع برنامه نویسی را تا حد امکان عمومی کنیم. همانطور که گفته شد، هنگامی که در مخزن تابع Wolfram وجود دارد هیچ اشکالی وجود ندارد که یک تابع در آن وجود داشته باشد که به سادگی موارد بسیار خاص اما مفید را مدیریت کند. به عنوان مثال، تابع
نکته دیگر مربوط به توابع داخلی این است که شرکت ما تمام تلاش خود را برای رسیدگی به تمام موارد غیر معمول، رسیدگی صحیح به ورودی های نادرست و غیره انجام می دهد. در یک مخزن تابع، وجود یک تابع خاص که موارد اصلی حل یک مشکل را مدیریت می کند و همه موارد دیگر را نادیده می گیرد، کاملا طبیعی است.
نکته واضح این است که بهتر است توابعی داشته باشیم که بیشتر انجام دهند و آن را بهتر انجام دهند، اما بهینه سازی برای یک مخزن توابع - برخلاف توابع داخلی زبان Wolfram - باید توابع بیشتری همراه با توابع بیشتری داشته باشد تا اینکه به دنبال آن باشد. فرآیندهای پیاده سازی هر تابع خاص.
حالا بیایید نمونه ای از تست توابع در یک مخزن را بررسی کنیم. انتظارات سازگاری برای چنین توابعی به طور طبیعی بسیار کمتر از توابع زبان داخلی است. این امر مخصوصاً در مواردی که توابع به منابع خارجی مانند APIها وابسته هستند، صادق است، انجام آزمایشهای ثابت به طور مداوم مهم است، که به طور خودکار در الگوریتمهای تأیید اتفاق میافتد. در فایل nb، میتوانید به صراحت تعاریف را مشخص کنید (در بخش اطلاعات اضافی) و به تعداد تستهایی که توسط رشتههای ورودی و خروجی یا اشیاء با کاراکتر کامل از نوع تعریف شدهاند، مشخص کنید.
در نتیجه، مخزن تابع تعدادی پیچیدگی اجرایی خواهد داشت. برخی از آنها تنها یک خط کد خواهند بود، برخی دیگر ممکن است شامل هزاران یا ده ها هزار خط باشند که احتمالاً از بسیاری از توابع کمکی استفاده می کنند. چه زمانی ارزش افزودن تابعی را دارد که برای تعریف به کد بسیار کمی نیاز دارد؟ اساساً اگر برای یک تابع وجود داشته باشد
هدف اصلی یک مخزن تابع (همانطور که از نامش پیداست) معرفی ویژگی های جدید به زبان است. اگر می خواهید داده های جدید اضافه کنید یا
در واقع دو راه وجود دارد. ممکن است بخواهید یک نوع شی جدید را معرفی کنید که در توابع جدید در مخزن تابع استفاده می شود. و در این مورد، همیشه می توانید فقط نمایش نمادین آن را یادداشت کنید و هنگام وارد کردن یا خروجی کردن توابع در مخزن تابع از آن استفاده کنید.
اما اگر بخواهید یک شی را نمایش دهید و سپس از طریق توابع موجود در زبان Wolfram تعریف کنید که می خواهید با آن کار کنید، چه؟ زبان ولفرام همیشه مکانیزم سبکی برای این کار داشته است که به آن می گویند
بنابراین، چه چیزی ممکن است در کد تابع در یک مخزن تابع باشد؟
آیا تمام کدهای مخزن ویژگی Wolfram باید در Wolfram نوشته شود؟ مطمئناً کد داخل API خارجی نباید به زبان Wolfram نوشته شود که حتی کد زبان را هم نمی سازد. در واقع، اگر تابعی را تقریباً در هر زبان خارجی یا کتابخانه ای پیدا کردید، می توانید یک بسته بندی ایجاد کنید که به شما امکان می دهد از آن در مخزن تابع Wolfram استفاده کنید. (معمولاً برای این کار باید از توابع داخلی استفاده کنید
پس فایده انجام این کار چیست؟ اساسا، این به شما امکان می دهد از کل سیستم یکپارچه Wolfram Language و کل مجموعه یکپارچه نرم افزاری آن استفاده کنید. اگر پیادهسازی پایه را از یک کتابخانه یا زبان خارجی بدست آورید، میتوانید از ساختار نمادین غنی زبان Wolfram برای ایجاد یک عملکرد سطح بالای مناسب استفاده کنید که به کاربران امکان میدهد به راحتی از هر عملکردی که قبلاً پیادهسازی شدهاند استفاده کنند. حداقل، این باید در یک دنیای ایدهآل که در آن همه بلوکهای سازنده بارگیری کتابخانهها و غیره وجود دارند، امکانپذیر باشد، در این صورت آنها بهطور خودکار توسط زبان Wolfram مدیریت میشوند. (لازم به ذکر است که در عمل ممکن است مشکلاتی با
به هر حال، وقتی برای اولین بار به کتابخانه های خارجی معمولی نگاه می کنید، اغلب به نظر پیچیده تر از آن به نظر می رسند که فقط در چند عملکرد پوشش داده شوند، اما در بسیاری از موارد، بسیاری از پیچیدگی ها از ایجاد زیرساخت های مورد نیاز برای کتابخانه و همه عملکردها ناشی می شود. حمایتش کن با این حال، هنگام استفاده از زبان Wolfram، معمولاً زیرساخت از قبل در بسته ها ساخته شده است، و بنابراین نیازی به افشای جزئیات همه این توابع پشتیبانی وجود ندارد، بلکه فقط توابعی را برای "بالاترین" توابع خاص برنامه در کتابخانه ایجاد کنید. .
"اکوسیستم" پایگاه دانش
اگر توابعی را نوشته اید که به طور منظم از آنها استفاده می کنید، آنها را به مخزن تابع Wolfram ارسال کنید! اگر چیزی بیشتر از این (توسعه زبان) به دست نیامد، حتی در این صورت استفاده از توابع برای استفاده شخصی برای شما بسیار راحت تر خواهد بود. با این حال، منطقی است که فرض کنیم اگر به طور منظم از توابع استفاده کنید، شاید سایر کاربران نیز آنها را مفید بدانند.
به طور طبیعی، ممکن است در موقعیتی قرار بگیرید که نتوانید - یا نمی خواهید - عملکردهای خود را به اشتراک بگذارید یا در صورت دسترسی به منابع اطلاعاتی خصوصی. حتی در چنین مواردی، می توانید به سادگی توابع را در حساب ابری خود مستقر کنید.
توابعی که به مخزن تابع Wolfram ارسال می کنید لازم نیست کامل باشند. آنها فقط باید مفید باشند. این کمی شبیه بخش "خطاها" در مستندات کلاسیک یونیکس است - در "بخش تعاریف" یک بخش "یادداشتهای نویسنده" وجود دارد که در آن میتوانید محدودیتها، مشکلات و غیره را که قبلاً در مورد عملکرد خود میدانید، توضیح دهید. علاوه بر این، هنگامی که ویژگی خود را به مخزن ارسال می کنید، می توانید یادداشت های ارسالی را اضافه کنید که توسط یک تیم اختصاصی از متصدیان خوانده می شود.
هنگامی که یک ویژگی منتشر می شود، صفحه آن همیشه دارای دو پیوند در پایین است:
گاهی اوقات شما فقط می خواهید از توابع موجود در مخزن تابع Wolfram، مانند توابع داخلی، بدون نگاه کردن به کد آنها استفاده کنید. با این حال، اگر می خواهید به داخل آن نگاهی بیندازید، همیشه یک دکمه Notepad در بالا وجود دارد. روی آن کلیک کنید و کپی خود را از دفترچه یادداشت تعریف اصلی که به مخزن ویژگی ارسال شده است، دریافت خواهید کرد. گاهی اوقات می توانید از آن به عنوان مثال برای نیازهای خود استفاده کنید. در همان زمان، شما همچنین می توانید اصلاح خود را از این تابع ایجاد کنید. ممکن است بخواهید این توابع را که از مخزن پیدا کرده اید در رایانه خود یا در حساب ذخیره سازی ابری شته خود پست کنید، شاید بخواهید آنها را به پایگاه دانش عملکرد ارسال کنید، شاید به عنوان نسخه بهبودیافته و توسعه یافته عملکرد اصلی.
در آینده، ما قصد داریم از فورکینگ به سبک Git برای مخازن ویژگی ها پشتیبانی کنیم، اما در حال حاضر سعی می کنیم آن را ساده نگه داریم، و همیشه فقط یک نسخه پذیرفته شده از هر ویژگی را در زبان داریم. اغلب اوقات (مگر اینکه توسعهدهندگان از حفظ ویژگیهایی که توسعه دادهاند دست بکشند و به ارسالهای کاربران پاسخ دهند)، نویسنده اصلی ویژگی کنترل بهروزرسانیهای آن را در دست میگیرد و نسخههای جدید را ارائه میکند، که سپس بررسی میشوند و در صورت گذراندن مراحل بازبینی ، به زبان منتشر شده است.
بیایید این سوال را در نظر بگیریم که چگونه "نسخه سازی" توابع توسعه یافته کار می کند. در حال حاضر، هنگامی که از یک تابع از مخزن تابع استفاده می کنید، تعریف آن به طور دائم در رایانه شما (یا در حساب ابری شما اگر از ابر استفاده می کنید) ذخیره می شود. اگر نسخه جدیدی از یک ویژگی در دسترس باشد، دفعه بعد که از آن استفاده می کنید پیامی دریافت خواهید کرد که به شما اطلاع می دهد. و اگر می خواهید عملکرد را به نسخه جدید به روز کنید، می توانید با استفاده از دستور این کار را انجام دهید
یکی از چیزهای زیبا در مورد مخزن تابع Wolfram این است که هر برنامه Wolfram Language در هر مکانی می تواند از توابع آن استفاده کند. اگر برنامه ای در یک دفترچه یادداشت ظاهر می شود، اغلب راحت است که توابع مخزن را به عنوان توابع "شئ باینری عملکرد" (شاید با یک مجموعه نسخه مناسب) خوانا فرمت کنید.
همیشه می توانید با استفاده از متن به هر تابعی در مخزن تابع دسترسی داشته باشید
چگونه کار می کند؟
در داخل توابع موجود در مخزن Wolfram این کار دقیقاً با استفاده از همان امکان پذیر است
در نظر بگیرید
در داخل می توانید برخی از اطلاعات را با استفاده از عملکرد مشاهده کنید
راه اندازی یک تابع منبع چگونه کار می کند؟ ساده ترین مورد یک مورد کاملاً محلی است. در اینجا یک مثال است که یک تابع (در این مورد فقط یک تابع خالص) را می گیرد و آن را به عنوان یک تابع منبع برای یک جلسه برنامه مشخص تعریف می کند:
هنگامی که تعریف را انجام دادید، می توانید از تابع منبع استفاده کنید:
توجه داشته باشید که یک نماد سیاه در این حباب تابع وجود دارد . این بدان معناست که تابع BLOB به تابع منبع درون حافظه تعریف شده برای جلسه جاری اشاره دارد. یک ویژگی منبعی که به طور دائم در رایانه یا حساب ابری شما ذخیره می شود دارای نماد خاکستری است . و یک نماد نارنجی برای یک ویژگی منبع رسمی در مخزن ویژگی Wolfram وجود دارد .
بنابراین وقتی از منوی Expand در Notebook Definition استفاده می کنید چه اتفاقی می افتد؟ ابتدا تمام تعاریف موجود در دفترچه یادداشت را می گیرد و از آنها یک نماد ایجاد می کند
استقرار محلی یک تابع از یک مخزن در رایانه شما با استفاده از دستور انجام می شود
اگر روی دکمه ارسال برای یک مخزن تابع کلیک کنید، چه اتفاقی در زیر آن می افتد
به طور پیش فرض، ارسال ها با نام مرتبط با Wolfram ID شما انجام می شود. اما اگر از طرف یک تیم توسعه یا سازمان برنامه ای ارسال می کنید، می توانید
پس از اینکه هر یک از توابع خود را به پایگاه دانش تابع ارسال کردید، برای بررسی در صف قرار می گیرد. اگر نظراتی را در پاسخ دریافت کنید، معمولاً به شکل یک فایل متنی با "سلول های نظر" اضافی اضافه می شوند. همیشه می توانید با مراجعه به سایت وضعیت درخواست خود را بررسی کنید
برخی نکات ظریف در کار
در نگاه اول ممکن است به نظر برسد که میتوانید فقط یک دفترچه تعریف را بردارید و آن را به کلمه در یک مخزن توابع قرار دهید، با این حال، در واقع ظرافتهای زیادی درگیر است - و مدیریت آنها مستلزم انجام برخی فرابرنامهنویسی بسیار پیچیده، مدیریت پردازش نمادین است. به عنوان کدی که تابع را تعریف می کند و خود Notepad نیز تعریف می شود. بیشتر اینها در داخل، پشت صحنه اتفاق میافتد، اما اگر میخواهید به پایگاه دانش ویژگیها کمک کنید، میتواند پیامدهایی داشته باشد که ارزش درک آن را دارد.
اولین ظرافت فوری: هنگامی که دفترچه Definition را پر می کنید، می توانید به سادگی با استفاده از نامی مانند به عملکرد خود در همه جا مراجعه کنید. MyFunction، که مانند یک نام معمولی برای یک تابع در زبان Wolfram به نظر می رسد، اما برای اسناد مخزن تابع این جایگزین شده است.
نکته ظریف دوم: وقتی یک تابع منبع را از Notebook تعریف میسازید، تمام وابستگیهای درگیر در تعریف تابع باید ثبت شده و صریحاً گنجانده شوند. با این حال، برای اطمینان از اینکه تعاریف ماژولار باقی می مانند، باید همه چیز را در یک حالت منحصر به فرد قرار دهید
معمولاً هیچ ردی از کد مورد استفاده برای پیکربندی این فضای نام را نخواهید دید. اما اگر به دلایلی یک نماد اجرا نشده را در داخل تابع خود فراخوانی کنید، خواهید دید که این نماد در بافت داخلی تابع قرار دارد. با این حال، هنگام پردازش دفترچه یادداشت تعریف، حداقل نماد مربوط به خود تابع است
مخزن تابع برای تعریف توابع جدید است. و این توابع ممکن است گزینه هایی داشته باشند. اغلب این پارامترها (به عنوان مثال،
اکثر توابع هر بار که فراخوانی می شوند به سادگی همان کاری را انجام می دهند که قرار است انجام دهند، اما برخی از توابع قبل از اجرا در یک جلسه خاص باید مقداردهی اولیه شوند - و برای حل این مشکل، یک بخش "Initialization" در بخش Definition وجود دارد.
توابع از یک مخزن می توانند از توابع دیگری استفاده کنند که قبلاً در مخزن هستند؛ برای تنظیم تعاریف برای یک مخزن تابع که شامل دو (یا چند) تابع است که به یکدیگر ارجاع می دهند، باید آنها را در جلسه برنامه خود مستقر کنید تا بتوانید مرجع مانند آنها
چشم انداز توسعه وقتی مخزن واقعا بزرگ شود چه اتفاقی باید بیفتد؟
امروز ما به تازگی مخزن ویژگی Wolfram را راه اندازی می کنیم، اما با گذشت زمان انتظار داریم که اندازه و عملکرد آن به طور چشمگیری افزایش یابد، و با رشد آن در توسعه، مشکلات مختلفی وجود خواهد داشت که قبلاً پیش بینی می کردیم ممکن است ایجاد شود.
اولین مشکل به نام توابع و منحصر به فرد بودن آنها مربوط می شود. مخزن تابع به گونه ای طراحی شده است که مانند توابع داخلی در زبان Wolfram، شما می توانید به هر تابع داده شده به سادگی با تعیین نام آن ارجاع دهید. اما این ناگزیر به این معنی است که نام توابع باید در سراسر مخزن منحصر به فرد باشد، به طوری که، برای مثال، تنها یک
این ممکن است در ابتدا یک مشکل بزرگ به نظر برسد، اما ارزش درک این را دارد که اساساً همان مشکل مواردی مانند دامنه های اینترنتی یا دسته های رسانه های اجتماعی است. و واقعیت این است که سیستم به سادگی نیاز به یک ثبت کننده دارد - و این یکی از نقش هایی است که شرکت ما برای پایگاه دانش عملکرد Wolfram انجام خواهد داد. (برای نسخههای خصوصی یک مخزن، ثبتکنندههای آنها ممکن است مدیر باشند.) البته، یک دامنه اینترنتی را میتوان بدون داشتن چیزی روی آن ثبت کرد، اما در یک مخزن تابع، تنها زمانی میتوان نام تابع را ثبت کرد که تعریف واقعی از آن وجود داشته باشد. کارکرد.
بخشی از نقش ما در مدیریت پایگاه دانش تابع Wolfram این است که اطمینان حاصل کنیم نام انتخاب شده برای یک تابع با توجه به تعریف تابع منطقی است و از قراردادهای نامگذاری زبان Wolfram پیروی می کند. ما بیش از 30 سال تجربه نامگذاری توابع داخلی به زبان Wolfram داریم و تیم متصدیان ما این تجربه را به مخزن تابع نیز میآورند. البته همیشه استثنا وجود دارد. به عنوان مثال، ممکن است ترجیح داده شود که یک نام کوتاه برای برخی از تابع ها داشته باشید، اما بهتر است با نامی طولانی تر و خاص تر "دفاع کنید" زیرا احتمال کمتری وجود دارد که با فردی روبرو شوید که بخواهد نام تابع مشابهی را در آینده ایجاد کند. .
(در اینجا لازم به ذکر است که صرفاً افزودن چند تگ عضو به ابهامزدایی توابع، اثر مورد نظر را نخواهد داشت. زیرا تا زمانی که اصرار نداشته باشید که همیشه یک برچسب را اختصاص دهید، باید برای هر تابع معین یک تگ پیشفرض تعریف کنید و همچنین تگهای نویسنده را نیز اختصاص دهید. که باز هم به هماهنگی جهانی نیاز دارد.)
همانطور که پایگاه دانش توابع Wolfram رشد می کند، یکی از مشکلاتی که احتمالاً به وجود می آید، قابلیت کشف توابع است که سیستم برای آن فراهم می کند.
برای توابع داخلی در زبان Wolfram یک لایه به اصطلاح تشخیص وجود دارد که توسط
مخزن تابع Wolfram به عنوان یک مخزن تابع پایدار پیکربندی شده است، جایی که هر تابعی در آن همیشه کار می کند. البته ممکن است نسخههای جدیدی از ویژگیها در دسترس باشند و ما انتظار داریم که برخی از ویژگیها به مرور زمان منسوخ شوند. اگر توابع در برنامه ها استفاده شوند کار خواهند کرد، اما صفحات اسناد آنها به توابع جدید و پیشرفته تر پیوند داده می شود.
مخزن ویژگی Wolfram برای کمک به شما در کشف سریع ویژگی های جدید و یادگیری روش های جدید برای استفاده از زبان Wolfram طراحی شده است. ما بسیار خوشبین هستیم که برخی از مواردی که در مخزن ویژگی کاوش شده است در نهایت منطقی به نظر می رسد که به بخش های داخلی زبان اصلی Wolfram تبدیل شود. در دهه گذشته ما مجموعه مشابهی داشته ایم
مهمترین چیز در اینجا این است که یک تابع در یک مخزن تابع چیزی است که در حال حاضر برای استفاده هر کاربر در دسترس است. این امکان وجود دارد که یک ویژگی زبان مادری بتواند بسیار بهتر و کارآمدتر باشد، اما یک مخزن ویژگی به کاربران این امکان را می دهد که فوراً به همه ویژگی های جدید دسترسی داشته باشند. و مهمتر از همه، این مفهوم به همه اجازه می دهد تا هر ویژگی جدیدی را که می خواهند اضافه کنند.
پیش از این در تاریخ زبان ولفرام، این ایده به خوبی کار نمی کرد، اما در این مرحله آنقدر تلاش برای زبان و درک عمیقی از اصول طراحی زبان انجام شده است که اکنون بسیار به نظر می رسد. برای جامعه بزرگی از کاربران امکان افزودن ویژگی هایی وجود دارد که یکپارچگی طراحی را حفظ می کند تا آنها را برای طیف گسترده ای از کاربران مفید کند.
روحیه باورنکردنی استعداد(؟) در جامعه کاربران Wolfram Language وجود دارد. (البته این انجمن شامل بسیاری از افراد برجسته تحقیق و توسعه در زمینه های مختلف می شود.) امیدوارم که مخزن ویژگی Wolfram بستری موثر برای بازگشایی و انتشار این روحیه استعداد فراهم کند. فقط با هم می توانیم چیزی ایجاد کنیم که به طور قابل توجهی منطقه ای را که می توان پارادایم محاسباتی زبان Wolfram را در آن اعمال کرد گسترش دهد.
در بیش از 30 سال، ما راه طولانی را با زبان Wolfram پیموده ایم. حالا با هم، بیایید جلوتر برویم. من قویاً همه کاربران محترم زبان Wolfram در سراسر جهان را تشویق می کنم که از مخزن عملکردی به عنوان یک پلتفرم برای این کار و همچنین پروژه نرم افزاری جدید مانند Free Wolfram Engine برای توسعه دهندگان استفاده کنند.
منبع: www.habr.com