Softanza
DémarrerEnglish
Softanza
Pourquoi une fonction existe

Sept buts de conception

Une fonction qui ne sert aucun but est refusée, et un but sans fonction est un trou. Sept buts tiennent ensemble la conception de Softanza depuis 2022. Cette page place chacun face aux fonctions qui le servent, avec l'état de chacune aujourd'hui.

Quatre vocabulaires racontent la conception de Softanza, et ils répondent à quatre questions différentes. Un but dit pourquoi une fonction existe. Un principe dit ce que Softanza croit. Une convention dit comment le code s'écrit. Une loi dit ce que l'arbre refuse. Cette page est la première : la raison, qu'un relecteur peut lire but par but au lieu de ligne par ligne.

La diapositive de 2022 plaçait sept buts face à trente-trois fonctions. Les voici redessinés avec l'état de chaque fonction aujourd'hui, et une exécution par but.

Sur 33 fonctions : 24 construit, 4 transformé avec le projet, 2 forme changée, 1 partiel, 1 archivé, 1 un nom seulement.

1 · Expressivité

Dire ce que l'on veut dire dans la phrase honnête la plus courte.

  • Conception fluide construit · 956 balises de forme fluide ; RemoveQ()
  • Précision sémantique construit · le réglage de casse et la grammaire des suffixes ; le catalogue d'erreurs
  • Paramètres nommés construit · 94 fichiers de test ; la forme à clés de l'émetteur d'erreurs
  • Fonctions alternatives construit · 4 489 balises de forme alternative
  • Fonctions multilingues archivé · des noms seulement dans l'archive monolithique

Expressivité : un verbe sous trois formes, chacune disant ce qui arrive à la liste.

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("~")
Sortie
[ "♥3", "♥2", "♥1" ]
[ "♥1", "♥2", "♥3" ]
[ "♥3", "♥2", "♥1" ]
♥3~♥2~♥1

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/list/69_understanding_the_ed_and_q_function_forms.ring(s'ouvre dans un nouvel onglet)

2 · Flexibilité

Un verbe, plusieurs façons de l'appeler, sans un nouveau verbe pour chacune.

  • Suffixes de fonction construit · CS, ST, XT, Z, ZZ
  • Préfixes de fonction construit · viz, rnd, dft, inf
  • Forme libre de fonction construit · une collision, FF avec FX
  • Paramètres par défaut construit · le préfixe dft
  • Paramètres dans n'importe quel ordre construit · paramètres nommés dans n'importe quel ordre, garde 646

Flexibilité : un suffixe ajoute un réglage au même verbe, ici la casse.

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

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/list/372_findall.ring(s'ouvre dans un nouvel onglet)

3 · Fiabilité

Être juste dans toutes les écritures, sur toutes les machines, avec les fonctions déjà sur l'étagère.

  • Augmentation des types de l'hôte transformé avec le projet · l'hôte passe à Haro ; les cas de test portent les attentes sans adaptation
  • Fonctions dans neuf domaines transformé avec le projet · 44 dossiers, 28 domaines de l'Atlas
  • Fonctions sur l'étagère construit · les recettes du comment faire
  • Unicode construit · caractères comptés par le moteur
  • Locales ISO partiel · la classe de locale, 23 fichiers ; le domaine n'a aucun couloir fort

Fiabilité : une longueur compte des caractères en arabe, en latin et en chinois, pas les octets que chacun occupe.

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

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/doc/narrations/stz-functions-as-linguistic-expressions.md(s'ouvre dans un nouvel onglet)

4 · Cohérence

Ce qui marche sur une chaîne marche sur une liste ; un seul vocabulaire, partout.

  • Avec le système de types de l'hôte transformé avec le projet · devient la cohérence avec celui de Haro, avec les mêmes cas de test
  • Expérience sur l'ancienne liaison graphique transformé avec le projet · retirée avec son hôte ; le domaine graphique repose maintenant sur un autre moteur
  • Expérience sur Softanza elle-même construit · les mêmes verbes pour toute structure
  • Un vocabulaire cohérent construit · un seul vocabulaire à trois profondeurs ; Ask()

Cohérence : le même verbe trouve un morceau dans une chaîne et dans une liste ; la réponse est une position dans les deux.

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

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/doc/narrations/stz-mental-mode-narration.md(s'ouvre dans un nouvel onglet)

5 · Métaphores centrées sur l'humain

Remplacer la boucle qui cache son geste par le nom du geste.

  • Le marcheur construit · marcheurs de chaînes et de listes ; un marcheur à deux dimensions dans le max
  • Le vérificateur construit · vérificateurs de chaînes et de listes
  • Le producteur construit · son cœur tourne dans le moteur
  • L'exécutant construit · exécutants de chaînes et de listes

Métaphores centrées sur l'humain : le producteur filtre, transforme et réduit, trois gestes qui portent leur nom.

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

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/education/program/courses/elementary-introduction/chapters/06-walk-ask-produce-act.en.md(s'ouvre dans un nouvel onglet)

6 · Abstractions pratiques

Des idées que le domaine connaît depuis des décennies, réduites jusqu'à ce qu'une personne les utilise en une ligne.

  • Fonctions conditionnelles construit · W et WF à chaque place conditionnelle
  • Orientation visuelle construit · 77 fichiers au préfixe viz ; Boxed() ; les tracés
  • Programmation par contraintes construit · 86 fichiers ; contraintes de règles de graphe ; optimisation
  • Programmation en langage naturel construit · la couche naturelle, 20 fichiers
  • Programmation par la connaissance construit · le graphe de connaissance, 71 fichiers ; les fichiers de connaissance

Abstractions pratiques : une condition voyage comme un court texte et le moteur la compile.

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

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/education/program/courses/elementary-introduction/chapters/07-declare-what-not-how.en.md(s'ouvre dans un nouvel onglet)

7 · Gouvernabilité

Savoir pourquoi cela a échoué, à quelle vitesse cela a tourné, et ce que cela a fait, sans quitter le code.

  • Messages d'erreur informatifs construit · une erreur porte Où, Quoi, Pourquoi et Que faire
  • Pile d'appels visualisée un nom seulement · aucun fichier ne la construit ; le module de contexte de trace est autre chose
  • Performance mesurable construit · le plan de performance, six couloirs forts ; le profileur
  • Fonctions et objets cachables forme changée · les décorateurs ont disparu ; une classe de cache et un cache du moteur les remplacent
  • Fonctions journalisables forme changée · les décorateurs ont disparu ; une classe de journal sert dans 30 fichiers

Gouvernabilité : une erreur dit où elle s'est produite, quoi, pourquoi, et que faire.

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
Sortie
in file Greeting():
   What : no name was given
   Why  : a greeting needs someone to greet
   Todo : pass the name as the first parameter

exécuté le 2026-10-09 00:30 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/string/593_stzraise.ring(s'ouvre dans un nouvel onglet)

Ce que dit le décompte

Le squelette a tenu : la plupart des fonctions existent comme déclaré, et celles qui ont changé l'ont fait pour des raisons dites, comme le langage hôte qui passe à Haro. La gouvernabilité est le but qui a le plus dérivé.

Sa pile d'appels visualisée est un nom et rien n'a été construit dessous, et les formes décoratives de la mise en cache et de la journalisation ont cédé la place à des classes. Une conception qui a dérivé mérite une décision et pas un remplacement silencieux : soit les décorateurs reviennent comme des balises que le moteur honore, soit la forme par classes est déclarée finale et ce tableau est amendé. Cette décision revient à l'auteur.

en construction Les décomptes ont été lus dans les fichiers de la bibliothèque au commit 93d7a39 par une évaluation extérieure le 2026-10-07 : une définition trouvée par son nom compte comme construite, et aucune fonction n'a été exécutée pour le décompte. Les buts sont écrits dans des milliers de balises de commentaire au-dessus des définitions de méthodes, en une quatre-vingtaine d'orthographes, et aucun contrôle ne les lit encore. Un juge qui le fait, et qui imprime ce tableau depuis le code, est spécifié et pas construit.