Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
The Ring programming language version 1.6 book - Part 7 of 189
1. Ring Documentation, Release 1.6
ok
func settitle cValue
if nWindowTitle = 1
nWindowTitle=0
see "Instruction : Window Title = " + cValue + nl
ok
To complete the previous example, use read() to get the content of a file that contains
I want window
The window title = "hello world"
Then use eval() to execute the content of that file!. Also, you can update the methods GetWindow() and SetTitle() to
create Real windows using the GUI Library
3.8 Define Declarative Languages
We learned how to use Natural statements to execute our code and using the same features we can use nested structures
to execute our code.
The next example from the Web library, generate HTML document using the Bootstrap library. No HTML code is
written directly in this example, we created a similar language (just as example) Then using this declarative language
that uses nested structures, we generated the HTML Document.. The idea in this example is that the GetDiv() and
GetH1() methods return an object that we can access using {} and after each object access the method BraceEnd() will
be executed to send the generated HTML to the parent object until we reach to the root where BraceEnd() will print
the output.
Load "weblib.ring"
Import System.Web
Func Main
BootStrapWebPage()
{
div
{
classname = :container
div
{
classname = :jumbotron
H1 { text("Bootstrap Page") }
}
div
{
classname = :row
for x = 1 to 3
div
{
classname = "col-sm-4"
H3 { html("Welcome to the Ring programming language") }
P { html("Using a scripting language is very fun!") }
}
next
}
}
}
3.8. Define Declarative Languages 33
2. Ring Documentation, Release 1.6
The classes that power the declarative interface looks like this
Class Link from ObjsBase
title link
Func braceend
cOutput = nl+GetTabs() + "<a href='" +
Link + "'> "+ Title + " </a> " + nl
Class Div from ObjsBase
Func braceend
cOutput += nl+'<div'
addattributes()
AddStyle()
getobjsdata()
cOutput += nl+"</div>" + nl
cOutput = TabMLString(cOutput)
3.9 Transparent Implementation
Ring comes with transparent implementation. We can know what is happening in each compiler stage and what is
going on during the run-time by the Virtual Machine Example : ring helloworld.ring -tokens -rules -ic
See "Hello, World!"
Output
==================================================================
Tokens - Generated by the Scanner
==================================================================
Keyword : SEE
Literal : Hello, World!
EndLine
==================================================================
==================================================================
Grammar Rules Used by The Parser
==================================================================
Rule : Program --> {Statement}
Line 1
Rule : Factor --> Literal
Rule : Range --> Factor
Rule : Term --> Range
Rule : Arithmetic --> Term
Rule : BitShift --> Arithmetic
Rule : BitAnd --> BitShift
Rule : BitOrXOR --> BitAnd
Rule : Compare --> BitOrXOR
Rule : EqualOrNot --> Compare
Rule : LogicNot -> EqualOrNot
Rule : Expr --> LogicNot
Rule : Statement --> 'See' Expr
==================================================================
3.9. Transparent Implementation 34
3. Ring Documentation, Release 1.6
==================================================================
Byte Code - Before Execution by the VM
==================================================================
PC OPCode Data
1 FuncExE
2 PushC Hello, World!
3 Print
4 ReturnNull
==================================================================
Hello, World!
3.10 Visual Implementation
The Ring programming language is designed using the PWCT visual programming tool and you will find the visual
source of the language in the folder “visualsrc” - *.ssf files and the generated source code (In the C Language) in the
src folder and the include folder.
The next screen shot from the ring_vm.ssf file (Generate ring_vm.c and ring_vm.h)
The next screen shot from the ring_list.ssf file (Generate ring_list.c and ring_list.h)
3.10. Visual Implementation 35
4. Ring Documentation, Release 1.6
3.11 Smart Garbage Collector
Avoid memory problems :-
• Invalid Memory Access
• Memory leaks
• Uninitialized Memory Access
• Dangling pointer
Rules :-
• Global variables always stay in the memory, until you delete these variables using the assignment statement.
• Local variables always deleted after the end of the function.
• The programmer have full control on when to delete the variable from the memory using the Assignment state-
ment.
Example:
aList = [1,2,3,4,5]
aList = "nice"
After the second line directly, The list [1,2,3,4,5] will be deleted from the memory and we will have a string “nice”
• The programmer can call the function callgc() to force running the garbage collector.
• If we have a reference to a variable (when we pass objects and lists to functions), then deleting variables will be
based on reference counting, if no references everything will be deleted, but if we have a reference, the data will
stay in memory.
3.11. Smart Garbage Collector 36
5. CHAPTER
FOUR
WHAT IS NEW IN RING 1.6?
In this chapter we will learn about the changes and new features in Ring 1.6 release.
4.1 List of changes and new features
Ring 1.6 comes with many new features!
• Employee Application
• New Tool: Ring2EXE
• Better Ring For Android
• New Tool : Folder2qrc
• Better Scripts for building Ring
• RingConsoleColors Extension
• RingMurmurHash Extension
• Better Ring Notepad
• Better RingQt
• Better StdLib
• Better RingVM
• Better RingREPL
• Using Tab instead of char(9)
• Using CR as Carriage return
• Using the ! operator as not
• Using && and || operators
• Using ? to print expression then new line
4.2 Employee Application
The Employee application is added to ring/applications
Developer: Ahmed Hassouna
37
6. Ring Documentation, Release 1.6
4.3 New Tool: Ring2EXE
In Ring 1.6 we have a nice tool called Ring2EXE (Written in Ring itself)
Using Ring2EXE we can distribute applications quickly for Windows, Linux, macOS and Mobile devices
Read the chapter “Distributing Ring Applications using Ring2EXE” for more information!
4.4 Better Ring For Android
Ring For Android (using RingQt) is updated to use the Ring Object File ( *.ringo ) instead of using many source code
files ( *.ring )
The next screen shot is an example of building the cards game for Android
We are using cards.ringo instead of cards.ring
If you have large project (many *.ring files) it will use only one *.ringo file.
4.3. New Tool: Ring2EXE 38
7. Ring Documentation, Release 1.6
To prepare Qt project to distribute RingQt application for Mobile use Ring2EXE
Example
ring2exe cards.ring -dist -mobileqt
Example (2)
ring2exe formdesigner.ring -dist -mobileqt
4.4. Better Ring For Android 39
8. Ring Documentation, Release 1.6
4.5 New Tool: Folder2qrc
When we have large RingQt project that contains a lot of images and files, We need to add these files to the resource
file ( *.qrc ) when distributing applications for Mobile devices.
Instead of adding these files one by one, Ring 1.6 comes with a simple tool that save our time, It’s called Folder2qrc.
Example:
folder2qrc formdesigner.ring
We determine the main source file while we are in the application folder, and Folder2qrc will check all of the files in
the current folder and sub folders, Then add them to the resource file after the mainfile.ringo (In our example this will
be formdesigner.ringo)
The output file will be : project.qrc
You can open it and remove the files that you don’t need in the resources!
4.6 Better Scripts for building Ring
Ring 1.6 comes with better scripts for building Ring from source code.
The updates are tested on 32bit and 64bit systems on Windows, Linux (Ubuntu,Fedora) and macOS.
The scripts for Windows are updated to find the Visual C/C++ compiler based on your Visual Studio version.
4.7 RingConsoleColors Extension
Using the RingConsoleColors extension we can easily change the colors used in our console applications
For more information check the RingConsoleColors chapter in the documentation.
4.5. New Tool: Folder2qrc 40
9. Ring Documentation, Release 1.6
4.8 RingMurmurHash Extension
Ring 1.6 comes with the RingMurmurHash extension!
Developer: Hassan Ahmed
Example:
load "murmurhashlib.ring"
key = "Ring Language"
see murmurhash3_x86_32(key, 0, 0) + nl // Output: 1894444853
see murmurhash3_x86_32(key, 0, 1) + nl // Output: 70eaef35
For more information check the RingMurmurHash chapter in the documentation.
4.9 Better Ring Notepad
Ring Notepad comes with the next updates
1. Automatic setting for the Main File when we Run the application (using the Main file buttons).
2. Main File - Automatic save before running.
3. When we run GUI application - don’t change the focus to the text box used for the input in the Output Window.
4. A button and option to run web applications
For Windows users, Ring 1.6 comes with Apache Web server!
We can run any web application from any folder directly without doing any configuration.
4.8. RingMurmurHash Extension 41
10. Ring Documentation, Release 1.6
5. Tools - Operating System - Terminal (Command Prompt) & Files Manager (Explorer).
So we can quickly open the Command Prompt or the Explorer at the application folder.
4.9. Better Ring Notepad 42