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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Translation arrow fa.svg این نوشتار یک ترجمه از ویکی‌پدیاهای دیگر است. پيوند به سایر زبان‌ها را در سمت راست-پايين اين صفحه ببينيد.

آی‌سوییم (به انگلیسی: ISWIM) یک زبان برنامه‌نویسی (یا یکی از اعضای خانواده‌ی زبان‌های برنامه‌نویسی) انتزاعی است که به وسیله‌ی Peter J. Landin ابداع شد و برای اولین بار در مقاله‌ای به نام "۷۰۰ زبان برنامه‌نویسی آینده" که در Communications of the ACM منتشر شد، توصیف شد. نام این زبان یعنی ISWIM، مخفف "If you See What I Mean" (اگر شما منظور مرا فهمیدید) است.

اگر چه این زبان هنوز پیاده‌سازی نشده‌است، ثابت کرده‌است که در توسعه‌ی زبان‌های برنامه‌نویسی به خصوص در زبان‌های تابعی مانند SASL، Haskell، Miranda و ML و جایگزین هایشان، بسیار موثر بوده‌است.

آی‌سوییم یک زبان امری به همراه یک هسته‌ی تابعی است که از عبارت‌هایی برای خوانایی بیشتر از نوع حساب لامبدا(Lambda calculus) استفاده می‌کند که این امکان داشتن متغیرهای قابل تغییر و تخصیص و یک ساختار کنترلی قدرتمند (عملگر J) را می‌دهد.

معانی عملیاتی آی‌سوییم از ماشین مجازی SECD و فراخوانی با مقدار استفاده می‌کند که آن ارزیابی مشتاق است. یکی از اهداف آی‌سوییم این بود که بیشتر به نمادهای ریاضی شباهت داشته باشد. بنا بر این Landin سمی کالن بین عبارت‌ها و بلوک‌های begin end را با قانون off-side و حوزه بر مبنای دندانه گذاری، جایگزین کرد. یکی از تفاوت‌های آی‌سوییم در نمادگذاری استفاده از where clauseها است. یک برنامه ی آی‌سوییم از یک عبارت تنها که باwhere clause واجد شرایط شده‌است، عبارت‌های شرطی و تعریف توابع تشکیل شده‌است. با CPL این زبان یکی از اولین زبان‌های برنامه‌نویسی بود که از where clauseها استفاده کرد.

یکی از ویژگی‌های معنایی قابل توجه این زبان امکان تعریف انواع داده‌ای جدید به عنوان مجموع حاصل ضرب‌ها با قابلیت بازگشتی بود. متغیرهای آی سوییم اعلان صریح ندارند، و به نظر می‌رسد که احتمالاً(هر چند یه طور صریح در مقاله ی ۱۹۶۶ بیان نشده‌است) Landin قصد داشته که زبان با تایپ پویا باشد، مانند زبان لیسپ و بر خلاف الگول.اما این احتمال هم وجود دارد که او در نظر داشته تا نوعی از تایپ استنتاجی را توسعه دهد.

برای پیاده‌سازی مستقیم این زبان تلاشی نشده‌است، ولی زبان PAL مربوط به Art Evan و زبان Gedanken مربوط به John C. Reynolds، بسیاری از مفاهیم Landin مانند عملیات انتقال کنترل قوی را دارند. هر دوی این‌ها تایپ پویا دارند. زبان ML مربوط به Milner (بدون عملگر J و به همراه type inference) را می‌توانیم به عنوان یک معادل برای این زبان در نظر بگیریم.

یکی دیگر از معایب این زبان اضافه کردن قابلیت‌های زبان امری (مانند عملگر J و تخصیص) است که دیگر آن را از یک زبان خالص تابعی دور می‌کند و بعد از آن ممکن است روش ارزیابی آن به به ارزیابی تنبل تبدیل شود. این روش زبان‌های برنامه‌نویسی دیگری مانند: SASL، Haskell، Miranda)، Clean و KRC(Kent recursive calculator را هدایت کرده‌است.

منابع[ویرایش]