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

از ویکی‌پدیا، دانشنامهٔ آزاد

Euphoria یک زبان برنامه نویسی است که توسط Robert Craig از Rapid Deployment Software در تورنتو ، انتاریو ، کانادا ایجاد شده است. ابتدا در Atari ST توسعه یافت (اگرچه به صورت عمومی منتشر نشده بود) ، اولین نسخه تجاری برای پلتفرم 16 بیتی DOS و نرم‌افزار مالکیتی بود. در سال 2006 ، با انتشار نسخه 3 ، Euphoria به یک نرم‌افزار متن‌باز تبدیل شد. گروه OpenEuphoria به مدیریت و توسعه پروژه ادامه می دهد. در دسامبر 2010 ، گروه OpenEuphoria نسخه 4 OpenEuphoria را به همراه یک هویت جدید برای پروژه منتشر کرد. OpenEuphoria در حال حاضر برای ویندوز ، لینوکس ، macOS و سه رده از * BSD در دسترس است.

Euphoria یک زبان برنامه‌نویسی سطح بالا ،دستوری و مفسر است. یک مترجم کد منبع C را تولید می کند و مجموعه کامپایلرهای GNU (GCC) و کامپایلرهای Open Watcom پشتیبانی می شوند. متناوباً ، ممکن است برنامه های Euphoria به مفسر متصل شوند تا اجراهای اجرایی مستقل ایجاد کنند. تعدادی از کتابخانه های رابط کاربر گرافیکی (GUI) از جمله Win32lib و تابع لفاف‌پیچی wxWidgets و +GTK و IUP پشتیبانی می شوند. Euphoria دارای یک پایگاه داده داخلی ساده است و یانواع پایگاه ها داده دیگر.

دید کلی[ویرایش]

Euphoria یک زبان رویه ای با اهداف عمومی است که بر روی سادگی ، خوانایی ، توسعه سریع و عملکرد از چند طریق متمرکز است.

  • سادگی - فقط از چهار نوع داده داخلی استفاده می کند و بازیافت حافظه را به صورت خودکار اجرا می کند.
  • خوانایی - کلمات کلیدی ساده انگلیسی را به جای استفاده از علائم نگارشی برای ترسیم ساختارها ترجیح می دهد.
  • توسعه سریع - یک مفسر(رایانش) نمونه سازی و رشد تدریجی را تشویق می کند.
  • عملکرد - یک جمع کننده زباله با شمارش مرجع کارآمد ، از منابع حلقوی به درستی استفاده می کند.(برای کارآمد کردن حافظه)

تاریخچه[ویرایش]

Euphoria به عنوان یک پروژه شخصی برای اختراع یک زبان برنامه نویسی از ابتدا ساخته شد ، توسط رابرت کریگ در Atari Mega-ST ایجاد شد. بسیاری از ایده های طراحی برای این زبان از پایان نامه کارشناسی ارشد کریگ در علوم کامپیوتر در دانشگاه تورنتو ناشی شده است. پایان نامه کریگ به شدت تحت تأثیر کار جان بکوس در مورد زبانهای برنامه نویسی تابعی (FP) بود.

کریگ اجرای اصلی آتاری خود را به سیستم عامل 16 بیتی DOS منتقل کرد و Euphoria برای اولین بار ، نسخه 1.0 ، در ژوئیه 1993 تحت مجوز اختصاصی منتشر شد. اجرای اصلی آتاری توسط کریگ "بدوی" توصیف شده است و به صورت عمومی منتشر نشده است. Euphoria توسط کریگ از طریق شرکت خود Rapid Deployment Software (RDS) و وب سایت rapideuphoria.com توسعه و منتشر شد.در اکتبر 2006 ، RDS نسخه 3 Euphoria را منتشر کرد و اعلام کرد که از این پس Euphoria آزادانه تحت مجوز نرم‌افزار منبع آزاد توزیع می شود.

RDS به توسعه Euphoria ادامه داد و با انتشار نسخه 3.1.1 در آگوست 2007 به اوج خود رسید. پس از آن ، RDS توسعه یک جانبه Euphoria را متوقف کرد و گروه OpenEuphoria توسعه مداوم را به دست گرفت. گروه OpenEuphoria نسخه 4 را در دسامبر 2010 به همراه آرم جدیدی برای پروژه OpenEuphoria منتشر کرد.

نسخه 3.1.1 همچنان یک نسخه مهم است که آخرین نسخه Euphoria است که از پلتفرم DOS پشتیبانی می کند.

مفسر Euphoria در اصل در C. نوشته شده است. با انتشار نسخه 2.5 در نوامبر 2004 ، مفسر Euphoria به دو قسمت تقسیم شد: تجزیه کننده جلویی ، و مفسر back-end. جلوی جلوی آن در Euphoria نوشته شده است (و با مترجم Euphoria-to-C و Binder استفاده می شود). کتابخانه اصلی back-end و run در C نوشته شده است.

امکانات[ویرایش]

با اهداف و ویژگی های طراحی زیر تصور و توسعه یافته است:

  • سهولت یادگیری و با سازه های سطح بالا سازگار
  • اجرای حافظه مسطح 32 بیتی برای جلوگیری از مدیریت پیچیده حافظه و محدودیت آدرس دهی اندازه
  • رفع اشکال در پشتیبانی و خطای زمان اجرا
  • زیرنویس و بررسی نوع
  • تایپ متغیر شل و سخت
  • برنامه نویسی از طریق شی گرایی به عنوان انواع (تعریف شده توسط کاربر یا موارد دیگر)
  • تفسیر شده ، با مدیریت خودکار حافظه و بازیافت زباله
  • مجموعه ناهمگن (توالی)
  • کتابخانه گرافیکی DOS (نسخه های زبان Euphoria تا و شامل 3.1.1)
  • رفع اشکالگر
  • سیستم پایگاه داده یکپارچه
  • کنترل سطح پایین حافظه
  • تابع لفاف‌پیچی مستقیم کتابخانه های C (یا دسترسی به آنها)

حالت های اجرا[ویرایش]

  • مترجم
  • مترجم C (E2C) برای اجراهای مستقل یا پیونددهنده پویا
  • کامپایلر و مفسر بایت‌کد
  • Binder کد منبع Euphoria را به مترجم متصل می کند تا یک نسخه اجرایی ایجاد کند.
  • نسخه حلقه read-eval-print (REPL) در نقشه راه openEuphoria است.

موارد استفاده[ویرایش]

Euphoria به راحتی تسهیل کار با مجموعه داده های پویا از انواع مختلف را فراهم می کند و به ویژه برای رشته و پردازش تصویر بسیار مفید است. از Euphoria در آزمایش های هوش مصنوعی ، مطالعه ریاضیات ، برای آموزش برنامه نویسی و پیاده سازی فونت هایی با هزاران شخصیت استفاده شده است.

انواع داده[ویرایش]

Euphoria دارای دو نوع داده اساسی است:

Atom(اتم) - یک عدد ، به عنوان یک عدد صحیح امضا شده 31 بیتی یا یک نقطه شناور IEEE 64 بیتی اجرا می شود. Euphoria با توجه به مقدار فعلی به طور پویا بین نمایش عدد صحیح و نقطه شناور تغییر می کند.

Sequence(توالی) - برداری (آرایه ای) با عناصر صفر یا بیشتر. هر عنصر ممکن است یک اتم یا دنباله دیگری باشد. تعداد عناصر در یک دنباله ثابت نیست (به عنوان مثال ، لازم نیست اندازه برداری / آرایه اعلام شود). برنامه ممکن است عناصر را در صورت نیاز در زمان اجرا اضافه یا حذف کند. تخصیص حافظه - تخصیص حافظه به طور خودکار با شمارش مرجع انجام می شود. با استفاده از مقدار شاخصی که در پرانتز مربع محصور شده است ، به عناصر جداگانه ارجاع داده می شود. اولین عنصر در یک دنباله دارای شاخص یک است [1]. عناصر داخل توالی های جاسازی شده با مقادیر اضافی شاخص ترمز ارجاع داده می شوند ، بنابراین   X[3][2]به عنصر دوم موجود در توالی اشاره دارد که عنصر سوم X است. هر عنصر از یک دنباله از نوع شی است.

Euphoria دارای دو نوع داده اضافی از پیش تعریف شده است:

Integer (عدد صحیح) - یک اتم ، محدود به مقادیر صحیح امضا شده 31 بیتی در محدوده -1073741824 تا 1073741823 (-2 ^ 30 تا 2 ^ 30-1). انواع داده های عدد صحیح کارآمدتر از انواع داده های اتمی هستند ، اما نمی‌توانند حاوی مقادیر یکسانی از مقادیر باشند. کاراکترها به صورت عدد صحیح ذخیره می شوند ، به عنوان مثال ، کدگذاری ASCII-'A دقیقاً همان کدگذاری 65 است.

Object(شی) - نوع داده آرایه است که ممکن است حاوی هر یک از موارد فوق باشد (به عنوان مثال ، اتم ، توالی یا عدد صحیح) و ممکن است در طول زمان اجرا به نوع دیگری تغییر کند.

نوع داده رشته ای کاراکتر وجود ندارد. رشته ها با دنباله ای از مقادیر صحیح نشان داده می شوند. با این حال ، از آنجا که رشته های تحت‌اللفظی معمولاً در برنامه نویسی مورد استفاده قرار می گیرند ، Euphoria شخصیت های محصور شده با دو نقل قول را به عنوان دنباله ای از اعداد صحیح تفسیر می کند.

بدین ترتیب :

"ABC"

به نظر می رسد که رمزگذار نوشته است:

{'A', 'B', 'C'}

که همانند:

{65, 66, 67}

!Hello, World[ویرایش]

puts(1, "Hello, World!\n")

مثال[ویرایش]

نظرات برنامه با یک خط دوتایی شروع می شوند   --   و از انتهای خط عبور می کنند.

کد زیر به دنبال یک مورد قدیمی در یک گروه از موارد است. در صورت یافتن ، با الحاق تمام عناصر قبل از آن با تمام عناصر بعد از آن ، آن را حذف می کند. توجه داشته باشید که اولین عنصر در یک دنباله دارای شاخص یک است [1] و $ به طول (یعنی تعداد کل عناصر) دنباله اشاره دارد.

global function delete_item( object old, sequence group )
    integer pos
            -- Code begins --
    pos = find( old, group )
    if pos> 0 then
        group = group[1 .. pos-1] & group[pos+1 .. $]
    end if
    return group
end function

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

global function replace_item( object old, object new, sequence group )
    integer pos
            -- Code begins --
    pos = find( old, group )
    if pos> 0 then
        group[pos] = new
    end if
    return group
end function

علاوه بر این ، هیچ اشاره گری درگیر نیست و اشتراک ها به طور خودکار بررسی می شوند. بنابراین تابع نمی‌تواند به حافظه خارج از مرز دسترسی پیدا کند. دیگر نیازی به تخصیص یا تخصیص دقیق حافظه نیست و هیچ گونه احتمال نشت حافظه وجود ندارد.

این خط برخی از امکانات مدیریت توالی را نشان می دهد. یک دنباله ممکن است شامل مجموعه ای از هر نوع باشد ، و این را می توان قطعه قطعه کرد (برای گرفتن زیرمجموعه ای از داده ها در یک توالی) و در عبارات بدون نیاز به توابع خاص به هم پیوست.

       group = group[1 .. pos-1] & group[pos+1 .. $]

عبور پارامتر[ویرایش]

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

زبان های قابل مقایسه[ویرایش]

  • Lua
  • Phix
  • Python
  • REBOL
  • Ruby