رينج (لغة برمجة)

**رينج**  وتعنى الخاتم، هي لغة برمجة جديدة ، الرينج تعد لغة برمجة نصية تشبه في ذلك بايثون وروبي وهي مطورة باستخدام لغة سي، وتعمل على مختلف أنظمة التشغيل مثل ويندوز ولينكس وماك، كما تدعم العديد من أنماط البرمجة 

## تاريخ اللغة
* بدأ التخطيط لها في نوفمبر 2011م
* بدأ التنفيذ في سبتمبر 2013م
* تم اختيار اسم اللغة في إبريل 2015م
* تم الانتهاء من المترجم في مايو 2015م
* تم الانتهاء من كتابة التوثيق في سبتمبر 2015م
* تم إطلاق الإصدار الأول في 25 يناير 2016م
* تم إطلاق الإصدار 1.1 في 6 أكتوبر 2016م
* تم إطلاق الإصدار 1.2 في 25 يناير 2017م
* تم إطلاق الإصدار 1.3 في 15 مايو 2017م
* تم إطلاق الإصدار 1.4 في 29 يونيو 2017م
* تم إطلاق الإصدار 1.5 في 21 أغسطس 2017م
* تم إطلاق الإصدار 1.6 في 30 نوفمبر 2017م
* تم إطلاق الإصدار 1.7 في 25 يناير 2018م
* تم إطلاق الإصدار 1.8 في 25 يونيو 2018م
* تم إطلاق الإصدار 1.9 في 6 أكتوبر 2018م
* تم إطلاق الإصدار 1.10 في 25 يناير 2019م
* تم إطلاق الإصدار 1.11 في 15 سبتمبر 2019م
* تم إطلاق الإصدار 1.12 في 25 يناير 2020م
* تم إطلاق الإصدار 1.13 في 15 سبتمبر 2020م
* تم إطلاق الإصدار 1.14 في 25 يناير 2021م
* تم إطلاق الإصدار 1.15 في 24 سبتمبر 2021م
* تم إطلاق الإصدار 1.16 في 23 أكتوبر 2021م

## الهدف
* لغة برمجة متخصصة في تطوير التطبيقات
* تركز على الإنتاجية وتطوير التطبيقات ذات الجودة العالية
* لغة صغيرة الحجم وسريعة يمكن تضمينها في مشاريع بلغة سى أو سى++
* لغة بسيطة يمكن أن تستخدم في التعليم وكذلك تقديم مفاهيم بناء لغات البرمجة
* لغة عامة ومتعددة الأغراض يمكن ان تستخدم في بناء الأدوات والمكتبات المتخصصة في مجال معين
* لغة عملية صممت من أجل بناء الجيل القادم من مشروع تقنية البرمجة بدون كود.
## امثلة

### برنامج Hello World!
يمكن كتابة برنامج الترحيب كالتالى:
```lua
See "Hello, World!"
```


### برنامج [[شفرة قيصر]]
ما يلي هو نص برمجي لتنفيذ تعمية قيصر على مدخل معين :
```lua
# Project : Caesar cipher

cipher = "pack my box with five dozen liquor jugs"
abc = "abcdefghijklmnopqrstuvwxyz"
see "text is to be encrypted:" + nl
see cipher+ nl + nl
str = ""
key = random(24) + 1
see "key = " + key + nl + nl
see "encrypted:" + nl
caesarencode(cipher, key)
see str + nl + nl
cipher = str
see "decrypted again:" + nl
caesardecode(cipher, key)
see str + nl

func caesarencode(cipher, key)
       str = ""
       for n = 1 to len(cipher)
            if cipher[n] != " "
               pos = substr(abc, cipher[n])
               if pos + key < len(abc)
                  str = str + abc[pos + key]
               else
                  if (pos+key)-len(abc) != 0
                     str = str + abc[(pos+key)%len(abc)]
                  else
                      str = str +abc[key+pos]
                  ok
                    ok 
               else
                  str = str + " "
               ok
       next
     return str

func caesardecode(cipher, key)
       str = ""
       for n= 1 to len(cipher)
            if cipher[n] != " "
               pos = substr(abc, cipher[n])
               if (pos - key) > 0 and pos != key
                   str = str + abc[pos - key]
                   loop
               else 
                   if pos = key
                      str = str + char(122)
                   else
                     str = str + abc[len(abc)-(key-pos)]
                   ok                     
               ok                
            else
               str = str + " "
            ok
       next
       return str
```


### [[برمجة كائنية التوجه|البرمجة كائنية التوجه]] في رينج
تدعم رينج البرمجة كائنية التوجه (الكائنات، الاصناف، التغليف، الوراثة)
```lua
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)
```


### [[عودية (علم الحاسوب)|العودية]] في رينج
تدعم رينج العودية، ويمكن رؤية هذا في المثال أدناه وهو برنامج لتوليد الاعداد الكاتالانية :
```lua
for n = 1 to 15
    see catalan(n) + nl
next
 
func catalan n
     if n = 0 return 1 ok
     cat = 2 * (2 * n - 1) * catalan(n - 1) / (n + 1)
     return cat
```
المخرجات:
```lua
1
2
5
14
42
132
429
1430
4862
16796
58786
208012
742900
2674440
9694845
```


## مراجع

## وصلات خارجية
* موقع اللغة على sourceforge.net
* مقال عن اللغة في codeproject.com
* مرجع كامل عن اللغة
* مجموعة من الأمثلة لبرامج صغيرة كتبت برينج

## ملحوظات
*<sub>تم استخدام [[إبراز النحو|إبانة نحو]] للغة البرمجة [[لوا (لغة برمجة)|لوا]] في الاكواد بتلك الصفحة لعدم توافر إبانة نحو خاصة برينج في ويكيبيديا، استخدمت إبانة نحو لوا لانها الاقرب الى رينج.</sub>*

تصنيف:اختراعات مصرية
تصنيف:برمجيات 2016
تصنيف:برمجيات تستخدم رخصة إم آي تي
تصنيف:برمجيات حرة بلغة سي
تصنيف:برمجيات حرة متعددة المنصات
تصنيف:لغات برمجة
تصنيف:لغات برمجة أنشئت في 2016
تصنيف:لغات برمجة ديناميكية النمط
تصنيف:لغات برمجة عالية المستوى
تصنيف:لغات برمجة نصية
تصنيف:مشاريع برمجيات حرة