اوکام (زبان برنامه‌نویسی) کیست؟ توضیح بده.
اوکام یک زبان برنامه‌نویسی همزمان است و براساس جریان جبری فرایندهای ترتیبی ارتباطی (csp) بناشده و بسیاری از ویژگی‌هایش را به اشتراک می‌گذارد. این زبان برنامه‌نویسی به افتخار فیلسوف ویلیام اوکام شخصی که اصل تیغ اوکام از وی گرفته شده به این اسم نام گذاری شده‌است.اوکام یک زبان رویه ای امری است (مانند پاسکال). این زبان توسط دیوید می و دیگران در شرکت inmos (با علامت تجاری INMOS) توسعه داده شد؛ توسط تونی هور به عنوان زبان برنامه‌نویسی اختصاصی ریزپردازنده فرستنده خودشان و درعین حال قابل اجرا در باقی سیستم عامل‌های حاضر دیگر رهنمود شد. شناخته شده‌ترین نسخه، اوکام ۲ است که راهنمای برنامه‌نویسی آن توسط اریکسون زینت و دیگران در شرکت inmos نوشته شد.بررسی اجمالی.در مثال‌های زیر تورفتگی‌ها و قالب بندی‌ها برای تجزیه کردن کد مهم هستند: عبارات با پایان خط، خاتمه میبابند؛ لیست این عبارات باید در یک سطح فرورفتگی باشد. این ویژگی که قاعده آف ساید (off-side-rule) نامیده می‌شود، دز زبان‌های دیگری مانند پایتون و هسکل نیز یافت می‌شود.ارتباط بین فرایندها از طریق کانال‌های نامگذاری شده‌ای انجام می‌گیرد. یک فرایند داده‌ها را از طریق codice_1 از کانال تولید می‌کند در حالی که دیگری داده‌ها را با codice_2 درون کانال می‌گذارد. ورودی‌ها و خروجی‌ها تا زمانی که طرف دیگر آمادهٔ پیشنهاد یا قبول داده نباشد، پیش نمی‌روند. (در مواردی که پیش نروند گفته می‌شود فرایند در کانال مسدود می‌شود. هرچند برنامه نه به درازا می‌کشد و نه نظرسنجی می‌کند. به این ترتیب اصطلاحاتی مانند انتظار، تعلیق یا تسلیم، این رفتار را می‌رساند. همچنین دیگر فرایندهای مستقل را مسدود نمی‌کند) مثال‌ها (c متغیر است):&lt;syntaxhighlight&gt; keyboard ? c&lt;/syntaxhighlight&gt;&lt;syntaxhighlight&gt; screen ! c&lt;/syntaxhighlight&gt;codice_3 لیستی از عبارات که به ترتیب معین شده‌اند را معرفی می‌کند. برخلاف بیشتر زبان‌های برنامه‌نویسی این یک چیز ضمنی نیست.&lt;syntaxhighlight&gt; SEQ x := x + 1 y := x * x&lt;/syntaxhighlight&gt;codice_3 لیستی از عبارات که ممکن است به‌طور همزمان معین شوند را شروع می‌کند. مثال:&lt;syntaxhighlight&gt; PAR p() q()&lt;/syntaxhighlight&gt;codice_3 لیستی از دستورات قفل شده را مشخص می‌کند. قفل‌ها ترکیبی از حالت بولی و عبارات ورودی هستند؛ هر دو اختیاری. هر قفل برای حالتی که درست است و کانال ورودی ای که آماده است، موفق عمل می‌کند. یکی از گزینه‌های موفق برای اجرا انتخاب می‌شود. مثال:&lt;syntaxhighlight&gt; ALT count1 &lt;100 &amp; c1 ? data SEQ count1 := count1 + 1 merged ! data count2 &lt;100 &amp; c2 ? data SEQ count2 := count2 + 1 merged ! data status ? request SEQ out ! count1 out ! count2&lt;/syntaxhighlight&gt;داده‌ها را از کانال c1 یا c2 می‌خواند (هرکدام که آماده باشد) و به کانال ادغام شده می‌فرستد. اگر countN به ۱۰۰ برسد، خواندن از کانال متناظر از کار می‌افتند. درخواست حالت کانال از طریق تولید شمارش‌ها به codice_3 پاسخ داده می‌شود.بازبینی زبان.اوکام ۱اوکام ۱ (منتشر شده در سال ۱۹۸۳) یک نسخه مقدماتی از این زبان بود که از کار دیوید می بر روی EPL، و CSPهای تونی هور اقتباس شد. این نسخه تنها نوع داده‌های VAR را پشتیبانی می‌کرد که همخوانی نوع انتگرال با طول کلمات اختصاصی معماری هدف بود و همچنین آرایه‌های تک بعدی.اوکام ۲.اوکام ۲ که توسط شرکت inmos در ۱۹۸۷ توسعه داده شد، پشتیبانی ممیز شناور، تابع‌ها، آرایه‌های چند بعدی و نوع‌های داده بیشتری مانند اندازه‌های مختلف اعداد صحیح (INT32 , INT16) و بایت‌ها را اضافه می‌کند. با این نسخه او، اوکام به زبانی تبدیل می‌شود که توانایی بیان برنامه‌های مفید را دارد، در حالی که اوکام ۱ بیشتر مناسب سنجش الگوریتم‌ها و کاوش زبان جدید بود. (هرچند کامپایلر اوکام ۱ در اوکام ۱ نوشته شده بود، بنابراین یک مدرک وجود دارد که برنامه‌های مفید و با اندازه منطقی می‌توانند بر خلاف محدودیت‌های اوکام ۱ در آن نوشته شوند)اوکام ۲٫۱.اوکام ۲٫۱ آخرین توسعه زبان اوکام توسط شرکت inmos بود. در سال ۱۹۹۴ تعریف شد و تحت تأثیر طرح پیشنهادی ای که پیشتر برای زبان اوکام ۳ (همچنین منتسب به "اوکام ۹۱" طی مراحل اولیه‌اش) توسط جف بارت (Geoff Barrett) در شرکت inmos در اوایل دهه ۹۰ میلادی ایجاد شده بود، قرار گرفت. یک کتابچه راهنمای مرجع اصلاح شده در توصیف اوکام ۳ برای نظر جامعه توزیع شد، اما این زبان هرگز به‌طور کامل در یک کامپایلر پیاده‌سازی نشده‌است. اوکام ۲٫۱ چند ویژگی شامل موارد زیر را به اوکام ۲ اضافه کرد:برای مشاهده لیست کامل تغییرات ضمیمه p از Inmos occam 2.1 Reference Manual را ببینید.اوکام π.اوکام π نام رایج نوع اوکام که توسط نسخه‌های بعدی کامپایلر Kent Retargetable occam (KRoC) توسعه داده می‌شود است. اضافه کردن سمبل π به نام اوکام ، اشاره ای است به اوکام KRoC که شامل چند ایده تأثیر گرفته از جبر π است. اوکام π شامل چندین افزونه مهم نسبت به کامپایلر اوکام ۲٫۱ است. برای مثال: