2009-11-02 12 views
8

Me pregunto si otros desarrolladores de C# encontrarían una mejora tener una directiva de compilación para csc.exe para hacer que los espacios en blanco sean significativos a la Haskell o Python, donde los tipos de espacios en blanco crean bloques de código.Espacios en blanco significativos en C# como Python o Haskell?

Si bien esto sería sin duda una salida masiva de C-style languages, me parece que desde C#, en última instancia, se está compilando a CIL (que todavía tienen las llaves y punto y coma), lo que realmente es sólo un truco de análisis del compilador puede manejar de cualquier manera (es decir, puede tratar con espacios en blanco significativos o no). Dado que los rizos y los puntos y comas a menudo son una barrera para ingresar a C# &, en realidad solo analizan los ayudantes (en sí mismos no le dan sentido a su código), podrían eliminarse a la Haskell/Python.

F # maneja esto con la directiva del compilador #light que se puede leer en Lightweight syntax option in F# 1.1.12.3.

Me gustaría ver lo mismo en C#: una directiva #SigSpace o somesuch que dirigiría csc.exe para tratar la fuente como un archivo Haskell en términos de espacio en blanco (solo como un ejemplo).

estándar de C#:

public void WhiteSpaceSig() 
{ 
    List<string> names = new List<string>(); 
    List<string> colors = new List<string>(); 

    foreach (string name in names) 
    { 
     foreach (string color in colors) 
     { 
      // bla bla bla 
     } 
    } 
} 

espacio en blanco significativo:

#SigSpace 

    public void WhiteSpaceSig() 

     List<string> names = new List<string>() 
     List<string> colors = new List<string>() 

     foreach (string name in names) 
      foreach (string color in colors) 
       // bla bla bla 

no estoy diciendo que quiero esto en C#, pero estoy interesado en lo que son las ventajas y desventajas. Creo que la mayoría de los desarrolladores de C# se han acostumbrado tanto a la sintaxis que no podrán ver qué tan artificial es (aunque al final puede hacer que el código sea más fácil de leer).

+2

Si quisiera leer/escribir código así usaría Python. Puede ser genial para usted, pero otros desarrolladores probablemente lo encuentren difícil ya que es totalmente no estándar. –

+1

Ya no usa "#light" en F #, simplemente es el predeterminado. – Brian

+1

"IL (que todavía tendría las llaves y los puntos y comas)" - Me temo que tiene un malentendido grave aquí. C# se compila en código de bytes IL, que es solo una serie de códigos de operación, etc. No hay llaves y puntos y comas en ese nivel (e incluso si lo fueran, no serían de utilidad para los desarrolladores que codifican en el nivel C#).Incluso el formato IL textual de ILASM no usa llaves o puntos y comas para muchas construcciones de nivel C#, p. bucle, porque usa bloques de saltos en su lugar, y de nuevo si lo hiciera eso seguiría siendo irrelevante para los codificadores de C#. – itowlson

Respuesta

3

Puede que le interese la tesis de Kirill Osenkov, Designing, implementing and integrating a structured C# code editor.

La idea subyacente es que, aunque las llaves formen parte del lenguaje C# tal como se define, su editor no tiene que mostrárselas. Osenkov implementó un control de editor para SharpDevelop que representa los pares de corchetes como sangría, y hace que el programador trabaje más rápido con la estructura del código. Vaya a la página 113 en el documento vinculado para ver un buen ejemplo.

2

No. Curlies elimina cualquier posibilidad de ambigüedad por parte del lector. Los humanos no distinguen bien entre diferentes tipos de espacios en blanco (quiero decir, solo piensen en eso - "¡diferentes tipos de espacios en blanco!"). Y por humanos, me refiero a mí. Por eso me gusta C# :)

Algunos idiomas tienen filosofías detrás de ellos que abarcan algunos tipos de ambigüedad. C# no es uno de ellos.

+0

No conozco ningún desarrollador de Python que use diferentes tipos de espacios en blanco. ¿Vos si? Creo que este es un problema imaginario. –

+0

@Las pestañas, espacios y saltos de línea del encriptador son todos espacios en blanco –

+3

@Rex, ¿tiene problemas para diferenciar espacios y líneas nuevas? –

0

Eso no sería C#, sería un idioma diferente como Iron Python.

+2

Está confundiendo la sintaxis con la semántica. –

+2

No, no lo es - la sintaxis es una gran parte de lo que hace un lenguaje. –

11

Si desea esta sintaxis, ¿por qué no utilizar IronPython o Boo en lugar de C#?

Parece mejor implementar un lenguaje personalizado para esto, en lugar de tratar de modificar C#. Como dijiste, todos compilan a la misma IL, por lo que no hay razón para cambiar una sintaxis de trabajo buena y limpia para implementar lo que esencialmente sería una nueva gramática del lenguaje.

0

Si esta fuera una opción, nunca la usaría.

Específicamente, me gusta la forma en que Visual Studio analiza las llaves, permitiendo el colapso/expansión del bloque, colocando el cursor al lado de un corchete resalta el corsé de cierre/apertura correspondiente.

La legibilidad humana también es un problema. Es más fácil distinguir llaves entre palabras que distinguir el espacio en blanco.

1

Habiendo sido C#/Java Developer toda mi carrera, mirando a código C# con un espacio en blanco significativo que me vuelven loco.

Si está familiarizado con los corchetes, hace que el código MUCHO sea más legible y realmente lo ayuda a descubrir qué está haciendo el código.

3

Como desarrollador principalmente Python, me gustaría ver más idiomas adopción significativa de espacio en blanco para delimitar bloques.

Si busca en los grupos de noticias, encontrará muchas opiniones de C, C++, C#, Java y otros desarrolladores. Mi sensación es que a muchos les gustan las llaves.

tiene una mezcla de estilos sería un dolor sin embargo.

utilizo regularmente idiomas corchete también, para que pueda ver las dos caras

+2

Lo haría, y yo no lo haría. Lo encuentro molesto, parece muy subjetivo. –

2

No puedo pensar en nada peor!

Especialmente con la opción de los dos. Cada vez que estuvieras leyendo el código de otra persona tendrías que estar familiarizado con ambas notaciones para darle sentido, y el cielo no permita que cambien de una a la otra, ¡qué pesadilla!

Sería quitar toda consistencia y conducir a muchos desarrolladores gritando muchos más WTFs.

Luego está toda la guerra santa en espacios en blanco contra corchetes, que ni siquiera comentaré.

0

trabajo en un lenguaje de programación desarrollado por mi empresa hace más de 30 años. Estamos constantemente regateando con preguntas como esta. Cualquier cambio, o incluso adición, introduce no solo una oportunidad de mejora, sino también una posibilidad de errores y malentendidos.

Incluso en el mejor de los casos, esto no resuelve ningún problema. Solo está intercambiando un conjunto arbitrario de identificadores de bloque de código con otro, lo que anula cualquier ganancia (si hubo alguna con la nueva sintaxis, que ni siquiera está establecida).

Mucho más probable es que esté intercambiando un conjunto bien establecido bien conocido de reglas con otro, no tan conocido, que introduce la posibilidad de errores y conceptos erróneos. Incluso el solo hecho de agregar esto como una opción introduce una mayor posibilidad de errores ya que ahora podría tener 2 sintaxis para escribir el mismo código y posiblemente incluso para el mismo equipo de desarrolladores con el que trabajar.

Cuestiones relacionadas