Pregunta

Realmente me gustaría ver un IDE de fuente proporcional, incluso si tengo que crearlo yo mismo (tal vez como una extensión de Visual Studio).Lo que quiero decir básicamente es la edición de código al estilo MS Word que se parece al estilo tipográfico en El libro del lenguaje de programación C++..

Quiero establecer tabulaciones para mis sangrías y alinear firmas de funciones y filas de declaraciones de asignación, que podrían especificarse en puntos en lugar de posiciones de caracteres fijas.También me gustaría negrita y cursiva.Sería genial tener varios tamaños de fuente e incluso hojas de estilo.

¿Alguien ha visto algo como esto o sabe cuál es la mejor manera de empezar a construir uno?

¿Fue útil?

Solución

Todavía me gustaría ver implementar un editor o IDE popular tabuladores elásticos.

Otros consejos

Pensando con estilo sugiere utilizar su software de manipulación de texto favorito como Word o Writer.Cree el código de su programa en XML enriquecido y extraiga las secciones relevantes para el compilador con XSLT.El software "Office" proporcionará todas las funciones avanzadas de formato y manipulación de texto.

Esperaba que te rebajaran y te molestaran por esa sugerencia, pero la idea tiene mucho sentido.

La principal ventaja del requisito de fuente tradicional "no proporcional" en los editores de código es aliviar la carga de realizar el formateo del código.

Pero con todo el formateo automático interactivo que ocurre en los IDE modernos, es realmente posible que una fuente proporcional pueda mejorar la legibilidad del código (en lugar de obstaculizarlo, como estoy seguro muchos puristas esperarían).

un personaje llamado verde roedy (famoso por su 'cómo escribir código que no se puede mantener'artículos) escribieron sobre un editor/lenguaje teórico, basado en Java y llamado Bali.No incluía exactamente fuentes no proporcionales, pero sí incluía la idea de tener tamaños de fuente no uniformes.

Además, este corto Publicación de Joel Spolsky publica una solución, tabulaciones elásticas (como lo mencionó otro comentarista) que ayudarían con el soporte de fuentes no proporcionales (y de tamaño variable).

@Thomas Owens

No encuentro que el código formateado así sea más fácil de leer.

Está bien, es sólo una preferencia personal y podemos no estar de acuerdo.Formatéelo como mejor le parezca y lo respetaré.Con frecuencia me pregunto '¿Cómo debo formatear esta o esa cosa?' Mi respuesta siempre es formatearlo para mejorar la legibilidad, lo que admito que puede ser subjetivo.

Con respecto a su ejemplo, simplemente me gusta tener esa columna bien alineada en el lado derecho, es una especie de "índice" rápido del código de la izquierda.Dicho esto, probablemente evitaría comentar cada línea de esa manera de todos modos porque el código en sí no debería necesitar tanta explicación.Y si es así, tiendo a escribir un párrafo encima del código.

Pero considere este ejemplo del cartel original.En mi opinión, es más fácil detectar los comentarios en el segundo.

for (size-type i = 0; i<v.size(); i++) { // rehash:
    size-type ii = has(v[i].key)%b.size9); // hash
    v[i].next = b[ii]; // link
    b[ii] = &v[i];
}

for (size-type i = 0; i<v.size(); i++) {     // rehash:
    size-type ii = has(v[i].key)%b.size9);   // hash
    v[i].next = b[ii];                       // link
    b[ii] = &v[i];
}

@Thomas Owens

¿Pero la gente realmente se alinea los comentarios así?...Nunca trato de alinear declaraciones o comentarios ni nada, y el único lugar que he visto que está en los libros de texto.

Sí, la gente alinea comentarios y declaraciones y todo tipo de cosas.El código consistentemente bien formateado es más fácil de leer y el código que es más fácil de leer es más fácil de mantener.

Me pregunto por qué nadie responde realmente a su pregunta y por qué la respuesta aceptada realmente no tiene nada que ver con su pregunta.Pero de todos modos...

un IDE de fuente proporcional

En Eclipse puedes elegir cualquier fuente en tu sistema.

establecer tabulaciones para mis sangrías

En Eclipse puede configurar la sangría automática, incluida la configuración de "solo pestañas".

alinear firmas de funciones y filas de declaraciones de asignación

En Eclipse, la sangría automática hace eso.

que podría especificarse en puntos en lugar de posiciones de caracteres fijas.

Lo siento, no creo que Eclipse pueda ayudarte en eso.Pero es de código abierto.;-)

negrita y cursiva

Eclipse tiene eso.

Sería genial tener varios tamaños de fuente e incluso hojas de estilo.

Creo que Eclipse solo usa una fuente y un tamaño de fuente para cada tipo de archivo (por ejemplo, un archivo fuente de Java), pero puede tener diferentes "hojas de estilo" para diferentes tipos de archivos.

La última vez que miré Eclipse (¡hace algún tiempo!), te permitía elegir cualquier fuente instalada para trabajar.No estoy seguro de si admite la noción de sangría mediante tabulaciones.

Se veía genial, pero el código era definitivamente más difícil de leer...

Soeren:Eso es bastante bueno, en mi opinión.¿Pero la gente realmente alinea comentarios así?Para mis comentarios de final de línea, siempre uso un solo espacio y luego // o /* o su equivalente, según el idioma que esté usando.Nunca trato de alinear declaraciones o comentarios ni nada, y el único lugar donde he visto eso es en los libros de texto.

@Brian Ensink:No encuentro que el código formateado así sea más fácil de leer.

int var1 = 1 //Comment
int longerVar = 2 //Comment
int anotherVar = 4 //Command

versus

int var2       = 1 //Comment
int longerVar  = 2 //Comment
int anotherVar = 4 //Comment

Personalmente, las primeras líneas me parecen más fáciles de leer que las segundas.

La parte de sangría de su pregunta se está realizando hoy en un producto real, aunque posiblemente con un nivel de automatización incluso mayor del que imaginaba, el producto que menciono es un IDE XSLT, pero los mismos principios de formato funcionarían con la mayoría (pero no con todas) las sintaxis de código convencionales.

Esto realmente tiene que verse en video para entenderlo todo (perdón por la música de fondo).También hay un producto derivado del editor XML ligero, XMLQuire, que sirve como demostrador de tecnología.

La siguiente captura de pantalla muestra XML formateado con reglas de formato bastante complejas en este IDE XSLT, donde toda la sangría se realiza al estilo de un procesador de textos, utilizando el margen izquierdo, no espacios ni caracteres de tabulación.

enter image description here

Para enfatizar este concepto de formato, todos los caracteres se han resaltado para mostrar dónde se extiende el margen izquierdo para mantener la sangría.yo uso el término Formato virtual para describir esto, no es como tabulaciones elásticas, porque simplemente no hay tabulaciones, solo información de margen que es parte del formato de 'párrafo' (aquí se usan códigos RTF).El analizador reformatea continuamente, en la misma pasada que colorea la sintaxis.

Aquí no se ha utilizado una fuente proporcional, pero podría haberse utilizado con bastante facilidad, porque la sangría está configurada en TWIPS.La experiencia de edición es bastante convincente porque, a medida que refactorizas el código (XML en este caso), tal vez arrastrando y soltando, o extendiendo la longitud de un valor de atributo, la sangría simplemente vuelve a fluir para ajustarse (no hay tabulación). o el botón 'reformatear' que debe presionar.

Entonces, la sangría está ahí, pero el trabajo de la fuente es un problema más complejo.Experimenté con esto, pero descubrí que si las fuentes se vuelven a seleccionar a medida que escribe, el desplazamiento horizontal del código distrae demasiado; probablemente debería haber un comando de "formato de fuentes" iniciado por el usuario.El producto también tiene tecnología de tinta/escritura a mano incorporada para anotar código, pero todavía tengo que explotar esto en la versión en vivo.

Toda la gente se queja de que los comentarios no coinciden.

Me parece que hay una solución muy sencilla:Defina la unidad de espacio como el carácter más ancho de la fuente.Ahora, espacie proporcionalmente todos los caracteres excepto el espacio.el espacio ocupa tanto espacio como para alinear el siguiente carácter donde estaría si todos los caracteres anteriores en la línea fueran los más anchos de la fuente.

es decir:

iiii_space_Foo

xxxx_space_Foo

alinearía el "Foo", siendo el espacio después de la "i" mucho más ancho que después de la "x".

Llámelos espacios elásticos.en lugar de tabulaciones.

Si eres un editor inteligente, trata los comentarios de manera especial, pero eso es sólo salsa

Permítanme recordar argumentos sobre el uso de la palabra clave 'var' en C#.La gente lo odiaba y pensaba que haría el código menos claro.Por ejemplo, no podrías saber el tipo en algo como:

var x = GetResults("Main");
foreach(var y in x)
{
   WriteResult(x);
}

Su argumento fue que no se podía ver si x era una matriz, una lista o cualquier otro IEnumerable.O cuál era el tipo de y.En mi opinión, la falta de claridad no surgió por el uso de var, sino por la elección de nombres de variables poco claros.¿Por qué no simplemente escribir:

var electionResults = GetRegionalElactionResults("Main");
foreach(var result in electionResults)
{
   Write(result); // you can see what you're writing!!
}

"¡Pero aún no puedes ver el tipo de resultados electorales!" - ¿realmente importa?Si desea cambiar el tipo de devolución de GetregionalElectionResults, puede hacerlo.Cualquier IEnumerable servirá.

Avance rápido hasta ahora.La gente quiere alinear comentarios en código similar:

int var2       =  1; //The number of days since startup, including the first
int longerVar  =  2; //The number of free days per week
int anotherVar = 38; //The number of working hours per week

Entonces, sin el comentario, todo no está claro.Y si no alineas los valores, no podrás separarlos de las variables.¿Pero tu?¿Qué pasa con esto? (ignore las viñetas, por favor)

  • int díasDesdeInicio = 1;// incluyendo primero
  • int días libres por semana = 2;
  • int horas de trabajo por semana = 38;

Si necesitas un comentario en CADA LÍNEA, algo estás haciendo mal."Pero aún es necesario alinear los VALORES", ¿verdad?¿Qué tiene que ver 38 con 2?

En C#, la mayoría de los bloques de código se pueden alinear fácilmente usando solo tabulaciones (o en realidad, múltiplos de cuatro espacios):

  • var regionesConIncremento =
    • del resultado en GetregionalElectionResults()
    • donde resultado.TotalCount > resultado > PreviousTotalCount &&
      • result.PreviousTotalCount > 0 // solo nuevas regiones
    • seleccione resultado. Región;
  • foreach (var región en regionesConIncremento)
  • {
    • Escribir(región);
  • }

Nunca deberías utilizar comentarios línea a línea y rara vez deberías necesitar alinear las cosas verticalmente.Rara vez, no nunca.Entonces entiendo si algunos de ustedes prefieren una fuente monoespaciada.Prefiero la legibilidad de la fuente Noto Sans o Source Sans Pro.Estas fuentes están disponibles gratuitamente en Google y se parecen a Calibri, pero están diseñadas para programación y, por tanto, tienen todas las características necesarias:

  • Grande :;., para que puedas ver claramente la diferencia
  • Claramente distinto 0Oo y distinto Il|

El principal problema con las fuentes proporcionales es que destruyen la alineación vertical del código y esto es una pérdida bastante importante cuando se trata de escribir código.

La alineación vertical permite manipular bloques rectangulares de código que abarcan varias líneas al permitir realizar fácilmente operaciones de bloque como cortar, copiar, pegar, eliminar y sangrar, quitar sangría, etc.

Como ejemplo, considere este fragmento de código:

a1 = a111;
B2 = aaaa;
c3 = AAAA;
w4 = wwWW;
W4 = WWWW;

En una fuente monoespaciada, = y el ; todos se alinean.

Ahora bien, si este texto está incluido en Palabra y mostrar usando un fuente proporcional el texto efectivamente se convierte en esto:

NOTA: Se agregó espacio en blanco adicional para mostrar cómo = y ; ya no hacen fila:

a1 = a1 1 1;
B2  = aaaa;
c3 = A A A A;
w4 = w w W  W;
W4  = W W W  W;

Una vez eliminada la alineación vertical, esos bonitos bloques de código desaparecen efectivamente.

Además, porque ya no se garantiza que el cursor se mueva verticalmente (es decir,el número de columna no siempre es constante de una línea a la siguiente) hace que sea más difícil escribir scripts de macro desechables diseñados para manipular líneas de apariencia similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top