-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Configuration refactoring #405
Comments
Das ärgerliche an so einem enum wie parameter_name_t ist, das man da parallel dazu ein Array pflegen muss in settings.c, und dass man settings.h über kurz oder lang in jeder .c Datei einbinden muss, was bei einer Änderung (neuer Parameter) dazu führt, das man alles neu kompiliert. Das ist eine Menge Koppelung, die es vorher (absichtlich) nicht gab. Da finde ich den lookup per String schöner, wie er vorher war, auch wenn er etwas langsamer ist. |
Ich finde, das mit dem Kompilieren sollte kein Argument sein. Allerdings auch nicht, dass der Zugriff etwas schneller wäre. Das könnte man mit einer anständigen Datenstruktir für String-Lookup auch hinkriegen. Die Kopplung mit dem Array ist schon ein Problem. Wie wäre es stattdessen, wenn mal alle Config-Strings vor Benutzung registrieren muss? Das würde wahrscheinlich so laufen, dass in eressea.c:game_init für jedes Modul ein Initializer aufgerufen wird. Dann könnte man zwar nicht zur Compilezeit, aber immerhin zur Laufzeit eine Liste aller Strings ausgeben. |
Das sähe dann jetzt etwa so aus: |
So eine Registrierung wie Kannst Du noch einmal erklären, warum Du hier überhaupt etwas ändern willst? Abgesehen davon, dass Konfiguration nicht mit #define definiert werden soll, was ist denn an |
Zu meinem Argument mit dem Kompilieren noch einmal: Ich finde das schon prinzipiell ein Problem. Computer sind so schnell geworden, dass es für Eressea kaum noch eine Rolle spielt [1], aber ich habe auch schon an Projekten gearbeitet, wo ein Vielleicht mache ich mal einen Branch mit meiner eigenen Verbesserung der existierenden Funktionen, das könnte Spaß machen, und vielleicht instruktiv sein. [1] Eressea's |
Alternative Implementation, mit schnellerem Lookup und gleichem Interface: 06f8ba9 Das ist ganz schön fieselig mit critbit so ein string->string Dictionary zu bauen, aber ich glaube, es stimmt. |
Ich glaube, dass kann man auch in language.c irgendwo nachlesen.
Danke, dass du fragst. Das hat mich gezwungen, noch mal genauer nachzudenken. Ich habe da ein paar Probleme:
Die letzten drei Punkte sind die einzigen, die größere Änderungen nötig machen. Mein jetziger Versuch ist da auch noch nicht richtig im Ziel, um diese Probleme zu lösen, wie ich inzwischen sehe. Ich glaube man müsste ungefähr das machen:
Zweitens würde ich gerne mehr dahin, dass man sich sein eigenes Eressea zusammenstecken kann und das ist im Moment sehr, sehr schwierig. Und das ist eigentlich der Punkt, der mir hier am wichtigsten ist, auch wenn mir das selbst am Anfang nicht klar war. Und bis dahin ist es ein sehr weiter Weg. Aber ich bin mit meinem Verständnis der jetztigen Architektur auch noch nicht ganz so weit, da richtig klar zu sehen. Es gibt zum Beispiel bestimmt eine interessante Erklärung, warum es eine config.h und eine settings.h gibt und beide anscheinend teilweise das gleiche tun. Aber ich bin nicht sicher, ob ich sie hören will. ;) |
Fazit: config.c ist ein Clusterfuck, und es gehört so gut wie nichts dort hinein. Vielleicht sollte der get_param und set_param Kram einfach nach settings.h verschwinden? Ich glaube nicht, dass es hilft, das Interface zur Konfiguration noch einmal zu ändern, denn der aktuelle konfuse Zustand ist wohl primär geschuldet, dass das in der Vergangenheit mehrfach passiert ist, und ich bin mit der aktuellen Soll-Lösung noch immer zufrieden (genug). Nachwort: Ich war früher auch total heiß darauf, dass Eressea super flexibel ist, und man beliebig an den Regeln ändern kann, aber inzwischen habe ich drei Spiele mit zwei Regelwerken im Gang, und kann mich kaum noch erinnern, welche Regeln wo gelten und wie funktionieren. Das muss ich jedes mal im Regel-Wiki nachsehen. Noch eines mache ich auf absehbare Zeit nicht, aber wenn sich ein Spielleiter findet, der das möchte, und der ein Konzept hat, dann ist es vielleicht wertvoll, die Arbeit dafür zu machen. |
Bei den ganzen Gerede über Konstanten neulich, habe ich mir mal überlegt, wie man das besser machen könnte und das kam dabei heraus:
develop...stm2:6628b2d7805c13f4d8be8b597ed3162a1b93e41b
Statt
schreibt man jetzt
Die Parameter mit Defaults landen in settings.h (falls ich die Archtitektur da richtig verstehe).
Außerdem sollen natürlich alle #defines, angefangen bei denen in config.h, auch zu Parametern werden und in settings.h landen.
Zwei Vorteile:
Fragen:
Was ist der Unterschied zwischen Variablen in config.h und in settings.h und ist diese Unterscheidung sinnvoll?
Ist dagegen softwaretechnisch was einzuwenden?
Es schafft zwar eine gewisse Kopplung, aber das Problem ist im Grunde jetzt schon vorhanden und man muss das, glaube ich, getrennt lösen.
The text was updated successfully, but these errors were encountered: