Content deleted Content added
(182 intermediate revisions by 36 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>
| developer = The Ring Development Team
| latest release version = {{wikidata|property|edit|reference|P348}}
|
| 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 =
| 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
==History==
[[File:Ringlang shot1.png|thumb|300px|Ring IDE (Ring Notepad - Form Designer)]]
In 2009, [[Mahmoud Samir Fayed]] created a minor [[
==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
* Applications programming language.
* Productivity and developing high quality solutions that can scale.
* Small and
* 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>
==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 79 ⟶ 63:
<pre>
print("Hello, World!")
</pre>
Line 89 ⟶ 72:
</pre>
===Change the
'''Ring'''
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
* Porting [[Legacy code]] written in other languages
Line 104 ⟶ 85:
<pre>
ChangeRingKeyword
ChangeRingOperator + そして
改行 = nl
Line 112 ⟶ 93:
ChangeRingKeyword 手紙を出す See // キーワードの復旧
ChangeRingOperator そして
</pre>
Line 118 ⟶ 99:
<pre>
ChangeRingKeyword
إطبع "Hello, World!"
ChangeRingKeyword إطبع See
</pre>
Use style similar to the [[
<syntaxhighlight lang="pascal" highlight="1,2,11,12">
ChangeRingKeyword func function
ChangeRingKeyword see
begin = :begin
function main
begin
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===
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===
[[File:Ringlang shot10.jpg|thumb|300px|Ring VM implementation using PWCT - Virtual Machine Instructions]]
[[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===
[[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 [[
* RingAllegro ([[Allegro (software)|Allegro Game Library]])
Line 162 ⟶ 192:
* RingInternet (Internet related library)
* RingLibUV ([[libuv|LibUV-asynchronous I / O library]])
* RingMurMurHash ([[
* RingMySQL ([[MySQL]])
* RingODBC ([[Open Database Connectivity]])
Line 169 ⟶ 199:
* RingPostgreSQL ([[PostgreSQL]])
* RingQt ([[Qt (software)|Qt framework]])
* RingRayLib (
* RingSDL ([[Simple DirectMedia Layer|SDL-Simple DirectMedia Layer Library]])
* RingSQLite ([[SQLite]])
Line 176 ⟶ 206:
* RingZIP ([[Zip (file format)|zip file processing library]])
===Libraries===
Ring comes with libraries written in Ring itself, such as libraries related to web and game development.
{| class="wikitable"
Line 187 ⟶ 219:
| Standard Library
| General Classes and functions.
|-
| GUI Library
| Classes and functions for creating GUI applications
|-
| Objects Library
| Classes and functions for creating GUI applications using the MVC design pattern
|-
| Web Library
| Simple framework for developing web applications using the MVC design pattern
|-
| Game Engine
Line 213 ⟶ 251:
|}
===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.
* [[Analog watch|Analog Clock]] application
* [[Software calculator|Calculator application]]
* [[
* [[Chess|The Chess]] Game
* [[15 puzzle|Fifteen Puzzle]] 3D Game
Line 229 ⟶ 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=https:/
===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]])
* Ring2EXE ([[Software distribution|Distributing executable applications]])
* RingPM (The Ring [[Package manager]])
* Ring Notepad ([[
* Form Designer ([[Graphical user interface builder|WYSIWYG GUI designer]])
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]].
===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>
==
===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 | 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==
{{Portal|Free and open-source software|Computer programming}}
*[[Tcl]]
*[[Lua (programming language)|Lua]]
*[[Python (programming language)|Python]]
*[[Ruby (programming language)|Ruby]]
*[[
*[[Gambas]]
*[[Julia (programming language)|Julia]]
*[[Mojo (programming language)|Mojo]]
== References ==
{{reflist}}
== 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]''
* 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. (
* 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.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}}
* [https://www.youtube.com/playlist?list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT Arabic videos]
* [https://idrassi.github.io/MonoRing/ MonoRing]
* {{Official website|https://www.ring-lang.net/}}
* [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://
{{FOSS}}
{{Programming languages}}
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
|