رینگ (زبان برنامهنویسی)
پارادایم برنامهنویسی | چند پارادایمی: شیءگرا، دستوری، تابعی، رویهای، پژواکی، اعلانی، طبیعی |
---|---|
طراحی شده توسط | محمود سمیر فاید[۱][۲] |
توسعهدهنده | تیم توسعه رینگ |
ظهوریافته در | ۲۵ ژانویه ۲۰۱۶ |
انتشار پایدار | 1.22[۳]
/ ۱ دسامبر ۲۰۲۴ |
پویا | |
زبان پیادهسازی | سی |
سیستمعامل | ویندوز، لینوکس و مکاواس |
پروانه | پروانه امآیتی |
.ring, .rh, .rform | |
وبگاه | |
رینگ یک زبان برنامهنویسی همه منظوره پویا است که میتوان آن را در پروژههای C/C++ تعبیه کرد، با استفاده از کد C/C++ گسترش داد و/یا به عنوان یک زبان مستقل استفاده کرد.[۴] پارادایمهای برنامهنویسی دستوری، رویه ای، شی گرا، تابعی، فرا و اعلاتی با استفاده از ساختارهای تو در تو و برنامهنویسی طبیعی در رینگ پشتیبانی میشوند.[۵][۶] این زبان قابل حمل است (ویندوز، لینوکس، مکاواس، اندروید،[۷] وباسمبلی،[۸] و غیره) و میتوان از آن برای ایجاد کنسول، رابط کاربری گرافیکی، وب، بازی و برنامههای موبایل استفاده کرد.[۹][۱۰][۱۱]
تاریخچه
[ویرایش]- در ۲۵ ژانویه ۲۰۱۶، رینگ ۱٫۰ منتشر شد.
- در ۶ اکتبر ۲۰۱۶، رینگ ۱٫۱ منتشر شد.
- در ۲۵ ژانویه ۲۰۱۷، رینگ ۱٫۲ منتشر شد.
- در ۱۵ می ۲۰۱۷، رینگ ۱٫۳ منتشر شد.
- در ۲۹ ژوئن ۲۰۱۷، رینگ ۱٫۴ منتشر شد.
- در ۲۱ آگوست ۲۰۱۷، رینگ ۱٫۵ منتشر شد.
- در ۳۰ نوامبر ۲۰۱۷، رینگ ۱٫۶ منتشر شد.
- در ۲۵ ژانویه ۲۰۱۸، رینگ ۱٫۷ منتشر شد.
- در ۲۵ ژوئن ۲۰۱۸، رینگ ۱٫۸ منتشر شد.
- در ۶ اکتبر ۲۰۱۸، رینگ ۱٫۹ منتشر شد.
- در ۲۵ ژانویه ۲۰۱۹، رینگ ۱٫۱۰ منتشر شد.
- در ۱۵ سپتامبر ۲۰۱۹، رینگ ۱٫۱۱ منتشر شد.
- در ۲۵ ژانویه ۲۰۲۰، رینگ ۱٫۱۲ منتشر شد.
- در ۱۵ سپتامبر ۲۰۲۰، رینگ ۱٫۱۳ منتشر شد.
- در ۲۵ ژانویه ۲۰۲۱، رینگ ۱٫۱۴ منتشر شد.
- در ۲۴ سپتامبر ۲۰۲۱، رینگ ۱٫۱۵ منتشر شد.
- در ۲۳ اکتبر ۲۰۲۱، رینگ ۱٫۱۶ منتشر شد.[۱۲]
اهداف
[ویرایش]- زبان برنامهنویسی کاربردی
- بهرهوری و توسعه راه حلهای با کیفیت بالا که میتوانند مقیاس شوند.
- زبان کوچک و انعطافپذیری که میتواند در پروژههای C/C++ تعبیه شود.
- زبان ساده قابل استفاده در آموزش و معرفی مفاهیم Compiler/VM.
- زبان همه منظوره که میتواند برای ایجاد کتابخانهها، چارچوبها و ابزارهای خاص دامنه استفاده شود.
- زبان عملی طراحی شده برای ایجاد نسخه بعدی نرمافزار Programming Without Coding Technology.[۱۵]
مثالها
[ویرایش]برنامه سلام دنیا
[ویرایش]در رینگ، یک برنامه را میتوان با استفاده از سبکهای مختلف نوشت. در اینجا نمونه ای از استاندارد "سلام، جهان!" را با استفاده از چهار سبک مختلف میبینید:
سبک اول:
see "Hello, World!"
سبک دوم:
put "Hello, World!"
سبک سوم:
load "stdlib.ring" print("Hello, World!")
سبک دیگر: شبیه به زبانهای xBase مانند Clipper و Visual FoxPro
? "Hello, World!"
تغییر کلمات کلیدی و اپراتورها
[ویرایش]رینگ از تغییر کلمات کلیدی و عملگرهای زبان پشتیبانی میکند.
این کار را میتوان بارها در یک فایل انجام داد و برای مقاصد زیر کاربردی است:
- ترجمه کلمات کلیدی از انگلیسی به سایر زبانهای انسانی (زبانهای برنامهنویسی غیر انگلیسی)
- سفارشی کردن زبان برای استفاده از سبک مورد علاقه
- انتقال کدهای قدیمی که به زبانهای دیگر نوشته شدهاست
نمونه ترجمه کلمات کلیدی رینگ به به فارسی:
ChangeRingKeyword See بنویس بنویس "Hello, World!" ChangeRingKeyword بنویس See
نمونه ترجمه کلمات کلیدی رینگ به به عربی:
ChangeRingKeyword See إطبع
إطبع "Hello, World!"
ChangeRingKeyword إطبع See
نمونه ترجمه کلیدی رینگ به ژاپنی:
ChangeRingKeyword See 手紙を出す ChangeRingOperator + そして 改行 = nl します。 = :します。 手紙を出す "こんにちは、世界" そして 改行 します。 ChangeRingKeyword 手紙を出す See // キーワードの復旧 ChangeRingOperator そして + // 演算子の復旧
استفاده از سبک مشابه زبان برنامهنویسی پاسکال در رینگ:
ChangeRingKeyword func function
ChangeRingKeyword see write
begin = :begin
function main
begin
write("Hello, World!");
return 0;
end
ChangeRingKeyword function func
ChangeRingKeyword write see
فرمان حلقه
[ویرایش]دستور حلقه (Loop) میتواند یک عدد صحیح بگیرد تا ادامه کار را در حلقههای بیرونی محصور کند[۱۸]
changeRingKeyword loop continue count = ۲ for x in 1:5 for y = 1 to ۲ if x = ۳ ? "About to execute 'loop', count = " + count continue count ok ? "x: " + x + ", y: " + y next next
برنامهنویسی شی گرا
[ویرایش]رینگ از برنامهنویسی شی گرا (کلاسها، اشیاء، ترکیب، ارث، کپسولاسیون و غیره) پشتیبانی میکند)[۱۹]
new point { # Create new object from the Point class the access the object using braces x=10 y=20 z=30 # Set the object attributes print() # Call the print() method } # end of object access using braces class point # Define the class x y z # Define the attributes (x,y,z) func print # Define the print() method ? x + nl + y + nl + z # Print the attributes values (nl means printing a new line)
در رینگ کلاسها را میتوان در زمان اجرا با استفاده از تابع Eval() تعریف کرد[۲۰]
? "Creating a new class dynamically..." eval("class DynamicClass a b")
? "Printing the instance..." ? new DynamicClass {a=1 b=۲}
پیادهسازی
[ویرایش]کامپایلر و ماشین مجازی
[ویرایش]برنامههای رینگ مستقیماً از فایل رینگ متنی تفسیر نمیشوند، بلکه در بایت کد کامپایل میشوند سپس در ماشین مجازی رینگ اجرا میشوند. فرایند کامپایل معمولاً برای کاربر نامرئی است و در زمان اجرا انجام میشود، اما میتوان آن را به صورت آفلاین انجام داد تا با کنار گذاشتن کامپایلر، عملکرد بارگذاری برنامه افزایش یابد.
افزودنیها (Extensions)
[ویرایش]افزدونیهای زیر بلافاصله پس از نصب نسخه کامل نصب (با حجم فایل حدود ۲۸۰ مگابایت برای رینگ ۱٫۱۲) قابل استفاده هستند. از آنجایی که اینها بهطور رسمی از سمت رینگ ارائه میشوند، کاربران در وابستگیهای کتابخانه ای که ممکن است در زبانهای دیگر مشکلاتی ایجاد کند مشکل ندارند و این نگرانی وجود ندارد که حتی در صورت تغییرات مخرب در مشخصات زبان، نتوانند به در لحظه از آنها استفاده کنند.
برنامههای افزودنی با حدود ۵۰۰۰۰۰ خط کد C و C++ پیادهسازی شدهاند.
- RingAllegro (کتابخانه بازی آلگرو)
- RingConsoleColor (کتابخانه رنگ آمیزی متن برای خط فرمان یا ترمینال)
- RingCurl (کتابخانه کرل)
- RingFreeGLUT (FreeGLUT)
- RingInternet (کتابخانه مرتبط با اینترنت)
- RingLibUV (کتابخانه I/O ناهمزمان LibUV)
- RingMurMurHash (کتابخانه عملکرد هش)
- RingMySQL (مایاسکیوال)
- RingODBC (اتصال به پایگاه داده باز)
- RingOpenGL (اوپنجیال ۱٫۱–۴٫۶)
- RingOpenSSL (اپناساسال)
- RingPostgreSQL (پستگرسکیوال)
- RingQt (فریم ورک کیوت)
- RingRayLib (raylib)
- RingSDL (SDL-Simple DirectMedia Layer Library)
- RingSQLite (اسکیال لایت)
- RingWinAPI (ویندوز ایپیآی)
- RingWinCREG (رجیستری ویندوز)
- RingZIP (کتابخانه پردازش فایل فشرده)[۲۱]
کتابخانهها
[ویرایش]رینگ دارای کتابخانههایی است که با خود رینگ نوشته شدهاند، برخی از این کتابخانهها مربوط به توسعه وب و بازی هستند.
نام کتابخانه | شرح |
---|---|
کتابخانه استاندارد | کلاسها و توابع عمومی |
کتابخانه رابط کاربری گرافیکی | کلاسها و توابع برای ایجاد برنامههای رابط کاربری گرافیکی |
کتابخانه اشیاء | کلاسها و توابع برای ایجاد برنامههای رابط کاربری گرافیکی با استفاده از الگوی طراحی MVC |
کتابخانه وب | چارچوب ساده برای توسعه برنامههای کاربردی وب با استفاده از الگوی طراحی MVC |
موتور بازی | پشتیبانی از توسعه بازیهای دو بعدی برای دسکتاپ و موبایل با استفاده از برنامهنویسی اعلامی بر اساس Allegro و LibSDL |
کتابخانه طبیعی | کتابخانه برنامهنویسی زبان طبیعی همه منظوره. |
کتابخانه ردیابی | کتابخانه ای برای اشکال زدایی برنامهها. |
نکات را تایپ کنید | کتابخانه ای برای افزودن نکات نوع به توابع. |
کتابخانه شماره بزرگ | پشتیبانی از عملیات حسابی روی اعداد بزرگ |
کتابخانه حلقه روباه | شامل توابع مشابه Visual FoxPro. |
کتابخانه ZeroLib | شامل کلاسهایی است که شاخص به جای ۱ از ۰ شروع میشود. |
برنامههای کاربردی
[ویرایش]رینگ با بیش از ۶۰ برنامه کاربردی که به این زبان نوشته شده ، منتشر شدهاست.
برخی از این برنامهها عبارتند از:
- اپلیکیشن ساعت آنالوگ
- نرمافزار ماشین حساب
- بازی چکرز
- بازی شطرنج
- بازی پانزده پازل سه بعدی
- بازی ۲۰۴۸
- بازی تور شوالیه
- بازی مین یاب
- بازی اتللو
- بازی سوکوبان
- بازی سودوکو
- بازی سه بعدی تیک تاک
- نرمافزار مدیا پلیر
- برنامه Windows Startup Manager[۲۲][۲۳]
ابزارها
[ویرایش]رینگ با یک IDE استاندارد توزیع میشود که حاوی ابزارهای زیر که با رینگ نوشته شدهاند، میباشد.
- Ring REPL (خواندن-ارزیابی-چاپ)
- Ring2EXE (توزیع برنامههای اجرایی)
- RingPM (مدیریت بسته رینگ)
- دفترچه یادداشت رینگ (ویرایشگر کد منبع)
- طراح فرم (طراح رابط کاربری گرافیکی WYSIWYG)
همچنین رینگ به واسطه اکستنشن، برای بسیاری از ویرایشگرهای کد (Emacs، Notepad++، Geany، Atom، Sublime Text 2، Visual Studio Code) قابل استفاده شدهاست.
SpaceVim (یک توزیع vim مبتنی بر جامعه) نیز از زبان برنامهنویسی رینگ پشتیبانی میکند.[۲۴]
مستندات
[ویرایش]مستندات رینگ با استفاده از Sphinix تهیه شدهاست.
مستندات رینگ همچنین به زبان ژاپنی وجود دارد.[۲۵]
محبوبیت
[ویرایش]طبق بررسی که توسط شاخص انجمن برنامهنویسی TIOBE اانجام شده، محبوبیت رینگ افزایش و کاهش سریعی داشتهاست. در فوریه ۲۰۱۸، رینگ برای اولین بار به لیست ۵۰ تای برتر راه یافت (مقام 45).[۲۶] از اکتبر ۲۰۲۰، رینگ در شاخص TIOBE جایگاه ۹۳ را دارد.[۲۷] رینگ توسط گیتهاب در لیست زبانهای برنامهنویسی فعال ذکر شدهاست.[۲۸]
نقدها
[ویرایش]منتقدان رینگ به برخی از ویژگیهای آن که در زبانهای برنامهنویسی پرکاربرد رایج نیستند اشاره میکنند.[۲۹]
- شروع شاخص فهرست به جای ۰ از ۱ (نگاه کنید به: شماره گذاری مبتنی بر صفر)
- تبدیلهای نوع ضمنی (نگاه کنید به: تبدیلهای نوع ضمنی و "نوع punning")
شروع شاخص فهرست از یک به جای صفر
[ویرایش]در زبان رینگ، شاخص اولین مورد در لیستها و اولین کاراکتر در رشتهها ۱ است.
cName = "Ring" ? cName[1] # print R aList = ["One","Two","Three"] ? aList[1] # print One
تبدیل نوع ضمنی
[ویرایش]این زبان میتواند بهطور خودکار اعداد و رشتهها را به هم تبدیل کند.[۳۰]
/* ** Rules: ** <NUMBER> + <STRING> --> <NUMBER> ** <STRING> + <NUMBER> --> <STRING> * / x = 10 # x is a number y = "20" # y is a string nSum = x + y # nSum is a number (y will be converted to a number) cMsg = "Sum = " + nSum # cMsg is a string (nSum will be converted to a string)
جستارهای وابسته
[ویرایش]منابع
[ویرایش]- ↑ M. Ayouni (29 July 2020). "A Dialogue with Mahmoud Fayed" (PDF). Springer.
- ↑ Alinsen TV channel Team (4 August 2020). "Alinsen TV channel introduce Ring as one of the inventions made in the Middle East". Alinsen TV Channel.
- ↑ "Released 1.22". 1 دسامبر 2024. Retrieved 3 December 2024.
- ↑ Dr. Rangarajan Krishnamoorthy (7 August 2021). "First Encounter with the Ring Programming Language". rangakrish.com.
- ↑ Omar Selim (January 2018). "The Ring programming language Review" (PDF). BIMArabia Magazine.
- ↑ Ahmed Tartour (January 2020). "Your way to programming (Arabic Book, Pages 56-57) talk about Ring" (PDF). Kotobna. Archived from the original (PDF) on 21 February 2022. Retrieved 20 June 2022.
- ↑ Bernhard Lauer (14 August 2018). "Ring: flexible, simple, fast". Dotnetpro.
- ↑ Paul Krill (24 August 2020). "Ring language upgrade focuses on WebAssembly". InfoWorld.
- ↑ Hany Salah (11 January 2016). "Ring: A New programming language". youm7.com. youm7.
- ↑ Ahmed Mohammed Hassan. "Ring: A programming language developed by Arab". muslims-res.com. Retrieved 2020-09-28.[پیوند مرده]
- ↑ Abedallah Salehani. "A book about the Ring programming language". muslims-res.com. Retrieved 2020-09-28.[پیوند مرده]
- ↑ V2EX (3 October 2019). "Ring - a programming language from the Middle East, supporting GUI cross-platform, as easy to learn as PHP". V2EX.
- ↑ Naveen Verma (14 Aug 2018). "Ring Programming Language: What Do You Need To Know?". Medium.
- ↑ Mones Hawas (29 May 2018). "Progress in developing PWCT 2.0 using Ring". youm7.com. youm7.
- ↑ Fayed, Mahmoud S.; Al-Qurishi, Muhammad; Alamri, Atif; Hossain, M. Anwar; Al-Daraiseh, Ahmad A. (October 2020). "PWCT: a novel general-purpose visual programming language in support of pervasive application development". CCF Transactions on Pervasive Computing and Interaction. 2 (3): 164–177. doi:10.1007/s42486-020-00038-y.
- ↑ Rubin Liu (28 December 2017). "Different styles for writing Hello World program in the Ring programming language". codeproject.com. Code Project.
- ↑ Roshan Ali (4 June 2018). "Ring programming tutorial". YouTube.
- ↑ Dr. Rangarajan Krishnamoorthy (21 August 2021). ""Loop" Command in Ring Programming Language". rangakrish.com.
- ↑ "Object Oriented Programming (OOP) — Ring 1.16 documentation".
- ↑ Dr. Rangarajan Krishnamoorthy (4 September 2021). "Ring Language: Dynamic Behavior of Classes and Objects". rangakrish.com.
- ↑ Majdi Sobain (2 May 2017). "Squares Puzzle using RingAllegro". codeproject.com. Code Project.
- ↑ Open Source Developers (15 June 2019). "Applications written in Ring". Ring Team.
- ↑ Etqan Company (25 September 2018). "Gold Magic 800 Game by Etqan Company". Steam (software).
- ↑ "SpaceVim lang#ring layer | SpaceVim".
- ↑ "ようこそ Ring 取扱説明書へ! — プログラミング言語 Ring 1.16 取扱説明書". Archived from the original on 30 اكتبر 2021. Retrieved 20 June 2022.
{{cite web}}
: Check date values in:|archive-date=
(help) - ↑ "Archived copy". www.tiobe.com. Archived from the original on 21 February 2018. Retrieved 28 February 2022.
{{cite web}}
: نگهداری یادکرد:عنوان آرشیو به جای عنوان (link) - ↑ Emma White. "Top 100 Programming Languages". BairesDev. Retrieved 2020-10-06.
- ↑ "Build software better, together". GitHub.
- ↑ Ciklum (12 December 2017). "New Programming Languages – A Hype Or Reality?". ciklum.com. Ciklum.
- ↑ "Variables — Ring 1.16 documentation".
بیشتر
[ویرایش]- غانم (2021) توسعه نرمافزار شاعر با استفاده از زبان رینگ (کتاب عربی)، متابوک (مصر - منصوره)
- عیونی (2020) شروع برنامهنویسی رینگ، Apress (بخشی از Springer Nature)
- حسونا (2019) مبانی رینگ (کتاب عربی) ، آکادمی حسونا
- Sobain (2017) RingWinCReg Extension Documentation، SourceForge
- فاید (2016) زبان برنامهنویسی رینگ
پیوند به بیرون
[ویرایش]- اختراعهای مصری
- پروژههای نرمافزار آزاد
- زبانهای برنامهنویسی با نحو گسترشپذیر
- زبانهای برنامهنویسی ساختهشده در ۲۰۱۶ (میلادی)
- زبانهای برنامهنویسی سطح بالا
- زبانهای برنامهنویسی ماشینی پویا
- زبانهای برنامهنویسی
- نرمافزارهای ۲۰۱۶ (میلادی)
- نرمافزارهای آزاد چندسکویی
- نرمافزارهای آزاد نوشتهشده با سی
- نرمافزارهای دارای اجازهنامه امآیتی