Welche Config-Formate?
Tags: PC Softwareschrott Technik -Plain-Data
Zu meinen Anfangszeiten mit dem PC hielt ich dies neben benutzerdefinierten Textformaten, noch so ziemlich für die einzige Art wie man Daten ablegen konnte. Einfach immer schön die kompletten Speicherstrukturen auf die Platte (oder damals auch gerne Diskette) schieben.
Schneller gehts kaum noch, kann aber dafür natürlich keiner lesen der nicht entweder genau weiß was in der Datei stehen sollte oder ziemlich viel Aufwand reingesteckt hat.
Wir können uns daher sicher auch darauf einigen dass es für Menschenlesbare Konfigurationen bessere Formate gibt.
INI
Initialisierungsdateien waren gegen Windows 3 DER große Fortschritt bei Windows. Ein standardisiertes Dateiformat, für dessen Schreib- und Lesevorgänge recht handliche Funktionen bereitgestellt werden.
INI ist sehr gut menschenlesbar, da es nur aus Bereichsdefinitionen und darin ein paar Zuweisungen besteht. Das Ganze ist dann natürlich aus dem selben Grund nicht so wirklich flexibel.
Z.B. bereits bei mehrdimensionalen Arrays wird die ganze Sache etwas nervig.
UNIXoide-Configfiles
Lange Zeit außerhalb meines privaten Dunstkreises, aber schon länger existent als ich selbst: die UNIX/Linux/BSD-typischen Konfigurationsformate!
Eigentlich handelt es sich eher um Sammlungen von groben Beschreibungen wie es bei anderen Projekten aussieht, wirkliche Standards gibt es imho nicht.
Die Meisten sind relativ gut menschenlesbar, wenn die Daten etwas komplexer werden geht es aber Bergab. In jüngerer Zeit finden sich hier oft starke Anleihen an XML, besonders bei komplexeren Datenstrukturen.
Besonders hervorzuheben ist die starke Verbreitung von Kommentaren. Wären INI-Dateien generell so gut kommentiert wie die durchschnittliche *.conf unter Linux, wäre INI durchaus gut verwendbar.
XML
Die eXtensible Markup Language war eigentlich eher als ein klar definierbares Datenaustauschformat gedacht denn als Format für Konfigurationsdateien.
Dies macht sich sehr deutlich bemerkbar wenn man sich komplexere Datensammlungen ansieht. Wenn der XML-Code ordentlich formatiert ist, mag es durchaus möglich sein sich durchzukämpfen, aber dies macht eindeutig keinen Spaß.
Da allerdings in so ziemlich allen Sprachen ziemlich gute XML-Parser und Generatoren bereitstehen sind einige Entwickler auf die blöde Idee gekommen dieses Format auch hier einzusetzen.
Für alles was komplexer als eine kurze INI-Datei ist sollte man sich die Verwendung dieses Formates mehrmals überlegen, die Lesbarkeit liegt oft wirklich nur sehr knapp oberhalb der von Plain-Data-Formaten, das natürlich bei erheblich geringerer Geschwindigkeit.
(Für Dinge die weniger komplex als eine kurze INI-Datei sind wäre es natürlich ebenfalls Schwachsinn.. da kann man wohl gleich INI verwenden.)
YML
YAML steht für "YAML Ain't Markup Language" und stellt ein relativ junges Format dar, dessen Verbreitung noch in den Kinderschuhen steckt.
Das Format versucht grob Daten so zu notieren wie man es auch als Mensch tun würde, wenn man sich die entsprechenden Datenformate in einer einfachen Textdatei aufschreiben will.
Dadurch wird eine extrem gute Lesbarkeit erreicht, man kann innerhalb weniger Minuten verstehen was mit einer solchen Datei erreicht werden soll und wie man selbst solche Daten formuliert.
Die notierten Daten sind äußerst flexibel und dennoch durch relativ strikte Standards gut zu parsen. Für JavaScript, Perl, PHP, Python, Java und Ruby bestehen bereits gute Parser, die meist komplexeste Datenstrukturen ohne größere Umstände gut lesbar ausgeben können.
Es ist meiner Meinung nach wünschenswert dass sich dieses geniale Konzept weiter verbreitet. Ich durfte die letzten Wochen und Monate dank Arbeit mit dem Symfony-Framework permanent damit arbeiten und bin einfach nur begeistert.
Ich kann es jedem nur empfehlen sich die Wikipedia-Seite dazu gründlich durchzulesen und eine Implementierung für seine Lieblingssprache zu suchen.
Importierte/Alte Kommentare:
#718: 30.Oct.2008 10:10 von IRC-Bot Hauptfunktionalität: Newsfeeds « G33KY^2 - The Nerd Strikes Back
[...] unterstützen wir nur eine Art von Feeds, diese werden relativ statisch in der Config (Yaml-Format) mit URL und gewünschtem Befehlsstring eingetragen und sind dann je nach Parameterzahl und [...]