ای‌پی‌ال

تاریخچه

APL یک زبان برنامه‌نویسی است که بر مبنای نمادگذاری که Kenneth E. Iverson در سال ۱۹۵۷ در دانشگاه هاروارد ابداع کرد، ایجاد شده‌است. هدف اولیه تولید این زبان، ایجاد یک زبان مشترک برای تدریس و تحلیل برنامه‌های کامپیوتری بوده‌است. Iverson جایزهٔ تورینگ را به خاطر این کارش در سال ۱۹۷۹ برد.

مفسرها

APL2000 یک مفسر پیشرفته برای APL تولید کرده که تحت لینوکس، یونیکس و ویندوز اجرا می‌شود. این مفسر استفاده از dllها را پشتیبانی می‌کند و یک فایل سیستم پیشرفته برای APL دارد. این محصول APL2000 ادامه تلاش‌های موفق STSC در تولید APL*Plus/PC و APL*Plus/386 است.
Dyalog APL یک مفسر پیشرفته دیگر است که تحت لینوکس، یونیکس و ویندوز اجرا می‌شود. Dyalog یک توسعه بر زبان APL است که قابلیت‌های شی‌گرایی جدید و namespace به آن اضافه کرده‌است. ضمناً Dyalog در ویندوز قابلیت ارتباط با Microsoft.Net و Microsoft Visual Studio را دارد.
IBM یک نسخه از APL2 را برای IBM AIX، لینوکس، سولاریس و ویندوز ارائه کرده‌است. این محصول نسل بعدی APL2 است که برای mainframesها مورد استفاده قرار می‌گرفت. APL2 مطرح‌ترین سیستم APL بوده‌است.
MicroAPL نیز یک مفسر برای سیستم‌های ۶۴بیتی به نام APLX طراحی کرده که تحت لینوکس، ویندوز و Mac OS قابل اجراست.

کامپایل

عمدتاً برنامه‌های APL تفسیر می‌شوند و کم‌تر کامپایل می‌شوند. در واقع اکثر کامپایلرهای APL، متن برنامهٔ APL را به زبان‌های سطح پایین‌تر مانند C ترجمه می‌کنند. با این‌که توسعه زبان APL خصوصاً اضافه شدن آرایه‌های تودرتو، کامپایل کردن APL را دشوار ساخته، ایدهٔ کامپایل کردن APL هنوز در حال بررسی است.

اصطلاحات

در APL تفاوت بین توابع و عمل‌گرها واضح است. توابع ورودی می‌گیرند (متغیر یا ثابت یا عبارت) و حاصل را در خروجی بازمی‌گردانند. عمل‌گرها توابع را می‌گیرند و تغییریافتهٔ آن‌ها را بازمی‌گردانند. برای مثال تابع «sum» با اعمال عمل‌گر «reduction» بر تابع «addition» به‌دست می‌آید.
همچنین نمادهای APL primitive نامیده می‌شوند. اغلب primitiveها یا تابع هستند یا عمل‌گر. فرایند نوشتن کد APL بیشتر شامل نوشتن توابع غیر primitive است. البته بعضی از primitiveها نه عمل‌گر هستند و نه تابع. برای مثال نماد انتساب.

کنترل خطاها

در برنامه‌های APL چند نوع خطا ممکن است بروز کند:

خطا در حالت محاسباتی

اگر عبارتی محاسباتی را وارد کنید که دارای داده‌های نامناسب باشد، مفسر معمولاً خطای domain error را باز خواهد گرداند. در مثال زیر از عملگر v استفاده شده‌است که تنها بر اعداد صفر و یک عمل می‌کند. همان‌طور که می‌بینید مفسر خطی که خطا دارد را چاپ کرده و با علامت ^ مکانی را که تصور می‌کند خطا در آن رخ داده را مشخص کرده‌است.
      1 1 0 11 ∨ 1 1 0 0
DOMAIN ERROR
      1 1 0 11 ∨ 1 1 0 0
      ^

خطا در توابع و عمگرهای تعریف شده توسط کاربر

اگر در تابع یا عملگری که توسط کاربر خطایی بروز کند، اجرای برنامه متوقف می‌شود. پیام خطای مناسب به همراه شمارهٔ خطی که اجرا در آن متوقف شده‌است و نام تابع و همچنین عبارتی که خطا در آن است به همراه علامت ^ که نمایش‌گر محل خطا است نمایش داده می‌شوند. در مثال زیر خطا در تابع C و خط دوم رخ داده است.
LENGTH ERROR
C[2] 1 2 - 1 2 3
     ^

نمایان‌گر حالت

ممکن است اجرا در تابعی متوقف شود که توسط تابع دیگری فراخوانی شده‌است، در این حالت می‌توانید با اجرای تابع سیستمی SI( حالتی که اجرا در آن قرار دارد را ببینید:
      )SI
C[2] *
B[8]
A[5]
در مثال بالا تابع Cدر خط هشتم تابع B و تابع B نیز در خط پنجم تابع A فراخوانی شده‌است و تابع C در خط دوم متوقف شده‌است و پایان اجرای دو تابع دیگر نیز وابسته به پایان اجرای تابع C است. آن ستاره نشان‌دهندهٔ تابعی است که توقف در آن رخ داده است. (طرز نمایش حالت در تمام مفسرهای یکسان نیست، این طرز نمایش متعلق به APLX است).