Ring/Lessons/Features

Features
The Ring language comes with the next features

.. tip:: One of the main goals behind the first release is creating a useful language ready for production!

* The compiler + The Virtual Machine are 15,000 lines of C code * The other 85,000 lines of code are related to libraries! * 10,000 lines of C code * 50,000 lines of C++ code * 25,000 lines of Ring code
 * Free Open Source (MIT License)
 * Interpreter - Hybrid Implementation (Compiler+VM)
 * Declarative programming on the top of Object-Oriented programming
 * No explicit end for statements (No ; or ENTER is required)
 * A small language (Around 100,000 lines of code)
 * Written in ANSI C (The code is generated)
 * Developed using Visual Programming (PWCT)
 * Optional Printing for Tokens/Grammar/Byte-Code during execution
 * Portable (Windows, Linux & Mac OS X)
 * Comments (One line & Multi-lines)
 * Not Case-Sensitive
 * Dynamic Typing
 * Weakly typed
 * Lexical Scoping (Global, Local & Object State)
 * Default scope for variables inside functions (Local)
 * Default scope for variables outside functions (global)
 * Garbage Collector - Automatic Memory Management (Escape Analysis and Reference Counting)
 * 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
 * Procedures/Functions
 * Main Function (optional)
 * Call Function before the definition
 * 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


 * using { } to access objects and use attributes/methods as variables/functions
 * 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 & MySQL)
 * Security Functions (OpenSSL)
 * Internet Functions (LibCurl)
 * 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)

* Used to Support Allegro by creating RingAllegro * Used to Support Qt by creating RingQt
 * Extension using C/C++ (Simple API)
 * Embedding the language in C/C++ programs
 * Comes with code generator (Written in Ring) to quickly wrap C/C++ Libraries
 * Create 2D Games (Using the Allegro Library)
 * Create GUI Applications for Desktop and Mobile (Using the Qt Framework)