Ring Documentation, Release 1.5.1
7.11 Better Quality
Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday in practical projects. Some
functions are optimized to be faster like the SubStr() function. Also the documentation is more better.
7.11. Better Quality 95
CHAPTER
EIGHT
WHAT IS NEW IN RING 1.1?
In this chapter we will learn about the changes and new features in Ring 1.1 release.
8.1 List of changes and new features
Ring 1.1 comes with many new features
• Better Natural Language Programming Support
• Generate/Execute Ring Object Files (*.ringo)
• Syntax Flexibility and different styles for I/O and Control Structures
• New Functions and Changes
• StdLib functions and classes written in Ring
• RingLibSDL
• Demo Project - Game Engine for 2D Games
• RingSQLite
• Better Code Generator for Extensions
• Using Self.Attribute in the Class Region to define new attributes
• Using This.Attribute in nested Braces inside the Class Methods
• Better Documentation
8.2 Better Natural Language Programming Support
Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and
it’s ability to create declarative and natural domain specific languages in a fraction of time.
This release add support for calling methods when an expression is evaluated
check this example:
# Natural Code
new program {
Accept 2 numbers then print the sum
}
# Natural Code Implementation
96
Ring Documentation, Release 1.5.1
class program
# Keywords
Accept=0 numbers=0 then=0 print=0 the=0 sum=0
# Execution
func braceexpreval x
value = x
func getnumbers
for x=1 to value
see "Enter Number ("+x+") :" give nNumber
aNumbers + nNumber
next
func getsum
nSUm = 0
for x in aNumbers nSum+= x next
see "The Sum : " + nSum
private
value=0 aNumbers=[]
Output:
Enter Number (1) :3
Enter Number (2) :4
The Sum : 7
for more information see the “Natural Language Programming” chapter.
8.3 Generate/Execute Ring Object Files (*.ringo)
This feature enable you to distribute your applications without distributing the source code. Also it makes application
distribution a simple process where you get one Ring object file for the complete project (many source code files).
Also using Ring object file remove the loading time required for compiling the application.
Check the “command line options” chapter to know more about this feature.
8.4 Syntax Flexibility and different styles for I/O and Control Struc-
tures
Programmers are sensitive to the programming language syntax. Great programmers know how to work using many
different styles but each programmer may have his/her favorite style.
Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a
response to many programmers asking for a better syntax we decided to provide more options.
Also some of these features are very necessary for Natural Language Programming.
Example :
We have two commands to change language keywords and operators.
ChangeRingOperator + plus
ChangeRingKeyword see print
Print 5 plus 5
8.3. Generate/Execute Ring Object Files (*.ringo) 97
Ring Documentation, Release 1.5.1
ChangeRingOperator plus +
ChangeRingKeyword print see
We have new styles (Optional) for Input/Output.
Example :
Put "What is your name? "
Get cName
Put "Hello " + cName
Example :
Load "stdlib.ring"
Print("What is your name? ") # print message on screen
cName=GetString() # get input from the user
print("Hello #{cName}") # say hello!
We have new styles (optional) for control structures.
Example :
While True
Put "
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
" Get nOption
Switch nOption
Case 1
Put "Enter your name : "
Get name
Put "Hello " + name + nl
Case 2
Put "Sample : using while loop" + nl
Case 3
Bye
Else
Put "bad option..." + nl
End
End
Example :
Load "stdlib.ring"
While True {
print("
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
8.4. Syntax Flexibility and different styles for I/O and Control Structures 98
Ring Documentation, Release 1.5.1
")
nOption = GetString()
switch nOption {
case 1
print("Enter your name : ")
name = getstring()
print("Hello #{name}n")
case 2
print("Sample : using switch statementn")
case 3
Bye
else
print("bad option...n")
}
}
Check the next chapters:-
• Getting Started - Second Style
• Getting Started - Third Style
• Control Structures - Second Style - May looks like Lua and Ruby
• Control Structures - Third Style - May looks like C (uses braces)
• Syntax Flexibility
Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for
the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces.
8.5 New Functions and Changes
Changed:
• get() function : changed to sysget()
• sort() function : can now work on list of objects
• find() function : can now work on list of objects
Added:
• clockspersecond()
• CurrentDir()
• ExeFileName()
• ChDir()
• ExeFolder()
• varptr()
• space()
• nullpointer()
8.5. New Functions and Changes 99
Ring Documentation, Release 1.5.1
• object2pointer()
• pointer2object()
Check the next chapters
• System Functions
• Object Oriented Programming (OOP)
• Low Level Functions
8.6 StdLib functions and classes written in Ring
Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team
The library provide a useful group of new functions and classes
Example:
Load "stdlib.ring"
Puts("Test Times()")
Times ( 3 , func { see "Hello, World!" + nl } )
Example:
Load "stdlib.ring"
Puts("Test Map()")
See Map( 1:10, func x { return x*x } )
Example:
Load "stdlib.ring"
Puts("Test Filter()")
See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
Example:
Load "stdlib.ring"
See "Testing the String Class" + nl
oString = new string("Hello, World!")
oString.println()
oString.upper().println()
oString.lower().println()
oString.left(5).println()
oString.right(6).println()
Example:
Load "stdlib.ring"
oList = new list ( [1,2,3] )
oList.Add(4)
oList.print()
Example:
8.6. StdLib functions and classes written in Ring 100
Ring Documentation, Release 1.5.1
Load "stdlib.ring"
oStack = new Stack
oStack.push(1)
oStack.push(2)
oStack.push(3)
see oStack.pop() + nl
Example:
Load "stdlib.ring"
oQueue = new Queue
oQueue.add(1)
oQueue.add(2)
oQueue.add(3)
see oQueue.remove() + nl
Example:
Load "stdlib.ring"
ohashtable = new hashtable
See "Test the hashtable Class Methods" + nl
ohashtable {
Add("Egypt","Cairo")
Add("KSA","Riyadh")
see self["Egypt"] + nl
see self["KSA"] + nl
see contains("Egypt") + nl
see contains("USA") + nl
see index("KSA") + NL
print()
delete(index("KSA"))
see copy("*",60) + nl
print()
}
Example:
Load "stdlib.ring"
otree = new tree
See "Test the tree Class Methods" + nl
otree {
set("The first step") # set the root node value
see value() + nl
Add("one")
Add("two")
Add("three") {
Add("3.1")
Add("3.2")
Add("3.3")
see children
}
see children
oTree.children[2] {
Add("2.1") Add("2.2") Add("2.3") {
Add("2.3.1") Add("2.3.2") Add("test")
8.6. StdLib functions and classes written in Ring 101
Ring Documentation, Release 1.5.1
}
}
oTree.children[2].children[3].children[3].set("2.3.3")
}
see copy("*",60) + nl
oTree.print()
Check the next chapters:
• StdLib Functions
• StdLib Classes
8.7 RingLibSDL
Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library
Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL
Example:
Load "libsdl.ring"
SDL_Init(SDL_INIT_EVERYTHING)
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
SDL_Delay(2000)
SDL_DestroyWindow(win)
SDL_Quit()
See the RingLibSDL Chapter.
8.8 Demo Project - Game Engine for 2D Games
In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring
classes to use the engine.
But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases
Also this would be a good demo project to learn about the language concepts where we build things using Object Ori-
ented Programming (OOP) then access the power that we have using declarative programming using nested structures
or using natural programming.
In this project we selected the first way (declarative programming using nested structures)
Example:
Load "gameengine.ring" # Give Control to the Game Engine
func main # Called by the Game Engine
oGame = New Game # Create the Game Object
{
title = "My First Game"
text {
x = 10 y=50
animate = false
size = 20
8.7. RingLibSDL 102
Ring Documentation, Release 1.5.1
file = "fonts/pirulen.ttf"
text = "game development using ring is very fun!"
color = rgb(0,0,0) # Color = black
}
text {
x = 10 y=150
# Animation Part ======================================
animate = true # Use Animation
direction = GE_DIRECTION_INCVERTICAL # Increase y
point = 400 # Continue until y=400
nStep = 3 # Each time y+= 3
#======================================================
size = 20
file = "fonts/pirulen.ttf"
text = "welcome to the real world!"
color = rgb(0,0,255) # Color = Blue
}
Sound { # Play Sound
file = "sound/music1.wav" # Sound File Name
}
} # Start the Events Loop
See the “Demo Project - Game Engine for 2D Games” chapter.
8.9 RingSQLite
Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL.
Now Ring 1.1 provide native support for SQLite database too.
Example:
oSQLite = sqlite_init()
sqlite_open(oSQLite,"mytest.db")
sql = "CREATE TABLE COMPANY(" +
"ID INT PRIMARY KEY NOT NULL," +
"NAME TEXT NOT NULL," +
"AGE INT NOT NULL," +
"ADDRESS CHAR(50)," +
"SALARY REAL );"
sqlite_execute(oSQLite,sql)
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
sqlite_execute(oSQLite,sql)
aResult = sqlite_execute(oSQLite,"select * from COMPANY")
8.9. RingSQLite 103
Ring Documentation, Release 1.5.1
for x in aResult
for t in x
see t[2] + nl
next
next
see copy("*",50) + nl
for x in aResult
see x["name"] + nl
next
sqlite_close(oSQLite)
8.10 Better Code Generator for Extensions
We are using the code generator (written in Ring) every day to add new libraries to Ring.
The generator is used to create RingQt and RingAllegro
Also in Ring 1.1 it’s used to create RingLibSDL.
more features are added like
• Set/Get structure members (numbers & pointers)
• Using constants
• Better Generated Code
See the Code Generator chapter.
8.11 Using Self.Attribute in the Class Region to define new attributes
We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes.
class Person
name # Define name as attribute if it's not a global variable
address
phone
class person2
self.name # Must Define the attribute
self.address
self.phone
8.12 Using This.Attribute in nested Braces inside the Class Methods
We can use nested braces {} while we are inside methods to access another objects, In this case the current object
scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In
this case we can use This.Attribute and This.Method() to access the object that will be created from the current class.
Check the Object Oriented Programming chapter for more information.
Also Check the Weight History Application in GUI Development using RingQt chapter.
8.10. Better Code Generator for Extensions 104

More Related Content

PDF
The Ring programming language version 1.7 book - Part 17 of 196
PDF
The Ring programming language version 1.6 book - Part 16 of 189
PDF
The Ring programming language version 1.5.1 book - Part 10 of 180
PDF
Clojure, Plain and Simple
PPTX
Python 3.6 Features 20161207
PPTX
Introduction to Haskell: 2011-04-13
PDF
Clojure for Java developers
PPTX
SQL Server Select Topics
The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.5.1 book - Part 10 of 180
Clojure, Plain and Simple
Python 3.6 Features 20161207
Introduction to Haskell: 2011-04-13
Clojure for Java developers
SQL Server Select Topics

What's hot (20)

PDF
JUnit5 and TestContainers
PPT
The Kotlin Programming Language
PPTX
The Arrow Library in Kotlin
PDF
Kotlin: Why Do You Care?
PDF
Kotlin Slides from Devoxx 2011
PDF
Kotlin: a better Java
PPTX
Coding in Kotlin with Arrow NIDC 2018
PPT
Intro to Functions Python
PDF
4. python functions
PDF
Kotlin: Challenges in JVM language design
PDF
Feel of Kotlin (Berlin JUG 16 Apr 2015)
PPTX
An introduction to scala
PDF
Python tour
PDF
Java7 New Features and Code Examples
PDF
The Ring programming language version 1.5.4 book - Part 180 of 185
PPTX
Java 101
PDF
Java 7 New Features
PDF
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
PDF
Fun with Functional Programming in Clojure
PDF
Kotlin Bytecode Generation and Runtime Performance
JUnit5 and TestContainers
The Kotlin Programming Language
The Arrow Library in Kotlin
Kotlin: Why Do You Care?
Kotlin Slides from Devoxx 2011
Kotlin: a better Java
Coding in Kotlin with Arrow NIDC 2018
Intro to Functions Python
4. python functions
Kotlin: Challenges in JVM language design
Feel of Kotlin (Berlin JUG 16 Apr 2015)
An introduction to scala
Python tour
Java7 New Features and Code Examples
The Ring programming language version 1.5.4 book - Part 180 of 185
Java 101
Java 7 New Features
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
Fun with Functional Programming in Clojure
Kotlin Bytecode Generation and Runtime Performance
Ad

Similar to The Ring programming language version 1.5.1 book - Part 13 of 180 (20)

PDF
The Ring programming language version 1.5.4 book - Part 15 of 185
PDF
The Ring programming language version 1.5.3 book - Part 14 of 184
PDF
The Ring programming language version 1.8 book - Part 18 of 202
PDF
The Ring programming language version 1.9 book - Part 20 of 210
PDF
The Ring programming language version 1.7 book - Part 14 of 196
PDF
The Ring programming language version 1.7 book - Part 92 of 196
PDF
The Ring programming language version 1.10 book - Part 12 of 212
PDF
The Ring programming language version 1.3 book - Part 7 of 88
PDF
The Ring programming language version 1.6 book - Part 13 of 189
PDF
The Ring programming language version 1.5.2 book - Part 14 of 181
PDF
The Ring programming language version 1.10 book - Part 22 of 212
PDF
The Ring programming language version 1.5.4 book - Part 14 of 185
PDF
The Ring programming language version 1.7 book - Part 7 of 196
PDF
The Ring programming language version 1.6 book - Part 7 of 189
PDF
The Ring programming language version 1.5.3 book - Part 11 of 184
PDF
The Ring programming language version 1.10 book - Part 102 of 212
PDF
The Ring programming language version 1.3 book - Part 8 of 88
PDF
The Ring programming language version 1.5 book - Part 3 of 31
PDF
The Ring programming language version 1.5.3 book - Part 85 of 184
PDF
The Ring programming language version 1.10 book - Part 14 of 212
The Ring programming language version 1.5.4 book - Part 15 of 185
The Ring programming language version 1.5.3 book - Part 14 of 184
The Ring programming language version 1.8 book - Part 18 of 202
The Ring programming language version 1.9 book - Part 20 of 210
The Ring programming language version 1.7 book - Part 14 of 196
The Ring programming language version 1.7 book - Part 92 of 196
The Ring programming language version 1.10 book - Part 12 of 212
The Ring programming language version 1.3 book - Part 7 of 88
The Ring programming language version 1.6 book - Part 13 of 189
The Ring programming language version 1.5.2 book - Part 14 of 181
The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.7 book - Part 7 of 196
The Ring programming language version 1.6 book - Part 7 of 189
The Ring programming language version 1.5.3 book - Part 11 of 184
The Ring programming language version 1.10 book - Part 102 of 212
The Ring programming language version 1.3 book - Part 8 of 88
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5.3 book - Part 85 of 184
The Ring programming language version 1.10 book - Part 14 of 212
Ad

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.10 book - Part 210 of 212
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.10 book - Part 207 of 212
PDF
The Ring programming language version 1.10 book - Part 205 of 212
PDF
The Ring programming language version 1.10 book - Part 206 of 212
PDF
The Ring programming language version 1.10 book - Part 204 of 212
PDF
The Ring programming language version 1.10 book - Part 203 of 212
PDF
The Ring programming language version 1.10 book - Part 202 of 212
PDF
The Ring programming language version 1.10 book - Part 201 of 212
PDF
The Ring programming language version 1.10 book - Part 200 of 212
PDF
The Ring programming language version 1.10 book - Part 199 of 212
PDF
The Ring programming language version 1.10 book - Part 198 of 212
PDF
The Ring programming language version 1.10 book - Part 197 of 212
PDF
The Ring programming language version 1.10 book - Part 196 of 212
PDF
The Ring programming language version 1.10 book - Part 195 of 212
PDF
The Ring programming language version 1.10 book - Part 194 of 212
PDF
The Ring programming language version 1.10 book - Part 193 of 212
PDF
The Ring programming language version 1.10 book - Part 192 of 212
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.10 book - Part 210 of 212
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.10 book - Part 207 of 212
The Ring programming language version 1.10 book - Part 205 of 212
The Ring programming language version 1.10 book - Part 206 of 212
The Ring programming language version 1.10 book - Part 204 of 212
The Ring programming language version 1.10 book - Part 203 of 212
The Ring programming language version 1.10 book - Part 202 of 212
The Ring programming language version 1.10 book - Part 201 of 212
The Ring programming language version 1.10 book - Part 200 of 212
The Ring programming language version 1.10 book - Part 199 of 212
The Ring programming language version 1.10 book - Part 198 of 212
The Ring programming language version 1.10 book - Part 197 of 212
The Ring programming language version 1.10 book - Part 196 of 212
The Ring programming language version 1.10 book - Part 195 of 212
The Ring programming language version 1.10 book - Part 194 of 212
The Ring programming language version 1.10 book - Part 193 of 212
The Ring programming language version 1.10 book - Part 192 of 212

Recently uploaded (20)

PPTX
CRM(Customer Relationship Managmnet) Presentation
PDF
“Introduction to Designing with AI Agents,” a Presentation from Amazon Web Se...
PDF
Gestión Unificada de los Riegos Externos
PDF
Introduction to c language from lecture slides
PPTX
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .
PDF
NewMind AI Journal Monthly Chronicles - August 2025
PDF
Child-friendly e-learning for artificial intelligence education in Indonesia:...
PDF
Domain-specific knowledge and context in large language models: challenges, c...
PDF
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
PPTX
Introduction-to-Artificial-Intelligence (1).pptx
PPTX
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
PPTX
Rise of the Digital Control Grid Zeee Media and Hope and Tivon FTWProject.com
PDF
Optimizing bioinformatics applications: a novel approach with human protein d...
PDF
Secure Java Applications against Quantum Threats
PDF
eBook Outline_ AI in Cybersecurity – The Future of Digital Defense.pdf
PPTX
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
PDF
TicketRoot: Event Tech Solutions Deck 2025
PDF
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
PDF
Addressing the challenges of harmonizing law and artificial intelligence tech...
PPT
Overviiew on Intellectual property right
CRM(Customer Relationship Managmnet) Presentation
“Introduction to Designing with AI Agents,” a Presentation from Amazon Web Se...
Gestión Unificada de los Riegos Externos
Introduction to c language from lecture slides
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .
NewMind AI Journal Monthly Chronicles - August 2025
Child-friendly e-learning for artificial intelligence education in Indonesia:...
Domain-specific knowledge and context in large language models: challenges, c...
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
Introduction-to-Artificial-Intelligence (1).pptx
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
Rise of the Digital Control Grid Zeee Media and Hope and Tivon FTWProject.com
Optimizing bioinformatics applications: a novel approach with human protein d...
Secure Java Applications against Quantum Threats
eBook Outline_ AI in Cybersecurity – The Future of Digital Defense.pdf
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
TicketRoot: Event Tech Solutions Deck 2025
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
Addressing the challenges of harmonizing law and artificial intelligence tech...
Overviiew on Intellectual property right

The Ring programming language version 1.5.1 book - Part 13 of 180

  • 1. Ring Documentation, Release 1.5.1 7.11 Better Quality Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday in practical projects. Some functions are optimized to be faster like the SubStr() function. Also the documentation is more better. 7.11. Better Quality 95
  • 2. CHAPTER EIGHT WHAT IS NEW IN RING 1.1? In this chapter we will learn about the changes and new features in Ring 1.1 release. 8.1 List of changes and new features Ring 1.1 comes with many new features • Better Natural Language Programming Support • Generate/Execute Ring Object Files (*.ringo) • Syntax Flexibility and different styles for I/O and Control Structures • New Functions and Changes • StdLib functions and classes written in Ring • RingLibSDL • Demo Project - Game Engine for 2D Games • RingSQLite • Better Code Generator for Extensions • Using Self.Attribute in the Class Region to define new attributes • Using This.Attribute in nested Braces inside the Class Methods • Better Documentation 8.2 Better Natural Language Programming Support Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and it’s ability to create declarative and natural domain specific languages in a fraction of time. This release add support for calling methods when an expression is evaluated check this example: # Natural Code new program { Accept 2 numbers then print the sum } # Natural Code Implementation 96
  • 3. Ring Documentation, Release 1.5.1 class program # Keywords Accept=0 numbers=0 then=0 print=0 the=0 sum=0 # Execution func braceexpreval x value = x func getnumbers for x=1 to value see "Enter Number ("+x+") :" give nNumber aNumbers + nNumber next func getsum nSUm = 0 for x in aNumbers nSum+= x next see "The Sum : " + nSum private value=0 aNumbers=[] Output: Enter Number (1) :3 Enter Number (2) :4 The Sum : 7 for more information see the “Natural Language Programming” chapter. 8.3 Generate/Execute Ring Object Files (*.ringo) This feature enable you to distribute your applications without distributing the source code. Also it makes application distribution a simple process where you get one Ring object file for the complete project (many source code files). Also using Ring object file remove the loading time required for compiling the application. Check the “command line options” chapter to know more about this feature. 8.4 Syntax Flexibility and different styles for I/O and Control Struc- tures Programmers are sensitive to the programming language syntax. Great programmers know how to work using many different styles but each programmer may have his/her favorite style. Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a response to many programmers asking for a better syntax we decided to provide more options. Also some of these features are very necessary for Natural Language Programming. Example : We have two commands to change language keywords and operators. ChangeRingOperator + plus ChangeRingKeyword see print Print 5 plus 5 8.3. Generate/Execute Ring Object Files (*.ringo) 97
  • 4. Ring Documentation, Release 1.5.1 ChangeRingOperator plus + ChangeRingKeyword print see We have new styles (Optional) for Input/Output. Example : Put "What is your name? " Get cName Put "Hello " + cName Example : Load "stdlib.ring" Print("What is your name? ") # print message on screen cName=GetString() # get input from the user print("Hello #{cName}") # say hello! We have new styles (optional) for control structures. Example : While True Put " Main Menu --------- (1) Say Hello (2) About (3) Exit " Get nOption Switch nOption Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl Case 2 Put "Sample : using while loop" + nl Case 3 Bye Else Put "bad option..." + nl End End Example : Load "stdlib.ring" While True { print(" Main Menu --------- (1) Say Hello (2) About (3) Exit 8.4. Syntax Flexibility and different styles for I/O and Control Structures 98
  • 5. Ring Documentation, Release 1.5.1 ") nOption = GetString() switch nOption { case 1 print("Enter your name : ") name = getstring() print("Hello #{name}n") case 2 print("Sample : using switch statementn") case 3 Bye else print("bad option...n") } } Check the next chapters:- • Getting Started - Second Style • Getting Started - Third Style • Control Structures - Second Style - May looks like Lua and Ruby • Control Structures - Third Style - May looks like C (uses braces) • Syntax Flexibility Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces. 8.5 New Functions and Changes Changed: • get() function : changed to sysget() • sort() function : can now work on list of objects • find() function : can now work on list of objects Added: • clockspersecond() • CurrentDir() • ExeFileName() • ChDir() • ExeFolder() • varptr() • space() • nullpointer() 8.5. New Functions and Changes 99
  • 6. Ring Documentation, Release 1.5.1 • object2pointer() • pointer2object() Check the next chapters • System Functions • Object Oriented Programming (OOP) • Low Level Functions 8.6 StdLib functions and classes written in Ring Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team The library provide a useful group of new functions and classes Example: Load "stdlib.ring" Puts("Test Times()") Times ( 3 , func { see "Hello, World!" + nl } ) Example: Load "stdlib.ring" Puts("Test Map()") See Map( 1:10, func x { return x*x } ) Example: Load "stdlib.ring" Puts("Test Filter()") See Filter( 1:10 , func x { if x <= 5 return true else return false ok } ) Example: Load "stdlib.ring" See "Testing the String Class" + nl oString = new string("Hello, World!") oString.println() oString.upper().println() oString.lower().println() oString.left(5).println() oString.right(6).println() Example: Load "stdlib.ring" oList = new list ( [1,2,3] ) oList.Add(4) oList.print() Example: 8.6. StdLib functions and classes written in Ring 100
  • 7. Ring Documentation, Release 1.5.1 Load "stdlib.ring" oStack = new Stack oStack.push(1) oStack.push(2) oStack.push(3) see oStack.pop() + nl Example: Load "stdlib.ring" oQueue = new Queue oQueue.add(1) oQueue.add(2) oQueue.add(3) see oQueue.remove() + nl Example: Load "stdlib.ring" ohashtable = new hashtable See "Test the hashtable Class Methods" + nl ohashtable { Add("Egypt","Cairo") Add("KSA","Riyadh") see self["Egypt"] + nl see self["KSA"] + nl see contains("Egypt") + nl see contains("USA") + nl see index("KSA") + NL print() delete(index("KSA")) see copy("*",60) + nl print() } Example: Load "stdlib.ring" otree = new tree See "Test the tree Class Methods" + nl otree { set("The first step") # set the root node value see value() + nl Add("one") Add("two") Add("three") { Add("3.1") Add("3.2") Add("3.3") see children } see children oTree.children[2] { Add("2.1") Add("2.2") Add("2.3") { Add("2.3.1") Add("2.3.2") Add("test") 8.6. StdLib functions and classes written in Ring 101
  • 8. Ring Documentation, Release 1.5.1 } } oTree.children[2].children[3].children[3].set("2.3.3") } see copy("*",60) + nl oTree.print() Check the next chapters: • StdLib Functions • StdLib Classes 8.7 RingLibSDL Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL Example: Load "libsdl.ring" SDL_Init(SDL_INIT_EVERYTHING) win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN) SDL_Delay(2000) SDL_DestroyWindow(win) SDL_Quit() See the RingLibSDL Chapter. 8.8 Demo Project - Game Engine for 2D Games In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring classes to use the engine. But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases Also this would be a good demo project to learn about the language concepts where we build things using Object Ori- ented Programming (OOP) then access the power that we have using declarative programming using nested structures or using natural programming. In this project we selected the first way (declarative programming using nested structures) Example: Load "gameengine.ring" # Give Control to the Game Engine func main # Called by the Game Engine oGame = New Game # Create the Game Object { title = "My First Game" text { x = 10 y=50 animate = false size = 20 8.7. RingLibSDL 102
  • 9. Ring Documentation, Release 1.5.1 file = "fonts/pirulen.ttf" text = "game development using ring is very fun!" color = rgb(0,0,0) # Color = black } text { x = 10 y=150 # Animation Part ====================================== animate = true # Use Animation direction = GE_DIRECTION_INCVERTICAL # Increase y point = 400 # Continue until y=400 nStep = 3 # Each time y+= 3 #====================================================== size = 20 file = "fonts/pirulen.ttf" text = "welcome to the real world!" color = rgb(0,0,255) # Color = Blue } Sound { # Play Sound file = "sound/music1.wav" # Sound File Name } } # Start the Events Loop See the “Demo Project - Game Engine for 2D Games” chapter. 8.9 RingSQLite Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL. Now Ring 1.1 provide native support for SQLite database too. Example: oSQLite = sqlite_init() sqlite_open(oSQLite,"mytest.db") sql = "CREATE TABLE COMPANY(" + "ID INT PRIMARY KEY NOT NULL," + "NAME TEXT NOT NULL," + "AGE INT NOT NULL," + "ADDRESS CHAR(50)," + "SALARY REAL );" sqlite_execute(oSQLite,sql) sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );" sqlite_execute(oSQLite,sql) aResult = sqlite_execute(oSQLite,"select * from COMPANY") 8.9. RingSQLite 103
  • 10. Ring Documentation, Release 1.5.1 for x in aResult for t in x see t[2] + nl next next see copy("*",50) + nl for x in aResult see x["name"] + nl next sqlite_close(oSQLite) 8.10 Better Code Generator for Extensions We are using the code generator (written in Ring) every day to add new libraries to Ring. The generator is used to create RingQt and RingAllegro Also in Ring 1.1 it’s used to create RingLibSDL. more features are added like • Set/Get structure members (numbers & pointers) • Using constants • Better Generated Code See the Code Generator chapter. 8.11 Using Self.Attribute in the Class Region to define new attributes We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes. class Person name # Define name as attribute if it's not a global variable address phone class person2 self.name # Must Define the attribute self.address self.phone 8.12 Using This.Attribute in nested Braces inside the Class Methods We can use nested braces {} while we are inside methods to access another objects, In this case the current object scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In this case we can use This.Attribute and This.Method() to access the object that will be created from the current class. Check the Object Oriented Programming chapter for more information. Also Check the Weight History Application in GUI Development using RingQt chapter. 8.10. Better Code Generator for Extensions 104