IMP ادینبورگ

Systems programming language used in the EMAS operating system
| 0 | 1 |
| --- | --- |
پارادایم برنامه‌نویسی: رویه‌ای, دستوری, ساخت‌یافته
خانواده: الگول
طراحی شده توسط: Bratley, Whitfield, M. M. Barritt, David Rees, Peter D. Schofield, Roderick McLeod, Hamish Dewar, Peter D. Stephens, Peter Robertson
توسعه‌دهنده: دانشگاه ادینبرو
ظهوریافته در: ۱۹۶۶؛ ۵۸ سال پیش (۱۹۶۶-خطا: زمان نامعتبر}})
شیوه نوع‌دهی: ایستا, قوی
دامنه: واژگانی
زبان پیاده‌سازی: Atlas Autocode, IMP
بن‌سازه رایانش: English Electric KDF9, ICL System 4, UNIVAC 1108, IBM System/360, DEC PDP-9, DEC PDP-10, DEC PDP-11, DEC PDP-15, CTL Modular One, x86, Interdata 7-16, Interdata 7-32, Data General Nova
سیستم‌عامل: BOS/360, DOS, Windows, Linux
پیاده‌سازی‌های بزرگ: پیاده‌سازی‌های بزرگ
Edinburgh IMP: Edinburgh IMP
گویش: گویش
IMP77, IMP80: IMP77, IMP80
متأثر از: متأثر از
ALGOL 60, Atlas Autocode: ALGOL 60, Atlas Autocode
IMP ادینبورگ یک توسعه از Atlas Autocode است که ابتدا در حدود سال‌های ۱۹۶۶-۱۹۶۹ در دانشگاه ادینبورگ اسکاتلند توسعه یافت. این زبان، یک زبان برنامه‌نویسی عمومی است که به‌طور گسترده‌ای برای برنامه‌نویسی سیستم‌ها استفاده می‌شد.
به‌طور واضح‌تر، IMP بسیار شبیه به ALGOL است و شامل تمام ساختارهای بلوکی به سبک ALGOL، کلمات کلیدی و انواع داده‌ها مانند آرایه‌ها و رکوردها می‌باشد. این زبان به زبان‌های به سبک ALGOL، یک نوع رشته (آرایه‌ای از کاراکترها که اندازه آن‌ها از قبل تعیین شده است) و عملگرهای داخلی برای دستکاری رشته‌ها و پردازش کاراکترها اضافه می‌کند. یک تفاوت مهم این زبان با ALGOL این است که IMP از پارامترهایی که به صورت نام منتقل می‌شوند، پشتیبانی نمی‌کند، اگرچه از پارامترهایی که به صورت مرجعی منتقل می‌شوند، پشتیبانی می‌کند.
IMP علاوه بر دستورهایی برای آدرس‌دهی در بخش‌هایی از کلمات، کنترل قابل توجهی بر نقشه‌برداری حافظه داده‌ها فراهم می‌کند. بیشتر کامپایلرهای IMP به‌طور پیش‌فرض، حتی در کد تولیدی، چک‌های زمان اجرا و یک قابلیت ردیابی پشته (بازگشت به عقب) ایجاد می‌کنند. IMP اجازه می‌دهد دستورهای زبان ماشین اسمبلر داخلی در کد منبع نیز استفاده شود.
پیاده‌سازی IMP توسط ERCC برای سیستم ICL System 4 (که به نام IMP9 شناخته می‌شود) یک قابلیت ماکرو مبتنی بر سینتکس (که توسط آلن فریمن طراحی شده بود) ارائه داد که شبیه به ویژگی‌های کامپایلر-کامپایلر ارائه شده توسط پیش‌ساز IMP، یعنی Atlas Autocode بود.
کامپایلرهای اولیه IMP برای کامپیوترهای English Electric KDF9، ICL System 4، UNIVAC 1108، IBM System/360، DEC PDP-9 ،DEC PDP-15 و CTL Modular One توسعه یافتند. IMP برای پیاده‌سازی سیستم عامل Edinburgh Multiple Access System (EMAS) استفاده شد و یک کامپایلر برای سری ICL 2900 نوشته شد تا امکان انتقال EMAS به آن پلتفرم را فراهم کند. در سال‌های بعد، نسخه‌ای از IMP به نام IMP77 توسط پیتر رابرتسون در دپارتمان علوم کامپیوتر ادینبورگ توسعه یافت که یک کامپایلر قابل حمل بود و IMP را به پلتفرم‌های بیشتری آورد. در سال 2002، زبان IMP77 توسط پروژه تاریخچه کامپیوتر ادینبورگ برای سخت‌افزار Intel x86 که سیستم‌عامل‌های DOS، ویندوز و لینوکس را اجرا می‌کرد، بازسازی شد و دوباره توسط فارغ‌التحصیلان و مهاجران ادینبورگ مورد استفاده قرار گرفت.
IMP و IMP77 که جدا شده بودند، بعدها با معرفی استاندارد IMP80 که توسط پیاده‌سازی‌های مرکز کامپیوتر منطقه‌ای ادینبورگ پشتیبانی می‌شد، به یک زبان واحد تبدیل شدند. IMP80 همچنین به چندین پلتفرم از جمله اینتل منتقل شد و تا دهه ۱۹۹۰ به‌طور فعال مورد استفاده قرار می‌گرفت.
IMP ادینبورگ ارتباطی با زبان برنامه‌نویسی قابل توسعه از لحاظ سینتکس IMP که توسط ادگار تی. آیرونس برای CDC 6600 توسعه داده شده بود ندارد؛ زبانی که توسط آژانس امنیت ملی (NSA) برای سال‌ها مورد استفاده قرار می‌گرفت.