Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 350 – Codetags

Autor:
Micah Elliott <mde at tracos.org>
Status:
Abgelehnt
Typ:
Informational
Erstellt:
27-Jun-2005
Post-History:
10-Aug-2005, 26-Sep-2005

Inhaltsverzeichnis

Ablehnungsbescheid

Diese PEP wurde abgelehnt. Obwohl die Community interessiert sein mag, gibt es keinen Wunsch, die Standardbibliothek an diesen Standard anzupassen.

Zusammenfassung

Diese informative PEP zielt darauf ab, Richtlinien für die konsistente Verwendung von Codetags bereitzustellen, was den Aufbau von Standard-Utilities ermöglichen würde, um die Codetag-Informationen zu nutzen, und den Python-Code über Projekte hinweg einheitlicher macht. Codetags stellen auch ein sehr leichtgewichtiges Programmier-Mikroparadigma dar und werden für Projektmanagement, Dokumentation, Änderungsverfolgung und die Überwachung des Projektzustands nützlich. Dies wird als PEP eingereicht, da seine Ideen als Pythonic gelten, obwohl die Konzepte nicht exklusiv für die Python-Programmierung sind. Hierin werden die Definition von Codetags, die dahinterstehende Philosophie, eine Motivation für standardisierte Konventionen, einige Beispiele, eine Spezifikation, eine Toolset-Beschreibung und mögliche Einwände gegen das Codetag-Projekt/Paradigma aufgeführt.

Diese PEP wird auch als Wiki gepflegt, in dem Leute Kommentare hinzufügen können.

Was sind Codetags?

Programmierer verwenden weithin Ad-hoc-Code-Kommentar-Markup-Konventionen, die als Erinnerung für Codeabschnitte dienen, die genauer geprüft oder überarbeitet werden müssen. Beispiele für Markup sind FIXME, TODO, XXX, BUG, aber es gibt noch viele weitere, die in vorhandener Software weit verbreitet sind. Solches Markup wird fortan als Codetags bezeichnet. Diese Codetags können in Anwendungscode, Unit-Tests, Skripten, allgemeiner Dokumentation oder überall dort auftauchen, wo es angebracht ist.

Codetags werden seit vielen Jahren (Hunderte von Codetags in den Python 2.4 Quellen) an vielen Orten (z. B. c2) diskutiert und verwendet. Weitere historische und aktuelle Informationen finden Sie unter Referenzen.

Philosophie

Wenn Sie die meisten dieser Werte unterstützen, sind Codetags wahrscheinlich nützlich für Sie.

  1. So viele Informationen wie möglich sollten im Quellcode (Anwendungscode oder Unit-Tests) enthalten sein. Dies verhindert zusammen mit der Verwendung von Codetags Duplizierung. Die meiste Dokumentation kann aus diesem Quellcode generiert werden; z. B. durch die Verwendung von help2man, man2html, docutils, epydoc/pydoc, ctdoc usw.
  2. Informationen sollten fast nie dupliziert werden – sie sollten in einem einzigen Originalformat erfasst werden und alle anderen Orte sollten automatisch aus dem Original generiert oder einfach referenziert werden. Dies ist bekannt als die Single Point Of Truth (SPOT) oder Don’t Repeat Yourself (DRY) Regel.
  3. Die Dokumentation, die Kunden erreicht, sollte aus einzelnen Quellen automatisch in alle anderen Ausgabeformate generiert werden. Menschen wünschen sich Dokumentation in vielen Formen. Es ist daher wichtig, ein Dokumentationssystem zu haben, das all diese generieren kann.
  4. Die Entwickler sind das Dokumentationsteam. Sie schreiben den Code und sollten den Code am besten kennen. Es sollte kein dediziertes, getrenntes Dokumentationsteam für Projekte geben, die nicht riesig sind.
  5. Klartext (mit nicht-invasiver Auszeichnung) ist das beste Format zum Schreiben von allem. Alle anderen Formate müssen aus dem Klartext generiert werden.

Das Design von Codetags wurde von folgenden Zielen beeinflusst

  1. Kommentare sollten so kurz wie möglich sein.
  2. Codetag-Felder sollten optional und von minimaler Länge sein. Standardwerte und benutzerdefinierte Felder können von einzelnen Code-Shops festgelegt werden.
  3. Codetags sollten minimalistisch sein. Je schneller etwas notiert werden kann, desto wahrscheinlicher wird es notiert.
  4. Die häufigste Verwendung von Codetags wird nur null bis zwei Felder aufweisen, und diese sollten am einfachsten einzugeben und zu lesen sein.

Motivation

  • Verschiedene Produktivitätstools können rund um Codetags erstellt werden.

    Siehe Werkzeuge.

  • Fördert Konsistenz.

    Historisch gesehen wurde eine Teilmenge dieser Codetags informell im Großteil des vorhandenen Quellcodes verwendet, sei es in Python oder in anderen Sprachen. Tags wurden inkonsistent mit unterschiedlichen Schreibweisen, Semantik, Format und Platzierung verwendet. Zum Beispiel könnten einige Programmierer Datumsstempel und/oder Benutzerkennungen einschließen, auf eine einzige Zeile beschränken oder nicht, den Codetag anders als andere schreiben usw.

  • Fördert die Einhaltung des SPOT/DRY-Prinzips.

    z. B. eine Roadmap dynamisch aus Codetags generieren, anstatt TODOs mit einem separaten Roadmap-Dokument synchron zu halten.

  • Leicht zu merken.

    Alle Codetags müssen prägnant, intuitiv und semantisch nicht überlappend sein. Das Format muss ebenfalls einfach sein.

  • Verwendung nicht erforderlich/aufgezwungen.

    Wenn Sie noch keine Codetags verwenden, besteht keine Verpflichtung, damit zu beginnen, und kein Risiko, den Code zu beeinflussen (aber siehe Einwände). Eine kleine Teilmenge kann übernommen werden und die Werkzeuge sind trotzdem nützlich (einige Codetags wurden wahrscheinlich bereits ad hoc übernommen). Außerdem ist es sehr einfach, einen Codetag zu identifizieren und zu entfernen (und möglicherweise aufzuzeichnen), der nicht mehr als nützlich erachtet wird.

  • Bietet einen globalen Überblick über den Code.

    Werkzeuge können zur Generierung von Dokumentation und Berichten verwendet werden.

  • Ein logischer Ort zur Erfassung von CRCs/Stories/Anforderungen.

    Die XP-Community erfasst Stories oft nicht elektronisch, aber Codetags scheinen ein guter Ort zu sein, um sie zu platzieren.

  • Extrem leichtgewichtiger Prozess.

    Das Erstellen von Tickets in einem Tracking-System für jeden Gedanken verlangsamt die Entwicklungsgeschwindigkeit. Selbst wenn ein Ticketing-System verwendet wird, sind Codetags nützlich, um einfach Links zu diesen Tickets zu enthalten.

Beispiele

Dies zeigt einen einfachen Codetag, wie er allgemein im Quellcode vorkommt (mit der Ergänzung eines nachgestellten <>)

# FIXME: Seems like this loop should be finite. <>
while True: ...

Das folgende konstruierte Beispiel demonstriert eine typische Verwendung von Codetags. Es verwendet einige der verfügbaren Felder, um die Zuweisungsempfänger (ein Paar von Programmierern mit den Initialen MDE und CLE), das Datum der erwarteten Fertigstellung (Woche 14) und die Priorität des Elements (2) anzugeben.

# FIXME: Seems like this loop should be finite. <MDE,CLE d:14w p:2>
while True: ...

Dieser Codetag zeigt einen Fehler mit Feldern, die Autor, Entdeckungsdatum (Ursprung), Fälligkeitsdatum und Priorität beschreiben.

# BUG: Crashes if run on Sundays.
# <MDE 2005-09-04 d:14w p:2>
if day == 'Sunday': ...

Hier ist eine Demonstration, wie man Codetags nicht verwendet. Dies hat viele Probleme: 1) Codetags können keine Zeile mit Code teilen; 2) Fehlender Doppelpunkt nach der Mnemotechnik; 3) Ein Codetag, der sich auf Codetags bezieht, ist normalerweise nutzlos und schlimmer noch, er ist nicht abschließbar; 4) Es besteht kein Bedarf für viele Felder für einen trivialen Codetag; 5) Felder mit unbekannten Werten (t:XXX) sollten nicht verwendet werden.

i = i + 1   # TODO Add some more codetags.
# <JRNewbie 2005-04-03 d:2005-09-03 t:XXX d:14w p:0 s:inprogress>

Spezifikation

Dies beschreibt das Format: Syntax, mnemotechnische Namen, Felder und Semantik sowie die separate ERLEDIGT-Datei.

Allgemeine Syntax

Jeder Codetag sollte sich innerhalb eines Kommentars befinden und kann beliebig viele Zeilen umfassen. Er sollte keine Zeile mit Code teilen. Er sollte der Einrückung des umgebenden Codes entsprechen. Das Ende des Codetags wird durch ein Paar von spitzen Klammern <> markiert, die optionale Felder enthalten, welche nicht auf mehrere Zeilen aufgeteilt werden dürfen. Es ist vorzuziehen, einen Codetag in #-Kommentaren anstelle von String-Kommentaren zu verwenden. Es können mehrere Felder pro Codetag vorhanden sein, die alle optional sind.

Kurz gesagt, ein Codetag besteht aus einer Mnemotechnik, einem Doppelpunkt, Kommentartext, einer öffnenden spitzen Klammer, einer optionalen Liste von Feldern und einer schließenden spitzen Klammer. Z. B.

# MNEMONIC: Some (maybe multi-line) commentary. <field field ...>

Mnemonika

Die relevanten Codetags sind unten aufgelistet, unter Verwendung des folgenden Formats

empfohlen mnemotechnisch (& Synonym- Liste)
kanonischer Name: Semantik
TODO (MILESTONE, MLSTN, DONE, YAGNI, TBD, TOBEDONE)
Zu erledigen: Informelle Aufgaben/Funktionen, die noch abgeschlossen werden müssen.
FIXME (XXX, DEBUG, BROKEN, REFACTOR, REFACT, RFCTR, OOPS, SMELL, NEEDSWORK, INSPECT)
Fix me: Bereiche mit problematischem oder unschönem Code, die refactoring oder Bereinigung benötigen.
BUG (BUGFIX)
Fehler: Gemeldete Defekte, die in einer Fehlerdatenbank verfolgt werden.
NOBUG (NOFIX, WONTFIX, DONTFIX, NEVERFIX, UNFIXABLE, CANTFIX)
Wird nicht behoben: Probleme, die gut bekannt sind, aber aufgrund von Designproblemen oder Einschränkungen des Domänenbereichs niemals behoben werden.
REQ (REQUIREMENT, STORY)
Anforderungen: Erfüllung spezifischer, formaler Anforderungen.
RFE (FEETCH, NYI, FR, FTRQ, FTR)
Anfragen für Erweiterungen: Roadmap-Elemente, die noch nicht implementiert sind.
IDEA
Ideen: Mögliche RFE-Kandidaten, aber weniger formal als RFE.
??? (QUESTION, QUEST, QSTN, WTF)
Fragen: Missverstandene Details.
!!! (ALERT)
Warnungen: Benötigt sofortige Aufmerksamkeit.
HACK (CLEVER, MAGIC)
Hacks: Temporärer Code, um unflexible Funktionalität zu erzwingen, oder einfach eine Teständerung, oder um ein bekanntes Problem zu umgehen.
PORT (PORTABILITY, WKRD)
Portabilität: Workarounds spezifisch für OS, Python-Version usw.
CAVEAT (CAV, CAVT, WARNING, CAUTION)
Vorbehalte: Implementierungsdetails/Fallstricke, die als unintuitiv hervorstechen.
NOTE (HELP)
Hinweise: Abschnitte, bei denen ein Code-Reviewer etwas fand, das besprochen oder weiter untersucht werden muss.
FAQ
Häufig gestellte Fragen: Interessante Bereiche, die eine externe Erklärung erfordern.
GLOSS (GLOSSARY)
Glossar: Definitionen für das Projektglossar.
SEE (REF, REFERENCE)
Siehe: Verweise auf anderen Code, Weblink usw.
TODOC (DOCDO, DODOC, NEEDSDOC, EXPLAIN, DOCUMENT)
Dokumentation erforderlich: Codebereiche, die noch dokumentiert werden müssen.
CRED (CREDIT, THANKS)
Credits: Anerkennung für externe Bereitstellung von Aufklärung.
STAT (STATUS)
Status: Dateiebene statistische Anzeige des Reifegrades dieser Datei.
RVD (REVIEWED, REVIEW)
Überprüft: Dateiebene Anzeige, dass eine Überprüfung durchgeführt wurde.

Dateiebene Codetags könnten besser als Eigenschaften im Versionskontrollsystem geeignet sein, könnten aber dennoch angemessen in einem Codetag spezifiziert werden.

Einige davon sind temporär (z. B. FIXME), während andere persistent sind (z. B. REQ). Eine Mnemotechnik wurde gegenüber einem Synonym anhand von drei Kriterien gewählt: Beschreibungsfähigkeit, Länge (kürzer ist besser), häufige Verwendung.

Die Wahl zwischen FIXME und XXX ist schwierig. XXX scheint häufiger, aber viel weniger beschreibend zu sein. Darüber hinaus ist XXX ein nützlicher Platzhalter in einem Codefragment mit einem unbekannten Wert. Daher ist FIXME die bevorzugte Schreibweise. Sun sagt, dass XXX und FIXME leicht unterschiedlich sind, wobei XXX eine höhere Schwere aufweist. Mit Jahrzehnten des Chaos zu diesem Thema und zu vielen Millionen Entwicklern, die nicht von Sun beeinflusst werden, ist es jedoch leicht, sie zu Recht als Synonyme zu bezeichnen.

DONE ist immer ein abgeschlossenes TODO-Element, aber dies sollte wahrscheinlich über das Versionskontrollsystem und/oder einen Mechanismus zur Aufzeichnung der Fertigstellung angezeigt werden (siehe ERLEDIGT-Datei).

Es kann eine nützliche Metrik sein, NOTE-Tags zu zählen: eine hohe Anzahl kann auf ein Designproblem (oder ein anderes Problem) hinweisen. Aber natürlich zeigen die meisten Codetags Bereiche des Codes an, die einige Aufmerksamkeit erfordern.

Ein FAQ wird wahrscheinlich besser in einem Wiki dokumentiert, wo Benutzer leichter darauf zugreifen und dazu beitragen können.

Felder

Alle Felder sind optional. Die vorgeschlagenen Standardfelder werden in diesem Abschnitt beschrieben. Beachten Sie, dass Feldzeichen in Großbuchstaben als Platzhalter gedacht sind.

Die Felder Urheber/Zuweisung und Ursprungsdatum/Woche sind die gebräuchlichsten und benötigen normalerweise kein Präfix.

Diese lange Liste von Feldern schreckt wahrscheinlich Leute (die Minimalisten) von der Übernahme von Codetags ab, aber bedenken Sie, dass diese nur dazu dienen, Programmierer zu unterstützen, die entweder 1) BUG- oder RFE-Codetags vollständig halten möchten, oder 2) Codetags als ihr vollständiges und einziges Tracking-System verwenden. Mit anderen Worten, viele dieser Felder werden nur sehr selten verwendet. Sie sind größtenteils aus branchenweiten Konventionen zusammengestellt, und als Beispiele dienen GCC Bugzilla und Pythons SourceForge Tracking-Systeme.

AAA[,BBB]...
Liste von Urheber- oder Zuweisungs-Initialen (der Kontext bestimmt, welches, es sei denn, beide sollten vorhanden sein). Es ist auch in Ordnung, Benutzernamen wie MicahE anstelle von Initialen zu verwenden. Initialen (in Großbuchstaben) sind die bevorzugte Form.
a:AAA[,BBB]...
Liste von Zuweisungs-Initialen. Dies ist nur in (seltenen) Fällen erforderlich, in denen ein Codetag sowohl einen Zuweisungsempfänger als auch einen Urheber hat und diese unterschiedlich sind. Andernfalls wird das Präfix a: weggelassen, und der Kontext bestimmt die Absicht. Z. B. hat FIXME normalerweise einen Zuweisungsempfänger, und NOTE hat normalerweise einen Urheber, aber wenn ein FIXME von einem Gutachter urheberrechtlich geschützt wurde (und initialisiert wurde), dann benötigen die Initialen des Zuweisungsempfängers ein a:-Präfix.
YYYY[-MM[-DD]] oder WW[.D]w
Das Datumsdatum der Urheberschaft, das angibt, wann der Kommentar hinzugefügt wurde, im ISO 8601-Format (nur Ziffern und Bindestriche). Oder Ursprungswoche, eine alternative Form zur Angabe eines Ursprungsdatums. Ein Wochentag kann optional angegeben werden. Das Suffix w ist notwendig, um es von einem Datum zu unterscheiden.
d:YYYY[-MM[-DD]] oder d:WW[.D]w
Fälligkeitsdatum (d) Zielabschluss (Schätzung). Oder Fälligkeitswoche (d), eine Alternative zur Angabe eines Fälligkeitsdatums.
p:N
Prioritätsstufe (p). Bereich (N) ist von 0..3, wobei 3 am höchsten ist. 0..3 sind analog zu niedrig, mittel, hoch und Stopp-Aktion/kritisch. Das Feld Schweregrad könnte in diese einzelne Zahl einfließen, und dies wird empfohlen, da beide einer unterschiedlichen Interpretation unterliegen können. Der Bereich und die Reihenfolge sollten anpassbar sein. Die Existenz dieses Feldes ist wichtig für jedes Werkzeug, das Codetags aufzählt. Daher sollte ein (anpassbarer) Standardwert unterstützt werden.
t:NNNN
Tracker (t) Nummer, die der zugehörigen Ticket-ID in einem separaten Tracking-System entspricht.

Die folgenden Felder sind ebenfalls verfügbar, werden aber seltener erwartet.

c:AAAA
Kategorie (c), die einen bestimmten Bereich angibt, der von diesem Element betroffen ist.
s:AAAA
Status (s), der den Zustand des Elements angibt. Beispiele sind "unerforscht", "verstanden", "in Bearbeitung", "behoben", "erledigt", "geschlossen". Beachten Sie, dass es wahrscheinlich besser ist, den Codetag zu entfernen und in einer ERLEDIGT-Datei zu speichern, wenn ein Element abgeschlossen ist.
i:N
Entwicklungszyklus Iteration (i). Nützlich zum Gruppieren von Codetags in Zielgruppen für den Abschluss.
r:N
Entwicklungszyklus Version (r). Nützlich zum Gruppieren von Codetags in Zielgruppen für den Abschluss.

Zusammenfassend lässt sich sagen, dass die Felder ohne Präfix Initialen und Ursprungsdatum sind, und die Felder mit Präfix sind: Zuweisung (a), Fälligkeit (d), Priorität (p), Tracker (t), Kategorie (c), Status (s), Iteration (i) und Version (r).

Es sollte möglich sein, dass Gruppen eigene Felder definieren oder hinzufügen, und diese sollten Großbuchstaben-Präfixe haben, um sie vom Standardsatz zu unterscheiden. Beispiele für benutzerdefinierte Felder sind Betriebssystem (O), Schweregrad (S), Betroffene Version (A), Kunde (C) usw.

ERLEDIGT-Datei

Einige Codetags können abgeschlossen werden (z. B. FIXME, TODO, BUG). Es ist oft wichtig, abgeschlossene Elemente zu behalten, indem sie mit einem Fertigstellungsdatum aufgezeichnet werden. Solche abgeschlossenen Elemente werden am besten an einem einzigen Ort, global für ein Projekt (oder vielleicht ein Paket), gespeichert. Das vorgeschlagene Format wird am einfachsten durch ein Beispiel beschrieben, z. B. ~/src/fooproj/DONE

# TODO: Recurse into subdirs only on blue
# moons. <MDE 2003-09-26>
[2005-09-26 Oops, I underestimated this one a bit.  Should have
used Warsaw's First Law!]

# FIXME: ...
...

Sie sehen, dass der Codetag wörtlich aus der ursprünglichen Quelldatei kopiert wird. Das Datumsstempel wird dann in der nächsten Zeile mit einem optionalen Post-Mortem-Kommentar eingegeben. Der Eintrag wird durch eine Leerzeile (\n\n) abgeschlossen.

Es mag mühsam klingen, Codetag-Zeilen jedes Mal löschen zu müssen, wenn sie abgeschlossen sind. Aber in der Praxis ist es recht einfach, eine Vim- oder Emacs-Zuordnung einzurichten, um eine Codetag-Löschung in diesem Format (ohne den Kommentar) automatisch aufzuzeichnen.

Werkzeuge

Derzeit verwenden Programmierer (und manchmal Analysten) typischerweise grep, um eine Liste von Elementen zu generieren, die einem einzelnen Codetag entsprechen. Verschiedene hypothetische Produktivitätstools könnten jedoch von einem konsistenten Codetag-Format profitieren. Einige Beispielwerkzeuge folgen.

Dokumentengenerator
Mögliche Dokumente: Glossar, Roadmap, Manpages
Codetag-Historie
Verfolgen (mit Schnittstelle zum Versionskontrollsystem), wann ein BUG-Tag (oder ein beliebiger Codetag) in einem Codeabschnitt entstanden/behoben wurde.
Code-Statistiken
Ein Projekt-Health-O-Meter
Codetag Lint
Benachrichtigung über ungültige Verwendung von Codetags und Unterstützung bei der Portierung zu Codetags.
Story Manager/Browser
Ein elektronisches Mittel, um XP-Notizkarten zu ersetzen. In MVC-Begriffen ist der Codetag das Modell, und der Story Manager könnte ein grafischer Viewer/Controller sein, um visuelle Neuordnung, Priorisierung und Zuweisung sowie Meilensteinverwaltung durchzuführen.
Jeder Texteditor
Wird zum Ändern, Entfernen, Hinzufügen, Neuordnen und Aufzeichnen von Codetags verwendet.

Es gibt bereits einige existierende Tools, die eine kleinere Menge von Pseudo-Codetags nutzen (siehe Referenzen). Es gibt auch eine beispielhafte Codetags-Implementierung in Arbeit, bekannt als das Codetag-Projekt.

Einwände

Einwand:
Extreme Programming argumentiert, dass solche Codetags niemals im Code existieren sollten, da der Code die Dokumentation ist.
Verteidigung:
Vielleicht sollten Sie die Codetags stattdessen in den Unit-Test-Dateien platzieren. Außerdem ist es schwierig, Dokumentation aus nicht kommentiertem Quellcode zu generieren.

Einwand:
Zu viel vorhandener Code hat die vorgeschlagenen Richtlinien nicht befolgt.
Verteidigung:
[Einfache] Dienstprogramme (ctlint) könnten existierenden Code konvertieren.

Einwand:
Verursacht Duplizierung mit dem Tracking-System.
Verteidigung:
Nicht wirklich, es sei denn, die Felder werden missbraucht. Wenn ein Element im Tracker vorhanden ist, reicht eine einfache Ticketnummer im Codetag-Trackerfeld aus. Vielleicht wäre ein duplizierter Titel akzeptabel. Außerdem ist es zu mühsam, für jeden Punkt, der einem Entwickler auf die Schnelle einfällt, ein Ticket zu erstellen. Darüber hinaus könnte das Tracking-System für einfache oder kleine Projekte, die die relevanten Daten angemessen in einem Codetag unterbringen können, möglicherweise entfallen.

Einwand:
Codetags sind hässlich und vermüllen den Code.
Verteidigung:
Das ist ein guter Punkt. Aber ich hätte diese Information lieber an einem Ort (dem Quellcode) als in verschiedenen anderen Dokumenten, die wahrscheinlich dupliziert oder vergessen werden. Die abgeschlossenen Codetags können in die ERLEDIGT-Datei oder in den Papierkorb verschoben werden.

Einwand:
Codetags (und alle Kommentare) werden veraltet.
Verteidigung:
Nicht so sehr, wenn andere Quellen (extern sichtbare Dokumentation) von ihrer Richtigkeit abhängen.

Einwand:
Codetags haben selten geschätzte Fertigstellungstermine jeglicher Art. OK, die Felder sind optional, aber Sie möchten Felder vorschlagen, die tatsächlich weit verbreitet sein werden.
Verteidigung:
Wenn ein Element nicht schätzbar ist, geben Sie kein Datumsfeld an. Mit Werkzeugen, die Elemente nach Fälligkeitsdatum und/oder Priorität nach Ordnung und/oder Farbe anzeigen, ist es einfacher, Schätzungen vorzunehmen. Wenn Ihre Roadmap eine dynamische Reflexion Ihrer Codetags ist, ist es viel wahrscheinlicher, dass Sie die Codetags korrekt halten.

Einwand:
Benannte Variablen für die Feldparameter in den <> sollten anstelle von kryptischen Ein-Buchstaben-Präfixen verwendet werden. D. h. <MDE p:3> sollte eher <author=MDE, priority=3> sein.
Verteidigung:
Es ist einfach zu viel Tippen/Umständlichkeit, Felder auszuschreiben. Ich argumentiere, dass p:3 i:2 genauso gut lesbar ist wie priority=3, iteration=2 und es ist viel wahrscheinlicher, dass es getippt und erinnert wird (siehe Punkt C in Philosophie). In diesem Fall übertrifft Praktikabilität die Reinheit. Es gibt nicht viele Felder zu verfolgen, daher sind Ein-Buchstaben-Präfixe geeignet.

Einwand:
Synonyme sollten veraltet werden, da es besser ist, nur eine Möglichkeit zu haben, etwas zu schreiben.
Verteidigung:
Viele Programmierer bevorzugen kurze mnemotechnische Namen, besonders in Kommentaren. Deshalb wurden kurze Mnemotechniken als primäre Namen gewählt. Andere sind jedoch der Meinung, dass eine explizite Schreibweise weniger verwirrend und weniger fehleranfällig ist. Es wird immer zwei Lager zu diesem Thema geben. Daher sollten Synonyme (und vollständige, ausgeschriebene Schreibweisen) weiterhin unterstützt werden.

Einwand:
Es ist grausam, undurchsichtige Akronyme und Abkürzungen zu verwenden (für Mnemotechniken), die Vokale weglassen; es ist schwer, diese herauszufinden. Aus diesem Grund hasse ich: MLSTN RFCTR RFE FEETCH, NYI, FR, FTRQ, FTR WKRD RVDBY
Verteidigung:
Mnemotechniken werden bevorzugt, da sie recht einfach zu merken sind und weniger Platz einnehmen. Wenn Programmierer keine Vokale weglassen würden, könnten wir nur sehr wenig Code auf eine Zeile bringen. Der Platz ist wichtig für diejenigen, die Kommentare schreiben, die oft auf eine einzige Zeile passen. Aber bei der universellen Verwendung einer Kanone ist es viel unwahrscheinlicher, etwas auf eine Zeile zu bekommen.

Einwand:
Es dauert zu lange, die Felder einzugeben.
Verteidigung:
Dann verwenden Sie sie (die meisten oder keine von ihnen) nicht, besonders wenn Sie der einzige Programmierer sind. Das Beenden eines Codetags mit <> ist eine kleine Mühe, und damit ermöglichen Sie die Nutzung der vorgeschlagenen Werkzeuge. Editor-Autovervollständigung von Codetags ist ebenfalls nützlich: Sie können Ihren Editor programmieren, um eine Vorlage zu stempeln (z. B. # FIXME . <MDE {date}>) mit nur einem oder zwei Tastendrücken.

Einwand:
Arbeitswoche ist eine obskure und unübliche Zeiteinheit.
Verteidigung:
Das stimmt, aber es ist eine sehr geeignete Granularitätseinheit für Schätzungs-/Zielzwecke und ist sehr kompakt. Der ISO 8601 ist weithin verstanden, erlaubt aber nur die Angabe eines bestimmten Tages (restriktiv) oder Monats (breit).

Einwand:
Ich lehne es ästhetisch ab, dass der Kommentar im Fall eines leeren Feldes mit <> beendet wird.
Verteidigung:
Es ist notwendig, einen Abschluss zu haben, da Codetags von Nicht-Codetag-Kommentaren gefolgt werden können. Oder Codetags könnten auf eine einzige Zeile beschränkt werden, aber das ist prohibitiv. Mir fällt kein einzelnes Zeichen als Abschluss ein, das angemessen und signifikant besser als <> ist. Vielleicht könnte @ ein Abschluss sein, aber dann werden die meisten Codetags ein unnötiges @ haben.

Einwand:
Ich kann keine Codetags verwenden, wenn ich HTML schreibe, oder weniger spezifisch, XML. Vielleicht wäre @fields@ besser als <fields> als Trennzeichen.
Verteidigung:
Vielleicht haben Sie Recht, aber <> sieht besser aus, wenn anwendbar. XML/SGML könnten @ verwenden, während gängigere Programmiersprachen bei <> bleiben.

Referenzen

Einige andere Werkzeuge haben sich der Definition/Ausnutzung von Codetags genähert. Siehe http://tracos.org/codetag/wiki/Links.


Quelle: https://github.com/python/peps/blob/main/peps/pep-0350.rst

Zuletzt geändert: 2025-02-01 08:59:27 GMT