ایفوریا (زبان برنامهنویسی)
این مقاله نیازمند ویکیسازی است. لطفاً با توجه به راهنمای ویرایش و شیوهنامه، محتوای آن را بهبود بخشید. |
این مقاله نیازمند تمیزکاری است. لطفاً تا جای امکان آنرا از نظر املا، انشا، چیدمان و درستی بهتر کنید، سپس این برچسب را بردارید. محتویات این مقاله ممکن است غیر قابل اعتماد و نادرست یا جانبدارانه باشد یا قوانین حقوق پدیدآورندگان را نقض کرده باشد. |
این مقاله دقیق، کامل و صحیح ترجمه نشده و نیازمند ترجمه به فارسی است. کل یا بخشی از این مقاله به زبانی بهجز زبان فارسی نوشته شدهاست. اگر مقصود ارائهٔ مقاله برای مخاطبان آن زبان است، باید در نسخهای از ویکیپدیا به همان زبان نوشته شود (فهرست ویکیپدیاها را ببینید). در غیر این صورت، خواهشمند است ترجمهٔ این مقاله را با توجه به متن اصلی و با رعایت سیاست ویرایش، دستور خط فارسی و برابر سازی به زبان فارسی بهبود دهید و سپس این الگو را از بالای صفحه بردارید. همچنین برای بحثهای مرتبط، مدخل این مقاله در فهرست صفحههای نیازمند ترجمه به فارسی را ببینید. اگر این مقاله به زبان فارسی بازنویسی نشود، تا دو هفتهٔ دیگر نامزد حذف میشود و/یا به نسخهٔ زبانی مرتبط ویکیپدیا منتقل خواهد شد. اگر شما اخیراً این مقاله را بهعنوان صفحهٔ نیازمند ترجمه برچسب زدهاید، لطفاً عبارت {{جا:هبک-ترجمه به فارسی|1=ایفوریا (زبان برنامهنویسی)}} ~~~~ را نیز در صفحهٔ بحث نگارنده قرار دهید. |
این نوشتار نیازمند جعبهٔ اطلاعات است. ممکن است بخواهید با افزودن یک جعبهٔ اطلاعات، به استانداردسازی نمایش موضوع کمک کنید. این صفحه ممکن است دارای الگوی ویکیپروژهٔ وابسته به این نوشتار باشد که در آن میتوانید جعبهٔ اطلاعات استاندارد مناسب برای این مقاله را بیابید. همچنین رده:الگو:جعبههای اطلاعات را نیز ببینید. |
[۱]Euphoria یک زبان برنامهنویسی است که توسط Robert Craig از Rapid Deployment Software در تورنتو، انتاریو، کانادا ایجاد شدهاست. ابتدا در Atari ST توسعه یافت (اگرچه به صورت عمومی منتشر نشده بود)، اولین نسخه تجاری برای پلتفرم ۱۶ بیتی DOS و نرمافزار مالکیتی بود. در سال ۲۰۰۶، با انتشار نسخه ۳، Euphoria به یک نرمافزار متنباز تبدیل شد. گروه OpenEuphoria به مدیریت و توسعه پروژه ادامه میدهد. در دسامبر ۲۰۱۰، گروه 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) بود.[۳]
کریگ اجرای اصلی آتاری خود را به سیستم عامل ۱۶ بیتی DOS منتقل کرد و Euphoria برای اولین بار، نسخه ۱٫۰، در ژوئیه ۱۹۹۳ تحت مجوز اختصاصی منتشر شد. اجرای اصلی آتاری توسط کریگ «بدوی» توصیف شدهاست و به صورت عمومی منتشر نشدهاست. Euphoria توسط کریگ از طریق شرکت خود Rapid Deployment Software (RDS) و وب سایت rapideuphoria.com توسعه و منتشر شد. در اکتبر ۲۰۰۶، RDS نسخه 3 Euphoria را منتشر کرد و اعلام کرد که از این پس Euphoria آزادانه تحت مجوز نرمافزار منبع آزاد توزیع میشود.
RDS به توسعه Euphoria ادامه داد و با انتشار نسخه ۳٫۱٫۱ در اوت ۲۰۰۷ به اوج خود رسید. پس از آن، RDS توسعه یک جانبه Euphoria را متوقف کرد و گروه OpenEuphoria توسعه مداوم را به دست گرفت. گروه OpenEuphoria نسخه ۴ را در دسامبر ۲۰۱۰ به همراه آرم جدیدی برای پروژه OpenEuphoria منتشر کرد.
نسخه ۳٫۱٫۱ همچنان یک نسخه مهم است که آخرین نسخه Euphoria است که از پلتفرم DOS پشتیبانی میکند.
مفسر Euphoria در اصل در C. نوشته شدهاست. با انتشار نسخه ۲٫۵ در نوامبر ۲۰۰۴، مفسر Euphoria به دو قسمت تقسیم شد: تجزیه کننده جلویی، و مفسر back-end. جلوی جلوی آن در Euphoria نوشته شدهاست (و با مترجم Euphoria-to-C و Binder استفاده میشود). کتابخانه اصلی back-end و run در C نوشته شدهاست.
امکانات
[ویرایش]با اهداف و ویژگیهای طراحی زیر تصور و توسعه یافتهاست:
- سهولت یادگیری و با سازههای سطح بالا سازگار
- اجرای حافظه مسطح ۳۲ بیتی برای جلوگیری از مدیریت پیچیده حافظه و محدودیت آدرس دهی اندازه
- رفع اشکال در پشتیبانی و خطای زمان اجرا
- زیرنویس و بررسی نوع
- تایپ متغیر شل و سخت
- برنامهنویسی از طریق شی گرایی به عنوان انواع (تعریف شده توسط کاربر یا موارد دیگر)
- تفسیر شده، با مدیریت خودکار حافظه و بازیافت زباله
- مجموعه ناهمگن (توالی)
- کتابخانه گرافیکی DOS (نسخههای زبان Euphoria تا و شامل ۳٫۱٫۱)
- رفع اشکالگر
- سیستم پایگاه داده یکپارچه
- کنترل سطح پایین حافظه
- تابع لفافپیچی مستقیم کتابخانههای C (یا دسترسی به آنها)
حالتهای اجرا
[ویرایش]- مترجم
- مترجم C (E2C) برای اجراهای مستقل یا پیونددهنده پویا
- کامپایلر و مفسر بایتکد
- Binder کد منبع Euphoria را به مترجم متصل میکند تا یک نسخه اجرایی ایجاد کند.
- نسخه حلقه read-eval-print (REPL) در نقشه راه openEuphoria است.
موارد استفاده
[ویرایش]Euphoria به راحتی تسهیل کار با مجموعه دادههای پویا از انواع مختلف را فراهم میکند و به ویژه برای رشته و پردازش تصویر بسیار مفید است. از Euphoria در آزمایشهای هوش مصنوعی، مطالعه ریاضیات، برای آموزش برنامهنویسی و پیادهسازی فونتهایی با هزاران نویسه استفاده شدهاست.
انواع داده
[ویرایش]Euphoria دارای دو نوع داده اساسی است:
Atom(اتم) - یک عدد، به عنوان یک عدد صحیح امضا شده ۳۱ بیتی یا یک نقطه شناور IEEE 64 بیتی اجرا میشود. Euphoria با توجه به مقدار فعلی بهطور پویا بین نمایش عدد صحیح و نقطه شناور تغییر میکند.
Sequence(توالی) - برداری (آرایه ای) با عناصر صفر یا بیشتر. هر عنصر ممکن است یک اتم یا دنباله دیگری باشد. تعداد عناصر در یک دنباله ثابت نیست (به عنوان مثال، لازم نیست اندازه برداری / آرایه اعلام شود). برنامه ممکن است عناصر را در صورت نیاز در زمان اجرا اضافه یا حذف کند. تخصیص حافظه - تخصیص حافظه بهطور خودکار با شمارش مرجع انجام میشود. با استفاده از مقدار شاخصی که در پرانتز مربع محصور شدهاست، به عناصر جداگانه ارجاع داده میشود. اولین عنصر در یک دنباله دارای شاخص یک است [۱]. عناصر داخل توالیهای جاسازی شده با مقادیر اضافی شاخص ترمز ارجاع داده میشوند، بنابراین X[3][2]به عنصر دوم موجود در توالی اشاره دارد که عنصر سوم X است. هر عنصر از یک دنباله از نوع شی است.
Euphoria دارای دو نوع داده اضافی از پیش تعریف شدهاست:
Integer (عدد صحیح) - یک اتم، محدود به مقادیر صحیح امضا شده ۳۱ بیتی در محدوده -۱۰۷۳۷۴۱۸۲۴ تا ۱۰۷۳۷۴۱۸۲۳ (-۲ ^ ۳۰ تا ۲ ^ ۳۰–۱). انواع دادههای عدد صحیح کارآمدتر از انواع دادههای اتمی هستند، اما نمیتوانند حاوی مقادیر یکسانی از مقادیر باشند. کاراکترها به صورت عدد صحیح ذخیره میشوند، به عنوان مثال، کدگذاری ASCII-'A دقیقاً همان کدگذاری ۶۵ است.
Object(شی) - نوع داده آرایه است که ممکن است حاوی هر یک از موارد فوق باشد (به عنوان مثال، اتم، توالی یا عدد صحیح) و ممکن است در طول زمان اجرا به نوع دیگری تغییر کند.
نوع داده رشتهای کاراکتر وجود ندارد. رشتهها با دنباله ای از مقادیر صحیح نشان داده میشوند. با این حال، از آنجا که رشتههای تحتاللفظی معمولاً در برنامهنویسی مورد استفاده قرار میگیرند، Euphoria شخصیتهای محصور شده با دو نقل قول را به عنوان دنباله ای از اعداد صحیح تفسیر میکند.
بدین ترتیب :
"ABC"
به نظر میرسد که رمزگذار نوشتهاست:
{'A', 'B', 'C'}
که همانند:
{۶۵, ۶۶, ۶۷}
!Hello, World
[ویرایش]puts(1, "Hello, World!\n")
مثال
[ویرایش]توضیحات کد برنامه با یک خط دوتایی شروع میشوند -- و از انتهای خط عبور میکنند.
کد زیر به دنبال یک مورد قدیمی در یک گروه از موارد است. در صورت یافتن، با الحاق تمام عناصر قبل از آن با تمام عناصر بعد از آن، آن را حذف میکند. توجه داشته باشید که اولین عنصر در یک دنباله دارای شاخص یک است [۱] و $ به طول (یعنی تعداد کل عناصر) دنباله اشاره دارد.
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 .. $]
عبور پارامتر
[ویرایش]استدلال به روال همیشه با ارزش منتقل میشود. هیچ امکان عبوری از مرجع وجود ندارد. با این حال، پارامترها مجاز به تغییر محلی هستند (به عنوان مثال، در داخل فراخوان) که بسیار کارآمد اجرا میشود زیرا توالیها دارای معنای خودکار کپی بر روی نوشتن هستند. به عبارت دیگر، هنگامی که توالی را به روال منتقل میکنید، در ابتدا فقط یک ارجاع به آن منتقل میشود، اما در مرحله معمول این پارامتر دنباله را تغییر میدهد توالی کپی میشود و روال فقط یک نسخه از نسخه اصلی را به روز میکند.
زبانهای قابل مقایسه
[ویرایش]منابع
[ویرایش]- ↑ "Euphoria (programming language)". Wikipedia (به انگلیسی). 2021-03-13.
- ↑ «OpenEuphoria: News Index». openeuphoria.org. دریافتشده در ۲۰۲۱-۰۶-۲۸.
- ↑ «WebCite query result». www.webcitation.org. بایگانیشده از اصلی در ۱۹ ژوئیه ۲۰۲۱. دریافتشده در ۲۰۲۱-۰۶-۲۸.