اوکام (زبان برنامه‌نویسی)

زبان برنامه نویسی همزمان

اوکام (به انگلیسی: occam) یک زبان برنامه‌نویسی همزمان است و براساس جریان جبری فرایندهای ترتیبی ارتباطی (csp) بناشده و بسیاری از ویژگی‌هایش را به اشتراک می‌گذارد. این زبان برنامه‌نویسی به افتخار فیلسوف ویلیام اوکام شخصی که اصل تیغ اوکام از وی گرفته شده به این اسم نام گذاری شده‌است.

اوکام یک زبان رویه ای امری است (مانند پاسکال). این زبان توسط دیوید می و دیگران در شرکت inmos (با علامت تجاری INMOS) توسعه داده شد؛ توسط تونی هور به عنوان زبان برنامه‌نویسی اختصاصی ریزپردازنده فرستنده خودشان و درعین حال قابل اجرا در باقی سیستم عامل‌های حاضر دیگر رهنمود شد. شناخته شده‌ترین نسخه، اوکام ۲ است که راهنمای برنامه‌نویسی آن توسط اریکسون زینت و دیگران در شرکت inmos نوشته شد.

بررسی اجمالی ویرایش

در مثال‌های زیر تورفتگی‌ها و قالب بندی‌ها برای تجزیه کردن کد مهم هستند: عبارات با پایان خط، خاتمه میبابند؛ لیست این عبارات باید در یک سطح فرورفتگی باشد. این ویژگی که قاعده آف ساید (off-side-rule) نامیده می‌شود، دز زبان‌های دیگری مانند پایتون و هسکل نیز یافت می‌شود.

ارتباط بین فرایندها از طریق کانال‌های نامگذاری شده‌ای انجام می‌گیرد. یک فرایند داده‌ها را از طریق ! از کانال تولید می‌کند در حالی که دیگری داده‌ها را با ؟ درون کانال می‌گذارد. ورودی‌ها و خروجی‌ها تا زمانی که طرف دیگر آمادهٔ پیشنهاد یا قبول داده نباشد، پیش نمی‌روند. (در مواردی که پیش نروند گفته می‌شود فرایند در کانال مسدود می‌شود. هرچند برنامه نه به درازا می‌کشد و نه نظرسنجی می‌کند. به این ترتیب اصطلاحاتی مانند انتظار، تعلیق یا تسلیم، این رفتار را می‌رساند. همچنین دیگر فرایندهای مستقل را مسدود نمی‌کند) مثال‌ها (c متغیر است):

 keyboard ? c
 screen ! c

SEQ لیستی از عبارات که به ترتیب معین شده‌اند را معرفی می‌کند. برخلاف بیشتر زبان‌های برنامه‌نویسی این یک چیز ضمنی نیست.

 SEQ
   x := x + 1
   y := x * x

PAR لیستی از عبارات که ممکن است به‌طور همزمان معین شوند را شروع می‌کند. مثال:

 PAR
   p()
   q()

ALT لیستی از دستورات قفل شده را مشخص می‌کند. قفل‌ها ترکیبی از حالت بولی و عبارات ورودی هستند؛ هر دو اختیاری. هر قفل برای حالتی که درست است و کانال ورودی ای که آماده است، موفق عمل می‌کند. یکی از گزینه‌های موفق برای اجرا انتخاب می‌شود. مثال:

 ALT
   count1 <100 & c1 ? data
     SEQ
       count1 := count1 + 1
       merged ! data
   count2 <100 & c2 ? data
     SEQ
       count2 := count2 + 1
       merged ! data
   status ? request
     SEQ
       out ! count1
       out ! count2

داده‌ها را از کانال c1 یا c2 می‌خواند (هرکدام که آماده باشد) و به کانال ادغام شده می‌فرستد. اگر countN به ۱۰۰ برسد، خواندن از کانال متناظر از کار می‌افتند. درخواست حالت کانال از طریق تولید شمارش‌ها به out پاسخ داده می‌شود.

بازبینی زبان ویرایش

اوکام ۱

 

اوکام ۱ (منتشر شده در سال ۱۹۸۳) یک نسخه مقدماتی از این زبان بود که از کار دیوید می بر روی EPL، و CSPهای تونی هور اقتباس شد. این نسخه تنها نوع داده‌های VAR را پشتیبانی می‌کرد که همخوانی نوع انتگرال با طول کلمات اختصاصی معماری هدف بود و همچنین آرایه‌های تک بعدی.

اوکام ۲ ویرایش

اوکام ۲ که توسط شرکت inmos در ۱۹۸۷ توسعه داده شد، پشتیبانی ممیز شناور، تابع‌ها، آرایه‌های چند بعدی و نوع‌های داده بیشتری مانند اندازه‌های مختلف اعداد صحیح (INT32 , INT16) و بایت‌ها را اضافه می‌کند. با این نسخه او، اوکام به زبانی تبدیل می‌شود که توانایی بیان برنامه‌های مفید را دارد، در حالی که اوکام ۱ بیشتر مناسب سنجش الگوریتم‌ها و کاوش زبان جدید بود. (هرچند کامپایلر اوکام ۱ در اوکام ۱ نوشته شده بود، بنابراین یک مدرک وجود دارد که برنامه‌های مفید و با اندازه منطقی می‌توانند بر خلاف محدودیت‌های اوکام ۱ در آن نوشته شوند)

اوکام ۲٫۱ ویرایش

اوکام ۲٫۱ آخرین توسعه زبان اوکام توسط شرکت inmos بود. در سال ۱۹۹۴ تعریف شد و تحت تأثیر طرح پیشنهادی ای که پیشتر برای زبان اوکام ۳ (همچنین منتسب به "اوکام ۹۱" طی مراحل اولیه‌اش) توسط جف بارت (Geoff Barrett) در شرکت inmos در اوایل دهه ۹۰ میلادی ایجاد شده بود، قرار گرفت. یک کتابچه راهنمای مرجع اصلاح شده در توصیف اوکام ۳ برای نظر جامعه توزیع شد، اما این زبان هرگز به‌طور کامل در یک کامپایلر پیاده‌سازی نشده‌است. اوکام ۲٫۱ چند ویژگی شامل موارد زیر را به اوکام ۲ اضافه کرد:

  • نام گذاری انواع داده‌ها (نوع داده y , x است)
  • نام گذاری سابقه‌ها
  • دسته‌بندی سابقه‌ها
  • ترمیم بعضی از قوانین تبدیل نوع
  • عملگرهای جدید (مانند BYTESIN)
  • تغییر نوع کانال‌ها و آرایه‌های کانال
  • توانایی بازگرداندن آرایه با طول مشخص از تابع

برای مشاهده لیست کامل تغییرات ضمیمه p از Inmos occam 2.1 Reference Manual را ببینید.

اوکام π ویرایش

اوکام π نام رایج نوع اوکام که توسط نسخه‌های بعدی کامپایلر Kent Retargetable occam (KRoC) توسعه داده می‌شود است. اضافه کردن سمبل π به نام اوکام ، اشاره ای است به اوکام KRoC که شامل چند ایده تأثیر گرفته از جبر π است. اوکام π شامل چندین افزونه مهم نسبت به کامپایلر اوکام ۲٫۱ است. برای مثال:

  • پروتکل‌های تودرتو
  • ایجاد فرایندهای زمان اجرا
  • کانال‌ها، داده و فرایندهای متحرک
  • بازگشت
  • پروتکل وراثتی
  • سازنده آرایه
  • ملاقات‌های تمدید شده

جستارهای وابسته ویرایش

منابع ویرایش

پیوند به بیرون ویرایش