Introduction¶
Welcome to the Ring programming language!
Ring is an Innovative and practical general-purpose multi-paradigm language that can be embedded in C/C++ projects, extended using C/C++ code and/or used as standalone language. The supported programming paradigms are Imperative, Procedural, Object-Oriented, Functional, Meta programming, Declarative programming using nested structures, and Natural programming. The language is portable (Windows, Linux, macOS, Android, etc.) and can be used to create Console, GUI, Web, Games and Mobile applications. The language is designed to be Simple, Small, Flexible and Fast. Its Dynamic Language that compile the source code to byte code then execute it by the Ring Virtual Machine, which is integrated with the Ring Compiler in one program.
In this chapter we are going to discuss the goals behind the language design and implementation.
Motivation¶
In Nov. 2011, I started to think about creating a new version of the Programming Without Coding Technology (PWCT) software from scratch.
I was interested in creating multi-platform edition of the software beside adding support for Web & Mobile development.
What I was looking for is a programming language that can be used to build the development environment, provides multi-platform support, more productivity, better performance, can be used for components scripting and developing different kinds of applications.
Instead of using a mix of programming languages, I decided to use one programming language.
I looked at many programming languages, but I discovered that I need a different language that comes with new ideas and intelligent implementation.
Ring and other languages¶
Ring is an innovative programming language that comes with better support for Natural Language Programming and Declarative Programming. The innovation comes in supporting these paradigms with new practical techniques on the top of Object-Oriented Programming and Functional Programming.
Also Ring is influenced by the next programming languages
Lua
Python
Ruby
C
C#
BASIC
QML
xBase
Supernova
History¶
In Sept. 2013 I started the design and the implementation of the Ring programming language. After 21 months of development, In May 2015 the language Compiler & Virtual Machine were ready for use!
After that I spent three months testing the language again, trying to discover any bug to fix, writing better tests, by the end of August 2015, all know bugs were fixed, Writing many tests and testing automation helped a lot in getting a stable product.
In September 12, 2015, most of the documentation was written. Before releasing the language I started the marketing by writing a post in Arabic language about it to my facebook profile page asking for contributors interested in the language idea after reading a short description, In the same day I got a lot of emails from developers and friends interested to contribute!
Ring 1.0 is released on January 25, 2016
Ring 1.1 is released on October 6, 2016
Ring 1.2 is released on January 25, 2017
Ring 1.3 is released on May 15, 2017
Ring 1.4 is released on June 29, 2017
Ring 1.5 is released on August 21, 2017
Ring 1.6 is released on November 30, 2017
Ring 1.7 is released on January 25, 2018
Ring 1.8 is released on June 25, 2018
Ring 1.9 is released on October 6, 2018
Ring 1.10 is released on January 25, 2019
Ring 1.11 is released on September 15, 2019
Ring 1.12 is released on January 25, 2020
Ring 1.13 is released on September 15, 2020
Ring 1.14 is released on January 25, 2021
Ring 1.15 is released on September 24, 2021
Ring 1.16 is released on October 23, 2021
Ring 1.17 is released on May 14, 2022
Ring 1.18 is released on July 12, 2023
Features¶
The Ring language comes with the next features
Tip
The language is ready for production!
Free Open Source (MIT License)
Hybrid Implementation (Compiler + Virtual Machine)
Declarative programming on the top of Object-Oriented programming
Natural Language Programming on the top of Object-Oriented programming
Natural Language Programming Library
Three different styles for writing the code and you can create your style
Syntax Flexibility (You can change the language keywords and operators)
The language keywords can be translated from English to other languages (Arabic, French, etc)
Compact Syntax, No explicit end for statements (No ; or ENTER is required)
Using braces { } we can access objects and use attributes/methods as variables/functions
Transparent Implementation (See the Tokens, Grammar, and Byte Code for each program)
Visual Implementation - Developed using Visual Programming (PWCT)
Written in ANSI C (The code is generated + Looks identical to Handwritten Code)
- A small language
The compiler + The Virtual Machine (20,000 lines of C code)
The other 500,000 lines of code are related to libraries!
Portable (Windows, Linux, macOS, Android, etc)
Comments (One line & Multi-lines)
Not Case-Sensitive
Dynamic Typing
Weakly typed (Automatic conversion between numbers and strings only)
Lexical Scoping (Global, Local & Object State)
Default scope for variables inside functions (Local)
Default scope for variables outside functions (global)
We can have separate global scope for each library or sub project
Garbage Collector - Automatic Memory Management (Escape Analysis and Reference Counting)
In most cases (90%) using Escape Analysis we don’t need to run the Garbage Collector (Faster)
Structure Programming
Rich control structures & Operators
For in get item by reference not value, you can read/edit the item
Use exit to go outside from more than one loop (Use it for programming in the small only)
Procedures/Functions
Main Function (Optional - To avoid using the Global Scope)
Call Function before the definition (Top-Down Programming)
Recursion
Multi-line literals
Access (read/write) string letter by index
The list index start by 1
No keyword to end Functions/Classes/Packages
Range operator ex: 1:10 and “a”:”z”
First Class Variables, Lists, Objects and Functions
Store/Copy Lists/Objects by value (Deep Copy)
Pass Lists/Objects by reference
Native Object-Oriented Support
Encapsulation
Setter/Getter (optional)
private state (optional)
Instantiation
Polymorphism
Composition
Inheritance (Single Inheritance)
Operator Overloading
Packages
Reflection and Meta-programming
Clear program structure (Statements then functions then packages & classes)
Exception Handling
Eval() to execute code during run-time
8-bit clean, work on binary data directly
I/O commands
Math functions
String functions
List functions
File processing functions
Database support (ODBC, SQLite, MySQL & PostgreSQL)
Security Functions (OpenSSL)
Internet Functions (LibCurl)
Zip Functions
CGI Library (Written in Ring)
HTTP Get
HTTP Post
File upload
Cookies
URL Encode
HTML Templates
HTML Special Characters
HTML Generation using Functions
HTML Generation using Classes
CRUD Example (using MVC)
Users Example (Register, Login and Check)
Deploying web applications in the Cloud
Extension using C/C++ (Simple API)
Embedding the language in C/C++ programs
Embedding Ring in Ring
- Comes with code generator (Written in Ring) to quickly wrap C/C++ Libraries
Used to Support Allegro by creating RingAllegro
Used to Support LibSDL by creating RingLibSDL
Used to Support Qt by creating RingQt
Create 2D Games for Desktop and Mobile (Using the Allegro Library)
RingLibSDL Extension
Comes with simple Game Engine for 2D Games
RingOpenGL Extension
RingFreeGLUT Extension
RingRayLib Extension
RingTilengine Extension
Create GUI Applications for Desktop and Mobile (Using the Qt Framework)
Comes with IDE contains the Code Editor (Ring Notepad) and the Form Designer
RingREPL (Read-Eval-Print-Loop)
Tracing and Debugging
Type Hints Library
Comes with Ring2EXE to distribute applications
RingLibuv Extension
RingLibui Extension
RingSockets Extension
RingThreads Extension
No Global Interpreter (VM) lock (No GIL) - Better for threads and concurrency (Faster)
Comes with RingPM (Package Manager)
Many Samples and Applications
Complete Documentation.
License¶
The Ring Programming Language
Version 1.18
The MIT License (MIT)
Copyright (c) Mahmoud Fayed
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.