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

رینگ یک زبان برنامه‌نویسی همه منظوره پویا است که می‌توان آن را در پروژه‌های 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 (کتابخانه پردازش فایل فشرده)

کتابخانه‌ها 
رینگ دارای کتابخانه‌هایی است که با خود رینگ نوشته شده‌اند، برخی از این کتابخانه‌ها مربوط به توسعه وب و بازی هستند.

برنامه‌های کاربردی 

رینگ با بیش از ۶۰ برنامه کاربردی که به این زبان نوشته شده ، منتشر شده‌است.

برخی از این برنامه‌ها عبارتند از:
 اپلیکیشن ساعت آنالوگ
 نرم‌افزار ماشین حساب
 بازی چکرز
 بازی شطرنج
 بازی پانزده پازل سه بعدی
 بازی ۲۰۴۸
 بازی تور شوالیه
 بازی مین یاب
 بازی اتللو
 بازی سوکوبان
 بازی سودوکو
 بازی سه بعدی تیک تاک
 نرم‌افزار مدیا پلیر
 برنامه 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)

جستارهای وابسته 

 تی‌سی‌ال
 لوا
 پایتون
 یاقوت سرخ
 گامباس

منابع

بیشتر 
 غانم (2021) توسعه نرم‌افزار شاعر با استفاده از زبان رینگ (کتاب عربی)، متابوک (مصر - منصوره)
 عیونی (2020) شروع برنامه‌نویسی رینگ، Apress (بخشی از Springer Nature)
 حسونا (2019) مبانی رینگ (کتاب عربی) ، آکادمی حسونا
 Sobain (2017) RingWinCReg Extension Documentation، SourceForge
 فاید (2016) زبان برنامه‌نویسی رینگ

پیوند به بیرون 
 سایت رسمی رینگ

اختراع‌های مصری
پروژه‌های نرم‌افزار آزاد
زبان‌های برنامه‌نویسی با نحو گسترش‌پذیر
زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۱۶ (میلادی)
زبان‌های برنامه‌نویسی سطح بالا
زبان‌های برنامه‌نویسی ماشینی پویا
زبان‌های برنامه‌نویسی
نرم‌افزارهای ۲۰۱۶ (میلادی)
نرم‌افزارهای آزاد چندسکویی
نرم‌افزارهای آزاد نوشته‌شده با سی
نرم‌افزارهای دارای اجازه‌نامه ام‌آی‌تی