What is new in Ring 1.13?¶
In this chapter we will learn about the changes and new features in Ring 1.13 release.
List of changes and new features¶
Ring 1.13 comes with the next features!
New Book by Apress
Ring For WebAssembly
Better Threads Support
Laser Game
Magic Balls Game
MoneyBoxes Game
Matching Game
Pairs Game
Word Game
Tetris Game
Escape Game
Hassouna Course Samples
Ring support in SpaceVim
Better RingQt
Better RingRayLib
RingStbImage Extension
More Low Level Functions
Better Organization
More Improvements
New Book by Apress¶
Apress: Beginning Ring Programming (From Novice to Professional)
URL: https://www.apress.com/gp/book/9781484258323
Gain a gentle introduction to the world of Ring programming with clarity as a first concern using a lot of practical examples.
What You Will Learn
Get started with Ring and master its data types, I/O, functions, and classes
Carry out structural, object-oriented, functional, declarative, natural, and meta programming in Ring
Use the full power of Ring to refactor program code and develop clean program architectures
Quickly design professional-grade video games on top of the Ring game engine
Ring for WebAssembly¶
Ring support distributing applications for WebAssembly (Using Qt for WebAssembly)
Hello World : https://ring-lang.github.io/web/helloworld/project.html
Matching Game : https://ring-lang.github.io/web/matching/project.html
Pairs Game : https://ring-lang.github.io/web/pairs/project.html
Othello Game : https://ring-lang.github.io/web/othello/project.html
Game of Life : https://ring-lang.github.io/web/gameoflife/project.html
Online Form Designer : https://ring-lang.github.io/web/formdesigner/project.html
Better Threads Support¶
Ring 1.13 provides better support for threads
Ring VM is updated to use a memory pool for each thread (Faster)
More tests for RingAllegro threads functions
RingLibUV is updated to be thread safe when using callback functions
Laser Game¶
An implementation for the Laser Game
Magic Balls Game¶
An implementation for the Magic Balls Game
Money Boxes Game¶
See if you can collect the required amount of money by opening boxes!
Matching Game¶
An implementation for the Matching Game
Pairs Game¶
An implementation for the Pairs Game
Word Game¶
An implementation for the Word Game
Tetris Game¶
An implementation for the Tetris Game
Features
New Shapes are selected in random way (Different Shape, Color & Position)
You can move and rotate the shapes, increase the speed.
Score: You get 10 points when completing a row (The game check for nested rows completion as expected)
The game is designed to work forever without user interaction (After Game Over, the Game restarts automatically)
Escape Game¶
Escape from the Snake and collect the Stars to prevent it from growing!
Hassouna Course Samples¶
URL (YouTube): https://www.youtube.com/watch?v=6VIHMyrEilw&list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT
The course samples are added to ring/samples/UsingArabic/HassounaCourse folder
The Rockets sample
Better RingQt¶
The next classes are added to RingQt
QAbstractAxis
QAbstractBarSeries
QAbstractSeries
QAreaLegendMarker
QAreaSeries
QBarCategoryAxis
QBarLegendMarker
QBarSeries
QBarSet
QBoxPlotLegendMarker
QBoxPlotSeries
QBoxSet
QCandlestickLegendMarker
QCandlestickModelMapper
QCandlestickSeries
QCandlestickSet
QCategoryAxis
QChart
QChartView
QDateTimeAxis
QHBarModelMapper
QHBoxPlotModelMapper
QHCandlestickModelMapper
QHPieModelMapper
QHXYModelMapper
QHorizontalBarSeries
QHorizontalPercentBarSeries
QHorizontalStackedBarSeries
QLegend
QLegendMarker.
QLineSeries
QLogValueAxis
QPercentBarSeries
QPieLegendMarker
QPieSeries
QPieSlice
QPolarChart
QScatterSeries
QSplineSeries
QStackedBarSeries
QVBarModelMapper
QVBoxPlotModelMapper
QVCandleStickModelMapper
QVPieModelMapper
QVXYModelMapper
QValueAxis
QXYLegendMarker
QXYSeries
QGraphicsScene
QMovie
Better QtConverter application
This application is used for preparing Qt classes for the Ring Code Generator
Then using the Ring Code Generator we generate RingQt classes
The application user interface is updated for better productivity!
RingQt for Android - Qt Project - Special folders for Ring and RingQt
Using Qt 5.15.0
Better RingRayLib¶
All functions return objects instead of pointers
Support RayMath libary functions
More Samples are ported from RayLib to RingRayLib
Scissor Test
Input Gestures Detection
Bouncing Ball
Rectangle Rounded
Draw Circle Sector
RayLib Logo Animation
First Person Maze
Plane Rotations
RingStbImage Extension¶
New extension support the stb_image library
Example:
# Load the library
load "stbimage.ring"
# Image Information
width=0 height=0 channels=0
# Ring will Free cData automatically in the end of the program
cData = stbi_load("ring.jpg",:width,:height,:channels,STBI_rgb)
# Display the output
? "Size (bytes): " + len(cData)
? "Width : " + width
? "Height: " + height
? "Channels: " + channels
Output:
Size (bytes): 557371
Width : 563
Height: 330
Channels: 3
More Low Level Functions¶
The next functions are added to the Low Level functions
For more information see the Low Level Functions chapter in the documentation
setpointer(pointer,nNewAddress)
getpointer(pointer) ---> nAddress
pointer2string(pointer,nStart,nCount) ---> cString
memcpy(pDestinationPointer,cSourceString,nSize)
Better Organization¶
We have better organization for the project folders and source code files
A folder called (Language) contains the source code and the visual source of the Compiler and the Virtual Machine
The (Extensions) folder (Bindings for C/C++ libraries) - contains also the (libdepwin, android & webassembly folders)
The (Libraries) folder - contains Ring libraries written in Ring itself, contains now (GuiLib & ObjectsLib) too
The (Tools) folder - contains development tools - contains now (Editors, RingNotepad, FormDesigner, etc)
The (Samples) folder - contains Ring samples - a lot of organization is done in this folder
More Improvements¶
- More Applications
Towers of Hanoi
Questions Game
Money Case Game
Rock Paper Scissors Game
Lottery Game
Nim Game
Eight Queens Game
Typing Quiz
Pong 2 Game
Space Shooter Game
- More Samples
ring/samples/Language/HelloWorld folder
ring/samples/Language/ChangeIsNULL folder
ring/samples/Language/Console/customsee.ring
ring/samples/Language/Numbers/decimalscount.ring
ring/samples/Language/EvalInScope/swap.ring
ring/samples/Language/EvalInScope/global.ring
ring/samples/Language/EvalInScope/enum.ring
ring/samples/Language/Endian/endian.ring
ring/samples/Language/VariablePointer/varptr4.ring
ring/samples/Language/VariablePointer/varptr5.ring
ring/samples/Language/DebugCode folder
ring/samples/Language/ClassMethods folder
ring/samples/Language/Lists/CheckHashTableAttribute.ring
ring/samples/Language/RingFileTokens folder (Ring Compiler - Scanner Output)
ring/samples/ProblemSolving/Fib folder
ring/samples/ProblemSolving/ArrayPathDest/solveArrayPathDest.ring
ring/samples/ProblemSolving/PegSolitaire/peg-soli.ring
ring/samples/General/RosettaCode/uniquecharacters.ring
ring/samples/General/RosettaCode/similarcharacters.ring
ring/samples/General/RandomLatinSquares folder
ring/samples/General/FactorialRecursion folder
ring/samples/UsingArabic/RightToLeft folder (Set Layout Direction)
ring/samples/UsingWebLib/Unicode folder
ring/samples/UsingQt/InputMask folder
ring/samples/UsingQt/PlayGif folder
ring/samples/UsingQt/TableWidget folder
ring/samples/UsingQt/ButtonSizeInLayout folder
ring/samples/UsingQt/DateTimeEditFormat folder (Date Picker Control)
ring/samples/UsingQML/sample10 folder (Charts Samples)
ring/samples/UsingQML/sample11 folder (Data Visualization Samples)
ring/samples/UsingQtWASM/colordialog folder
ring/samples/UsingQtWASM/fontdialog folder
ring/samples/UsingQtWASM/filedialog folder
ring/samples/UsingQtWASM/filecontent folder (Download/Upload Files)
ring/samples/UsingRayLib/more/ex4_levelsofcubes.ring
ring/samples/UsingOpenGL/cubeongpu/cubeongpu.ring
ring/samples/UsingOpenGL/cubeongpu2/cubeongpu.ring
Ring Notepad - Output Window - set the buffer size to 1 MB
Ring Notepad - View Menu - Source Code (Full Screen)
Ring Notepad - Keyboard shortcuts for different styles
Ring Notepad - Support saving files in folders contains the dot character
Ring Notepad - Browser Window - Set colors based on the current style
Ring Notepad - Functions List - Display functions defined using “def”
Ring Notepad - Distribute Menu - Distribute for Web Browser using WebAssembly (RingQt)
Form Designer - ToolBox - Larger width in Windows style
Form Designer - ToolBar - New icon for the (Select Objects) button
Gold Magic 800 - Level Editor - Decrease the window size
Super Man 2016 - Increase speed of (Game Over) message animation
Super Man 2016 - Better code for collision detection between SuperMan and Walls
Game Engine - Game Class - Icon property (set the window icon)
Set the window icon for many games developed using the Ring game engine
Type Hints library - Better Code
StdLib - IsMainSourceFile() function - Better Code
StdLib - TimeInfo() function - All TimeList() information are now available
StdLib - Map() & Filter() functions - Support accessing the global scope
StdLib - NewList() function is no longer required - Use the List() function
WebLib - Template() function - Support accessing the global scope
Objects Library - Better API
Natural Library - Better Code
RingLibSDL - Update LibSDL version from 2.0.10 to 2.0.12
RingOpenGL - Better Code (Added GLEW functions)
RingFreeGLUT - Better Code (Added many functions)
RingLibUV - Better Code - Samples that uses the VarPtr() function
RingPM - Support terminals that pass the executable name using UPPER case
Ring2EXE - Distribute for Web Browser using WebAssembly (RingQt)
Ring2EXE - Delete the executable file if we have it in the target folder
Ring2EXE - Always copy files listed in the resources file to the target folder
Ring2EXE - Distribute for Android - Copy Ring and RingQt folders
Ring Tests - Display report summary after running all of the tests
CodeGen - Add Option: PassNullBeforeVMPointer (For C++ Classes)
CodeGen - Using RING_API_ISCPOINTER() instead of RING_API_ISPOINTER()
Ring Compiler - ChangeRingKeyword - Support comments and many commands in the same line
Ring Compiler - ChangeRingOperator - Support comments and many commands in the same line
Ring Compiler - ring_parser.c - Better Code
Ring Compiler - ring_stmt.c - Better Code
Ring Compiler - ring_expr.c - Better Code
Ring Compiler - ring_state.c - Flag for the (Not Case Sensitive) feature
Ring Compiler - Load Command - Support loading libraries from ring/bin/load folder
Ring Compiler - LoadSyntax Command - Support loading libraries from ring/bin/load folder
Ring Compiler - Command: ? <expr> - Clear error message when the expression is missing
Ring Compiler - Better Error Messages
Ring VM - Using lists during definition - Support using the list itself (not only items)
Ring VM - List() Function - Support List(nRow,nCols) to create 2D lists
Ring VM - List() Function - Better Performance
Ring VM - Object File - Save/Restore the files list
Ring VM - ring_vmexpr.c - Better Code - Avoid magic numbers
Ring VM - ring_state_filetokens() - Optional parameter for the (Not Case Sensitive) feature.
Ring VM - ring_state_setvar() - Better Code
Ring VM - int2bytes(), float2bytes() & double2bytes() uses sizeof() function
Ring VM - fclose() function - Display error message if the FILE pointer is NULL
Ring VM - Extensions API - Support local scope of the caller when getting integer pointer