Mira aquí: una típica guerra santa en pestañas vs espacios .
Ahora mira aquí: topes elásticos . Se resolvieron todos los problemas y se agregaron un montón de nuevos comportamientos muy útiles.
¿Se mencionan incluso las pestañas elásticas en esa discusión pestañas vs espacios? Por qué no? ¿Hay inconvenientes en la idea de pestañas elásticas tan serias que nadie las haya implementado en un editor popular?
EDITAR : Me disculpo por poner demasiado énfasis en "por qué no se mencionan". Eso no era realmente lo que pretendía; esa pregunta es posiblemente fuera de tema. Lo que realmente quiero decir es, ¿cuáles son los mayores inconvenientes de esto que impiden la adopción más amplia de una idea obviamente beneficiosa? (en un mundo ideal donde todo ya lo soporta)
(Resulta que ya hay una solicitud en Microsoft Connect para una implementación de Visual Studio de tabstops elásticos , y también una solicitud en Eclipse . Además, hay una pregunta sobre otros editores que implementan tabstops elásticos )
fuente
Respuestas:
Las guerras santas son subjetivas
Las pestañas elásticas de Nick son un concepto increíble que podría ayudar a muchas personas a ponerse de acuerdo sobre una solución viable, aunque dudo mucho que termine por completo esta Guerra Santa: después de todo, es también una cuestión de gustos y muchos programadores no se moverán. pulgadas de su posición sobre este asunto, incluso a costa del compromiso. Entonces esa sería una primera razón.
Por ejemplo, a muchas personas del lado de los "espacios" aún no les gustará, ya que requiere una lógica adicional en su software para una representación decente (por ejemplo, simplemente viendo un conjunto de cambios en la vista web de su SCM).
Problemas de implementación
Pero la razón más obvia es solo su barrera técnica de entrada : es un concepto fundamentalmente diferente de lo que se ha implementado durante varios años (si no décadas) en IDE y editores de texto. Sería necesario reescribir algunos de ellos para procesar líneas en un fasion bastante diferente, lo que dificulta a los sistemas más grandes y antiguos que tienen una mayor probabilidad de sufrir un acoplamiento profundo y estrecho en su código de procesamiento de línea. Es, sin embargo, mucho más fácil de hacer cuando se empieza desde cero (pensar en demostración de Nick o de Go 's tabwriter paquete).
Para una anécdota personal, recuerdo acercarme al autor hace un tiempo para preguntar si había algún soporte de emacs a la vista, y en este caso en particular, mencionó esto como la razón por la cual no era trivial. También pidió ayuda de la comunidad para ayudar a implementar esta característica y llevarla a las masas.
¿Nos importa lo suficiente?
Una tercera razón es que algunos desarrolladores no están tan obsesionados con el asunto y realmente no les importa tanto que harían un esfuerzo adicional para apoyar el esfuerzo. En la mayoría de los casos, el conflicto espacios-vs-pestañas no es un bloqueador de negocios, por lo que no hay tanto impulso detrás del problema.
Si lo quieres, tendrás que luchar por ello. Lo cual es factible en software de código abierto. Y si cambia lo suficiente, los de código cerrado tendrán que correr el riesgo de perder a parte de su base de usuarios, si es una parte tan pequeña.
Entonces, si lo quieres, dale una mano a Nick.
fuente
Muchas veces he tenido que luchar con un procesador de textos para que el documento se vea como quiero sin alguna regla automática oculta que controle la ubicación de mis palabras. No quiero pasar un segundo tratando de entender por qué el editor insiste en colocar esas palabras allí.
fuente
Esta es la primera vez que escuché sobre eso. No estoy seguro de si son una buena idea, pero parecen de poca utilidad ya que tenemos herramientas (como sangría) que ya formatean el código automáticamente.
¿Qué sucede cuando abro tus inteligentes pestañas elásticas en vim y lo edito? ¿La pestaña se limpia automáticamente o te queda un desastre?
Los principales inconvenientes, tal como los veo, posiblemente están rompiendo diferencias, control de versiones y no son compatibles con editores que no los admiten. Tal vez se requiera mucha modificación del código para admitirlos y hay cosas más importantes que la función "otra pestaña para formatear el código". Después de todo, todos podemos usar lo
indent
que hace todo lo anterior si la memoria sirve.fuente
Para ser honesto, no los encuentro tan útiles una vez que superas la emoción inicial. Por ejemplo, no me gustan los comentarios al final de una línea de todos modos, siempre pongo mis comentarios en una línea separada. Con eso, las pestañas elásticas pierden su uso principal.
Después de eso, por supuesto, aún puede usarlos para alinear argumentos de función (y parámetros) y largas listas de tareas.
Pero para el primero, tiendo a sangrar todos los argumentos en un nivel adicional y eso funciona completamente bien para mí:
Y no veo ninguna necesidad de cambiar eso.
Y en cuanto a alinear tareas, no hago eso. Pongo espacios individuales alrededor de las tareas, eso es todo. También tiendo a no agrupar muchas tareas juntas, por lo que rara vez hay algún problema de legibilidad.
En resumen, las pestañas elásticas tienen absolutamente ninguna utilidad para mí. Por supuesto, esta es una preferencia muy personal que puede variar, pero creo que funciona bien y supongo que la falta de soporte para pestañas elásticas se debe a que otras personas piensan de manera similar.
Si un editor los implementara, todavía no los usaría.
fuente
Un inconveniente es que no funciona si desea la alineación en un grupo de líneas y luego la sangría en el siguiente, ya que agrupa las tabulaciones de las líneas adyacentes.
Lo que quería:
Para los lenguajes de llaves, esto podría ser un problema menor, ya que generalmente puede resolver esto poniendo la llave de apertura en una línea propia (como en la animación), pero para los lenguajes sensibles al espacio en blanco, esto se convierte rápidamente en un dolor, y terminas teniendo que recurrir al uso de espacios.
fuente
wibble()
¿tendría una sola sangría y, por lo tanto, no estaría alineada con los argumentos de la función?¿Por qué no hacemos que el carácter de tabulación vertical (VT, ASCII 11) sirva para indicar el uso de tabuladores elásticos? No sirve para nada en ningún lenguaje de programación convencional, pero se analiza como un espacio en blanco válido en todos ellos, AFAIK.
Esto significaría que el uso de topes elásticos ya no es una convención externa (por ejemplo, "este archivo fue formateado con topes elásticos, actívelos"), sino algo en lo que opte caso por caso.
Los editores de texto existentes generalmente muestran un glifo o un solo espacio en lugar de una pestaña vertical. Esto no es ideal, sino un pequeño precio a pagar, en mi opinión.
fuente
No se mencionan porque no se implementan en la mayoría de los IDE de los editores de texto; son una novedad de poco uso real en un proyecto.
Los espacios se han utilizado para diseñar la programación desde los días de las tarjetas perforadas. Las pestañas aparecieron y alguien obviamente pensó que eran una buena idea (se equivocaron: p).
En los días en que la mayoría de los editores modernos pueden convertir las pestañas en espacios automáticamente ... son bastante inútiles.
Tener que instalar otra herramienta para lidiar con algo tan trivial como las pestañas frente a espacios ciertamente no me atrae, y no creo que lo haga para la mayoría de mis colegas.
fuente
Creo que encontrarían mucho uso si los IDE los admitieran (¡Microsoft!). Una vez que las personas descubrieron que podían abofetear sus cajas de flores a un lado y hacer que fueran legibles, lo harán. Es posible que de repente se agreguen más comentarios al código fuente (que solo puede ser algo bueno).
Supongo que también podríamos agregar "sugerencias de herramientas" de comentarios a la lista de 'sería bueno si ...', para que sus grandes bloques de comentarios puedan ocultarse y verse fácilmente cuando sea necesario. Quizás también podríamos tener bloques de comentarios que formen parte de la documentación (no material tipo castillo de arena, fragmentos de documentación legibles por el usuario adecuados que se incrustaron en el código, no solo los encabezados del método)
Desventajas: puede hacer que sus diferencias de fuente se vean mal si un grupo de líneas pareciera haber cambiado cuando realmente solo se modificó 1 (si el editor guarda el archivo con las pestañas convertidas en espacios). O, si la pestaña elástica se implementó con un solo carácter (o más probablemente, 2 pestañas), ver su fuente fuera del editor podría verse mal.
Sin embargo, creo que me gusta la idea, 'pestaña de pestaña' al final de una línea elastica el bloque de comentarios y alinea todos los comentarios en líneas posteriores (que tienen el espacio de doble pestaña) en consecuencia.
fuente
Así es como lo veo: si la mayoría de las herramientas populares ya admitieran tabulaciones elásticas, muchas personas las estarían usando. Lo mismo sucedió con el modo de navegación / edición de vi, con resaltado de sintaxis y más tarde con Intellisense. En cada caso, la sabiduría establecida era que no es útil o no necesaria, pero se implementó y despegó.
Las pestañas elásticas tienen, por supuesto, un impacto relativamente bajo. La mayoría de las personas están suficientemente satisfechas con el status quo y, por lo tanto, no les importa. Un razonamiento similar se aplica a muchas situaciones en las que algunas personas simplemente están contentas con lo que tienen y no ven ninguna razón para cambiar a algo más avanzado. En otras palabras, el mayor problema con topes elásticos es el mismo que para casi cualquier otra buena idea: necesita ganar tracción.
Pero eso no significa que la función no se pueda adoptar de forma incremental. Cada lenguaje de programación se adoptó de forma incremental, a pesar de que todo un equipo requiere un nuevo compilador y un nuevo IDE para comenzar a usarlo. Lo mismo es cierto para cada arquitectura de hardware y muchos otros ejemplos. Tampoco es el caso que la falta de integración con las herramientas existentes sea un obstáculo: lo mismo es cierto, por ejemplo, del "formato de diferencia unificada", que reemplazó gradualmente un formato anterior menos legible que, sin embargo, las herramientas automatizadas entendían. (como parche). Esas herramientas se han actualizado con el tiempo.
Aprecio los problemas de interoperabilidad que otros han mencionado, pero a pesar de ellos, ciertamente habrá equipos (como el mío) que adoptarían esto sin dudarlo, en su totalidad. Las herramientas externas como la diferenciación, la fusión, etc., inicialmente no lo admitirán, pero haríamos nuestra parte para alentar a los proveedores a incluir la función. Así es como siempre se ha progresado. Requiere algunos dolores durante un período de transición temporal, pero al final, vale la pena.
fuente
El mayor problema que tendría con él es un espaciado inconsistente en toda la documentación. Sé que, como programador, me molestaría ver un bucle o una declaración con sangría 'estándar' y luego notarlo en diferentes sangrías. Sé que personalmente me gusta ver todas mis llaves alineadas en toda la documentación, no solo en el bloque de código que estoy viendo.
En general, creo que es una buena idea, pero personalmente no me gustaría.
fuente
Acabo de probar la implementación de jEdit de tabstops elásticos, que funciona increíblemente bien con los lenguajes de programación con los que estoy familiarizado (principalmente HTML / XML y lenguajes similares a C). Sin embargo, con el código Python, así es como se representa (espacios utilizados en lugar de pestañas para ilustrar cómo se alinean las cosas):
Para un lenguaje como Python que se basa en el espaciado, esto es un factor decisivo a menos que desactive la funcionalidad proporcionada por tabulaciones elásticas. Los editores como Vim y Emacs simplifican la deshabilitación de la mayoría de los tipos de funcionalidad si conoce el nombre de la opción y cómo deshabilitarla, pero se requeriría deshabilitar esta funcionalidad para código como el anterior.
Dicho esto, es ideal para x86 ASM, C, C ++, Go, XML, HTML y otros que no dependen tanto del espacio en blanco:
Diré que los dialectos de Lisp como Scheme tienen sus propias convenciones que también harían que las tabstops elásticas representen un código "feo". Si cambio la configuración de mi tabulación para que coincida con la convención de 2 columnas e inserte tabulaciones en lugares inusuales (entre una función y sus argumentos):
vs. los más legibles:
De acuerdo, este no es tan malo como el ejemplo de Python, pero definitivamente reduce la legibilidad del código. Si bien disfruto mucho la funcionalidad al codificar en algo como C # o C ++, aborrezco la funcionalidad al codificar en un lenguaje como Python o Scheme, donde el espacio en blanco es funcional y / o visualmente útil. Las pestañas elásticas se crearon específicamente para ser útiles sin requerir una utilidad de sangría separada, pero claramente no está destinado a todos los lenguajes de programación.
fuente
Emacs ya maneja la sangría en presencia de paréntesis no cerrados , y alineará automáticamente wilma con fred . No tengo idea de por qué Eclipse no hace lo mismo. Ok, tengo una idea, pero no es complementaria.
También podría hacer que Emacs alinee el comentario, sin muchos problemas, pero AFAIK nadie más que usted siempre ha querido eso.
fuente
wilma
medida que realiza ediciones, como cambiar la longitud del nombre de la función? Si lo hace, eso está bastante cerca de lo que hacen las pestañas elásticas.