The supported programming paradigms are imperative, procedural, object-oriented, functional, meta, declarative using nested structures, and natural programming. The language is portable (Windows, Linux, macOS, Android, etc.) and can be used to create console, GUI, web, game and mobile applications.
In 2009, Fayed tried to implement some ideas related to Natural Language Programming, In 9 months he created a minor domain-specific language called Supernova that focus on User interface (UI) creation, then he realized the need for a new language that are general-purpose, practical and can increase the productivity of creating natural languages.
In November 2011, the idea of the new language was conceived.
In Sept. 2013, the design and the implementation was started.
In April 2015, the language name was selected.
In May 2015, the compiler was implemented.
In Sept. 2015, the documentation was done.
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.
The Ring Team used to provide a new release of Ring on January 25th, in the same day as the Egyptian revolution of 2011. The language name is inspired by The Lord of the Rings (film series), "One ring to rule them all". Some developers call it The Ring of Solomon while others remembers the Ring film, and says "if you program with it, seven days later you will die."
The vast majority of computer owners are only users, and only a fraction develop software themselves. programming has the image that it is difficult. One of the many initiatives to remove that image is PWCT, which stands for Programming Without Coding Technology. Although visual programming environments are generally limited in their capabilities and mainly aim to show the user the concepts of programming, you can make almost anything with PWCT. Of course, that doesn't happen after a few minutes.
The Ring programming language is developed using PWCT and is designed for developing the next version of the PWCT software. Also PWCT could be used in introducing programming concepts.. The project started in Dec. 2005 and support designing applications through visual programming then generating the source code, the software support code generation in many programming languages. The general goals behind Ring:
- Applications programming language.
- Productivity and developing high quality solutions that can scale.
- Small and fast 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 Programming Without Coding Technology software.
Ring programs are not interpreted directly from the textual Ring file, but are 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, 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. Ring version 1.10 is implemented in approximately 20,000 lines of C code.
The implementation code in C is not written directly using a Text editor. The Compiler and the Virtual Machine are designed using Visual Programming through the Programming Without Coding Technology software then the C code is generated.
The following are extensions that can be used immediately after the installation of the full installation version (with a file size of about 203 MB for Ring 1.10). 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 and C++ code.
- RingAllegro (Allegro Game Library)
- RingConsoleColor (Text coloring library for command prompt or the terminal)
- RingCurl (CURL Library)
- RingFreeGLUT (FreeGLUT)
- RingInternet (Internet related library)
- RingLibUV (LibUV-asynchronous I / O library)
- RingMurMurHash (Hash Function Library)
- RingMySQL (MySQL)
- RingODBC (Open Database Connectivity)
- RingOpenGL (OpenGL 1.1-4.6)
- RingOpenSSL (OpenSSL)
- RingPostgreSQL (PostgreSQL)
- RingQt (Qt framework)
- RingSDL (SDL-Simple DirectMedia Layer Library)
- RingSQLite (SQLite)
- RingWinAPI (Windows API)
- RingWinCREG (Windows Registry)
- RingZIP (zip file processing library)Also Ring comes with libraries written in Ring itself, some of these libraries are related to web and game development.
Ring is distributed with over 40 applications written in the language.
Some of these applications are
- Analog Clock application
- Calculator application
- Cards Game
- The Checkers Game
- The Chess Game
- Fifteen Puzzle 3D Game
- Find in Files application
- Flappy Bird 3000 Game
- Game 2048
- Game of life
- Get Quotes History application
- Knight Tour Game
- Minesweeper Game
- Othello Game
- Sokoban Game
- Stars Fighter Game
- Sudoku Game
- Superman2016 Game
- Tic-tac-toe 3D Game
- URL Shortener application
- Video Music Player application
- Weight History application
- Windows Startup Manager application
Ring is distributed with a Standard IDE that contains the next tools (written in Ring itself)
Ring REPL (Read–eval–print loop)
Ring Notepad (Source-code editor)
Form Designer (WYSIWYG GUI designer)
Ring2EXE (Distributing executable applications)
RingPM (The Ring Package manager)Also Ring is distributed with extensions for the next code editors.
Emacs
Notepad++
Geany
Atom
Sublime Text 2
Visual Studio Code
Ring is distributed with large documentation (2116 pages for Ring 1.10) written using Sphinix. Also there is complete Japanese translation (unofficial).
Ring had a rapid rise and fall in popularity as measured by the TIOBE Programming Community Index.
In February 2018, Ring broke into the top 50 for the first time. As of June 2019, Ring holds position in the top 100 on the TIOBE index. It's not easy to know how many users of a free open source software like Ring, because it's distributed through many websites like Sourceforge and GitHub, but some links from Sourceforge indicates over 40,000 downloads , but downloads does not indicate continued usage. Also comparing Ring with other programming languages, some developers said: "Ring itself is an unpopular language that does not offer much for non-programmers."
Ring critics assert that the language is too similar to other programming languages already in existence, that Ring cares more about features than about coherence, and that they make new syntax for the sake of new syntax.
The list index starts from 1, which messes up indexing math.
Dynamic typing, coupled with weak typing is the straight way to lots of bugs.
The assignment operator uses Deep copy (can end up killing memory if you're not careful).
Nested functions can't be a closure.