What is new in Ring 1.24

In this chapter we will learn about the changes and new features in Ring 1.24 release.

List of changes and new features

Ring 1.24 comes with the next features!

  • PhD Thesis (Ring and PWCT2)

  • Ring for macOS (Apple silicon)

  • RingPM GUI

  • RingFmt

  • More RingPM Packages

  • More Samples

  • Better Operator Overloading

  • Better StdLib

  • Better Functions

  • Better RingLibCurl

  • Better RingHTTPLib

  • Better Support for Threads

  • Better Documentation

  • More Improvements

PhD Thesis (Ring and PWCT2)

Title: Dual-Language General-Purpose Self-Hosted Visual Language and new Textual Programming Language for Applications

URL: https://arxiv.org/abs/2509.20426

PDF: https://arxiv.org/pdf/2509.20426

Presentation: https://ring-lang.github.io/ref/PhDThesisPresentation.pdf

Ring for macOS (Apple silicon)

Build scripts are revised to support both of macOS (Intel) and macOS (Apple silicon)

Tested using macOS 13 (Intel) and macOS 15 (Apple silicon)

Ring for macOS (Apple Silicon)

RingPM GUI

A GUI tool for Ring Package Manager (RingPM)

We can run it from the Tools Menu in Ring Notepad or using RingPM

ringpm run ringpmgui

Features:

  • Package Installation: Install Ring packages by entering the package name

  • Package Management: View all installed packages in a table format

  • Package Operations: Run, update, and remove installed packages

  • Real-time Output: View command output and progress in real-time

  • User-friendly Interface: Clean and intuitive GUI design

RingPM GUI

RingFmt

RingFmt is a source code formatter and beautifier

Usage:

ringfmt filename.ring [Options]

Options:

-keywords:lower   (-k:l): Convert all keywords to lowercase (default)
-keywords:upper   (-k:u): Convert all keywords to UPPERCASE
-keywords:name    (-k:n): Convert keywords to NameCase (e.g., Class, From)
-indentation:tabs (-i:t): Use tab characters for indentation (default)
-indentation:2    (-i:2): Use 2 spaces per indentation level
-indentation:4    (-i:4): Use 4 spaces per indentation level
-indentation:8    (-i:8): Use 8 spaces per indentation level
-output:print     (-o:p): Print formatted output (default)
-output:write     (-o:w): Overwrite the source file with formatted output
-output:none      (-o:n): No output

More RingPM Packages

The following packages have been added to the RingPM registry.

  • YAML: A YAML parser for the Ring programming language

  • Ring-JWT: JWT library for the Ring programming language

  • Worm: Simple example about Map generation in Ring Game Engine for 2D Games

  • Dialog: Ring bindings for osdialog, a cross-platform library for native OS dialogs

  • TicTacToePlus: An implementation for the TicTacToe game (large board) using RingQt

  • SimpleJSON: Simple Ring extension for the Jansson JSON library

  • WebView: Create beautiful, cross-platform desktop apps using Ring and web technologies

Example:

ringpm install webview

The following screenshots are samples from the WebView package.

WebView Sample 1 WebView Sample 2

More Samples

The next samples are added:

  • samples/General/HTMLExtract

  • samples/General/ClassicArrays

  • samples/UsingLibCurl/DiscordBot

  • samples/UsingLibCurl/test12.ring

  • samples/UsingLibCurl/test13.ring

  • samples/UsingJSONLib/test12.ring

  • samples/UsingJSONLib/test13.ring

  • samples/UsingHTTPLib/test20.ring

  • samples/UsingHTTPLib/test21.ring

  • samples/UsingHTTPLib/test22.ring

  • samples/UsingLibSDL/test11.ring

  • samples/UsingLibSDL/test12.ring

  • samples/UsingLibSDL/test13.ring

  • samples/UsingLibSDL/test14.ring

  • samples/UsingLibSDL/test15.ring

  • samples/UsingLibSDL/test16.ring

  • samples/UsingLibSDL/test17.ring

  • samples/Language/SyntaxFiles

  • samples/Language/ClassMethods/genfunctopassmethod.ring

  • samples/Language/ClassMethods/genfunctopassmethod2.ring

  • samples/Language/ChangeSyntax/newkeywordsinsideclasses.ring

  • samples/General/SmallExamples/TicTacToePlus/tictactoeplus.ring

  • samples/UsingFormDesigner/verticalprogressbar

The next samples are improved

  • samples/UsingThreads/RingThreads

  • samples/UsingRayLib/more/ex5_wavingcubes_threads.ring

The following screenshot shows one of the animation samples (Desktop)

LibSDLAnimationSample

The following screenshot shows the same animation sample on Android

LibSDLAnimationSample

Better Operator Overloading

In this release, we have extended operator overloading support to include compound assignment operators such as +=, -=, *=, /=, %=, etc.

Example:

p1 = new point { x = 10 y = 20}
p1 += 100
? p1

class point

        x y

        func operator cOp, vValue

                if cOp = "+=" and isNumber(vValue)
                        x += vValue
                        y += vValue
                ok

Output:

x: 110
y: 120

Note

Increment (++) and decrement (--) operators are supported as well

Better StdLib

  • isAppCompiled() function: Better implemetation

  • The next functions are added to StdLib:

StringToBase32(cString) ---> cBase32
Base32ToString(cBase32) ---> cString

Example:

load "stdlibcore.ring"

cStr = "Hello World"
? StringToBase32(cStr)

cBase32 = "JBSWY3DPEBLW64TMMQ======"
? Base32ToString(cBase32)

Output:

JBSWY3DPEBLW64TMMQ======
Hello World

Better Functions

  • ring_state_filetokens(): Support getting tokens for scanner commands (optional)

  • ring_state_stringtokens(): Support getting tokens for scanner commands (optional)

  • ring_state_stringtokens(): Better performance

  • Space() function: Don’t accept values over UINT_MAX

  • List() function: Don’t accept values over UINT_MAX

  • List() function: Don’t use blocks for small 1D lists

  • Read() function: Reduce memory usage (improve the performance)

  • FRead() function: Reduce memory usage (improve the performance)

  • FGets() function: Reduce memory usage (improve the performance)

  • SubStr() function: Reduce memory usage (improve the performance)

  • Reverse() function: Reduce memory usage (improve the performance)

  • Shutdown() function: Don’t terminate Ring Main State when used from Ring Sub State

  • Many functions are updated to use RING_API_NEWLIST and RING_API_RETLISTBYREF

Better RingLibCurl

The next functions are added to the extension

* void curl_global_cleanup(void)
* CURLM *curl_multi_init(void)
* CURLMcode curl_multi_cleanup(CURLM *multi_handle)
* CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle)
* CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle)
* List* curl_multi_perform(CURLM *multi_handle)
* List* curl_multi_wait(CURLM* multi_handle, double timeout_ms)
* List* curl_multi_info_read(CURLM *multi_handle)
* List* curl_ws_send(CURL *curl, const char *buffer, double fragsize, int flags)
* List* curl_ws_recv(CURL *curl, double buflen)
* List* curl_ws_meta(CURL *curl)

Better RingHTTPLib

The next changes and improvements are done to the extension

* The file httplib.h is updated (Using 0.23.1)
* Added body() method to HTTPLib_Request class
* Added setStatus() and getStatus() to Server class
* Support more server http methods: PUT, PATCH, DELETE and OPTIONS

Better Support for Threads

  • Ring VM: Better functions for threads support

  • Ring VM: Thread safe reference counting for Ring Lists

  • Ring VM: Thread safe reference counting for List items that wraps C pointers

  • Ring Compiler/VM: ring_list_getitem() - Avoid cache when using threads

  • Ring Compiler/VM: ring_list_setcache_gc() - Avoid cache when using threads

Note

When using threads, all Ring Lists bypass the internal dynamic cache, ensuring safe concurrent reads. Accessing a list for reading does not trigger implicit writes to the cache, making it thread-safe by design.

Better Documentation

The next chapters are added:

  • Deploying Ring Web Applications using Docker

  • Deploying Ring Web Applications to Cloud Platforms

  • Deploying Ring Web Applications to Shared Hosting

The next chapters are improved

  • Using Ring Notepad

  • Using Ring Libuv

  • Using Ring LibCurl

  • Embedding Ring in Ring

  • Building Games For Android

More Improvements

  • Better scripts for building Ring (32bit) and Ring (64bit) on Windows

  • FlappyBird3000: Use the same FPS for Desktop/Android

  • Ring for macOS: Execute reviselibsformacos.sh when running bin/install.sh

  • File: marketing/presentation/Ring.pptx - English revision

  • File: ring/extensions - document.bat - Using ring/documents folder

  • File: language/build/buildzig.bat - Updated and tested using Zig 0.16dev

  • File: extensions/codegen/gendoc.ring - Improved function documentation generation

  • RingNotepad: New window icon

  • FindInFiles: Using setSelectionMode() to enable single-row selection

  • FindInFiles: Using lightguilib.ring instead of guilib.ring

  • FindInFiles: Show the window at the screen centre

  • GameEngine: Clear error message if image/font/sound file doesn’t exist

  • RingJSONLib: Handle a case when the input is an array only

  • RingLibCurl: ring_curl_simple_getinfo_1() function - Remove unnecessary free()

  • RingLibSDL: Enable building the extension using recent MSVC compiler

  • RingLibSDL: Better support for Android (Using recent development tools)

  • RingLibuv: Revise the samples to use destroy_sockaddr_in() function

  • Ring Tests: Add/Use: nIgnoreCount

  • Ring PM: Tests are revised and improved

  • Ring PM: Better format for output messages

  • Ring PM: Error message when the package contains a file that doesn’t exist

  • Ring PM: Disable colors usage in output when the CUILIB_COLORS environment variable is 0

  • Ring VM: ring_objfile_readfromsource() - Better implementation

  • Ring VM: Support handling stack overflow error using Try/Catch

  • Ring VM: Clean memory after runtime errors before returning to the operating system

  • Ring VM: Better format when printing the Byte Code

  • Ring VM: ring_vm_afterscopeidoverflow() - Better Code

  • Ring VM: ring_vm_showerrormessage() - Better error message when using a C function

  • Ring Compiler: Spaces inside multi-character operators (like !=, <=, >=) are not allowed

  • Ring Compiler/VM: ring_list_setcache() is renamed to ring_list_setcache_gc()

  • Ring Compiler/VM: ring_list_insertitem_gc() implementation - Avoid using ring_list_setcache_gc()

  • Ring Compiler/VM: ring_list_getitem() - Avoid cache for small lists (Up to 6 items)

  • Ring Compiler/VM: Check size overflow for Ring Strings, Lists and HashTables

  • Ring Compiler/VM: Check reference count overflow for Ring Lists and List Items

  • Ring Compiler/VM: String functions - Get index as (unsigned int) instead of (int)

  • Ring Compiler/VM: ring_string_set2_gc() implementation - Delete large buffers for empty strings

  • Ring Compiler/VM: ring_list_sortstr_gc() implementation - Reduce memory usage

  • Ring Compiler/VM: ring_hashtable_hashkey_gc() implementation - Better Performance