الگول ۶۸ سی

این زبان ابتدا Z۷۰ نامیده شد سپس الگول ۶۸ تبدیل شد. الگول۶۸c در ابتدا برای توسعه و برنامه‌نویسی سامانهٔ جری کمبریج که camal نام داشت ساخته شده بود. اولین کامپایلر نوشته شده برای آن در PSYCO و توسط متیومن در کمبریج ساخته شد. این زبان برنامه‌نویسی وکامپایلر آن توسط استیفان بروس و مایکل گای و به عنوان الگول ۶۸ توسعه یافت.

الگول۶۸ سپس در سال ۱۹۷۱ و در سیستم عامل choas برای کامپیوترهای سازگار با cap در دانشگاه کمبریج استفاده شد. مشارکت کنندهٔ ابتدایی دیگر آن اندرو بیلر و یان واکر است. کارهای متقاعب زیادی با کامپایلر وقتی بورن در سال ۱۹۷۵ دانشگاه کمبریج را ترک کرد انجام شده‌است. ویژگی جمع‌آوری زباله به این زبان اضافی شده‌است و کد پایه هنوز روی شبیه‌ساز OS/MVT و با استفاده از هرکولس اجرا می‌شود. کامپایلر الگول ۶۸ یک خروجی zcode تولید می‌کند که حتی می‌تواند با استفاده از مترجم Zcode روی دستگاه‌های محلی کامپایل و ترجمه شود.zcode یک زبان بر پایهٔ رجیستر و بلافصل است. این ویژگی برای تفسیر یا کامپایل zcode پورت کردن الگول ۶۸C را برای شماره‌های مختلف پلتفرم‌های کامپیوتر را ترغیب می‌کند. گذشته از کامپیوترهای سازگار با cap کامپایلر برای سیستم‌های شامل CMS, TOPS-۱۰ و Z۸۰پورت شده‌است

## فرهنگ مشهور
یک رویهٔ ابتدایی برای این کامپایلر توسط گای و بورن برای نوشتن اولین برنامهٔ بازی زندگی روی pdp-۷ با یک دسامبر ۳۴۰ استفاده شد
این برنامه‌ای که توسط گای و بورن تولید شده‌است بدون کمک آن تولید بعضی از این اکتشافات بسیار سخت است.
کامپایلر برای اجرا کردن برنامه نیاز به ۱۲۸ کیلو بیت حافظه دارد. به‌طور میانگین ۶۴ کیلو بیت حافظه Z۸۰ برای اجرای کامپایلر بسیار کوچک است؛ بنابراین برنامه‌های الگول ۶۸C برای Z۸۰ باید برای کامپیوترهای سازگار با CAP و IBM System/۳۷۰ در فریم اصلی اجرا شود.

## الگول ۶۸c و یونیکس
استفان بروس دستورهای if ~ then ~ else ~ fi, case ~ in ~ out ~ esac and for ~ while ~ do ~ od الگول را در پوستهٔ یونیکس بورن به صورت مجدد مورد استفاده قرار داد.
اما نحو دستور in تغییر یافت دستور out حذف گردید و دستور od به منظور جلوگیری از اشتباه شدن با دستور od در تابع سودمندی (به انگلیسی utility) با دستور done جابجا شد.
پس از کمبریج، بورن نه سال را در آزمایشگاه بل با تیم ویرایش هفتم یونیکس سپری کرد. او همین‌طور که پوستهٔ بورن را توسعه می‌داد الگول ۶۸C را به یونیکس و روی یک DEC PDP-۱۱–۴۵
پورت کرد و ویژگی‌های خاصی مانند adb را به دیباگر یونیکس برای گرفتن ردیابی برنامه‌های نوشته شده با الگول ۶۸c اضافی کرد
کد زیر از صفحه دستی ویرایش هفتم ADB استخراج شده

  adb - debugger
 SYNOPSIS
  adb [-w] [ objfil [ corfil ]]
 [...]
 COMMANDS
 [...]
  $modifier
  Miscellaneous commands. The available modifiers
  are:
              [...]
  a ALGOL 68 stack backtrace. If address is
  given then it is taken to be the address of
  the current frame (instead of r4). If count
  is given then only the first count frames
  are printed.

## توسعهٔ الگول ۶۸c به الگول ۶۸
موارد زیر نمونه‌ای از موارد مهم اضافی شده هستند:
# . :=opبرای هر عملگر مثلاً:=+ و:=*
# . دستورات UPTO, DOWNTO و UNTIL در حلقه‌ها
# . عملگر جابجایی (:=:=)
# . عناصر نحوی ANDF, ORF and THEF
# . جداسازی تلفیق‌ها using و environ
# . محدوده‌ها (به انگلیسی scope) چک نمی‌شوند
# . محدودیت در تعریف‌های رسمی (به انگلیسی formal-declarers)
# .CODE... EDOC جایگزین ZCODE شدند.
""عبارت‌های using و environ""
تلفیق عبارت‌های using و environ در الگول ۶۸c جداسازی شده‌است. environ در محلی که استفاده می‌شود کل محیط را ذخیره می‌کند. یک ماژول جداگانه که از using استفاده می‌کند به‌طور مؤثر به ماژول اولیه و در محلی که environ ظاهر می‌شود درج می‌شود.
using و environ در برنامه‌نویسی بالا به پایین (به انگلیسی top_down) برخلاف برنامه‌نویسی پایین به بالا (به انگلیسی bottom_up) به‌طور ضمنی توسط مکانیزم کتابخانه‌های سنتی پر کاربرد هستند.
این عبارت‌ها نوعی معکوس ساختار include# در زبان برنامه‌نویسی سی یا ساختار import در زبان پیتون است. هدف مکانیسم environ این است که به کد برنامه اجازه می‌دهد تا به قسمت‌های با اندازهٔ قابل کنترل شکسته شود.
توجه شود که تنها باید یک بار فایل منبع به اشتراک گذاشته شده را تجزیه کرد برخلاف ساختار include# در زبان برنامه‌نویسی سی که هر فایل منبعی که شامل فایل منبع بود باید تجزیه شود.

### مثالی برای environ
فایلی که mylib.a۶۸ نام دارد:

```algol68
BEGIN
   INT dim = ۳; # a constant #
   INT a number:= ۱۲۰; # a variable #
   ENVIRON EXAMPLE1;
   MODE MATRIX = [dim, dim]REAL; # a type definition #
   MATRIX m۱;
   a number:= ENVIRON EXAMPLE2;
   print((a number))
END
```


### مثالی برای using
فایلی که *usemylib.a۶۸* نام دارد:


```algol68
USING EXAMPLE2 FROM "mylib"
BEGIN
  MATRIX m۲; # example only #
  print((a number)); # declared in mylib.a۶۸ #
  print((2 UPB m۱)); # also declared in mylib.a۶۸ #
  ENVIRON EXAMPLE۳;  # ENVIRONs can be nested #
  ۶۶۶
END
```


## محدودیت‌هایی برای زبان‌های برگرفته شده از الگول۶۸
# . عدم وجود فلکس و آرایه با طول متغیر موجود در الگول ۶۸
# . مد رشته (به انگلیسی string)بدون فلکس انجام می‌شود
# . دستور par برای عبارت‌های موازی حذف شده
# . transput غیر استاندارد
# . وغیره

## منابع

ویکی‌پدیای انگلیسی

رده:نرم‌افزارهای مجازی‌سازی