Ho appena provato l'implementazione di jEdit di tabstops elastici, che funziona incredibilmente bene con i linguaggi di programmazione con cui ho familiarità (principalmente HTML / XML e linguaggi simil-C). Con il codice Python, tuttavia, ecco come viene eseguito il rendering (spazi utilizzati al posto delle schede per illustrare come le cose si allineano):
def foo(x):
'''<1 tab before the docstring.
No tab <tab
No tab <tab
<tab <another tab
<tab <another tab
<tab'''
if 1 or 2: #<Tab before this comment
yield True
Per un linguaggio come Python che si basa sulla spaziatura, questo è un rompicapo a meno che non si disabiliti la funzionalità fornita da tabstops elastici. Editor come Vim ed Emacs rendono semplice disabilitare la maggior parte dei tipi di funzionalità se si conosce il nome dell'opzione e come disabilitarlo, ma questa funzionalità dovrebbe essere disabilitata per il codice come sopra.
Detto questo, è ottimo per x86 ASM, C, C ++, Go, XML, HTML e altri che non fanno tanto affidamento sugli spazi bianchi:
import (
"fmt" // We love formatting functions.
"io" // Because I/O is useful.
"os" // Can't open a file without os.Open!
)
type Foo struct {
Field1 int // This is properly aligned
ReallyLongField2 string // with this.
privateField io.Reader // Elastic tabstops are great for Go.
}
Dirò che i dialetti di Lisp come Scheme hanno le loro convenzioni che renderebbero anche il tab "elastico" il rendering di tabstops elastici. Se cambio le mie impostazioni tabstop in modo che corrispondano alla convenzione di 2 colonne e inserisco tabstop in punti insoliti (tra una funzione e i suoi argomenti):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. il più leggibile:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Certo, questo non è male come nell'esempio di Python, ma riduce decisamente la leggibilità del codice. Mentre mi piace molto la funzionalità quando scrivo in qualcosa come C # o C ++, detesto la funzionalità quando scrivo in un linguaggio come Python o Scheme in cui lo spazio bianco è funzionale e / o visivamente utile. I tabstops elastici sono stati creati appositamente per essere utili senza richiedere un'utilità di rientro separata, ma chiaramente non è pensata per tutti i linguaggi di programmazione.