Schauen Sie hier: Ein typischer heiliger Krieg zwischen Tabs und Leerzeichen .
Schauen Sie jetzt hier: elastische Tabstops . Alle Probleme wurden gelöst und eine Reihe sehr nützlicher neuer Verhaltensweisen hinzugefügt.
Werden elastische Tabstops in der Diskussion zwischen Tabs und Leerzeichen überhaupt erwähnt? Warum nicht? Gibt es Nachteile bei der elastischen Tabstop-Idee, die so gravierend sind, dass niemand sie jemals in einem beliebten Editor implementiert hat?
EDIT : Ich entschuldige mich dafür, dass ich zu viel Wert auf "Warum werden sie nicht erwähnt" lege. Das war nicht wirklich das, was ich beabsichtigt hatte; Diese Frage ist möglicherweise sogar vom Thema ab. Was ich wirklich meine ist, was sind die größten Nachteile davon, die eine weitere Übernahme einer offensichtlich vorteilhaften Idee verhindern? (In einer idealen Welt, in der alles schon alles unterstützt)
(Es hat sich herausgestellt, dass in Microsoft Connect bereits eine Anfrage nach einer Visual Studio-Implementierung von elastischen Tabstops und auch in Eclipse vorliegt . Außerdem werden Fragen zu anderen Editoren gestellt, die elastische Tabstops implementieren. )
quelle
Antworten:
Heilige Kriege sind subjektiv
Nicks elastische Tabstops sind ein erstaunliches Konzept , das vielen Leuten helfen könnte, sich auf eine praktikable Lösung zu einigen, obwohl ich sehr bezweifle, dass es diesen Heiligen Krieg gänzlich beenden würde: Es ist schließlich auch eine Frage des Geschmacks und viele Programmierer werden sich nicht bewegen Zoll von ihrer Position in dieser Angelegenheit, auch auf Kosten des Kompromisses. Das wäre also ein erster Grund.
Zum Beispiel werden es viele Leute auf der Seite "Leerzeichen" immer noch nicht mögen, da es ein zusätzliches Stück Logik in Ihrer Software für ein anständiges Rendern erfordert (z. B. einfaches Anzeigen eines Änderungssatzes in der Webansicht Ihres SCM).
Umsetzungsfragen
Aber der offensichtlichste Grund ist nur seine technische Barriere für den Eintritt : es ist ein grundlegend anderes Konzept von dem, was für eine Reihe von Jahren umgesetzt wurde (wenn nicht Jahrzehnte) in IDEs und Texteditoren. Einige von ihnen müssten neu geschrieben werden, um Zeilen in einer anderen Fasion zu verarbeiten. Dies erschwert es älteren und größeren Systemen, bei denen die Wahrscheinlichkeit einer tiefen und engen Kopplung im Zeilenverarbeitungscode höher ist. Es ist jedoch viel einfacher, wenn Sie bei Null anfangen (denken Sie an Nicks Demo oder an Go 's Tabwriter- Paket).
Als persönliche Anekdote erinnere ich mich, dass ich mich vor einiger Zeit an den Autor gewandt habe, um ihn zu fragen, ob Unterstützung für den Emac in Sicht war. Er bat auch die Community um Hilfe, um dieses Feature zu implementieren und der Masse zugänglich zu machen.
Kümmern wir uns genug?
Ein dritter Grund ist, dass einige Entwickler nicht so aufgelegt sind und sich nicht so sehr darum kümmern, dass sie sich die Mühe machen würden, die Bemühungen zu unterstützen. In den meisten Fällen ist der Konflikt zwischen Leerzeichen und Tabulatoren kein Business-Blocker.
Wenn du es willst, musst du dafür kämpfen. Was in Open-Source-Software machbar ist. Und wenn Sie genug davon ändern, müssen Closed-Source-Produkte auf die Gefahr folgen, einen Teil ihrer Nutzerbasis zu verlieren, wenn ein noch so kleiner Teil davon.
Also, wenn du willst, hilf Nick.
quelle
Oft musste ich mit einem Textverarbeitungsprogramm kämpfen, damit das Dokument so aussah, wie ich es wollte, ohne dass eine versteckte automatische Regel die Platzierung meiner Wörter kontrollierte. Ich möchte nicht eine Sekunde damit verbringen, herauszufinden, warum der Herausgeber darauf besteht, diese Wörter dort zu platzieren.
quelle
Dies ist das erste Mal, dass ich davon hörte. Ich bin mir nicht sicher, ob sie eine gute Idee sind, aber sie scheinen wenig nützlich zu sein, da wir Werkzeuge (wie Einrückungen) haben, die Code bereits automatisch formatieren.
Was passiert, wenn ich Ihre cleveren elastischen Tabstops in Vim öffne und bearbeite? Bereinigt sich der Tab automatisch oder bleibt ein Durcheinander zurück?
Die Hauptnachteile, wie ich sie sehe, sind möglicherweise das Brechen von Diffs, die Versionskontrolle und die Unverträglichkeit mit Editoren, die sie nicht unterstützen. Möglicherweise ist es eine Menge Code-Modifikation, um sie zu unterstützen, und es gibt wichtigere Dinge als die Funktion "Noch eine Tab-Sache, um Code zu formatieren". Schließlich können wir alle verwenden,
indent
was alles oben genannte tut, wenn der Speicher dient.quelle
Um ehrlich zu sein, finde ich sie nicht so nützlich, wenn Sie die anfängliche Aufregung überwunden haben. Zum Beispiel mag ich sowieso keine Kommentare am Ende einer Zeile - ich setze meine Kommentare immer in eine separate Zeile. Dadurch verlieren elastische Laschen ihre Hauptverwendung.
Danach können Sie sie natürlich weiterhin zum Ausrichten von Funktionsargumenten (und Parametern) und langen Zuweisungslisten verwenden.
Aber für die erstere neige ich dazu, alle Argumente nur um eine zusätzliche Ebene einzurücken, und das funktioniert bei mir ganz gut:
Und ich sehe keinen Grund, das zu ändern.
Und was das Ausrichten von Aufgaben angeht, mache ich das nicht. Ich setze einzelne Leerzeichen um Aufgaben, das war's. Ich neige auch dazu, viele Aufgaben nicht zu gruppieren, so dass es selten irgendwelche Lesbarkeitsprobleme gibt.
Zusammengefasst haben elastische Zungen absolut Null Nutzen für mich. Dies ist natürlich eine sehr persönliche Präferenz, die variieren kann, aber ich finde, dass sie gut funktioniert und ich denke, dass der Mangel an Unterstützung für elastische Laschen darauf zurückzuführen ist, dass andere Leute ähnlich denken.
Wenn ein Editor sie implementieren würde, würde ich sie immer noch nicht verwenden.
quelle
Ein Nachteil ist, dass es nicht funktioniert, wenn Sie die Ausrichtung in einer Gruppe von Zeilen und dann die Einrückung in der nächsten Gruppe möchten, da die Tabulatoren benachbarter Zeilen gruppiert werden.
Was ich wollte:
Bei Sprachen mit geschweiften Klammern ist dies möglicherweise weniger problematisch, da Sie dies normalerweise lösen können, indem Sie die öffnende Klammer in eine eigene Zeile setzen (wie in der Animation). und am Ende müssen Sie auf die Verwendung von Leerzeichen zurückgreifen.
quelle
wibble()
nur eine einzige Einrückung und wäre daher nicht an den Funktionsargumenten ausgerichtet?Warum lassen wir nicht einfach das vertikale Tabulatorzeichen (VT, ASCII 11) als Hinweis auf die Verwendung von elastischen Tabulatoren dienen? Es hat in keiner der gängigen Programmiersprachen einen Zweck , wird jedoch in allen von ihnen, AFAIK, als gültiges Leerzeichen analysiert.
Dies würde bedeuten, dass die Verwendung von elastischen Tabstops keine externe Konvention mehr ist (z. B. "Diese Datei wurde mit elastischen Tabstops formatiert, bitte aktivieren Sie sie"), sondern etwas, das Sie von Fall zu Fall auswählen.
In vorhandenen Texteditoren wird in der Regel anstelle eines vertikalen Tabulators eine Glyphe oder ein einzelnes Leerzeichen angezeigt. Dies ist nicht ideal, aber ein kleiner Preis zu zahlen, IMO.
quelle
Sie werden nicht erwähnt, da sie in den meisten IDEs von Texteditoren nicht implementiert sind. Sie sind eine Neuheit, die in einem Projekt kaum wirklich Verwendung findet.
Seit den Tagen der Lochkarten wurden Leerzeichen verwendet, um die Programmierung zu gestalten. Tabs kamen und jemand hielt sie offensichtlich für eine gute Idee (sie täuschten sich: p).
In den Tagen, in denen die meisten modernen Editoren Tabulatoren automatisch in Leerzeichen konvertieren können, sind sie ziemlich sinnlos.
Ein weiteres Tool installieren zu müssen, um mit etwas so Trivialem wie Tabs vs.
quelle
Ich denke, dass sie viel Nutzen finden würden, wenn IDEs sie unterstützen würden (Microsoft!). Sobald die Leute herausgefunden haben, dass sie ihre Blumenkästen auf die Seite schlagen und sie gut lesbar haben, werden sie es tun. Möglicherweise werden plötzlich mehr Kommentare zum Quellcode hinzugefügt (was nur eine gute Sache sein kann).
Ich nehme an, wir könnten der Liste "Wäre es gut, wenn ..." auch "Tooltips" für Kommentare hinzufügen, damit Ihre großen Kommentarblöcke bei Bedarf einfach ausgeblendet und angezeigt werden können. Möglicherweise könnten wir auch Kommentarblöcke haben, die Teil der Dokumentation sind (keine Sandburg-artigen Inhalte, korrekte, vom Benutzer lesbare Dokumentationsschnipsel, die in den Code eingebettet waren, nicht nur die Methodenköpfe).
Nachteile: Es kann dazu führen, dass Ihre Quelldifferenzen schlecht aussehen, wenn ein paar Zeilen so aussehen, als wären sie geändert worden, als wirklich nur 1 geändert wurde (wenn der Editor die Datei mit den in Leerzeichen konvertierten Registerkarten gespeichert hat). Wenn der elastische Tabulator mit einem einzelnen Zeichen implementiert wurde (oder eher mit 2 Tabulatoren), kann die Anzeige Ihrer Quelle außerhalb des Editors schlecht aussehen.
Ich denke, die Idee gefällt mir, 'Tabulator Tabulator' am Ende einer Zeile macht den Kommentarblock elastisch und richtet alle Kommentare in nachfolgenden Zeilen (die den doppelten Tabulatorabstand haben) entsprechend aus.
quelle
So sehe ich das: Wenn die meisten gängigen Tools bereits elastische Tabstops unterstützen würden, würden viele Leute sie verwenden. Dasselbe geschah mit dem Navigations- / Bearbeitungsmodus von vi, mit Syntaxhervorhebung und später mit Intellisense. In jedem Fall war die etablierte Weisheit, dass es nicht nützlich ist oder nicht benötigt wird, aber es wurde implementiert und es ging los.
Elastische Tabstops haben natürlich eine relativ geringe Auswirkung. Die meisten Menschen sind mit dem Status quo zufrieden und interessieren sich daher nicht dafür. Eine ähnliche Überlegung wird auf viele Situationen angewendet, in denen manche Menschen nur mit dem zufrieden sind, was sie haben, und keinen Grund sehen, auf etwas Fortgeschritteneres umzusteigen. Mit anderen Worten, das größte Problem bei elastischen Tabstops ist dasselbe wie bei fast jeder anderen guten Idee: Sie müssen an Bodenhaftung gewinnen.
Dies bedeutet jedoch nicht, dass die Funktion nicht schrittweise übernommen werden kann. Jede einzelne Programmiersprache wurde schrittweise übernommen, obwohl ein ganzes Team einen neuen Compiler und eine neue IDE benötigt, um sie zu verwenden. Gleiches gilt für jede einzelne Hardwarearchitektur und viele weitere Beispiele. Es ist auch nicht der Fall, dass die mangelnde Integration in vorhandene Tools ein Show-Stopper ist: Dies gilt beispielsweise auch für das „Unified-Diff-Format“, das ein früher weniger lesbares Format, das von automatisierten Tools dennoch verstanden wurde, schrittweise ersetzte (wie Patch). Diese Tools wurden im Laufe der Zeit aktualisiert.
Ich schätze die Interop-Probleme, die andere angesprochen haben, aber trotz alledem wird es sicherlich Teams (wie meine) geben, die dies in unserer Gesamtheit ohne zu zögern übernehmen würden. Externe Tools wie Vergleichen, Zusammenführen usw. unterstützen dies zunächst nicht. Wir würden jedoch unseren Teil dazu beitragen, die Anbieter zu ermutigen, die Funktion einzuschließen. So wurden immer Fortschritte erzielt. Es erfordert einige Schmerzen für eine vorübergehende Übergangszeit, aber am Ende lohnt es sich.
quelle
Das größte Problem, das ich damit hätte, ist der inkonsistente Abstand in der gesamten Dokumentation. Ich weiß, dass ich mich als Programmierer ärgern würde, wenn ich eine Schleifen- oder if-Anweisung bei 'Standard'-Einrückungen sehe und dann bei verschiedenen Einrückungen bemerke. Ich persönlich mag es, wenn alle meine geschweiften Klammern in der Dokumentation zusammengefasst sind, nicht nur in dem Codeblock, den ich gerade betrachte.
Insgesamt halte ich es jedoch für eine schöne Idee, aber persönlich würde ich es nicht mögen.
quelle
Ich habe gerade die Implementierung elastischer Tabstops in jEdit ausprobiert, die mit den mir vertrauten Programmiersprachen (hauptsächlich HTML / XML und C-ähnliche Sprachen) erstaunlich gut funktioniert. Mit Python-Code wird jedoch wie folgt gerendert (Leerzeichen anstelle von Tabulatoren, um die Ausrichtung zu veranschaulichen):
Für eine Sprache wie Python, die auf Abstand basiert, ist dies ein Deal-Breaker, es sei denn, Sie deaktivieren die von elastischen Tabstops bereitgestellten Funktionen. Editoren wie Vim und Emacs vereinfachen das Deaktivieren der meisten Arten von Funktionen, wenn Sie den Namen der Option kennen und wissen, wie sie deaktiviert werden können. Diese Funktionalität muss jedoch für Code wie den oben genannten deaktiviert werden.
Das heißt, es ist großartig für x86 ASM, C, C ++, Go, XML, HTML und andere, die nicht so sehr auf Leerzeichen setzen:
Ich werde sagen, dass Lisp-Dialekte wie Scheme ihre eigenen Konventionen haben, mit denen elastische Tabstops auch "hässlichen" Code rendern. Wenn ich meine Tabulatoreinstellungen an die Konvention von 2 Spalten anpasse und Tabulatoren an ungewöhnlichen Stellen einfüge (zwischen einer Funktion und ihren Argumenten):
desto besser lesbar:
Zugegeben, dieses ist nicht so schlecht wie das Python-Beispiel, aber es verringert definitiv die Lesbarkeit des Codes. Während ich die Funktionalität beim Codieren in etwas wie C # oder C ++ sehr genieße, verabscheue ich die Funktionalität beim Codieren in einer Sprache wie Python oder Scheme, in der Whitespace funktionell und / oder visuell hilfreich ist. Elastische Tabstops wurden speziell erstellt, um ohne ein separates Einrückungsprogramm hilfreich zu sein, aber es ist eindeutig nicht für alle Programmiersprachen gedacht.
quelle
Emacs bereits behandelt Einzug in Gegenwart von nicht geschlossenen Klammern und werden automatisch ausrichten wilma mit fred . Ich habe keine Ahnung, warum Eclipse nicht dasselbe tut. Ok, ich habe eine Idee, aber sie ist unkompliziert.
Sie könnten Emacs auch dazu bringen, den Kommentar ohne viel Mühe anzupassen, aber AFAIK niemand außer Ihnen hat das jemals gewollt.
quelle
wilma
Bearbeitung erneut eingerückt, z. B. beim Ändern der Länge des Funktionsnamens? Wenn ja, ist das ziemlich ähnlich wie bei elastischen Tabstops.