Diskussion:Flag (Informatik)

aus Wikipedia, der freien Enzyklopädie

Nur zweiwertig?

Wenn die momentane Definition stimmt und ein "Flag" immer zweiwertig ist (Boolesche Variable), wie nennt man dann Flags, die drei oder mehr Werte annehmen können? Ich dachte bisher, zu diesen könnte man auch "Flag" sagen? --Neitram 10:18, 28. Mär 2006 (CEST)

Ja, sehe ich ähnlich. Der Artikel sollte IMHO beide Varianten nennen. --Uwe Hermann 00:56, 8. Jul 2006 (CEST)
Das sehe ich anders. Eine zeitlich frühe Bedeutung kommt vermutlich vom flag register des 8086 und dort sind die Flags zweiwertig. Die Verwendung des Begriffs in Programmiersprachen ist IMHO nur sinnvoll, wenn es für Variablen verwendet wird, die mit bitweisen Operationen bearbeitet werden. Mehrwertige Variablen kann man auch Statusvariablen nennen. Florian Pesth 23:22, 25. Sep 2006 (CEST)
Ich stimme zu-- ein Flag ist Boolesche Variable. Wenn es einen anderen Sinn mit mehrere Werten gibt, konnte das in einen anderen Artikel gehen, und ein Link dorthin hier gemacht werden. (nicht signierter Beitrag von 155.98.66.247 (Diskussion) 07:19, 11. Okt. 2014 (CEST))
Siehe Aufzählungstyp, der ist zuständig für (benannte; ggf. >2) Zustände.
--arilou (Diskussion) 11:21, 3. Feb. 2015 (CET)
Ach, und ich stimme NICHT zu. Ein Flag ist nicht exakt dasselbe wie eine boolesche Variable; dies ist lediglich eine weit verbreitete Implementierung/Repräsentation; genauso gut kann man auch zwei (beliebige, fest gewählte) Ganzzahlen oder zwei Stringkonstanten verwenden.
--arilou (Diskussion) 11:55, 3. Feb. 2015 (CET)

Toggle

Wenn gesagt wird, ein Flag kann gesetzt, geloescht, oder gelesen werden, soll auch etwas ueber "toggle" (0->1 bzw. 1->0) erwaehnt werden. (nicht signierter Beitrag von 155.98.66.247 (Diskussion) 07:19, 11. Okt. 2014 (CEST))

Eigentlich NEIN, denn dann wird das Flag zur Boolesche Variable.
--arilou (Diskussion) 11:24, 3. Feb. 2015 (CET)

Überarbeitung

Ich habe vorige Frage zum Anlass genommen, dem ganzen Artikel mal die "Boolesche Variable" auszutreiben. Selbige ist nur eine häufige Repräsentation/Implementierung für ein Flag, aber nicht mit selbigem gleichzusetzen. Das kann man v.a. gut am "Compiler-Flag" sehen - wenn es "nicht gesetzt" ist, dann "ist es einfach nicht da", wohingegen eine gleichnamige boolesche Variable sehrwohl "da/deklariert" wäre, mit dem Wahrheitswert "false".

--arilou (Diskussion) 11:46, 3. Feb. 2015 (CET)

Diff: [1]
Hallo arilou,
ich bin leider mit deiner Erweiterung bzw. Neuauslegung - ausnahmsweise - nicht einverstanden.
In erster Linie leitet sich "Flag" von "Flagge" ab, i.d.S., dass sie entweder gehisst (hier: gesetzt) sein kann oder nicht (jaja, halbmast mal außen vor ein lächelnder Smiley ). Der Abschnitt Etymologie ist mal etwas überarbeitungsbedürftig und riecht auch stark nach TF, aber dazu später mehr.
Dass sich der Begriff "Flag" auch auf mehrwertige (Zustands-)Variablen erstreckt, dafür hätte ich gerne ein Standardwerk als Beleg. Und auch dann wäre der boolesche Begriffsteil in den Vordergrund zu stellen, weil dieser in jedem Fall der primäre Bedeutungsinhalt ist. Der englische Wiki-Artikel geht sogar soweit, dass er ein Flag auf eine binäre Stelle (also ein Bit) eines Datenwortes beschränkt.
Auch der Begriff "Compiler-Flag" kommt genau daher, denn es ist ein Flag (innerhalb des Compilers/Programms), das man eben aus praktischen Gründen beim Aufruf über die Kommandozeile setzen kann. Nicht der Kommandozeilen-Parameter ist hier das Flag, sondern die interne Variable und die ist - wie du richtig schreibst - immer deklariert und auch definiert.
Das C-Beispiel, das du hier [2] herausgenommen hast, war zugegebenermaßen etwas unglücklich, sollte aber mMn. doch wieder zurück in den Artikel, weil es zugänglicher ist, als das mit den Compiler-Makros. Dazu kann es gerne gekürzt oder sonstwie verbessert werden.--Plankton314 (Diskussion) 19:20, 3. Feb. 2015 (CET)
  1. Das mit "Mehrwertiges Flag" war mir auch eher neu, wird aber in der aktuellen Artikelversion auch nicht mehr direkt behauptet. ("verschiedene Zustände" kann auch nur 2 meinen.) Es wird vielmehr in "Abgrenzung" erwähnt, dass das dann eigentlich ein Aufzählungstyp darstellt.
  2. "Compiler-Flag" [...] die interne Variable [...] ist [...] immer deklariert und auch definiert.
    Äh, gerade falsch. Ein (C-)Compiler-Flag ist vor dem #define FLAG eben nicht deklariert. Es existiert einfach gar nicht. (Es ist in einer Compiler-internen Liste der (gesetzten) Flags einfach nicht aufgeführt, auch nicht als "steht auf false".) Eine Abfrage #ifdef FLAG prüft ein Flag nicht auf "ist auf 'true' gesetzt?", sondern auf "existiert (in Liste)?"
    Als Beispiel finde ich den Fahnenmast sehr gut. Ein "leerer" Fahnenmast kann durchaus darauf geprüft werden, ob die US-Flagge an ihm gesetzt ist. Er kann aber auch auf beliebige andere Flaggen geprüft werden. Es existiert keine Festlegung, welche evtl. gesetzt werden könnte und welche nicht. Ein C-Programm, das 3 booleans (~chars) definiert 'US_flag , BRD_flag , GB_flag' ist jedoch festgelegt (auf US, BRD, GB).Bei den Compilerflags kann man mit #ifdef auf sonstwas prüfen, das sonst nirgends jemals vorkommt. Boolesche Variablen darf ich nur genau jene prüfen, die im aktuellen Gültigkeitsscope zuvor deklariert wurden.
  3. Das C-Programm hat u.a. beschrieben, wie man mit booleschen Variablen rechnet (NOT/TOGGLE). Mit Flags wird aber nicht "gerechnet", sondern man "agiert gemäß dem beschriebenen/verkörperten Zustand".
    Deutlich besser sieht man es, wenn man statt einer booleschen Variablen einen Integer verwendet. Man kann ints addieren, subtrahieren, multiplizieren, ..., weil sie einfach mehr können, als notwendig ist, um als Flag zu dienen. Bei bools ist der Unterschied (zugegebenermaßen) nur gering - aber vorhanden.
--arilou (Diskussion) 09:51, 4. Feb. 2015 (CET)
PS: In manchen Sprachen, insbesondere Common Lisp und Scheme, werden Flags nicht als booleans implementiert, sondern mittels Symbol. Das kann man (in diesen Sprachen) nicht auf 'false' setzen. Ich bin mir nicht mal sicher, ob man ein einmal angelegtes Symbol (zur Programmlaufzeit) überhaupt wieder gelöscht bekommt...
--arilou (Diskussion) 09:54, 4. Feb. 2015 (CET)
Hmm, wenn ein Flag nur zwei Zustände kennt (worin wir ja scheins übereinstimmen), wo liegt dann für dich der Unterschied zu einer booleschen Variable? Rechnen kann man auf einem Computer/Prozessor ja mit allem, zB. auch mit Zeichenketten.
Zum Compiler-Flag: Ja, da haben wir aneinander vorbeigeredet: Ich verstehe unter einem Compiler-Flag einen Kommandozeilenparameter wie zB. "-O2". Was du meinst sind genaugenommen Präprozessor-Makros und in diesem Kontext stimmt es dann auch, was du schreibst. Darum finde ich es auch etwas unglücklich, diese als Compiler-Flags zu benennen.
"Debug-Flag" kann in mMn. noch durchgehen. Es ist zwar (so wie im Beispiel) auch ein Makro, wird aber üblicherweise als Flag verwendet, d.h. nur auf Existenz überprüft (sprich: gesetzt=definiert, sonst nicht gesetzt).--Plankton314 (Diskussion) 12:55, 4. Feb. 2015 (CET)
Für mich ist ein "Flag" praktisch genau das, was im Artikel (jetzt) als Präprozessor-Flag bezeichnet wird. Es kann "da sein" oder "nicht da sein". Und speziell im "nicht da sein" liegt der Unterschied zu einer booleschen Variable. Eine bolesche Variable ist mächtiger als ein Flag, sie ermöglicht z.B. eine Typ-/Rechtschreib-/Existenzprüfung auch im nicht-gesetzten Fall.
Ich weis langsam nicht, wie ich's noch anschaulich erklären soll. Hm.
Stell' dir vor, auf einer Kommode steht die Ladeschale für dein Handy(Die Ladeschale selbst brauche annähernd keinen Platz.). Das ist ein "boolescher Speicherplatz", er kann das Handy enthalten (true) oder nicht (false). Aber der Platz ist reserviert und hat einen Zustand ("handy-leer"), auch wenn das Handy nicht-da ist.
Nimm die Ladeschale weg und schau' auf die Kommode. Was ist alles "nicht-da"?
--arilou (Diskussion) 16:22, 4. Feb. 2015 (CET)
Hmm, ja, ich verstehe was du meinst, aber so ganz bin ich nicht überzeugt.
Egal, ich lass das mal ein paar Tage setzen, vllt. fällt mir dann noch was zur Definition oder als Ergänzung zum Artikel ein...--Plankton314 (Diskussion) 16:30, 4. Feb. 2015 (CET)
Ich denke, meine Sichtweise von Flags ist noch erheblich geprägt von Scheme, in dem man dazu Symbole verwendet.
Wie ich schon gesagt habe - man kann ja durchaus für ein Flag einen Datentyp verwenden, der mehr kann, als notwendig. Ein boolean kann eben nur ein kleines bischen mehr als ein Flag, während ein Integer deutlich mehr kann (+ - * / modulo signum < > = ...) - da sieht man das sofort...
--arilou (Diskussion) 15:29, 5. Feb. 2015 (CET)

Das oder der Flag?

Wie heißt es richtig? Der Flag oder das Flag? --Wiki.kb (Diskussion) 14:01, 2. Dez. 2015 (CET)

Ich hab' noch nie jemand "der Flag" sagen hören; nur "das". Aus der Übersetzung aus dem Englischen würde auch eher "die" (Flagge) als "der" folgen.
--arilou (Diskussion) 12:08, 8. Dez. 2015 (CET)