Softanza
StartFrançais
Softanza
Why a feature exists

Seven design goals

A feature that serves no goal is refused, and a goal with no feature is a gap. Seven goals have held Softanza's design together since 2022. This page lays each against the features that serve it, with the state of each today.

Four vocabularies tell Softanza's design, and they answer four different questions. A goal says why a feature exists. A principle says what Softanza believes. A convention says how code is written. A law says what the tree refuses. This page is the first: the reason, which a reviewer can read goal by goal instead of line by line.

The 2022 slide laid seven goals against thirty-three features. Here they are redrawn with the state of each feature today, and one run per goal.

Of 33 features: 24 built, 4 transformed with the project, 2 changed form, 1 partial, 1 archived, 1 a name only.

1 · Expressiveness

Say what you mean in the shortest honest sentence.

  • Fluent design built · 956 fluent-form tags; RemoveQ()
  • Semantic precision built · the case dial and the suffix grammar; the error catalogue
  • Named parameters built · 94 test files; the hash form of the error raiser
  • Alternative functions built · 4,489 alternative-form tags
  • Multilingual functions archived · names only in the monolithic archive

Expressiveness: one verb in three forms, each saying what happens to the list.

Softanza
o1 = new stzList(L(' "♥1" : "♥3" '))
# the passive form returns a copy and keeps the original
? @@( o1.ItemsReversed() )
? @@( o1.Content() )
# the active form changes the list itself
o1.Reverse()
? @@( o1.Content() )
# the fluent form changes it and lets the sentence go on
o1 = new stzList(L(' "♥1" : "♥3" '))
? o1.ReverseQ().ToStzListOfStrings().ConcatenatedUsing("~")
Output
[ "♥3", "♥2", "♥1" ]
[ "♥1", "♥2", "♥3" ]
[ "♥3", "♥2", "♥1" ]
♥3~♥2~♥1

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/test/list/69_understanding_the_ed_and_q_function_forms.ring(opens in a new tab)

2 · Flexibility

One verb, many ways to call it, without a new verb for each.

  • Function suffixes built · CS, ST, XT, Z, ZZ
  • Function prefixes built · viz, rnd, dft, inf
  • Function free form built · one collision, FF with FX
  • Default parameters built · the dft prefix
  • Parameters in any order built · named parameters in any order, guard 646

Flexibility: a suffix adds one dial to the same verb, here the case.

Softanza
o1 = new stzList([ "arem", "mohsen", "AREM" ])
? o1.FindNth(2, "arem")
? o1.FindNthCS(2, "arem", :CS = FALSE)
Output
0
3

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/test/list/372_findall.ring(opens in a new tab)

3 · Reliability

Be right in every script, on every machine, with the functions already on the shelf.

  • Augmentation of the host's types transformed with the project · the host moves to Haro; the fixtures carry the expectations unadapted
  • Functions in nine domains transformed with the project · 44 folders, 28 Atlas areas
  • Functions on the shelf built · the how-to recipes
  • Unicode built · characters counted by the engine
  • ISO locales partial · the locale class, 23 files; the area rates no strong lane

Reliability: a length counts characters in Arabic, Latin and Chinese, not the bytes each takes.

Softanza
? Q("سلام ♥").NumberOfChars()
? Q("Niamey ♥").NumberOfChars()
? Q("字符数").NumberOfChars()
Output
6
8
3

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/doc/narrations/stz-functions-as-linguistic-expressions.md(opens in a new tab)

4 · Consistency

What works on a string works on a list; one vocabulary, everywhere.

  • With the host's type system transformed with the project · becomes consistency with Haro's, with the same fixtures
  • Experience over the earlier GUI binding transformed with the project · retired with its host; the GUI area is now a different engine
  • Experience over Softanza itself built · the same verbs for every structure
  • A consistent vocabulary built · one vocabulary at three depths; Ask()

Consistency: the same verb finds a piece in a string and in a list; the answer is a position in both.

Softanza
? Q("tea, rice").FindFirst("rice")
? Q([ "tea", "rice" ]).FindFirst("rice")
Output
6
2

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/doc/narrations/stz-mental-mode-narration.md(opens in a new tab)

5 · Human-centric metaphors

Replace the loop that hides its move with the move's own name.

  • The walker built · string and list walkers; a two-dimensional walker in max
  • The checker built · string and list checkers
  • The yielder built · its core runs in the engine
  • The performer built · string and list performers

Human-centric metaphors: the yielder filters, transforms and reduces, three moves with their own names.

Softanza
oY = new stzYielder([ 12, 0, 30, -5, 18 ])
? @@( oY.Filter(:IsPositive) )
? @@( oY.Map(:Double) )
? oY.Reduce(:Sum)
Output
[ 12, 30, 18 ]
[ 24, 0, 60, -10, 36 ]
55

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/education/program/courses/elementary-introduction/chapters/06-walk-ask-produce-act.en.md(opens in a new tab)

6 · Practical abstractions

Ideas the field has had for decades, scaled down until a person can use them in one line.

  • Conditional functions built · W and WF in every conditional seat
  • Visual orientation built · 77 files with the viz prefix; Boxed(); the plots
  • Constraint programming built · 86 files; graph-rule constraints; optimisation
  • Natural-language programming built · the natural layer, 20 files
  • Knowledge programming built · the knowledge graph, 71 files; knowledge files

Practical abstractions: a condition travels as a short text and the engine compiles it.

Softanza
o = new stzList([ 4, 7, 10, 3, 8 ])
? @@( o.FindW("{ @item > 5 }") )
? @@( o.ItemsW("{ @item > 5 }") )
? o.CountW("{ @item > 5 }")
Output
[ 2, 3, 5 ]
[ 7, 10, 8 ]
3

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/education/program/courses/elementary-introduction/chapters/07-declare-what-not-how.en.md(opens in a new tab)

7 · Manageability

Know why it failed, how fast it ran, and what it did, without leaving the code.

  • Informative error messages built · an error carries Where, What, Why and Todo
  • Visualised call stack a name only · no file builds it; the trace-context module is a different thing
  • Measurable performance built · the performance plane, six strong lanes; the profiler
  • Cachable functions and objects changed form · the decorators are gone; a cache class and an engine cache replace them
  • Loggable functions changed form · the decorators are gone; a log class is used in 30 files

Manageability: an error says where it happened, what, why, and what to do about it.

Softanza
try
	StzRaise([ :Where = "Greeting()", :What = "no name was given", :Why = "a greeting needs someone to greet", :Todo = "pass the name as the first parameter" ])
catch
	? cCatchError
done
Output
in file Greeting():
   What : no name was given
   Why  : a greeting needs someone to greet
   Todo : pass the name as the first parameter

run on 2026-10-09 00:30 inside the library at commit 4a184e6f0; taken from base/test/string/593_stzraise.ring(opens in a new tab)

What the tally says

The skeleton held: most features exist as declared, and the ones that changed did so for stated reasons, such as the host language moving to Haro. Manageability is the goal that drifted most. Its visualised call stack is a name and nothing was built under it, and the decorator forms of caching and logging gave way to classes. A design that drifted deserves a decision and not a silent replacement: either the decorators return as tags the engine honours, or the class form is declared final and this table is amended. That decision is the author's.

in construction The counts were read from the library's files at commit 93d7a39 by an outside assessment on 2026-10-07: a definition found by name is counted as built, and no feature was run for the count. The goals are written in thousands of comment tags above method definitions, in about ninety spellings, and no check yet reads them. A court that does, and prints this table from the code, is specified and not built.