Veja aqui: uma típica guerra santa entre abas e espaços .
Agora veja aqui: tabstops elásticos . Todos os problemas resolvidos e um monte de novos comportamentos muito úteis adicionados.
As guias elásticas são mencionadas na discussão sobre guias versus espaços? Por que não? Existem desvantagens na idéia elástica do tabstop tão séria que ninguém jamais as implementou em um editor popular?
EDIT : Peço desculpas por colocar muita ênfase em "por que eles não são mencionados". Não era exatamente isso que eu pretendia; essa questão é possivelmente fora de tópico. O que realmente quero dizer é: quais são as maiores desvantagens disso que impedem a adoção mais ampla de uma ideia obviamente benéfica? (em um mundo ideal onde tudo já o suporta)
(Acontece que já existe uma solicitação no Microsoft Connect para uma implementação do Visual Studio de tabstops elásticos e também uma solicitação no Eclipse . Além disso, há uma pergunta sobre outros editores que implementam tabstops elásticos .
fonte
Respostas:
As guerras santas são subjetivas
As travas elásticas de Nick são um conceito incrível que poderia ajudar muitas pessoas a concordar com uma solução viável, embora eu duvide que isso acabaria completamente com essa Guerra Santa: afinal, é também uma questão de gosto e muitos programadores não se mexem. polegada de sua posição sobre esse assunto, mesmo à custa do comprometimento. Então essa seria a primeira razão.
Por exemplo, muitas pessoas do lado "espaços" ainda não gostam, pois requer uma parte adicional da lógica do seu software para uma renderização decente (por exemplo, simplesmente visualizando um conjunto de alterações na visualização na web do SCM).
Problemas de implementação
Mas a razão mais óbvia é apenas sua barreira técnica à entrada : é um conceito fundamentalmente diferente do que foi implementado por vários anos (se não décadas) em IDEs e editores de texto. Seria necessário reescrever alguns deles para processar linhas de uma maneira relativamente diferente, o que dificulta sistemas mais antigos e maiores que têm maior chance de sofrer um acoplamento profundo e rígido em seu código de processamento de linhas. É, no entanto, muito mais fácil de fazer quando você começar do zero (pense em demonstração de Nick ou de Go 's tabwriter pacote).
Para uma anedota pessoal, lembro-me de abordar o autor um tempo atrás para perguntar se havia algum apoio do emacs à vista e, nesse caso em particular, ele mencionou isso como a razão para não ser trivial. Ele também pediu ajuda da comunidade para ajudar a implementar esse recurso e trazê-lo para as massas.
Nós nos importamos o suficiente?
Uma terceira razão é que alguns desenvolvedores não estão tão preocupados com o assunto e realmente não se importam tanto com o fato de irem além para apoiar o esforço. Na maioria dos casos, o conflito de espaços versus abas não é um bloqueador de negócios; portanto, não há muita motivação por trás do problema.
Se você quiser, terá que lutar por isso. O que é possível em software de código aberto. E se você alterar o suficiente, os de código fechado terão que seguir o risco de perder para parte da base de usuários, se for uma parte muito pequena.
Então, se você quiser, dê uma mão a Nick.
fonte
Muitas vezes tive que lutar com um processador de texto para fazer com que o documento tivesse a aparência desejada, sem uma regra automática oculta que controla o posicionamento das minhas palavras. Não quero gastar um segundo tentando descobrir por que o editor está insistindo em colocar essas palavras lá.
fonte
Esta é a primeira vez que ouvi falar deles. Não tenho certeza se são uma boa ideia, mas parecem pouco úteis, pois temos ferramentas (como recuo) que já formatam automaticamente o código.
O que acontece quando eu abro suas tabstops elásticas inteligentes no vim e as edito? A guia é limpa automaticamente ou você fica com uma bagunça?
As principais desvantagens, como eu as vejo, possivelmente quebram as diferenças, o controle de versão e não são compatíveis com editores que não as suportam. Talvez haja muita modificação no código para suportá-los e há coisas mais importantes do que o recurso "mais uma aba para formatar o código". Afinal, todos nós podemos usar o
indent
que faz todo o acima, se a memória servir.fonte
Para ser sincero, não os acho tão úteis assim que você supera a emoção inicial. Por exemplo, de qualquer maneira, não gosto de comentários no final de uma linha - sempre coloco meus comentários em uma linha separada. Com isso, as abas elásticas perdem seu uso principal.
Depois disso, é claro que você ainda pode usá-los para alinhar argumentos de função (e parâmetros) e longas listas de atribuições.
Mas para o primeiro, eu apenas recuo todos os argumentos em um nível adicional e isso funciona perfeitamente bem comigo:
E eu não vejo qualquer necessidade de mudar isso.
E quanto ao alinhamento de tarefas, eu não faço isso. Coloquei espaços únicos em torno de tarefas, é isso. Eu também tendem a não agrupar muitas tarefas, por isso raramente há problemas de legibilidade.
Em resumo, abas elásticas têm absolutamente zero utilidade para mim. Obviamente, essa é uma preferência muito pessoal que pode variar, mas acho que funciona bem e acho que a falta de suporte para guias elásticas ocorre porque outras pessoas pensam da mesma forma.
Se um editor os implementasse, eu ainda não os usaria.
fonte
Uma desvantagem é que não funciona se você deseja alinhar em um grupo de linhas e depois recuar no próximo, pois agrupa as paradas de tabulação das linhas adjacentes.
O que eu queria:
Para idiomas com chaves, isso pode ser menos problemático, pois geralmente você pode resolver isso colocando a chave de abertura em uma linha própria (como na animação), mas para idiomas sensíveis a espaços em branco, isso rapidamente se torna um problema, e você acaba tendo que voltar a usar espaços.
fonte
wibble()
teria apenas um único recuo e, portanto, não estaria alinhado com os argumentos da função?Por que não fazemos apenas o caractere de tabulação vertical (VT, ASCII 11) servir para indicar o uso de tabstops elásticos? Ele não serve para nada em nenhuma linguagem de programação convencional, mas é analisado como espaço em branco válido em todos eles, o AFAIK.
Isso significa que o uso de tabstops elásticos não é mais uma convenção externalizada (por exemplo, "este arquivo foi formatado com tabstops elásticos, por favor, ative-os"), mas algo que você escolhe caso a caso.
Os editores de texto existentes geralmente exibem um glifo ou um único espaço no lugar de uma guia vertical. Isso não é o ideal, mas um pequeno preço a pagar, IMO.
fonte
Eles não são mencionados porque não são implementados na maioria dos IDEs dos editores de texto; eles são uma novidade de pouco uso real em um projeto.
Os espaços são usados para definir a programação desde os dias dos cartões perfurados. As guias apareceram e alguém obviamente pensou que eram uma boa ideia (estavam enganadas: p).
Nos dias em que a maioria dos editores modernos pode converter guias em espaços automaticamente ... elas são inúteis.
Ter que instalar mais uma ferramenta para lidar com algo tão trivial quanto abas versus espaços certamente não me agrada, e acho que não seria para a maioria dos meus colegas.
fonte
Eu acho que eles teriam muita utilidade se os IDEs os suportassem (Microsoft!). Quando as pessoas descobrirem que podem dar um tapa nas caixas de flores e deixá-las bem legíveis, elas o farão. Você pode adicionar mais comentários ao código-fonte subitamente (o que só pode ser uma coisa boa).
Suponho que também poderíamos adicionar "dicas de ferramentas" de comentários à lista de 'seria bom se ...', para que seus grandes blocos de comentários pudessem ser ocultados e visualizados facilmente quando necessário. Talvez também possamos ter blocos de comentários que fazem parte da documentação (não coisas do tipo castelo de areia, trechos de documentação legíveis pelo usuário apropriados que foram incorporados no código, não apenas os cabeçalhos dos métodos)
Desvantagens: isso pode fazer com que as diferenças de origem pareçam ruins se várias linhas parecerem alteradas quando apenas 1 foi modificado (se o editor salvou o arquivo com as guias convertidas em espaços). Ou, se a guia elástica foi implementada com um único caractere (ou, mais provavelmente, duas guias), a visualização da sua fonte fora do editor pode parecer ruim.
Eu acho que gosto da ideia, 'tab tab' no final de uma linha elimina o bloco de comentários e alinha todos os comentários nas linhas subseqüentes (que têm espaçamento de tabulação dupla) de acordo.
fonte
Eis como eu o vejo: se a maioria das ferramentas populares já suportasse tabstops elásticos, muitas pessoas os usariam. O mesmo aconteceu com o modo de navegação / edição do vi, com destaque de sintaxe e, posteriormente, com o Intellisense. Em cada caso, a sabedoria estabelecida era que não é útil ou não é necessária, mas foi implementada e decolou.
Tabstops elásticos, é claro, têm um impacto relativamente baixo. A maioria das pessoas está suficientemente feliz com o status quo e, portanto, não se importa. Um raciocínio semelhante é aplicado a muitas situações em que algumas pessoas ficam felizes com o que têm e não vêem razão para mudar para algo mais avançado. Em outras palavras, o maior problema com tampões elásticos é o mesmo para quase todas as outras boas idéias: ele precisa ganhar tração.
Mas isso não significa que o recurso não possa ser adotado de forma incremental. Cada linguagem de programação foi adotada de forma incremental, mesmo que uma equipe inteira exija um novo compilador e um novo IDE para começar a usá-lo. O mesmo vale para toda arquitetura de hardware e para muitos outros exemplos. Também não é o caso de que a falta de integração com as ferramentas existentes seja um empecilho: o mesmo acontece, por exemplo, com o "formato unificado-diff", que substituiu gradualmente um formato anterior menos legível que, no entanto, era entendido por ferramentas automatizadas (como patch). Essas ferramentas foram atualizadas ao longo do tempo.
Agradeço as questões de interoperabilidade que outros já mencionaram, mas, apesar delas, certamente haverá equipes (como a minha) que adotariam isso sem hesitação em nossa totalidade. Ferramentas externas como difusão, mesclagem etc. inicialmente não o suportam, mas faríamos nossa parte para incentivar os fornecedores a incluir o recurso. É assim que o progresso sempre foi feito. Requer algumas dores por um período transitório temporário, mas no final vale a pena.
fonte
O maior problema que eu teria com isso é o espaçamento inconsistente na documentação. Como programador, eu ficaria irritado ao ver um loop ou declaração no recuo 'padrão' e depois perceber em recuos diferentes. Sei pessoalmente que gosto de ver todos os meus suspensórios alinhados em toda a documentação, não apenas no bloco de código que estou vendo.
No geral, acho que é uma boa ideia, mas pessoalmente, eu não gostaria.
fonte
Acabei de experimentar a implementação de tabstops elásticos do jEdit, que funciona surpreendentemente bem com as linguagens de programação com as quais estou familiarizado (principalmente HTML / XML e linguagens C). No entanto, com o código Python, aqui está como ele é renderizado (espaços usados no lugar de guias para ilustrar como as coisas se alinham):
Para uma linguagem como Python que se baseia no espaçamento, isso é um fator decisivo, a menos que você desative a funcionalidade fornecida pelas tabelas elásticas. Editores como Vim e Emacs simplificam a desabilitação da maioria dos tipos de funcionalidade, se você souber o nome da opção e como desabilitá-la, mas seria necessário desabilitar essa funcionalidade para códigos como o descrito acima.
Dito isto, é ótimo para x86 ASM, C, C ++, Go, XML, HTML e outros que não dependem tanto do espaço em branco:
Eu direi que dialetos Lisp como Scheme têm suas próprias convenções que também fariam tabstops elásticos renderizar código "feio". Se eu alterar minhas configurações de tabstop para corresponder à convenção de 2 colunas e inserir tabstops em locais incomuns (entre uma função e seus argumentos):
vs. o mais legível:
É verdade que este não é tão ruim quanto o exemplo do Python, mas definitivamente reduz a legibilidade do código. Embora eu aprecie muito a funcionalidade ao codificar algo como C # ou C ++, eu abomino a funcionalidade ao codificar em uma linguagem como Python ou Scheme, onde o espaço em branco é funcional e / ou visualmente útil. Tabstops elásticos foram criados especificamente para serem úteis sem a necessidade de um utilitário de indentação separado, mas claramente não se destina a todas as linguagens de programação.
fonte
O Emacs já lida com recuo na presença de parênteses não fechados e alinha automaticamente o wilma com o fred . Não faço ideia por que o Eclipse não faz o mesmo. Ok, eu tenho uma ideia, mas não é de cortesia.
Você poderia fazer o Emacs alinhar o comentário também, sem muitos problemas, mas AFAIK ninguém, mas você sempre quis isso.
fonte
wilma
quando você faz edições, como alterar o tamanho do nome da função? Se isso acontecer, é bem parecido com o que os tabstops elásticos fazem.