Ring (programming language): Difference between revisions

Content deleted Content added
Add reference for notability - Ring review by geekbrains.ru (part of Mail.ru Group)
 
(158 intermediate revisions by 36 users not shown)
Line 1:
{{Short description|Dynamically typed, general-purpose programming language}}
{{infobox programming language
| name = Ring
| logo = Ringlogo transparent.png
| paradigm = [[multi-paradigm programming language|Multi-paradigm]]: [[object-oriented programming|object-oriented]], [[imperative programming|imperative]], [[functional programming|functional]], [[procedural programming|procedural]], [[reflective programming|reflective]], [[Declarative programming|declarative]], [[natural language programming]]
| year = {{Start date and age|2016|01|25}}
| designer = [[Mahmoud Samir Fayed]]<ref name="Springer">{{cite web |url=https://link.springer.com/content/pdf/bbm%3A978-1-4842-5833-0%2F1.pdf |title=A Dialogue with Mahmoud Fayed |author= M. Ayouni|date=29 July 2020 |publisher=[[Springer Nature|Springer]]}}</ref>
| designer = Mahmoud Samir Fayed
| developer = The Ring Development Team
| latest release version = {{wikidata|property|edit|reference|P348}}
| latest_release_version = 1.12
| latest_release_datelatest release date = {{Startstart date and age|2020{{wikidata|qualifier|01P348|25P577}}}}
| latest_test_version =
| latest_test_date =
| typing = [[dynamic typing|Dynamic]]
| influenced_by = [[Lua (programming language)|Lua]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]], [[C (programming language)|C]], [[C Sharp (programming language)|C#]], [[BASIC]], [[QML]], [[xBase]], Supernova
| influenced = SimpleLang,<ref>{{cite web |url=https://web.archive.org/web/20241222002813/https://simple-lang.sourceforge.io/home/ |title=The Simple programming language |author=Azeez Adewale}}</ref> DragonLang <ref>{{cite web |url=https://www.dragon-lang.org/ |title=The Dragon programming language |author= Aavesh Jilani}}</ref>
| programming language = [[C (programming language)|C]]
| operating_system = [[Microsoft Windows|Windows]], [[Linux]] and [[macOS]]
| license = [[MIT License]]
| website = http{{URL|https://ring-lang.net}}
| file_ext = .ring, .rh, .rform
| wikibooks = Ring
}}
'''Ring''' is a [[dynamic programming language|dynamically typed]], [[general-purpose programming language]]. It can be embedded in C/C++ projects, extended using C/C++ code and/or used as a standalone language.<ref name="rangakrish">{{cite web |url=https://www.rangakrish.com/index.php/2021/08/07/first-encounter-with-the-ring-programming-language/ |title=First Encounter with the Ring Programming Language |author= Dr. Rangarajan Krishnamoorthy |date=7 August 2021 |publisher=rangakrish.com|archive-url=https://web.archive.org/web/20210809074142/https://www.rangakrish.com/index.php/2021/08/07/first-encounter-with-the-ring-programming-language/ |archive-date=2021-08-09 }}</ref> The supported [[Programming_paradigm|programming paradigmsparadigm]]s are [[Imperative_programmingImperative programming|imperative]], [[Procedural_programmingProcedural programming|procedural]], [[Object-oriented_programmingoriented programming|object-oriented]], [[Functional_programmingFunctional programming|functional]], [[Metaprogramming|meta]], [[Declarative_programmingDeclarative programming|declarative]] using nested structures, and [[Natural-language_programminglanguage programming|natural programming]].<ref Thename="BIMArabiaMagazine">{{cite languageweb is|url=https://bimarabia.com/download/BIMarabia_Arabic/BIMarabia27.pdf portable|title=The ([[Windows]],Ring [[Linux]],programming [[macOS]],language [[AndroidReview (operating system)|Android]],author=Omar etc.)Selim and|date=January can2018 be|publisher=BIMArabia usedMagazine to create [[Console_application|console]],access-date=2024-03-24 [[Graphical_user_interface|GUI]],archive-date=2023-11-17 [[Web_application|archive-url=https://web]],.archive.org/web/20231117130807/https://bimarabia.com/download/BIMarabia_Arabic/BIMarabia27.pdf [[PC_game|game]]url-status=bot: andunknown [[Mobile_app|mobile applications]].}}</ref><ref name="SpringerYourWayToProgramming">{{cite web |url=https://linkring-lang.springergithub.comio/contentref/pdf/bbm%3A978-1-4842-5833-0%2F1ArabicBook_YourWayToProgramming_TalkAboutRing.pdf |title=AYour Dialogueway withto Mahmoudprogramming Fayed(Arabic Book, Pages 56-57) talk about Ring |author=Ahmed M.Tartour Ayouni|date=29 JulyJanuary 2020 |publisher=[[Springer_Nature:ar::كتبنا (موقع ويب)|SpringerKotobna]]}}</ref><ref>{{Cite book|url=https://www.apress.com/gp/book/9781484258323|title=BeginningThe Ringlanguage Programmingis -portable From([[Windows]], Novice[[Linux]], to[[macOS]], Professional[[Android {{!}}(operating Mansour Ayouni {{!}} Apresssystem)|language=en}}</ref>Android]],<ref name="dotnetpro">{{cite web |url=https://web.archive.org/web/20230404171941/https://www.dotnetpro.de/diverses/sprachen/ring-flexibel-einfach-schnell-1571947.html |title=Ring: flexible, simple, fast |author= Bernhard Lauer |date=14 August 2018 |publisher=[[:de::Dotnetpro|Dotnetpro]]}}</ref> [[WebAssembly]],<ref name="geekbrainsInfoWorld">{{cite web |url=https://geekbrainswww.ruinfoworld.com/postsarticle/the_ring3572395/ring-language-upgrade-focuses-on-webassembly.html |title=Want to know everything. Ring language veryupgrade young,focuses buton very promisingWebAssembly |author= Ilya BubnovPaul Krill|date=224 MarchAugust 20182020 |publisher=[[Mail.ru_Group|geekbrains (part of Mail.ru Group)InfoWorld]]}}</ref> etc.)<ref name="AlinsenTV">{{cite webbook |last=Ghanem |first=Mohamed |title=Developing Poet Software using Ring language |url= https://wwwring-lang.facebookgithub.comio/Alinsen.tv/videos/782854818918053ref/?t=33GhanemBookAboutRing.pdf |titlepublisher=AlinsenMetaBook TV(Egypt channel- introduceMansoura)|date=2021|isbn=978-977-6928-38-1 Ring}}</ref> asand onecan ofbe theused inventionsto madecreate in[[Console theapplication|console]], Middle[[Graphical Eastuser interface|author=GUI]], Alinsen[[Web TVapplication|web]], channel[[PC Teamgame|date=4game]] Augustand 2020[[mobile app]]lications.<ref>{{Cite book|publisherurl=[[https:ar::قناة_الإنسان//www.apress.com/gp/book/9781484258323|Alinsentitle=Beginning TVRing Channel]]Programming - From Novice to Professional {{!}} Mansour Ayouni {{!}} Apress|language=en}}</ref><ref name="Youm7 (Egyptian daily newspaper)">{{cite webnews |url=https://www.youm7.com/story/2016/1/11/%D9%81%D9%89-25-%D9%8A%D9%86%D8%A7%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%82%D8%A8%D9%84-%D9%84%D8%BA%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-%D8%A8%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-%D8%B9%D8%A7%D9%84%D9%85%D9%8A%D8%A9-%D9%85%D9%86/2532713 |title= Ring: A New programming language |author=Hany Salah |date=11 January 2016 |work=youm7.com |publisher=[[youm7]]}}</ref><ref name="BIMArabiaMagazine">{{citeCite webnews|title=Ring: A programming language developed by Arab|url=httphttps://bimarabiamuslims-res.com/download%D9%84%D8%BA%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-%D8%A8%D8%A3%D9%8A%D8%AF%D9%8D-%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D9%88%D9%84%D9%82%D8%A7%D8%A1-%D8%AD%D8%B5%D8%B1/BIMarabia_Arabic/BIMarabia27.pdf#page|access-date=8 2020-09-28|titlenewspaper=The Ring programming language Review الباحثون المسلمون|author=OmarAhmed SelimMohammed Hassan|date=January12 2018December |publisher=BIMArabia2015 Magazine}}</ref><ref name="YourWayToProgramming">{{citeCite webnews|title=A book about the Ring programming language|url=httphttps://ringmuslims-lang.sourceforgeres.netcom/ref%D9%84%D8%BA%D8%A9-%D8%B1%D9%8A%D9%86%D8%AC-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-ring-programming/ArabicBook_YourWayToProgramming_TalkAboutRing.pdf |titleaccess-date=Your way to programming (Arabic Book, Pages 562020-57) talk about Ring09-28|newspaper=الباحثون المسلمون|author=Ahmed TartourAbedallah Salehani|date=January18 March 2020 |publisher=[[:ar::كتبنا_(موقع_ويب)|Kotobna]]}}</ref>
 
==History==
[[File:Ringlang shot1.png|thumb|300px|Ring IDE (Ring Notepad - Form Designer)]]
 
In 2009, [[Mahmoud Samir Fayed]] created a minor [[Domain-specific language|___domain-specific language]] called Supernova that focusfocuses on [[User interface|User interface (UI)]] creation and uses some ideas related to [[Natural-language programming|Natural Language Programming]], then he realized the need for a new language that areis [[General-purpose language|general-purpose]] and can increase the [[Productivity|productivity]] of creating natural languageslanguage creation. Ring aims to offer a language focused on helping the developer with building natural interfaces and declarative DSLs. <ref name="Supernova1">{{cite web |url=httphttps://ring-lang.sourceforgegithub.netio/doc1.1223/faq.html |title=Ring Language - Frequently Asked Questions (FAQ) |author=Ring Team|date=JanuarySeptember 20202021 |publisher=Ring Team}}</ref><ref name="Supernova2">{{cite web |url=https://www.codeproject.com/Articles/66996/Supernova-Programming-Language |title=Supernova programming language |author=Fayed|date=April 2010 |publisher=[[Code_ProjectCode Project]]}}</ref><ref name="Supernova3">{{cite web |url=https://www.youm7.com/story/2011/12/24/%D8%B4%D8%A7%D8%A8-%D9%85%D8%B5%D8%B1%D9%89-%D9%8A%D8%A8%D8%AA%D9%83%D8%B1-%D8%B3%D9%88%D8%A8%D8%B1-%D9%86%D9%88%D9%81%D8%A7-%D9%88%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%AF%D9%88%D9%86-%D9%83%D9%88%D8%AF/562415 |title=Supernova language by Egyptian programmer|author=Omnia|date=December 2011 |publisher=[[Youm7]]}}</ref> <ref name="Softpedia">{{cite web |url=https://www.softpedia.com/get/Programming/Coding-languages-Compilers/Fayed-Ring.shtml |title=Ring 1.1216 review |author= Softpedia Team|date=2023 MayOctober 20202021 |publisher=[[Softpedia]]}}</ref>
 
* In January 25, 2016 , Ring 1.0 was released.
* In October 6, 2016, Ring 1.1 was released.
* In January 25, 2017, Ring 1.2 was released.
* In May 15, 2017, Ring 1.3 was released.
* In June 29, 2017, Ring 1.4 was released.
* In August 21, 2017, Ring 1.5 was released.
* In November 30, 2017, Ring 1.6 was released.
* In January 25, 2018, Ring 1.7 was released.
* In June 25, 2018, Ring 1.8 was released.
* In October 6, 2018, Ring 1.9 was released.
* In January 25, 2019, Ring 1.10 was released.
* In September 15, 2019, Ring 1.11 was released.
* In January 25, 2020, Ring 1.12 was released.<ref name="evolution">{{cite web |url=https://glinksolutions.vn/2018/06/28/evolution-ring-programming-language/ |title=The evolution of the Ring programming language |author=G link Solutions Team |date=28 January 2019 |work=glinksolutions.vn |publisher=GlinkSolution|archive-url=https://web.archive.org/web/20190421214354/https://glinksolutions.vn/2018/06/28/evolution-ring-programming-language/ |archive-date=2019-04-21 }}</ref><ref name="V2EX">{{cite web |url=https://www.v2ex.com/t/604995 |title=Ring - a programming language from the Middle East, supporting GUI cross-platform, as easy to learn as PHP|author=V2EX |date=3 October 2019 |publisher=[[:zh::V2EX|V2EX]] }}</ref>
 
==Goals==
[[File:Ringlang shot6.png|thumb|300px|PWCT 2.0 (Android) - Under development using Ring]]
 
The general goals behind Ring:<ref name="Medium">{{cite web |url=https://medium.com/sitesonic/ring-programming-language-what-do-you-need-to-know-23c51b315e4d |title=Ring Programming Language: What Do You Need To Know? |author=Naveen Verma |date=14 Aug 2018 |publisher=[[Medium (website)|Medium]]}}</ref>
<ref name="Youm7 Journal">{{cite webnews |url=https://www.youm7.com/story/2018/5/29/%D9%85%D8%B5%D8%B1%D9%89-%D9%8A%D9%81%D9%88%D8%B2-%D9%81%D9%89-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D8%A9-%D8%A7%D9%84%D8%B3%D9%88%D8%B1%D8%B3-%D9%81%D9%88%D8%B1%D8%AC-%D9%84%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1/3812107 |title= Progress in developing PWCT 2.0 using Ring|author=Mones Hawas |date=29 May 2018 |work=youm7.com |publisher=[[youm7]]}}</ref>
 
* Applications programming language.
* Productivity and developing high quality solutions that can scale.
* Small and fastflexible language that can be embedded in C/C++ projects.
* Simple language that can be used in education and introducing Compiler/VM concepts.
* General-Purpose language that can be used for creating ___domain-specific libraries, frameworks and tools.
* Practical language designed for creating the next version of the [[PWCT|Programming Without Coding Technology]] software.<ref>{{cite journal |last1=Fayed |first1=Mahmoud S. |last2=Al-Qurishi |first2=Muhammad |last3=Alamri |first3=Atif |last4=Hossain |first4=M. Anwar |last5=Al-Daraiseh |first5=Ahmad A. |title=PWCT: a novel general-purpose visual programming language in support of pervasive application development |journal=CCF Transactions on Pervasive Computing and Interaction |date=October 2020 |volume=2 |issue=3 |pages=164–177 |doi=10.1007/s42486-020-00038-y |s2cid=225395711}}</ref>
* Practical language designed for creating the next version of the [[PWCT_(software)|Programming Without Coding Technology]] software.
 
==Examples==
[[File:Ringlang shot14.png|thumb|300px|Different styles for writing the source code]]
[[File:Ringlang shot5.png|thumb|300px|Declarative Programming (Web Development)]]
[[File:Ringlang shot12.png|thumb|300px|Natural Language Programming]]
[[File:Ringlang shot13.png|thumb|300px|Testing TreeView Control Performance using RingQt]]
 
===Hello World program===
Line 72 ⟶ 63:
 
<pre>
load "stdlib.ring"
print("Hello, World!")
</pre>
Line 82 ⟶ 72:
</pre>
 
===Change the Keywordskeywords and Operatorsoperators===
 
'''Ring''' supportsupports changing the language [[Reserved word|keywords]] and [[Operator (computer programming)|operators]].
 
This could be done many times in the same source file, and is useful for
 
* Translating the keywords from English to other human languages ([[Non-English-based programming languages]])
* Customizing the language for use of a favorite style
 
* Customizing the language for using the favorite style
 
* Porting [[Legacy code]] written in other languages
 
Line 97 ⟶ 85:
 
<pre>
ChangeRingKeyword See 手紙を出す
ChangeRingOperator + そして
改行 = nl
Line 105 ⟶ 93:
 
ChangeRingKeyword 手紙を出す See // キーワードの復旧
ChangeRingOperator そして + // 演算子の復旧
</pre>
 
Line 111 ⟶ 99:
 
<pre>
ChangeRingKeyword See إطبع
 
إطبع "Hello, World!"
 
ChangeRingKeyword إطبع See
</pre>
 
Use style similar to the [[Pascal_Pascal (programming_languageprogramming language)|Pascal programming language]]
 
<syntaxhighlight lang="pascal" highlight="1,2,11,12">
<pre>
ChangeRingKeyword func function
ChangeRingKeyword see write
begin = :begin
 
function main
begin
write("Hello, World!");
return 0;
end
 
ChangeRingKeyword function func
ChangeRingKeyword write see
</syntaxhighlight>
 
<ref name="helloworldstyles">{{cite web |url=https://www.codeproject.com/Tips/1222859/Different-styles-for-writing-Hello-World-program-i |title=Different styles for writing Hello World program in the Ring programming language |author=Rubin Liu |date=28 December 2017 |work=codeproject.com |publisher=[[Code Project]]}}</ref><ref name="Ring Programming Tutorial">{{cite web |url=https://www.youtube.com/watch?v=7BqoQldx0Pk&list=PL8SruvH85P0uA8ggijCQUR9tXAXF4bmtu&index=2 |title=Ring programming tutorial |author=Roshan Ali |date=4 June 2018 |publisher=[[YouTube]]}}</ref><ref>{{cite web | url=https://ring-lang.github.io/doc1.23/getting_started3.html | title=Getting Started - Third Style — Ring 1.23 documentation }}</ref>
 
===Loop command===
 
The Loop command can take an integer to apply the continue semantics to enclosing outer loops<ref name="rangakrish2">{{cite web |url=https://www.rangakrish.com/index.php/2021/08/21/loop-command-in-ring-programming-language/ |title="Loop" Command in Ring Programming Language |author= Dr. Rangarajan Krishnamoorthy |date=21 August 2021 |publisher=rangakrish.com|archive-url=https://web.archive.org/web/20230323171354/https://www.rangakrish.com/index.php/2021/08/21/loop-command-in-ring-programming-language/ |archive-date=2023-03-23 }}</ref>
 
<pre>
changeRingKeyword loop continue
count = 2
for x in 1:5
for y = 1 to 2
if x = 3
? "About to execute 'loop', count = " + count
continue count
ok
? "x: " + x + ", y: " + y
next
next
</pre>
 
===Object-oriented programming===
<ref name="helloworldstyles">{{cite web |url=https://www.codeproject.com/Tips/1222859/Different-styles-for-writing-Hello-World-program-i |title=Different styles for writing Hello World program in the Ring programming language |author=Rubin Liu |date=28 December 2017 |work=codeproject.com |publisher=[[Code_Project]]}}</ref><ref name="Ring Programming Tutorial">{{cite web |url=https://www.youtube.com/watch?v=7BqoQldx0Pk&list=PL8SruvH85P0uA8ggijCQUR9tXAXF4bmtu&index=2 |title=Ring programming tutorial |author=Roshan Ali |date=4 June 2018 |publisher=[[YouTube]]}}</ref><ref name="Amr Essam Tutorials">{{cite web |url=https://ribdev.wordpress.com/category/ring-documentation-walkthrough/ |title=Amr Essam Tutorials |author=Amr Essam |date=12 December 2017 |work=ribdev}}</ref>
 
Ring supports object-oriented programming (classes, objects, composition, inheritance, encapsulation, etc.)<ref>{{Cite web|url=https://ring-lang.github.io/doc1.23/oop.html|title = Object Oriented Programming (OOP) — Ring 1.16 documentation}}</ref>
 
<pre>
new point { # Create new object then access it 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)
</pre>
 
In Ring classes can be defined at runtime using the Eval() function<ref name="rangakrish3">{{cite web |url=https://www.rangakrish.com/index.php/2021/09/04/ring-language-dynamic-behavior-of-classes-and-objects/ |title=Ring Language: Dynamic Behavior of Classes and Objects |author= Dr. Rangarajan Krishnamoorthy |date=4 September 2021 |publisher=rangakrish.com|archive-url=https://web.archive.org/web/20230529153208/https://www.rangakrish.com/index.php/2021/09/04/ring-language-dynamic-behavior-of-classes-and-objects/ |archive-date=2023-05-29 }}</ref>
 
<pre>
? "Creating a new class dynamically..."
eval("class DynamicClass a b")
 
? "Printing the instance..."
? new DynamicClass {a=1 b=2}
</pre>
 
==Implementation==
 
===Compiler and virtual machine===
Ring programs are not [[interpreted language|interpreted]] directly from the textual Ring file, but are [[compiler|compiled]] into [[bytecode]], which is then run on the Ring [[virtual machine]]. The compilation process is typically invisible to the user and is performed during [[Run time (program lifecycle phase)|run-time]], but it can be done offline in order to increase loading performance or reduce the memory footprint of the host environment by leaving out the compiler.
 
[[File:Ringlang shot10.jpg|thumb|300px|Ring VM implementation using PWCT - Virtual Machine Instructions]]
The [[Compiler]] and the [[Virtual Machine]] are designed using [[Visual programming language|Visual Programming]] through the [[PWCT_(software)|Programming Without Coding Technology]] software then the [[C Programming Language|C]] code is generated.
[[File:Ringlang shot11.jpg|thumb|300px|Ring VM implementation using PWCT - List Structure]]
Ring programs are not [[interpreted language|interpreted]] directly from the textual Ring file, but are [[compiler|compiled]] into [[bytecode]], which is then run on the Ring [[virtual machine]]. The compilation process is typically invisible to the user and is performed at [[Run time (program lifecycle phase)|run-time]], but it can be done offline in order to increase loading performance or reduce the memory footprint of the host environment by leaving out the compiler.
 
The [[compiler]] and the [[virtual machine]] are designed using [[Visual programming language|visual programming]] through the [[PWCT|Programming Without Coding Technology]] software then the [[C (programming language)|C]] code is generated.
==Extensions==
 
===Extensions===
[[File:Ringlang shot3.png|thumb|300px|Online Form Designer (WebAssembly) - Using RingQt]]
[[File:Ringlang shot8.png|thumb|300px|[[Sokoban]] Implementation using Ring Game Engine for 2D Games]]
[[File:Ringlang shot9.png|thumb|300px|Using Qt3D through RingQt]]
The following are extensions that can be used immediately after the installation of the full installation version (with a file size of about 280 MB for Ring 1.12). Since these are officially provided and maintained on the Ring side, the users are not bothered by library dependencies that may cause problems in other languages, and there is a concern that they can not be used suddenly even if there are destructive language specification changes.
 
The extensions are implemented in approximately 500,000 lines of [[C Programming Language|C]] and [[C%2B%2B|C++]] code.
 
* RingAllegro ([[Allegro (software)|Allegro Game Library]])
Line 155 ⟶ 192:
* RingInternet (Internet related library)
* RingLibUV ([[libuv|LibUV-asynchronous I / O library]])
* RingMurMurHash ([[Hash_functionHash function|Hash Function Library]])
* RingMySQL ([[MySQL]])
* RingODBC ([[Open Database Connectivity]])
Line 169 ⟶ 206:
* RingZIP ([[Zip (file format)|zip file processing library]])
 
<ref name="Extensions3">{{cite web |url=https://www.codeproject.com/Articles/1096942/Squares-Puzzle-using-RingAllegro |title=Squares Puzzle using RingAllegro |author=Majdi Sobain |date=2 May 2017 |work=codeproject.com |publisher=[[Code_ProjectCode Project]]}}</ref>
 
===Libraries===
Also Ring comes with libraries written in Ring itself, some of these libraries are related to web and game development.
 
Ring comes with libraries written in Ring itself, such as libraries related to web and game development.
 
{| class="wikitable"
Line 212 ⟶ 251:
|}
 
<ref name="Libraries2">{{cite web |url=https://www.codeproject.com/Articles/1200766/Using-the-Natural-Language-Programming-Library-NLP |title=Using the Natural Language Programming Library (NLPL) in the Ring Programming Language |author=Fayed |date=11 August 2017 |work=codeproject.com |publisher=[[Code_ProjectCode Project]]}}</ref><ref name="Libraries3">{{cite web |url=https://www.codeproject.com/Articles/1138605/Natural-Language-Programming-in-the-Ring-Programmi |title=Natural Language Programming in the Ring Programming Language |author=Fayed |date=12 October 2016 |work=codeproject.com |publisher=[[Code_ProjectCode Project]]}}</ref>
 
==Applications==
 
===Applications===
[[File:Ringlang shot2.png|thumb|300px|Gold Magic 800 Game - Using RingAllegro and RingOpenGL]]
[[File:Ringlang shot4.png|thumb|300px|Online Othello Game (WebAssembly) - Using RingQt]]
Ring is distributed with over 60 applications written in the language.
 
Some of these applications are
 
* [[Analog watch|Analog Clock]] application
* [[Software calculator|Calculator application]]
* [[English_draughtsEnglish draughts|The Checkers]] Game
* [[Chess|The Chess]] Game
* [[15 puzzle|Fifteen Puzzle]] 3D Game
Line 228 ⟶ 268:
* [[Knight's tour|Knight Tour]] Game
* [[Minesweeper (video game)|Minesweeper]] Game
* [[Othello (video game)|Othello]] Game
* [[Sokoban]] Game
* [[Sudoku]] Game
* [[Tic-tac-toe]] 3D Game
* [[Media player software|Video Music Player]] application
* [[Windows startup process|Windows Startup]] Manager application
 
<ref name="Applications">{{cite web |url=httphttps://ring-lang.sourceforgegithub.netio/resources.html |title=Applications written in Ring|author=Open Source Developers |date=15 June 2019 |publisher=Ring Team}}</ref><ref name="Applications2">{{cite web |url=https://store.steampowered.com/app/939200/Gold_Magic_800/ |title=Gold Magic 800 Game by Etqan Company |author=Etqan Company |date=25 September 2018 |publisher=[[Steam (software)]]}}</ref><ref name="Applications3">{{cite web |url=https://etqan.sa/gold-magic-800/ |title=Developing the Gold Magic 800 Game using Ring |author=Etqan Company |date=25 September 2018 |publisher=Etqan Company}}</ref>
 
===Tools===
[[File:Ringlang shot7.png|thumb|300px|Running the Tetris game using the Ring Package Manager]]
Ring is distributed with a Standard IDE that includes the following tools:
 
* Ring REPL ([[Read–eval–print loop]])
Ring is distributed with a Standard IDE that contains the next tools (written in Ring itself)
 
* Ring REPL ([[Read–eval–print_loop|Read–eval–print loop]])
* Ring2EXE ([[Software distribution|Distributing executable applications]])
* RingPM (The Ring [[Package manager]])
* Ring Notepad ([[Source-code editor|Source-code editor]])
* Form Designer ([[Graphical user interface builder|WYSIWYG GUI designer]])
 
Also Ring is also distributed with extensions for many code editors (such as [[Emacs]], [[Notepad%2B%2B|Notepad++]], [[Geany]], [[Atom (text editor)|Atom]], [[Sublime Text|Sublime Text 2]], and [[Visual Studio Code]]).
 
===Documentation===
 
Ring is distributed with documentation written using [[Sphinx (documentation generator)|Sphinx]]. A Japanese translation of the documentation is also available.<ref>{{Cite web|url=http://ring-lang-081.osdn.jp/docs-1.16/index.html|title=ようこそ Ring 取扱説明書へ! — プログラミング言語 Ring 1.16 取扱説明書|access-date=2021-10-30|archive-date=2021-10-30|archive-url=https://web.archive.org/web/20211030103530/http://ring-lang-081.osdn.jp/docs-1.16/index.html|url-status=dead}}</ref>
Ring is distributed with documentation written using [[Sphinx (documentation generator)|Sphinix]].
 
==Reception==
Also there is Japanese translation.
 
===Popularity===
 
Ring had a rapid rise and fall in popularity as measured by the [[TIOBE index|TIOBE Programming Community Index]]. In February 2018, Ring broke into the top 50 for the first time (position 45).<ref>{{cite web |url=https://www.tiobe.com/tiobe-index/ |title=TIOBE Index &#124; TIOBE - the Software Quality Company |website=www.tiobe.com |access-date=28 February 2022 |archive-url=https://web.archive.org/web/20180221113115/https://www.tiobe.com/tiobe-index/ |archive-date=21 February 2018 |url-status=dead}}</ref> As of October 2020, Ring holds position 93 on the TIOBE index.<ref>{{Cite web|title=Top 100 Programming Languages|url=https://www.bairesdev.com/blog/top-100-programming-languages/|access-date=2020-10-06|website=[[:es:BairesDev|BairesDev]]|author=Emma White|date=6 October 2020 }}</ref> Ring is listed by GitHub in the list of programming languages that are actively developed.<ref>{{Cite web|url=https://github.com/collections/programming-languages|title = Build software better, together|website = [[GitHub]]}}</ref>
 
===Criticism===
 
Ring critics pointed to some features in Ring that are not common in widely used programming languages.<ref name="Ciklum">{{cite web |url=https://www.ciklum.com/blog/new-programming-languages-a-hype-or-reality/ |title=New Programming Languages – A Hype Or Reality? |author=Ciklum |date=12 December 2017 |work=ciklum.com |publisher=[[Ciklum]] |access-date=1 February 2024 |archive-date=7 December 2017 |archive-url=https://web.archive.org/web/20171207084845/https://www.ciklum.com/blog/new-programming-languages-a-hype-or-reality/ |url-status=bot: unknown }}</ref>
 
* The list index starts from 1 instead of 0 (See: [[Zero-based numbering]])
* Implicit type conversions (See: [[Strong and weak typing#Implicit type conversions and "type punning"|Implicit type conversions and "type punning"]])
 
====The list index starts from 1 instead of 0====
 
In Ring, the index of the first item in lists and the first character in strings is 1.
 
<pre>
cName = "Ring"
? cName[1] # print R
aList = ["One","Two","Three"]
? aList[1] # print One
</pre>
 
====Implicit type conversions====
 
The language can automatically convert between numbers and strings.<ref>{{Cite web|url=https://ring-lang.github.io/doc1.23/variables.html#implicit-conversion|title = Variables — Ring 1.23 documentation}}</ref>
 
<pre>
/*
** 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)
</pre>
 
==See also==
Line 261 ⟶ 340:
*[[Python (programming language)|Python]]
*[[Ruby (programming language)|Ruby]]
*[[Squirrel_Squirrel (programming_languageprogramming language)|Squirrel]]
*[[Gambas]]
*[[Julia (programming language)|Julia]]
*[[Mojo (programming language)|Mojo]]
 
== References ==
{{reflist}}
<references/>
 
== Further reading ==
* Fayed (2025) ''[https://github.com/ring-lang/ring/releases/download/v1.23/RingDoc_1.23.pdf The Ring programming language - The complete reference]''
* Ayouni (2020) ''[https://www.apress.com/gp/book/9781484258323 Beginning Ring Programming]'', [[Springer_Nature|Apress (part of Springer Nature)]]
* Fayed, Alohali. (2025) ''[https://www.mdpi.com/2076-3417/15/3/1521 PWCT2: A Self-Hosting Visual Programming Language Based on Ring with Interactive Textual-to-Visual Code Conversion]'', [[Applied Sciences (journal)|Applied Sciences]]
* Hassouna (2019) ''[http://ring-lang.sourceforge.net/RingBasics_ArabicBook.pdf Ring Basics (Arabic Book)]'', [https://www.hassouna-academy.com/ringcourses Hassouna Academy]
* Fayed, Alohali. (2024) ''[https://www.mdpi.com/2079-9292/13/23/4627 Ring: A Lightweight and Versatile Cross-Platform Dynamic Programming Language Developed Using Visual Programming]'', [[Electronics (journal)|Electronics]]
* Sobain (2017) ''[http://ring-wincreg.sf.net/docs/ RingWinCReg Extension Documentation]'', [[sourceforge|SourceForge]]
* Ghanem (2021) ''[https://ring-lang.github.io/ref/GhanemBookAboutRing.pdf Developing Poet Software using Ring language (Arabic Book)]'', MetaBook (Egypt - Mansoura)
* Fayed (2016) ''[https://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language The Ring Programming Language]'', [[Code_Project|CodeProject]]
* Ayouni (2020) ''[https://www.apress.com/gp/book/9781484258323 Beginning Ring Programming]'', [[Springer Nature|Apress (part of Springer Nature)]]
* Hassouna (2019) ''[https://ring-lang.github.io/ref/RingBasics_ArabicBook.pdf Ring Basics (Arabic Book)]'', [https://www.hassouna-academy.com/ringcourses Hassouna Academy]
* Sobain (2017) ''[http://ring-wincreg.sf.net/docs/ RingWinCReg Extension Documentation]'', [[SourceForge]]
* Fayed (2016) ''[https://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language The Ring Programming Language]'', [[Code Project|CodeProject]]
 
==External links==
{{Wikibooks|Ring}}
* [http://www.ring-lang.net/ Ring home page]
* [https://www.youtube.com/playlist?list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT Arabic videos]
* [https://rosettacode.org/wiki/Category:Ring RosettaCode samples]
* [https://enidrassi.wikibooksgithub.orgio/wikiMonoRing/Ring Ring in WikibooksMonoRing]
* {{Official website|https://www.ring-lang.net/}}
* [http://ring-lang-081.osdn.jp/docs-1.11/index.html Ring Documentation (Japanese)]
* [https://ring-lang.github.io/web/formdesigner/project.html Online Form Designer (WebAssembly)]
* [https://store.steampowered.com/app/1953110/Programming_Without_Coding_Technology_20/ PWCT2 (Developed using Ring)]
* [https://rosettacode.org/wiki/Category:Ring RosettaCode samples]
* [https://ring-lang.github.io/web/tryringonline/project.html Try Ring Online (WebAssembly)]
{{FOSS}}
{{Programming languages}}
 
[[:Category:Programming languages]]
[[:Category:Cross-platform free software]]
[[:Category:Programming languages created in 2016]]
[[:Category:High-level programming languages]]
[[:Category:2016 software]]
[[:Category:Dynamically typed programming languages]]
[[:Category:Egyptian inventions]]
[[:Category:Free software projects]]
[[:Category:Software using the MIT license]]
[[:Category:Free_software_programmed_in_CFree software programmed in C]]
[[:Category:Multi-paradigm programming languages]]
[[:Category:Extensible syntax programming languages]]