Oz (زبان برنامهنویسی)
این مقاله نیازمند ویکیسازی است. لطفاً با توجه به راهنمای ویرایش و شیوهنامه، محتوای آن را بهبود بخشید. |
![]() | این مقاله نیازمند تمیزکاری است. لطفاً تا جای امکان آنرا از نظر املا، انشا، چیدمان و درستی بهتر کنید، سپس این برچسب را بردارید. محتویات این مقاله ممکن است غیر قابل اعتماد و نادرست یا جانبدارانه باشد یا قوانین حقوق پدیدآورندگان را نقض کرده باشد. |
پارادایم | پارادایم برنامهنویسی: برنامهنویسی منطقی، برنامهنویسی تابعی، برنامهنویسی دستوری، برنامهنویسی شیءگرا، constraint، رایانش توزیعشده، concurrent | ||||||||
---|---|---|---|---|---|---|---|---|---|
طراحیشده توسط | Gert Smolka, his students | ||||||||
توسعهدهنده | Mozart Consortium | ||||||||
ظهوریافته در | ۱۹۹۱ | ||||||||
Oz 1.4.0 (final), Mozart 2 / ۳ ژوئیه ۲۰۰۸ | |||||||||
dynamic | |||||||||
پروانه | پروانه امآیتی | ||||||||
وبگاه | mozart.github.io | ||||||||
|
Ozیک زبان برنامهنویسی مالتی پارادایم توسعه یافته در سیستم آزمایشگاه برنامهنویسی در دانشگاه کاتولیک لوون جهت استفاده در آموزش و پرورش است. آن را با یک کتاب استاندارد درسی به نام: مفاهیم و تکنیکهای و مدلهای برنامهنویسی کامپیوتر توصیف میکنند.Oz برای اولین بار طراحی شده توسط گرت اسمولکا و دانش آموزانش را در سال ۱۹۹۱. در سال ۱۹۹۶ توسعه Oz با همکاری گروه تحقیقاتی Seif Haridi و پیتر ون روی در مؤسسه سوئدی علوم کامپیوتر ادامه یافت. از سال 1999 Oz بهطور مداوم توسعه یافته توسط یک گروه بینالمللی از کنسرسیوم موتزارت که در اصل شامل دانشگاه Saarland و مؤسسه علوم کامپیوتر سوئد و دانشگاه Université catholique de Louvain. در سال ۲۰۰۵ مسئولیت مدیریت موتزارت توسعه دهنده به یک هسته گروه موتزارت منتقل شد. هیئت مدیره با بیان هدف خود که گسترش موتزارت توسعه دهنده به یک جامعه بزرگتر بود شروع کرد.
سیستم برنامهنویسی موتزارت سهم اصلی را در پیادهسازی oz داشت. oz منتشر شدهاست با یک منبع باز که مجوز آن توسط کنسرسیوم موتزارت صادر گردیده است. موتزارت به سیستمهای مختلفی از جمله یونیکس، FreeBSD و لینوکس و ویندوز و OS X گسترش یافتهاست.
محتویات
ویژگیهای زبان[ویرایش]
Oz[۱] شامل بسیاری از مفاهیم اصلی برنامهنویسی پارادایمی از جمله منطق کاربردی (دو نوع ارزیابی تنبل و ارزیابی مشتاق), ضروری، شی گرا، محدودیت توزیع شده و برنامهنویسی همزمان میباشد. Ozهر دو نوع معناشناسی ساده و رسمی را پشتیبانی میکند (نگاه کنید به فصل ۱۳ از کتاب ذکر شده در زیر) و یک برنامه کارآمد برای پیادهسازی است.[نیازمند منبع] Oz به عنوان یک زبان همزمانی گرا توسط Joe Armstrong معرفی شد که وی طراح اصلی زبان Erlang است. یک زبان همزمانی گرا باعث میشود همزمانی بسیار آسان و کارآمد برای استفاده گردد. Oz پشتیبانی میکند از استاندارد رابط کاربر گرافیکی (GUI) و زبان QTk.[۲]
علاوه بر چند-پارادایم بودن برنامهنویسی نقطه اصلی قوت Oz در محدودیتهای برنامهنویسی و برنامهنویسی توزیع شده است. با توجه به این عامل Oz است قادراست با موفقیت پیادهسازی کند شبکههای شفاف توزیع برنامهنویسی را، این مدل باعث میشود که به آسانی بتوان برنامه باز fault-tolerant برنامههای کاربردی در زبان استفاده نمود. برای محدودیت برنامهنویسی Oz معرفی ایده محاسبات فضایکه اجازه میدهد تا کاربر تعریف کند جستجو و توزیع استراتژیهای متعامد با توجه به محدودیت دامنه.
زبان اجمالی[ویرایش]
ساختارهای داده[ویرایش]
Oz زبانی هست که با تعداد بسیار کمی از انواع داده میباشد که میتوان آنها را توسعه داد به انواع عملی تر از طریق نحوی شکر.
اطلاعات اولیه سازه:
- اعداد: شناور نقطه یا عدد صحیح (integer)
- رکوردها: برای گروه بندی دادهها :
circle(x:0 y:1 شعاع:3 رنگ:آبی سبک:dots)
. در اینجا از نظر x,y، شعاع، و غیره. نامیده میشود ویژگیها و اطلاعات مرتبط با ویژگیهای (در این مورد ۰٬۱٬۳ و غیره) ارزش. - چندتایی: سوابق با عدد صحیح امکانات در صعودی با نظم:
دایره(1:0 2:1 3:3 4:آبی 5:نقطه)
. - لیست: ساده ساختار خطیاین ساختارهای دادهها ارزش (ثابت) در طبقه اول و به صورت پویا بررسی نوع میشود. نام متغیر در Oz با حروف بزرگ شروع میشود و نامه هابا آنها را متمایز مینماید زیرا همیشه با حروف کوچک شروع میشوند.
توابع[ویرایش]
توابع[۳] در درجه اول، ارزش، اجازه میدهد ردههای بالاتر کاربردی در برنامهنویسی را: توابع را میتوان مورد استفاده قرار داد با هر دو نوع متغیر رایگان و محدود. متغیر رایگان ارزش پیدا کردهاست با استفاده از استاتیک واژگانی حوزه.[۴]
fun {Fact N}
if N =<0 then 1 else N*{Fact N-1} end
end
ردههای بالاتر برنامهنویسی[ویرایش]
توابع مانند دیگر ا اشیاء Oz هستند. یک تابع منتقل میشود به عنوان یک ویژگی به توابع دیگر یا بهطور بازگشتی در توابع استفاده شوند.
توابع ناشناس[ویرایش]
مانند بسیاری دیگر از کاربردها زبان Oz پشتیبانی میکند از استفاده از توابع بی نام (به عنوان مثال توابع که لازم ندارند نام) با ردههای بالاتر برنامهنویسی. نماد $ استفاده شدهاست به این معنی.
در زیر تابع درجه ۲ تعریف شدهاست به صورت ناشناس میباشد و گذشت باعث [1 4 9]
به مرور میشود. از توابع ناشناس نمیتوان استفاده کرد که دارای یک نام است برای تعریف بازگشتی توابع ناشناس.
روشها[ویرایش]
توابع در Oz قرار است بازگشت نمایند یک مقدار را در آخرین دستور که با مواجه میشوند که این مقدار در بدن این تابع در طول اجرای آن ایجاد شدهاست. در مثال زیر تابع Ret بازده ۵ اگر X> 0 و -۵ در غیر این صورت. اما Oz نیز فراهم میکند یک مرکز در مورد یک تابع که باید یک مقدار بازگشت نماید. این توابع به نام روش نامیده میشوند.[۵] روشهای تعریف شده با استفاده از ساخت «مجموعه مقالات» به شرح زیر است مثال بالا برنمیگرداند هیچ مقداری را و هر مقداری را فقط ۵ یا -۵ در مرورگر Oz بسته به علامت X چاپ مینماید.
متغیرها Dataflow و تعریف همزمانی[ویرایش]
هنگامی که برنامه به یک متغیر بی بند و بار برخورد میکند که آن منتظر یک مقدار است. برای مثال این موضوع را صبر کنید تا هر دو X و Y هستند و محدود به یک مقدار قبل از نشان دادن ارزش Z. ارزش یک متغیر dataflow را نمیتوان تغییر داد پس از آن موظف است:متغیرهای Dataflow آسان مینماید ایجاد همزمان جریان عوامل را: از آنجا که از راه متغیر dataflow این کار ممکن است برای قرار دادن نخها در هر نقطه در یک برنامه تضمین شدهاست که نتیجه همان است. این باعث میشود برنامهنویسی همزمان بسیار آسان گردد. نخها بسیار ارزان هستند: ممکن است به ۱۰۰٬۰۰۰ نخ در حال اجرا در یک زمان باشند.[۶]
مثال: دادگاه بخش غربال[ویرایش]
این مثال محاسبه جریان نخست اعداد با استفاده از الگوریتم دادگاه بخش به صورت بازگشتی که ایجاد میکند همزمانی جریان عوامل را که فیلتر کردن غیر از اعداد اول میباشد:
تنبلی[ویرایش]
Oz با استفاده از ارزیابی مشتاق بهطور پیش فرض فعالیت میکند اما ارزیابیی تنبل نیز امکانپذیر است. در زیر این واقعیت است که تنها محاسبه زمانی که مقدار X مورد نیاز است برای محاسبه ارزش Y. ارزیابی تنبل امکان ذخیرهسازی واقعاً بینهایت ساختارهای دادهای در Oz را میدهد. قدرت ارزیابی تنبل را میتوان از کد زیر نمونه مشاهده نمود:کد بالا ظرافت محاسبه تمام اعداد بهطور منظم[۷] در لیست بینهایت را نشان میدهد. تعداد واقعی محاسبه شده تنها زمانی که آنها مورد نیاز است.
انتقال پیام همزمانی[ویرایش]
اعلانی همزمان مدل را میتوان با انتقال پیام از طریق معانی ساده مشاهده کرد:با یک پورت و یک موضوع آسنکرون عوامل میتواند تعریف شود:
حالت و اشیاء[ویرایش]
باز هم ممکن است به گسترش تعریف مدل برای حمایت از حالت و برنامهنویسی شی گرا با معانی بسیار ساده. برای ایجاد یک ساختار داده جدید تغییرپذیر به نام سلول داریم:با این روش ساده معنایی تغییرات کل شی گرا پارادایم میتواند پشتیبانی نماید. با کمی نحو OOP میشود به خوبی یکپارچه در Oz گردد.
اونس یک multiparadigm زبان برنامهنویسی توسعه یافته در برنامهنویسی سیستم آزمایشگاه در دانشگاه Université catholique de Louvain برای زبان برنامهنویسی آموزش و پرورش است. آن را به یک استاندارد کتاب درسی: مفاهیم و تکنیکهای و مدلهای برنامهنویسی کامپیوتر.
در علاوه بر این به چند-پارادایمهای برنامهنویسی اصلی قوت اونس در محدودیتهای برنامهنویسی و برنامهنویسی توزیع شده است. با توجه به آن عامل طراحی اونس است قادر به موفقیت پیادهسازی شبکه-شفاف توزیع برنامهنویسی، این مدل باعث میشود آن را آسان به برنامه باز fault-tolerant برنامههای کاربردی در زبان. برای محدودیت برنامهنویسی اونس معرفی ایده محاسبات فضایکه اجازه میدهد تا کاربر تعریف شده جستجو و توزیع استراتژیهای متعامد به محدودیت دامنه.
تنبلی[ویرایش]
اونس با استفاده از مشتاق ارزیابی بهطور پیش فرض اما تنبل ارزیابی[۸] امکانپذیر است. در زیر این واقعیت است که تنها محاسبه زمانی که مقدار X مورد نیاز است برای محاسبه ارزش Y.
منابع[ویرایش]
- ↑ Gert Smolka (1995). "The Oz Programming Model" (PDF). Lecture Notes in Computer Science. 1000: 324–343.
- ↑ QTk
- ↑ Leif Grönqvist. "Advanced Functional Programming in Oz".
|chapter=
ignored (کمک) - ↑ Robert Gentleman; Ross Ihaka (Sep 2000). Lexical Scope in Statistical Computing (PDF). Journal of Computational and Graphical Statistics. 9. pp. 491–508.
- ↑ https://mozart.github.io/mozart-v1/doc-1.4.0/tutorial/node5.html#control.procedure
- ↑ http://www.mozart-oz.org/documentation/tutorial/node8.html#chapter.concurrency
- ↑ Rao, AC and Varada Raju, D (1991). "Application of the Hamming number technique to detect isomorphism among kinematic chains and inversions". Mechanism and Machine theory. 26 (1): 55–75.
- ↑ Paul Hudak. "Conception, evolution, and application of functional programming languages". ACM Computing Surveys. 21 (3): 359–411.