Ring++ : Power, Safety, and Portability from Inside Ring

278 views
Skip to first unread message

Mansour Ayouni

unread,
Aug 24, 2026, 10:23:05 PMAug 24
to The Ring Programming Language
Hello Mahmoud and All,

Just shipped Ring++: dependency-free tooling (library and CLI) for
faster, safer, and more portable Ring — no C compiler, ever.

Built from real production work and customer expectations using the Ring
language: a bank in Niger, a restaurant platform in France, and my own
300K-line Softanza codebase.

The same loop can run 75× faster, simply by changing what you hand to a
function.

That's the point: a flexible dynamic language like Ring can also be
performant, statically checked, and compilable to any platform, from any
platform — with ease. And without even leaving Ring!

Based on Mahmoud's design of the low-level VM functions, it gives Ring
programmers a way to opt into pointer-level performance, real static type
checking, and native packaging — all through mechanisms Ring already has,
nothing bolted on from outside.

Website : https://lnkd.in/dpR4vVrT

All the best,
Mansour

Mansour Ayouni

unread,
Aug 24, 2026, 10:25:39 PMAug 24
to The Ring Programming Language
Sorry, I corrected the website link.
---------- Forwarded message ---------


Khaled ABID

unread,
Aug 25, 2026, 3:10:15 AMAug 25
to The Ring Programming Language

Dear Members of The Ring Programming Language Group,
Dear Mansour Ayouni,
Dear Mahmoud Fayed,

I hope this message finds you all in great spirits.

After reading the exciting announcement about the initial release of Ring++ and exploring the documentation of RingServ, I feel compelled to express my deepest gratitude and admiration for your outstanding work.

What truly impressed me is how you translated real-world production needs—from a bank in Niger and a restaurant management platform in France, to the massive 300,000+ lines of the Softanza library—into concrete, practical, and highly effective tools. Achieving a 75-fold performance improvement in loops simply by changing how data is passed is a remarkable milestone that speaks volumes about the ingenuity behind this project.

I am particularly inspired by the project's core philosophy: "Don't fight the VM." Instead of hacking the interpreter, you measured its behavior and leveraged its existing low-level capabilities. Delivering true static type checking, multi-platform native builds, and zero-dependency tooling—all without requiring a C compiler—is a game-changer. It makes Ring significantly more attractive for mission-critical and high-performance applications.

Special thanks go to Mahmoud Fayed for designing Ring with such flexibility and foresight, which made this project possible in the first place. And a huge round of applause to Mansour Ayouni for the brilliant vision, meticulous execution, and tireless effort behind Ring++ and RingServ.

This work clearly demonstrates that Ring is not just an educational or hobbyist language; it is a robust ecosystem ready for serious production environments. I eagerly look forward to your future updates (mobile support and deploying agents sound incredibly exciting!).

Thank you once again for your generosity, passion, and dedication to this community.

Wishing you all continued success.

Yours sincerely,
[Khaled ABID]

Mansour Ayouni

unread,
Aug 25, 2026, 4:05:09 AMAug 25
to Khaled ABID, The Ring Programming Language
Dear Khaled, thank you — this really means a lot.

One credit I want to make sure doesn't get lost: the static-analysis half
of Ring++ runs on Youssef Saeed's tree-sitter-ring grammar, vendored and
built into the CLI — none of the type checking exists without his work.

And everything else traces back to Mahmoud's own design; Ring++ just
noticed what was already there and built small, honest tools around it.

Glad it's useful. More to come.

Mansour

--

---
You received this message because you are subscribed to the Google Groups "The Ring Programming Language" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ring-lang+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/ring-lang/9dfdd45a-ed54-4a70-84bf-c783dffd6785n%40googlegroups.com.

Khaled ABID

unread,
Aug 25, 2026, 9:58:38 AMAug 25
to The Ring Programming Language

Dear Dr. Mahmoud Fayed, creator of the Ring language,
Dear Mr. Mansour Ayouni, developer of Ring++ and RingServ,
Dear Mr. Youssef Saeed, core developer and package maintainer,
And the esteemed Ring team,

Peace be upon you,

After reading the wonderful announcement about Ring++ and exploring the richness of the Ring ecosystem, I am writing to express my deepest gratitude and admiration for your exceptional work.

I am truly impressed by how real-world needs from actual production projects have been transformed into concrete, practical, and highly effective tools. Achieving a performance leap of up to 75-fold is a remarkable milestone that speaks volumes about the ingenuity behind this project.

While I thank Mr. Mansour Ayouni for his clear vision in both Ring++ and RingServ, I would like to specifically acknowledge Mr. Youssef Saeed for his pivotal role in enriching the language. His contributions—which include over 22 production-ready packages covering critical areas such as security, data analysis, desktop and mobile application development, along with Rust bindings for Ring, Docker images, and GitHub Actions to streamline project builds—all of this reflects the spirit of innovation and collaboration that defines the Ring community.

Special thanks go to Dr. Mahmoud Fayed for designing Ring with such flexibility and foresight, which made all of these projects possible, and to everyone who contributes to this growing ecosystem.

Ring++, RingServ, and the new libraries added by Youssef Saeed clearly demonstrate that Ring is not merely an educational or hobbyist language, but a robust platform fully capable of competing in real production environments. Your work opens new horizons for developers and showcases what can be achieved when passion meets purpose.

We eagerly look forward to your future updates and wish you continued success and prosperity.

With sincere appreciation and respect,

Khaled ABID

Mahmoud Fayed

unread,
Aug 25, 2026, 10:00:31 AMAug 25
to The Ring Programming Language
Hello Khaled

Thanks for your kind words :D

Greetings,
Mahmoud

Bert Mariani

unread,
Aug 25, 2026, 10:25:24 AMAug 25
to The Ring Programming Language
Hello Mansour

I read your attached docs and descriptions.
Trying to understand the Ring++

Will it run a GUI program
     - C:\ring\applications\knighttour\AA-KnightTour.ring

How does it compare in Speed with attached Plain Ring code
     - Queens-N-Timing.ring    

Does it handle true Arrays.

========================
Queens-N-Timing.ring
Enter value of n : 12
Possible placements for: 12
End   millisec: 26390
Start millisec: 2945
Total millisec: 23445
Total Seconds : 23.45
Count Queen: 841989  Count Place: 10103868

Exiting of the program...
Enter to Exit :
=======================
Queens-N-Timing.ring

Mahmoud Fayed

unread,
Aug 25, 2026, 10:30:02 AMAug 25
to The Ring Programming Language
Hello Mansour

>> "Just shipped Ring++: dependency-free tooling (library and CLI) for
faster, safer, and more portable Ring — no C compiler, ever."


Thanks for sharing this wonderful project, It's very useful and important :D

I think RingPP is trying to achieve three goals, for me I am interested in only one of these goals (Safety) because it tries to fill a known/real gap. 
And this goal alone means RingPP is a GREAT PROJECT FOR ME 

The other two goals, I guess we have different solutions for them. 
So, it's like providing another choice, which is good of-course but Ring eco-system still growing and filling gaps is more important than providing more choices.
For example (RingScript) fills a real gap - VERY IMPORTANT 
while (RingServ) is another choice - Good but not very important 
Note: This is just my opinion (Could be right/wrong - Not necessary a fact)

For example, by looking at RingScript, I directly choose it 
But by looking at RingServ, I started to ask myself (we already have Bolt framework which is developed by Youssef who already focus on back-end web development)
While before Bolt we have RingHTTPLib (but it's just a wrapper to a C++ library, not complete framework like Bolt and web development is not what I focus on) So Bolt wins in my opinion.
Note: (Youssef improved RingHTTPLib before creating a better choice like Bolt, it's a concept/idea, try to use/improve what already exist before creating something else).

What I mean, I am not trying to say to you what to do, you have a great plan, real business needs, and you are taking the right decisions in this direction but I feel that your usage of AI encourage you to do MORE and go in the direction of (new projects) instead of adapting something that already exists. (I am not citing AI usage, I am just sharing with you what I noticed after using AI, it encouraged me to do this too.)

More Notes:  

(1) The reported problem in stdsecurity is fixed in this commit: Update libraries/stdlib/stdsecurity.ring - Revise encrypt_ex() and de… · ring-lang/ring@7890ea5

(2) With respect to Ring Object files (*.ringo) if we have ring.exe and renamed it to myapp.exe and we have myapp.ringo in the same folder, this myapp.exe will run myapp.ringo automatically. It was an old way for distributing apps before Ring2EXE, RingPM, and other tools: Distributing Ring Applications (Manual) — Ring 1.27.0 documentation

(3) When distributing apps/games on Steam I did experiments with different ways
* GoldMagic800 - Uses Ring2EXE (released in 2018):  Gold Magic 800 on Steam 
* PWCT2 (released in 2023) - Uses two folders, one folder contains Ring runtime (including ring.exe, ringw.exe, etc.) and another folder contains PWCT2 files (including pwct.ringo) 
And we have a launcher executable that runs pwct.ringo from PWCT2 folder using ringw.exe from ring folder: Programming Without Coding Technology 2.0 on Steam

Later I decided to follow what I did in PWCT2 because it's very easy way, I prefer the Ring folder one time (starting from Ring lightweight release and using RingPM to install the required packages) then I copy this folder for similar projects (that uses the same libraries like RingRayLib for example)

This way (two folders, Ring folder, app folder) enables fast updates to the app (without updating Ring runtime) and fast updates to (Ring version) without updating the app.

But I used this way only for distributing apps/games for Windows

For cross platform distributions I think our friend Youssef Saeed did a great job in Ring2EXE++:  ysdragon/ring2exe-plus: Ring2EXE (Plus) tool for the Ring programming language 

Greetings,
Mahmoud

Mansour Ayouni

unread,
Aug 25, 2026, 2:17:05 PMAug 25
to Mahmoud Fayed, The Ring Programming Language
Hello Mahmoud,

Thank you very much for this constructive and insightful feedback. I really appreciate you sharing your perspective so openly.

For me, AI represents a huge opportunity to design and build the toolset I need for my way of thinking and working, without having to wait for someone else to do it for me.

RingScript is a good example. I proposed it a long time ago and initially tried to develop it as an open-source proof of concept, hoping to encourage people with C and WebAssembly expertise to take it further. It was not a priority at the time, which I completely understand.

Now, with the latest AI models, namely Claude Fable of Anthropic, I was able to build it myself in about three months.

The same reasoning applies to the other tools I am building. They may overlap with existing solutions in some areas, but they differ in their roles, priorities, and design philosophy.

That said, I fully recognise that my direction is quite opinionated. A good example is my decision to remove Qt categorically from all my libraries and tools, including Softanza.

But I also see this diversity as one of Ring's strengths. Ring has become a beautiful garden with thousands of flowers, nurtured by a kind community and engaged contributors. I see my work as one of those flowers rather than as a replacement for the others.

Thank you for Ring!
All the best,
Mansour

--

---
You received this message because you are subscribed to the Google Groups "The Ring Programming Language" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ring-lang+...@googlegroups.com.

Mansour Ayouni

unread,
Aug 26, 2026, 5:26:41 AMAug 26
to Mahmoud Fayed, The Ring Programming Language
Hi all,

A surprise worth knowing about, especially if you have ever used the
old way of distributing an app (copying ring.exe next to a .ringo file).

THE SYMPTOM

Put a file named ring.ringo in a folder. From then on, every ring
command you run in that folder runs THAT file, and ignores what you
typed:

    $ ls
    hello.ring   ring.ringo

    $ ring hello.ring
    <runs ring.ringo, not hello.ring>

    $ ring hello.ring -go
    <runs ring.ringo again. No .ringo is generated for hello.ring>

No error, no warning, and ring exits with code 0 as if all was well.

WHY

When Ring starts, it first looks in the current folder for a file
called ring.ring, then one called ring.ringo. If it finds either, it
runs it immediately -- before it even looks at the file name you typed
on the command line. Your arguments are never read.

This is the mechanism behind the manual distribution method in the
documentation, and it works well for that. The surprise is only that
it also applies when you did not intend it.

WHEN YOU WOULD HIT THIS

You prepared a folder for distribution, or you experimented with the
method, and a ring.ringo stayed behind. Days later you work in that
folder and ring quietly runs the old program instead of your file.
Because the name is generic, nothing about it looks suspicious.

HOW TO AVOID IT

Do not keep a file named ring.ringo (or ring.ring) in a folder where
you also develop. Keep distribution folders separate from working
folders. If Ring seems to ignore your file name, list the folder and
look for those two names first.

Two details I checked, in case they help:

  - The name must be exactly ring.ringo. Renaming ring.exe to
    myapp.exe does NOT make it look for myapp.ringo -- I tested this;
    it shows the usage screen.
  - The check is on the folder you run FROM, not the folder where the
    exe lives.

For anyone who wants the exact place: ring_state_main() in
language/src/state.c, the "Check Startup files" block, which runs
before the loop that reads command-line arguments.

I am not proposing a change. If it were ever considered, one option
would be to skip that check when arguments were given.

Thanks to Mahmoud for pointing me to the manual-distribution chapter --
it corrected something I had published in Ring++ site, and I have fixed my docs in the project GitHub repo.

Mansour

Youssef Saeed

unread,
Aug 26, 2026, 3:25:40 PMAug 26
to The Ring Programming Language
Hello Mansour,

Thanks for sharing your work on Ring++.

As Mahmoud noted, exploring safety and static checks is an interesting direction. Wishing you the best with the project.

Best regards,
Youssef

Mansour Ayouni

unread,
Aug 26, 2026, 4:09:29 PMAug 26
to Youssef Saeed, The Ring Programming Language

Hello Youssef,

Thank you very much!

I made Ring++ to address three aspects that constrained me in my real-world Ring projects:

  1. Type safety for a large library like Softanza — the aspect that you and Mahmoud found particularly useful.

  2. Performance — the top concern when working with large datasets and computationally intensive algorithms in Ring.

  3. Full portability of Ring programs through a true native build system— from any platform to any platform, without complexity, including desktop OSs (Windows, Linux, and macOS), WebAssembly, mobile devices, and Linux-based microcontrollers (Raspberry Pi, ESP32, etc.).

That’s why the solution provides both a Ring library (ringpp.ring) and a Zig-based CLI that builds a Ring program for the target platform without relying on any C compiler — no MSVC, GCC, or anything else. And for WebAssembly, without relying on Qt like we do currently in Ring, not even Emscripten, the LLM-based compiler!

Today, I just added Android support to Ring++ native build system. The photo shows a Ring VM running, with a Ring program running ontop of it, fully and natively on Android, without requiring Qt or the Qt Creator toolchain. With a simple:

$ ringpp deploy --target android

Your Ring program is turned into an APK in seconds.

image.png

All three aspects are strategically important to the project, and they work together to simplify and modernize the entire Ring development experience.

I hope Ring programmers will see that value, try the three facets of Ring++ in their own projects, and experience the same fun and power that I feel when using it in mine.

Best regards,
Mansour


Youssef Saeed

unread,
Aug 26, 2026, 4:45:06 PMAug 26
to The Ring Programming Language
Hello Mansour,

Thank you so much for sharing the progress on Ring++. I really admire the dedication and the huge effort you're putting into modernizing the toolchain! The way you used Zig for the build automation without relying on Gradle or the NDK is genuinely a very clever piece of engineering.

While reading through the details and the code, I noted a few minor technical points I thought I’d share with you:

1. Emscripten: I noticed a small typo where it was mentioned as an LLM. It is actually an LLVM-based (Low-Level Virtual Machine) compiler.
2. ESP32: Just a quick thought regarding the ESP32—since it is a microcontroller, it typically runs on FreeRTOS or bare-metal rather than a Linux environment.
3. Android Integration: The Zig packaging workaround is brilliant! However, from an Android architecture perspective, running the static Linux CLI binary via Java's ProcessBuilder and capturing stdout in a TextView is a nice proof-of-concept, but it might face severe limitations for real-world GUI Android apps. Real native integration (for UI, touch handling, and graphics) usually requires a shared library built with Bionic libc via JNI or NativeActivity. Also, on modern Android versions, executing binaries via extractNativeLibs often hits strict SELinux and Google Play policy restrictions.

I hope you find these observations useful. Wishing you continued success and the best of luck with refining the project!

Best regards,
Youssef

Mansour Ayouni

unread,
Aug 26, 2026, 6:46:56 PMAug 26
to Youssef Saeed, The Ring Programming Language
Hello Youssef,

Your observations are all accurate. And deserve attention.

As you may have noted, I excluded any GUI parts and Ring++ only compiles only brute Ring algorithms representing the business logic and data flow layers of the app on the device.

This is a design rule since the GUI facet is delegated to web technologies (HTML, CSS, and if necessary JS).

I use this paradigm in practice in my restaurant management platform. Here is an example of a mobile app running the same on Android and iOS (using Capacitor to package the webapp as an APK):

image.png

Until of course Softanza's own GUI framework is finalised, which provides the power of QML without Qt, and runs on any platform (desktop, web, and mobile). Here is an example :

image.png

And this is an other one (GPU-powerd graphics + GUI forms):

WhatsApp Image 2026-08-13 at 08.39.15.jpeg

All the best,
Mansour

Bert Mariani

unread,
Aug 26, 2026, 11:15:50 PMAug 26
to The Ring Programming Language
Hello Mansour

Interesting last couple of postings !
  1. Type safety .

  2. Performance — computationally intensive algorithms in Ring.

  3. Full portability of Ring programs through a true native build system.

Based on Performance, how does the Queens-N-Timing.ring   compare in speed
Based on Full Portability, what does   C:\ring\applications\knighttour\AA-KnightTour.ring   look like
Does it handle true Arrays ?

Thanks
Bert Mariani

Mansour Ayouni

unread,
Aug 27, 2026, 3:51:48 AMAug 27
to Bert Mariani, The Ring Programming Language
Hello Bert,

Thank you for your kind message.

When I designed Ring++, I did not make it to accelerate existent GUI applications, nor to replace anything in low level Ring.

Before elaborating an idea of any tool, one should read its website then explore its documentation and code in the Github repo.

If you can't capture its design philosophy, experiment with it from its designer point of view, you can't use it.

So to answer your questions precisely:
  1. Accelerating  Queens-N-Timing.ring : Take it as an exercise, after studying Ring++, and see where you can use it
  2. Your  AA-KnightTour.ring : No, Ring++ and all my Softanza projects don't use Qt. Read my answer to Youssef above.
  3. Handling true arrays : Ring already offers low level VM functions that talk to C arrays. Ring++ just uses them.
Best,
Mansour

Mansour Ayouni

unread,
Aug 27, 2026, 3:58:20 AMAug 27
to Bert Mariani, The Ring Programming Language
Hello  Kamlesh,

I am happy you found Ring++ useful.

Let's focus on it for the meantime, along with its two sister projects : RingServ (Ring on the Server) and RingScript (Ring on the Browser). Currently, I'm using them in real projects along with Ring++, so you can also do.

The GUI part in Softanza is under development. And I'll share it with you when it is finalised. The goal is to provide in Ring the same ease of use of the declarative RingQT library made by Mahmoud, or the RingQML library made by Youssef, but without Qt, and working for desktop, web and mobile from the same code.

All the best,
Mansour

Mansour Ayouni

unread,
Aug 27, 2026, 7:24:07 AMAug 27
to kamlesh patel, The Ring Programming Language
Take sometime to read the website and the documentation in the Github repo.

you will find practical exemples tou can leran from.

all the best
mansour

Le jeu. 27 août 2026, 12:18, kamlesh patel <patel.h...@gmail.com> a écrit :
Sir,

Ringpp install H:\Ring\tools\ringpm\packages\ringpp-0.9.
how to use Ringpp.

Regards
kamlesh


On Thu, Aug 27, 2026 at 2:24 PM Mansour Ayouni <kalid...@gmail.com> wrote:
Hello Kamlesh,

You should just add from mayouni like this:
H:\Ring>ringpm install ringpp from mayouni

I will correct the info on the website and the github page.

Thank you.
Best,
Mansour

On Thu, 27 Aug 2026 at 09:19, kamlesh patel <patel.h...@gmail.com> wrote:
Sir,
Thank you for the reply.

I get an error when I install ring++.

H:\Ring>ringpm install ringpp
Installing ringpp (master)
Error(10): Package doesn't exist

Regards
Kamlesh

Bert Mariani

unread,
Aug 27, 2026, 11:06:49 AMAug 27
to The Ring Programming Language
Hello Mansour

I read the documentation  and website , but did not understand it clearly. 
It was AI generated 

On the point that "Loops are 75x faster" and  "computationally intensive algorithms in Ring"
The Queens-N-Timing.ring is pure Ring text code and algorithm.
For what I read Ring++ should have no problem converting/translating and running it.
Hopefully faster.

I also understand that AA-KnightTour.ring   uses QT GUI   which is not supported
Can it be converted/translated  by Ring++  to WebAssembly,  Browser, JavaScript etc 
Then run to show the same visual output and behaviour in a browser.

As for Ring VM, it does not support true Arrays. 
You have to call a C-code routine to handle Arrays.
Does Ring++ support true Arrays

Regards
Bert Mariani

Mahmoud Fayed

unread,
Aug 27, 2026, 12:37:40 PMAug 27
to The Ring Programming Language
Hello Bert, Mansour

>> "I read the documentation  and website , but did not understand it clearly. 
It was AI generated 
On the point that "Loops are 75x faster" and  "computationally intensive algorithms in Ring"

In reality, the project name & documentation may lead to misunderstanding and doesn't highlight the most important information/aspects of the project as a good tutorial. 

It's not a version of Ring (to call it Ring++/RingPP because using ++ after a language name let us remember C++ and C) 

Our friend Bert questions reflects that after he checked the docs, He thinks Ring++ is a faster version of Ring and could speed his programs and THIS IS NOT THE REALITY OF THE PROJECT.

The project contains three components (As I understand it - I could be wrong)
(1) Ring library that could increase the performance of some string processing operations (By using C pointers and Ring low-level functions instead of passing Ring strings by value)
* The mistake in the documentation is talking about Ring performance in general instead of this specific use-case
* While it's a useful library (And I am happy that it does exist), in general I prefer using C/C++/Rust/etc. extensions when performance is a priority.
(2) A tool to check Ring programs (Names, Parameters count, Type safety, etc.) - IMHO (The most important feature in this wonderful project) - But even this feature miss good tutorials/examples. Such a tool should be number 1 feature in the project (Just my opinion).
(3) A tool to distribute programs (I don't feel that I need it, since we have many other tools like Ring2EXE, RingPM, Ring2EXEPlus, etc.) but my opinion doesn't matter, if our friend Mansour feels the need to develop something and he did it, shared it, this is useful to the community in general because others may find it useful. But in general, I hope that we focus on the big/important goals that fills very clear/real gaps, and I am not saying this to attack the project, I am saying this to support one of the project goals and say (The safety goal is very important and I like it - KEEP UP THE GREAT WORK).

Greetings,
Mahmoud

Mansour Ayouni

unread,
Aug 27, 2026, 2:04:24 PMAug 27
to Mahmoud Fayed, The Ring Programming Language

Hello Mahmoud,

Thank you very much for your thoughtful interaction.

Please be assured that I don't see this as an attack, but rather as a valuable opportunity to learn from your reflections and to have a serious discussion, as we always do, with mutual respect.

I am particularly concerned with clarifying two main points you raised:

  1. That the name could be misleading, suggesting another version of Ring. That was not my intention.
  2. That the documentation presents performance as a general claim. That was not what I designed the documentation to communicate.

Point 1:

Ring++ evokes the performance of C, the static analysis of C++, and the ability to natively build Ring programs with these capabilities.

These three criteria are the three goals of the project, directly addressing the three constraints I encountered during two years of using Ring in customer-facing projects.

The name is short and catchy, but more importantly, the "++" is meant in the same spirit as when we write i++ for a counter: does the counter change its type? No. It is still an i, simply with a greater value.

Point 2:

I'm sorry if the documentation gave a different impression. The website and documentation state the opposite, from the very first sentence through every page, document, and code example:

image.png

The GitHub README.md also clearly states that Ring++ creates nothing new, but instead builds on what Ring already provides:

image.png

That being said, I will take another careful look at the wording and see how I can make the intent even clearer.

All the best,
Mansour


Mahmoud Fayed

unread,
Aug 27, 2026, 2:54:19 PMAug 27
to The Ring Programming Language
Hello Mansour

You are welcome :D

>> "That being said, I will take another careful look at the wording and see how I can make the intent even clearer."

Very nice direction :D

Greetings,
Mahmoud

Mansour Ayouni

unread,
Aug 28, 2026, 5:44:01 AMAug 28
to Bert Mariani, The Ring Programming Language
Hi Bert,

All that I am willing to say, in no way diminishes my consideration for you, or my deep respect for you as a friend and as one of the main Ring contributors, whom we all value and appreciate.

So, let's be serious. You did not understand the documentation because you did not understand it, not because it was made with AI. Five students from the ESPA-MT school in Niamey participated in its creation, and they are all perfectly fine with understanding it. Who would I take as a pedagogical reference: them or you?  

Don't assume that writing documentation with AI is an easy thing, or that anyone can simply generate meaningful documentation with it. If you are against AI, that is your full right, but please don't let your lack of experience in using it become the norm for evaluating other people's work, especially when that work is the result of a painful and long process of building real expertise in using it.

Regarding your programs and examples that you take as a baseline for evaluating anything and any project done here, including mine, please note that they do not necessarily expose the definitive criteria required to be used as such a baseline for any project. We simply may have different criteria and priorities forged from real world customer pains, not from examples made for fun.

If you read carefully what Ring++ is about, you will understand that your Queens-N-Times program has little to do with string copying. It is a fully numerical program, which is not what I made the tool for.

Concerning the GUI program, I will not do it again and I don't have time for it. I already created a similar example for you in RingScript, with the GUI part made in HTML/CSS, and you focused on nothing other than asking me to make the GUI stretchable like in desktop Windows!

image.png

My goal was to help you, sincerely, understand how RingScript fits into the flow of developing a web-based app that runs inside the browser, not to build a Photoshop-like tool that stretches windows when they are resized—something that simply does not belong to the web discipline at all.

I am always willing to listen, learn, and help, from you and from anyone here in the group. I already learn something every day from young students in Niger who have just started their journey in programming. But please don't think that your concerns are the center of everything, or that they must be addressed before other people's work can receive recognition.

All the best,
Mansour

Mahmoud Fayed

unread,
Aug 28, 2026, 8:03:51 AMAug 28
to The Ring Programming Language
Hello Mansour

>> "All that I am willing to say, in no way diminishes my consideration for you, or my deep respect for you as a friend and as one of the main Ring contributors, whom we all value and appreciate."

While this introduction let my guess the direction of your message to our friend Bert, and that you want to show a specific point of view (technical, not personal), I was not happy reading what comes after this message, and it looks like mixing technical topics together which I read as (personal, not technical).

 >> "So, let's be serious. You did not understand the documentation because you did not understand it, not because it was made with AI."

I don't understand it too; I get an idea about what the project does by (READING THE SOURCE CODE) which means the documentation is not good
The idea from the documentation is to get the basic knowledge about the projects and how to use it without reading the source code

When we say the documentation is bad then say (because it was made with AI) we are giving you as a friend a reason for why the documentation is bad
We are saying (It's not your fault), and (it's AI fault)
But when you say (The documentation is good) then you are telling as (AS READERS - AND EACH READER IS FREE TO EXPRESS HIS OPINION) that (IT'S YOUR FAULT)

We don't accept this for what you write, because as someone who enjoyed reading your amazing/great book (Beginning Ring Programming), I know you are talented writer who write in a professional way, provide deep experience, easy to understand and clear content. And your messages in the group say this too, YOU ARE VERY PROFESSIONAL IN WRITING AND EXPERSSING IDEAS.

>> "Five students from the ESPA-MT school in Niamey participated in its creation, and they are all perfectly fine with understanding it. Who would I take as a pedagogical reference: them or you?"

Of-course what matters in this context is Bert opinion and my opinion (BECAUSE WE ARE THE READERS AND WE DON'T PARTICIPATE IN IT'S CREATION)
It's expected from students who help in creating a project (TO KNOW MORE ABOUT IT THAN ANY READER WHO STILL DISCOVERING WHAT THE PROJECT DOES) 

>> "Don't assume that writing documentation with AI is an easy thing, or that anyone can simply generate meaningful documentation with it. If you are against AI, that is your full right, but please don't let your lack of experience in using it become the norm for evaluating other people's work, especially when that work is the result of a painful and long process of building real expertise in using it."

Bert messages don't say he is against AI usage, Bert message says the documentation is not good, and he expects that the reason is AI usage (Because this shouldn't be your mistake because we trust your writing skills and like it. BERT REVIEWED YOUR BOOK AND ACCEPTING TO REVIEW YOUR BOOK MEANS HE RESPECT YOU AS A WRITER).

>> "Regarding your programs and examples that you take as a baseline for evaluating anything and any project done here, including mine, please note that they do not necessarily expose the definitive criteria required to be used as such a baseline for any project. We simply may have different criteria and priorities forged from real world customer pains, not from examples made for fun."

This is the first bad part in the message, saying "from examples made for fun" because the sample measure the performance of a different (feature) is not scientific/technical. 

>> "If you read carefully what Ring++ is about, you will understand that your Queens-N-Times program has little to do with string copying. It is a fully numerical program, which is not what I made the tool for."

* What you are saying here is what is not good in the documentation. The documentation says the project improves Ring performance, and doesn't say the project improves only the performance of some string processing programs. i.e. raising expectations is a known mistake in marketing (It's better to promise less and provide more). 

* Queens-N-Times 

>> "Concerning the GUI program, I will not do it again and I don't have time for it. I already created a similar example for you in RingScript, with the GUI part made in HTML/CSS, and you focused on nothing other than asking me to make the GUI stretchable like in desktop Windows!"

This is the second bad part in the message
* We don't list what we contributed/did and say we did this for others or for a friend, the main concept behind contributing to open-source projects is our desire to learn and share knowledge/work and send/receive contributions. What you said is like playing a chess with a friend then saying to him (I PLAYED CHESS WITH YOU AND I WILL NOT DO IT AGAIN). it's like cutting relationships and contributions to open-source or sharing knowledge doesn't work like this. YOU HAVE FULL CONTROL ON YOUR TIME AND WHEN TO SHARE YOUR KNOWLEDGE, i.e. no pressure, it's not a job. if you have the time and want to contribute, just do it. if you are busy or not interested or want to do something else, just do that. everyone in the group takes breaks between his contributions.
* When a friend mentions a feature like (make the GUI stretchable like in desktop windows), it's not a good idea to mention this as a bad thing, it's software development and everyone is free to think about how the software should behave and think about ways to achieve what he wants to do (IT'S ONE OF THE CORE FUN IN SOFTWARE DEVELOPMENT)

>> "But please don't think that your concerns are the center of everything, or that they must be addressed before other people's work can receive recognition"

This is the last/third bad part in the message

Summary: You did great contributions to the Ring community and shared wonderful projects in the group during the last 30 days which is very nice/amazing, and I like this direction and IMHO this is what I hope you did with Softanza (sharing it as many separate libraries), and I like that you are using AI to increase your productivity, it's a double sword edge. But your latest message just says you are under huge work pressure, and this is expected after these wonderful achievements. JUST DON'T FEEL THIS PRESSURE, TAKE THE REST THAT YOU NEED BETWEEN WORKING SESSIONS, READ/RESPOND TO THE MESSAGE IN THE GROUP ONLY WHEN YOU FELL THAT THIS WILL INCREASE YOUR ENERGY AS GOOD TIME NOT AS A PRESSURE. 

Greetings,
Mahmoud

Mansour Ayouni

unread,
Aug 28, 2026, 8:55:01 AMAug 28
to Mahmoud Fayed, The Ring Programming Language

Hello Mahmoud,

Your answer is amazing and completely off the target of what my message raised as a concern.

It's just an opinion and personal projection you made on each point you raised, but I will not comment on them one by one to keep us all focused on what is more important.

Your mistake is that you assumed it was a personal attack on Bert, although I prevented it in the intro. So, my question, frankly, to you: did you believe me or not? If you don't, and build all that narration on a false proposition, this is your fault, not mine.

I do really mean what I said about my respect for Bert, and don't feel like I'm being attacked at all about his remark concerning the documentation, nor about your unilateral decision to trim the Ring++ project scope to just one dimension out of three (the description of the package in the RingPM registry). They are all fine, and keep discussion open and healthy.

This being said, I know the direction I took to rethink some of the foundations of the Ring project itself (removing any dependency on any library other than the ones that are vendored inside the tools, or that rely on Softanza Engine one-stop-binary alone) could raise a strategic question about the alliance between what I do with Ring and the Ring project.

This is a fair question which I'm totally aware of, and that's why I carefully managed to adapt Ring itself, without fighting agains its VM or making any changes to it, to solve some of the concerns my customers raised about adopting it: performance, safety, and portability without complexity.

I did this and started using it successfully.

I thought this would be received with enthusiasm and strategic support from you, since this solves real-world limitations of Ring. You may recognize only one of them, as you did with static analysis Ring++, but this does not change the reality of the customers I have in front of me, whose decision to adopt Ring depends on all three of them.

Ignoring this reality is a strategic error I don't hope you will make, and I'm confident that you have all the intelligence and strength of technical personality needed to help you review your position, for the good of Ring, which we all love and support.

This being said, I'm happy we reached this point that makes my decision about the future direction I should take, ethically, easier for me. And I will let you know through a final and last message I will write in this group soon.

Thank you very much, Mahmoud. I love Ring and will continue to support it as I've done from the first day. Certainly in other contexts and using other forms, that keep our strong human ties and intellectual friendship.

And I owe the same feeling to Bert (to whom I express my sincere apologies if he ever felt attacked by my message) and to the other team members, one by one, and I hope we will stay in touch.

Sincerely, and please read it again... Sincerely,

Manssour


Mahmoud Fayed

unread,
Aug 28, 2026, 9:53:16 AMAug 28
to The Ring Programming Language
Hello Mansour

>> "did you believe me or not?"

Of-course I believe you, you also don't need to ask such a question.

>> "nor about your unilateral decision to trim the Ring++ project scope to just one dimension out of three (the description of the package in the RingPM registry)"

I did that to keep the description short in the packages list web page + To focus on the killer feature of the project

I will say it in another words to see how I read what this project provides (Hey, this project is a gift contains $1,000,000 and new mobile and 10 apples)
So, I changed this to (This project is a gift contains $1,000,000)
Here I am not saying a new mobile or 10 apples are a bad thing or I don't like them.

>> "This being said, I know the direction I took to rethink some of the foundations of the Ring project itself (removing any dependency on any library other than the ones that are vendored inside the tools, or that rely on Softanza Engine one-stop-binary alone) could raise a strategic question about the alliance between what I do with Ring and the Ring project."

I don't see any problem in this direction or any other direction too. 
As you know, In Ring we provide two releases
(1) Large release with many extensions/libraries/samples/apps
(2) Lightweight release with only Ring Compiler/VM & RingPM

So, picking the second choice, is wise if this what you need

Also, remember Ring is free-open source, even developing a new version of Ring (or another language influenced by Ring) is something that we encourage people to do and we provide Ring as open source (MIT license) so people don't start from scratch (if Ring source code helps them).

Our friend Mounir IDRASSI provided MonoRing (a Ring distribution) and we encouraged that direction
Our friend Ilir Liburn provided faster versions of RingVM in the past and is currently working on new version with static-typing, and we encouraged that direction too.

So, feel free to pick any direction you like, you have our support.

>> "I thought this would be received with enthusiasm and strategic support from you, since this solves real-world limitations of Ring. You may recognize only one of them, as you did with static analysis Ring++, but this does not change the reality of the customers I have in front of me, whose decision to adopt Ring depends on all three of them."

You have my support as said before (I LIKE THE PROJECT). Asking from you to revise the documentation is a type of normal feedback 

For example, the project README starts with
 Ring++

Ring, faster, safer and more portable — without ever leaving Ring


Any reader after reading this (Ring++), (Ring, faster) will understand that this is a new version of Ring that increase the speed of all programs written in the language.
This what Bert understands (I guess so after reading his message) and this what I understand.
When you tell you about this --> THIS IS JUST LIKE A BUG REPORT 

Another example, the README misses good tutorial/example about how to use ringpp check and try different features that are really very interesting,'
Just another report.

When you share a project, it's normal to get feedback, this means (YOU DID SOMETHING THAT WE CARE ABOUT)

>> "Ignoring this reality is a strategic error I don't hope you will make, and I'm confident that you have all the intelligence and strength of technical personality needed to help you review your position, for the good of Ring, which we all love and support."

I am not ignoring anything, I am 
(1) As a reader giving you my feedback about the documentation. 
(2) Telling you about what is more attractive to me in the project. Something I may use. By doing so this doesn't mean the other things in the project is bad or I don't care about them. It's just a type of feedback that you could use or leave as you wish. You are the RingPP creator and you decide what is the direction for this project.

>> "This being said, I'm happy we reached this point that makes my decision about the future direction I should take, ethically, easier for me. And I will let you know through a final and last message I will write in this group soon."

I understand your feelings, and why you are saying (final and last message)
Communication with others is a tool that comes with advantages/disadvantages
When we don't get the advantages that we aim for, or can't accept the disadvantages
We analysis the situation and figure out what to do
We may learn something, change ourselves, what we say/do, be patient or we may just leave and think that we are in the wrong place.

This is normal for humans, but as an advice from a friend, many things goes up and down, like cycles and the best thing to do is not to take a decision in the wrong time (very happy or very angry). Sometimes taking a break, controlling your time, then comeback with positive energy is the right thing if you need this.
 
If you revised my posts in the group, you would find (offline announcements), sometimes to have a vacation or to take a short break from the group. 
But I don't say I will leave the group. Because I know this is the right/formal place for Ring developers. 

And since you are a Ring developer and one of the community stars, and a member in Ring Team 
YOU ARE IN THE RIGHT PLACE THAT YOU SHOULD NEVER THINK ABOUT LEAVING IT

This is the end of my humble advice, but you are free to decide anything you want, you have more experience in life than me, and I am not trying to teach you what to do, I am just sharing my opinion.

Greetings,
Mahmoud

Bert Mariani

unread,
Aug 28, 2026, 11:43:10 AMAug 28
to The Ring Programming Language
Hello Mansour, Mahmoud

First -  I hope everybody is  not getting excited because of my questions and comments
            That was not my intention.

My original questions were to know if Ring++ could run Ring apps as is.
   -   >>> Ring++   Ring, faster, safer and more portable — without ever leaving Ring

As far as I understand from the responses
   -   Can it run a Ring app with QT Gui 
        No
        It runs a web-based app that runs inside the browser, needs HTML, CSS, JavaSripts, Zig etc.
        Anything with QT Gui would have to be rewritten. Might not have the same look and feel, and responsn.

   -    It does not require any C-Code
        No
        Maybe Zig takes care of it ??

    -   Can it run Queens-N-Timing.ring  which is pure vanilla text Ring, and is it faster
         No reply if it does or doesn't. 
         No example of how to run it. Or if anything has to be translated or rewritten.

    -   Does it support true Arrays
        No.

   -   Loops 75x faster
       Does a generic app run faster
       What about numbers and math
       Only Strings are faster if they are Not copied but referenced

     -   Documentation
         Yes,  It is AI written as a series of log entries and fixes for various function implementation
         Not in a tutorial style for a new user to Ring++

Last comment
       The Best feature of Ring is its GUI Interface for the User.
       The name Ring++  or  RingPlusPlus    is very different than the meaning of C to C++
       Ring++ does not support QT and any other Libraries for backward compatibility
             
So Mansour
      Do me a favour and run the Queens-N-Timing.ring with Ring++
      Or show me how to do it.
      Does Ring++ run it as is ( plain vanilla text) , or does Zig rewrite is as a machine executable.

Hope you are not upset. 
Just trying to point things out and asking questions as a Dumb User.

Regards
Bert Mariani
Queens-N-Timing.ring

Bert Mariani

unread,
Aug 29, 2026, 12:36:59 PMAug 29
to The Ring Programming Language
Hello Mansour

I can not get this to work
     Queens-N-Timing.ring
     Queens-N-Timing-RingPP.ring   (  add -- load "ringpp.ring" )

Start here — Ring++   <<<<< followed this doc

================================
c:\ring>ringpm install ringpp from mayouni  <<<<<

Installing ringpp (master) ---> ringpp-0.9 (0.9)
Download Package Files For ringpp
Download File : ringpp.ring
Download File : rpp/core.ring
....
Download File : tests/name_collision.ring
Download File : bin/win64/ringpp.exe

c:\ring>ringpp                         <<<<<
'ringpp' is not recognized as an internal or external command,
operable program or batch file.

c:\ring>
===============================

cd C:\ring\tools\ringpm\packages\ringpp-0.9    <<<<<

C:\ring\tools\ringpm\packages\ringpp-0.9>dir  <<<<<
 Volume in drive C is Windows
 Volume Serial Number is D693-3EDC

 Directory of C:\ring\tools\ringpm\packages\ringpp-0.9
2026-08-29  11:40 AM    <DIR>          bin
2026-08-29  11:40 AM    <DIR>          docs
2026-08-29  11:40 AM    <DIR>          examples
2026-08-29  11:40 AM             1,462 LICENSE
2026-08-29  11:40 AM               181 lock.ring
2026-08-29  11:40 AM             2,473 package.ring
2026-08-29  11:40 AM            16,270 README.md
2026-08-29  11:40 AM               337 ringpp.ring   <<<<<
2026-08-29  11:40 AM    <DIR>          rpp
2026-08-29  11:40 AM    <DIR>          tests
               5 File(s)         20,723 bytes
               7 Dir(s)  226,025,062,400 bytes free

C:\ring\tools\ringpm\packages\ringpp-0.9>

===============================

C:\ring\tools\ringpm\packages\ringpp-0.9>ringpp.ring check  C:\MyStuff\AA-Queens-8\Queens-N-Timing.ring  <<<<<

     ### Ring++ — the library half.
     ###
     ###     load "ringpp.ring"
     ###
     ### One load, no build, no extension. Every facility rests on a primitive
     ### Mahmoud already registered; nothing here is invented.
     ### See docs/DESIGN.md for what each one rests on and why.
     
     load "rpp/probe.ring"
     load "rpp/core.ring"
     load "rpp/idioms.ring"

C:\ring\tools\ringpm\packages\ringpp-0.9>

========================================

C:\ring\tools\ringpm\packages\ringpp-0.9>ringpp help   <<<<<
'ringpp' is not recognized as an internal or external command,
operable program or batch file.


C:\ring\tools\ringpm\packages\ringpp-0.9>

=======================================
=======================================

RING NOTEPAD  Queens-N-Timing-PingPP.ring
     load "ringpp.ring"
     
     ### load "rpp/probe.ring"
     ### load "rpp/core.ring"
     ### load "rpp/idioms.ring"

 //--------------------------

Error (E9) : Can't open file ringpp.ring

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring Line (7) Error (C27) : Syntax Error!

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring errors count : 1


=================================
RING NOTEPAD  Queens-N-Timing-PingPP.ring
     load "ringpp.ring"
     
     load "rpp/probe.ring"
     load "rpp/core.ring"
     load "rpp/idioms.ring"

 //--------------------------

Error (E9) : Can't open file ringpp.ring

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring Line (7) Error (C27) : Syntax Error!


Error (E9) : Can't open file rpp/probe.ring

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring Line (9) Error (C27) : Syntax Error!


Error (E9) : Can't open file rpp/core.ring

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring Line (10) Error (C27) : Syntax Error!


Error (E9) : Can't open file rpp/idioms.ring

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring Line (11) Error (C27) : Syntax Error!

C:/MyStuff/AA-Queens-8/Queens-N-Timing-RingPP.ring errors count : 4


===========================

C:\ring\tools\ringpm\packages\ringpp-0.9>ringpp.ring build C:\MyStuff\AA-Queens-8\Queens-N-Timing-RinPP.ring --out dist  <<<<<

C:\ring\tools\ringpm\packages\ringpp-0.9>

============================

Queens-N-Timing.ring
Queens-N-Timing-RingPP.ring

Mahmoud Fayed

unread,
Aug 29, 2026, 5:49:52 PMAug 29
to The Ring Programming Language
Hello Bert

Your questions reflect misunderstanding of what Ring++ project does 
IMHO, It's not your mistake, it's a result of bad documentation.

You think that the project improves Ring performance in general, but it's not the reality, it just improves string processing operations.

Since we reported this to the author and the documentation is not updated


Commit message: The current documentation contains misleading information that has caused confusion among users. The issue was reported by Bert Mariani and me. The package author, Mansour Ayouni, indicated that he is currently busy. To avoid further misunderstandings, the package is temporarily removed from the registry. We will be happy to add it again in the future once the documentation is updated.

Greetings,
Mahmoud

Bert Mariani

unread,
Aug 30, 2026, 4:02:28 PMAug 30
to The Ring Programming Language
Thanks for the reply Mahmoud !!

Since Claude AI wrote the functions, testing and documentation ...
As per Claude:
Question: Can ringpp make the Queens-N-Timing.ring faster , does anything have to be added or changed to make it run ?
=========================

Short answer: no, ringpp won't speed this particular program up, and you don't need to add or change anything for it to run under plain Ring.

Here's why, based on what's actually on the ringpp site:

What ringpp's "performant code" pillar actually does
Its speed claim (the 75× number) is specifically about avoiding Ring's string-copy behavior — Ring copies a whole string onto the stack every time you pass it into a function, while it passes lists/objects by reference for free. RppBuffer/RppView give you a way to hold a big block of bytes as an object instead of a string so it stops getting copied on every call. That's the entire mechanism.

Your Queens-N-Timing.ring program never passes a string anywhere in its hot path — x, n, k, i, j are all numbers, and x is a Ring list, which Ring already passes by reference. So there is no copying cost for ringpp to remove here. This is actually one of the cases the site itself flags: three of its own eight examples conclude "plain Ring is the right answer" for that shape of code, and yours is that shape.

The other two ringpp pillars don't apply either:

  • Static analysis (ringpp check) looks for misused type annotations Ring's parser silently discards — your file has no type annotations, so there's nothing for it to find.
  • Native build (ringpp build) packages your .ring file into a standalone .exe/.ringo pair with no C compiler needed. That's a distribution convenience (no Ring install needed on the target machine) — it runs the exact same bytecode on the exact same VM, so it won't change the runtime speed of the algorithm itself.

===============================

If you actually want it faster, the win is algorithmic, not tooling. Place(k,i) re-scans all previously placed queens (O(k)) on every single placement attempt, using fabs() (float abs) on integers, which is the classic N-Queens bottleneck. The standard fix is to track "column used" / "diagonal used" with boolean arrays so each check is O(1):

ring
Func Place(k,i) countPlace++ if usedCol[i] or usedDiag1[k+i] or usedDiag2[k-i+n] return 0 ok return 1 // on placing: usedCol[i]=1, usedDiag1[k+i]=1, usedDiag2[k-i+n]=1 // on backtrack: set them back to 0

That's a genuine order-of-magnitude speedup at n=12+, independent of any library. One other thing worth noting for correctness, not speed: countQueen/countPlace are declared once outside the for n loop and never reset, so the printed counts accumulate across all board sizes rather than resetting per n — worth fixing if you want per-size stats.

====================
Regards
Bert Mariani

Mahmoud Fayed

unread,
Aug 30, 2026, 5:15:40 PMAug 30
to The Ring Programming Language
Hello Bert

You are welcome and thanks for the feedback :D

Greetings,
Mahmoud

Reply all
Reply to author
Forward
0 new messages