**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.

منابع
-----

1. ↑  Gert Smolka (1995). "The Oz Programming Model" (PDF). *Lecture Notes in Computer Science*. **1000**: 324–343.
2. ↑  «QTk». بایگانی‌شده از اصلی در ۲۰ مه ۲۰۱۳. دریافت‌شده در ۱۷ مه ۲۰۱۶.
3. ↑  Leif Grönqvist. "Advanced Functional Programming in Oz". Archived from the original on 3 March 2016. Retrieved 17 May 2016. `{{cite journal}}`: Cite journal requires `|journal=` (help); `|chapter=` ignored (help)
4. ↑  Robert Gentleman; Ross Ihaka (Sep 2000). *Lexical Scope in Statistical Computing* (PDF). *Journal of Computational and Graphical Statistics*. Vol. 9. pp. 491–508.
5. ↑
6. ↑  «نسخه آرشیو شده». بایگانی‌شده از اصلی در ۲۴ فوریه ۲۰۱۵. دریافت‌شده در ۱۷ مه ۲۰۱۶.
7. ↑  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.`{{cite journal}}`: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)
8. ↑  Paul Hudak. "Conception, evolution, and application of functional programming languages". *ACM Computing Surveys*. **21** (3): 359–411.