Ring (programming language): Difference between revisions

Content deleted Content added
History: I see little if any encyclopedic reason for listing every date for every release
 
(46 intermediate revisions by 19 users not shown)
Line 1:
{{Short description|Dynamically typed, general-purpose programming language}}
{{infobox programming language
 
| 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><ref name="AlinsenTV">{{cite web |url=https://www.facebook.com/Alinsen.tv/videos/782854818918053/?t=33 |title=Alinsen TV channel introduce Ring as one of the inventions made in the Middle East |author= Alinsen TV channel Team|date=4 August 2020 |publisher=[[:ar::قناة الإنسان|Alinsen TV Channel]]}}</ref>
| developer = The Ring Development Team
| latest release version = {{wikidata|property|edit|reference|P348}}
Line 13 ⟶ 12:
| 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]]s are [[Imperative programming|imperative]], [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]], [[Functional programming|functional]], [[Metaprogramming|meta]], [[Declarative programming|declarative]] using nested structures, and [[Natural-language programming|natural programming]].<ref name="BIMArabiaMagazine">{{cite web |url=httphttps://bimarabia.com/download/BIMarabia_Arabic/BIMarabia27.pdf#page=8 |title=The Ring programming language Review |author=Omar Selim |date=January 2018 |publisher=BIMArabia Magazine |access-date=2024-03-24 |archive-date=2023-11-17 |archive-url=https://web.archive.org/web/20231117130807/https://bimarabia.com/download/BIMarabia_Arabic/BIMarabia27.pdf |url-status=bot: unknown }}</ref><ref name="YourWayToProgramming">{{cite web |url=https://ring-lang.sourceforgegithub.io/ref/ArabicBook_YourWayToProgramming_TalkAboutRing.pdf |title=Your way to programming (Arabic Book, Pages 56-57) talk about Ring |author=Ahmed Tartour |date=January 2020 |publisher=[[:ar::كتبنا (موقع ويب)|Kotobna]]}}</ref> The language is portable ([[Windows]], [[Linux]], [[macOS]], [[Android (operating system)|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="InfoWorld">{{cite web |url=https://www.infoworld.com/article/3572395/ring-language-upgrade-focuses-on-webassembly.html |title=Ring language upgrade focuses on WebAssembly |author= Paul Krill|date=24 August 2020 |publisher=[[InfoWorld]]}}</ref> etc.)<ref>{{cite book |last=Ghanem |first=Mohamed |title=Developing Poet Software using Ring language |url= https://ring-lang.sourceforgegithub.io/ref/GhanemBookAboutRing.pdf |publisher=MetaBook (Egypt - Mansoura)|date=2021|isbn=978-977-6928-38-1 }}</ref> and can be used to create [[Console application|console]], [[Graphical user interface|GUI]], [[Web application|web]], [[PC game|game]] and [[mobile app]]lications.<ref>{{Cite book|url=https://www.apress.com/gp/book/9781484258323|title=Beginning Ring 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>{{Cite webnews|title=Ring: A programming language developed by Arab|url=https://muslims-res.com/%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/|access-date=2020-09-28|websitenewspaper=muslims-res.comالباحثون المسلمون|author=Ahmed Mohammed Hassan|date=12 December 2015 }}</ref><ref>{{Cite webnews|title=A book about the Ring programming language|url=https://muslims-res.com/%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/|access-date=2020-09-28|websitenewspaper=muslims-res.comالباحثون المسلمون|author=Abedallah Salehani|date=18 March 2020 }}</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]] called Supernova that focuses 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 is [[General-purpose language|general-purpose]] and can increase the [[productivity]] of natural language 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=https://ring-lang.github.io/doc1.1623/faq.html |title=Ring Language - Frequently Asked Questions (FAQ) |author=Ring Team|date=September 2021 |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 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.16 review |author= Softpedia Team|date=23 October 2021 |publisher=[[Softpedia]]}}</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.
Line 64 ⟶ 63:
 
<pre>
load "stdlib.ring"
print("Hello, World!")
</pre>
Line 74 ⟶ 72:
</pre>
 
===Change the Keywordskeywords and Operatorsoperators===
 
'''Ring''' supports changing the language [[Reserved word|keywords]] and [[Operator (computer programming)|operators]].
Line 87 ⟶ 85:
 
<pre>
ChangeRingKeyword See 手紙を出す
ChangeRingOperator + そして
改行 = nl
Line 95 ⟶ 93:
 
ChangeRingKeyword 手紙を出す See // キーワードの復旧
ChangeRingOperator そして + // 演算子の復旧
</pre>
 
Line 101 ⟶ 99:
 
<pre>
ChangeRingKeyword See إطبع
 
إطبع "Hello, World!"
Line 112 ⟶ 110:
<syntaxhighlight lang="pascal" highlight="1,2,11,12">
ChangeRingKeyword func function
ChangeRingKeyword see write
begin = :begin
 
Line 125 ⟶ 123:
</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 Commandcommand===
 
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>
Line 145 ⟶ 143:
</pre>
 
===Object-oriented Oriented Programmingprogramming===
 
Ring supports Object Orientedobject-oriented Programmingprogramming (Classesclasses, Objectsobjects, Compositioncomposition, Inheritanceinheritance, Encapsulationencapsulation, etc.)<ref>{{Cite web|url=https://ring-lang.github.io/doc1.1623/oop.html|title = Object Oriented Programming (OOP) — Ring 1.16 documentation}}</ref>
 
<pre>
new point { # Create new object from the Point class thethen access the objectit 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>
Line 172 ⟶ 170:
==Implementation==
 
===Compiler and Virtualvirtual Machinemachine===
 
[[File:Ringlang shot10.jpg|thumb|300px|Ring VM implementation using PWCT - Virtual Machine Instructions]]
Line 178 ⟶ 176:
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 [[Compilercompiler]] and the [[Virtualvirtual Machinemachine]] are designed using [[Visual programming language|Visualvisual Programmingprogramming]] through the [[PWCT|Programming Without Coding Technology]] software then the [[C Programming(programming Languagelanguage)|C]] code is generated.
 
===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.
Line 208 ⟶ 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 Project]]}}</ref>
 
===Libraries===
 
Ring comes with libraries written in Ring itself, somesuch of theseas libraries are related to web and game development.
 
{| class="wikitable"
Line 281 ⟶ 279:
===Tools===
[[File:Ringlang shot7.png|thumb|300px|Running the Tetris game using the Ring Package Manager]]
Ring is distributed with a Standard IDE that containsincludes the nextfollowing tools (written in Ring itself):
 
* Ring REPL ([[Read–eval–print loop]])
Line 289 ⟶ 287:
* Form Designer ([[Graphical user interface builder|WYSIWYG GUI designer]])
 
Also Ring is also distributed with extensions for many code editors (such as [[Emacs]], [[Notepad++]], [[Geany]], [[Atom (text editor)|Atom]], [[Sublime Text|Sublime Text 2]], and [[Visual Studio Code]]).
 
SpaceVim (A community-driven vim distribution) support the Ring programming language.<ref>{{Cite web|url=https://spacevim.org/layers/lang/ring/|title = SpaceVim lang#ring layer &#124; SpaceVim}}</ref>
 
===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]].
 
Also there is Japanese translation.<ref>{{Cite web|url=http://ring-lang-081.osdn.jp/docs-1.16/index.html|title = ようこそ Ring 取扱説明書へ! — プログラミング言語 Ring 1.16 取扱説明書}}</ref>
 
==Reception==
Line 303 ⟶ 297:
===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=ArchivedTIOBE Index &#124; TIOBE - the Software Quality copyCompany |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====
Line 325 ⟶ 319:
====Implicit type conversions====
 
The language can automatically convert between numbers and strings.<ref>{{Cite web|url=https://ring-lang.github.io/doc1.1623/variables.html#implicit-conversion|title = Variables — Ring 1.1623 documentation}}</ref>
 
<pre>
Line 348 ⟶ 342:
*[[Squirrel (programming language)|Squirrel]]
*[[Gambas]]
*[[Julia (programming language)|Julia]]
*[[Mojo (programming language)|Mojo]]
 
== References ==
Line 353 ⟶ 349:
 
== Further reading ==
* GhanemFayed (20212025) ''[https://github.com/ring-lang.sourceforge.io/refring/GhanemBookAboutRingreleases/download/v1.23/RingDoc_1.23.pdf DevelopingThe PoetRing Softwareprogramming usinglanguage Ring- languageThe (Arabiccomplete Book)reference]'', MetaBook (Egypt - Mansoura)
* 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]]
* 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]]
* Ghanem (2021) ''[https://ring-lang.github.io/ref/GhanemBookAboutRing.pdf Developing Poet Software using Ring language (Arabic Book)]'', MetaBook (Egypt - Mansoura)
* Ayouni (2020) ''[https://www.apress.com/gp/book/9781484258323 Beginning Ring Programming]'', [[Springer Nature|Apress (part of Springer Nature)]]
* Hassouna (2019) ''[https://ring-lang.sourceforgegithub.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]]
Line 361 ⟶ 360:
==External links==
{{Wikibooks|Ring}}
* [https://www.youtube.com/playlist?list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT Arabic videos]
* [http://www.ring-lang.net/ Ring home page]
* [https://rosettacodeidrassi.orggithub.io/wikiMonoRing/Category:Ring RosettaCode samplesMonoRing]
* {{Official website|https://www.ring-lang.net/}}
* [http://ring-lang-081.osdn.jp/docs-1.16/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}}