w3group
Philosophie

Mündig
Einem mündigen Softwareentwickler braucht der Compiler nicht vorzuschreiben was er tun und zu lassen hat. Dennoch ist eine Unterstützung in Form von Warnings gerne gesehen.

C/C++ bietet hier einen optimalen und breiten Spielraum an.

Das Prinzip ist, Basistechnologien zu verstehen und zu beherrschen und nicht durch den ausschließlichen Einsatz von Frameworks davor geschützt oder gekapselt zu werden. Nur wenn die zu Grunde liegende Technologie (Linux, C, HTML, CSS, CPU, HDD, Linux) verstanden wurde kann dieses Know-how immer und überall angewendet werden. Im professionellen Business ein absolutes Muss.

Einfach
  • Eine einzelne Person kann das gesamte System beherrschen.
  • Das Erlernen des Systems dauert nur wenige Tage.
  • Das System ist leicht an individuelle Erfordernisse anzupassen.
  • Wenig Fehler, wenig zu dokumentieren, wenig zu programmieren, wenig zu debuggen

Kleine Funktionen
  • sind leicht zu testen,
  • sind zu klein für Fehler,
  • sind leicht zu verstehen,
  • können einfach wieder verwendet werden,
  • können wie Bausteine zusammengesteckt werden (Skill erforderlich),
  • eliminieren Conditionals (Skill erforderlich),
  • haben sprechende Namen und bilden so das Vokabular der Anwendung. Das Programm 'wird' zur Dokumentation.

Programmier-Regeln
  • Einsatz statisch typisierter Sprachen gewährleisten Konsistenz bei Änderungen und helfen dem Compiler beim Optimieren.
  • Der Laufzeitspeicher wird stackorientiert verwaltet.
  • Objekte werden nicht frei gegeben sondern wieder verwendet.
  • Ist eine Businessfunktion (z.B. rechnung_druck) zu Ende, wird der Laufzeitspeicher - wie ein Stack - wieder frei. Diese Art der Speicherverwaltung ist ohne Aufwand für das System und zu 100% vorhersagbar und fehlerfrei.
  • Einfach verkettete Listen und Arrays bilden die wichtigsten Datenstrukturen.

Datenbank Die Stärke ist, dass die Objekte nicht erst aus einem Zwischenspeicher zusammengesetzt werden müssen, sondern das gesamte Objektnetz zur freien Verwendung direkt vorliegt.
  • Es besteht kein Unterschied zwischen Datenbanksprache und Programmiersprache. Das vereinfacht erheblich das Programmieren komplexer Abfragen.
  • Der Compiler prüft auf Typsicherheit und Vorhandensein aller Attribute.
  • Alle Programme greifen auf den gleichen physikalischen Speicher zu, nicht auf eine lokale Kopie.
  • Kein SQL-Protokolloverhead: Übertragen des Statements, Syntaxcheck, Zugriffspfad ermitteln, Daten verpacken, übertragen und entpacken.
  • Keine Administration.

Performance
Dell Laptop: 2,1GHz Dual Core Pentium, 4GB Ram  
Iterieren über 1.000.000 Datensätze 0.036s
Die w3store Datenbank ist hierarchisch (also wie ein Filesystem) und nicht relational aufgebaut. Daher ist es unwahrscheinlich dass einzelne 'Directories' 1 Million Records enthalten werden. Im Schnitt werden zwischen 100 bis 10.000 Records pro Directory verwaltet.

Beispiel
// Alle Athleten die zu einem Kader gehören aufsammeln
athlet_t **athlet_collect_for_kader(kader_t *kader) {
   athlet_t *a; // Iterator
   push(0); // Startkennzeichen
   for(a=R->athleten;a;a=a->next) if(a->kader==kader && a->is_athlet) push(a);
   return result; // Ergebnismenge typsicher zurückgeben
}
int athlet_cmp_name(athlet_t *a1, athlet_t *a2) { // Comperator-Sortierfunktion
   return strcasecmp(a1->name, a2->name); // Stringvergleich ohne groß/klein
}
void athlet_render_list(kader_t *kader) {
  // Alle Athleten aus der Datenbank holen und sortieren
  sort(athlet_collect_for_kader(kader), athlet_cmp_name);

  while(athlet_render_item(pop())); // Alle Athleten anzeigen
}
http://w3group.de - Entwicklung hochverfügbarer Internet-Anwendungen