Programming on the Large: A Lesson Learned from SoftanzaLib project

Skip to first unread message

Mansour Ayouni

Feb 5, 2024, 6:22:36 AMFeb 5
to The Ring Programming Language
Hello All,

I thought it would be useful to share some basic techniques I embraced in the course of developing such a large project like SoftanzaLib.

When I detect a misspelling in a function name, I do not just correct it where I found it. Instead, I systematically search for it in other places in the code base.

The "Find In Files" feature of Ring Notepad was my ally in correcting thousands of spelling errors in a second. Thanks Mahmoud!

Also, when it makes sense to me, and when the error occurs so much in the codebase, I immediately think of adding it as a @FunctionMisspelledForm. So, in the future, myself and any other programmer, won't be taxed for the same error, by interrupting the thinking flow and displaying an error message...

See an example of this technique when I've identified about 30 old occurrences of an error I made on spelling the word Position:

Have a nice day!

Mahmoud Fayed

Feb 5, 2024, 2:17:16 PMFeb 5
to The Ring Programming Language
Hello Mansour

Thanks for your kind words.

A little suggestion is separating the project to different sub projects or modules.
Where each module could exist in separate folder, with its test cases and clear dependency information.

Mansour Ayouni

Feb 5, 2024, 7:30:55 PMFeb 5
to Mahmoud Fayed, The Ring Programming Language
Hello Mahmoud,

Thank you for the suggestion. Yes, it's on my plan to separate the library to a core version and an extended version. I'm doing the necessary work for that. For example, all the eXTended features of a given function are now moved to a separate ..XT() function with the same name ( Section() --> SectionXT()  ).

Also, the idea of separating the codebase to different folders will be considered after the first release.

This being said, it's important to know that the dependency graph in SoftanzaLib, as expressed by its class design, is kept intentionally shallow, never exceeding 3 levels (always only 2) from parent to child class.But the classes themselves are deep, because I do want all the functions related to the same thing, all in one file. By experience, this leads to a more simple programming experience, both for writing and reading code...

For those who are interested, let me summarize roughly the dependency and inheritance graph we have :
  • Softanza uses some Ring libraries, especially RingQt.
  • There is a root class called stzObject.
  • There are 3 Softanza types inheriting from stzObject, namely : stzString, stzNumber, and stzList.
  • For each main class, there is an enumeration class inheriting from stzList, namely : stzListOfObjects, stzListOfNumbers, stzListOfStrings, and  stzListOfLists.
  • There are some specific types like stzHashList, stzTable, stzGrid, and stzSet that inherit also from stzList.
  • There is a Unicode based classe, stzChar, that inherits from stzString.
  • Finally, there are some supporting classes for managing stzUnicodeData, stzLocale, stzLanguage, stzScript, stzCountry, stzTime and stzDate.
As you can see, there is a sense of modularity in this design where each class-family represents a functional module : one for texts, one for numbers, one for lists, one for unicode and locales, etc. The complete list of modules targeted is shown in this visualisation :


PS : The first 6 modules are now implemented, the other 3 have been prototyped but will be finalised later after the first release.

All the best,


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
To view this discussion on the web visit
Reply all
Reply to author
0 new messages