2010-09-14 21 views
9

¿Por qué el compilador no puede compilar mi código mientras lo escribo?¿Por qué el compilador no puede compilar mi código cuando lo escribo?

Desde el punto de vista del usuario, podría funcionar tan bien como lo hace la coloración de sintaxis en la actualidad. Si deja de escribir durante el tiempo suficiente (tal vez un par de segundos), la compilación (sin vincular) terminaría, y los errores de código se identificarían utilizando algo así como colorear la sintaxis.

No es que mi computadora monstruo de cuatro núcleos 3GHz estuviera realmente ocupada haciendo otra cosa. ¿Por qué no dejarlo compilar todo el tiempo?

+2

Tal vez porque cuando lo tienes alguien querrá apagarlo. http://stackoverflow.com/questions/665747/disabling-the-vb-background-compiler-in-vs2008 –

+0

¿Qué idioma estás usando? No es raro que los IDE compilen sobre la marcha hoy en día. – nos

+0

Deja de usar el Bloc de notas como editor y usa un IDE real, entonces obtendrás las características que pides :) – slugster

Respuesta

6

Eso es exactamente lo que hace el editor de código VB.NET en Visual Studio.

La ventaja es IntelliSense mucho más preciso que C#. La desventaja es que desperdicia grandes cantidades de memoria y tiempo de procesador. :-(

+0

Lo mismo es cierto para F #. – sholsapp

+0

Es solo un desperdicio si no se usa. – Rocketmagnet

+0

@Rocketmagnet: puede hacer que la interfaz de usuario sea lenta e interfiera con los procesos en segundo plano (es decir, otros programas). No es como SQL Server donde puede establecer un límite en el uso de memoria y CPU. – egrunin

3

Algunos IDE compilan (o al menos comprueban la sintaxis y algunas semánticas) el código tal como está escrito. Por ejemplo, creo que Eclipse lo hace. Creo que Visual Basic 6 (y quizás versiones anteriores) hicieron esto.

+0

Por lo que he experimentado, Eclipse (el JDT, al menos) realiza comprobaciones de sintaxis al escribir, pero la compilación real (es decir, producción de archivos de clase) solo se realiza al guardar un archivo. (Esto podría haber cambiado en los últimos años, sin embargo). –

5

Puede. O, para ser más útil, la respuesta a esta pregunta depende de

  1. Qué idioma
  2. ¿Qué grado de optimización requiere
  3. lo molesto que será si escribe temporalmente algo tonto, y las compilaciones del compilador e inyecta el resultado en el binario que está depurando antes de poder solucionarlo.

Algunas optimizaciones muy fuertes serían muy complicadas para mezclar sobre la marcha. Por otro lado, ¿una compilación básica, si no hay necesidad de preocuparse por la asignación de compensaciones para las instrucciones X86? Por supuesto.

3

Observe qué IDE está utilizando, pero así es como funciona VB.NET.

2

No soy muy versado en compiladores ni en los métodos por los que el código se convierte en IL y lenguaje de máquina, etc. Pero aun así puedo ver cómo la alteración de mi programa por una sentencia de control de flujo puede invalidar completamente el trabajo que un compilador ha hecho hasta ese momento. Al agregar o cambiar una sola línea de código, partes enteras de un programa pueden volverse obsoletas, sin usar o de alguna otra manera requerir una reevaluación.

Creo que ' prefiero guardar esos ciclos de CPU para distributed.net o SETI @ Home en lugar de recompilar constantemente mi código cuando lo modifico.

+2

No ejecuto SETI @ Home, y mi CPU no va a llorar si rechazo su trabajo. – Rocketmagnet

+0

No estoy sugiriendo que los ciclos de CPU inactivos sean malos, solo que podrían usarse para cosas mejores. – JYelton

0

Eso depende totalmente del idioma.

Los lenguajes que tienen sintaxis independientes del contexto "podrían" precompilar expresiones una vez que se escriben. Sin embargo, la compilación de dicho proyecto de idiomas siempre es rápida, entonces, ¿por qué usar la CPU cuando puede procesar rápidamente el trabajo cuando el código está listo?

Otros lenguajes, como infame C++, dependen del contexto. En la mayoría de los casos, el compilador no puede entender una expresión sin haber leído todo el código antes de la expresión. Realmente es muy difícil de analizar y es por eso que solo tenemos comprobación de errores antes de la compilación (en VS2010 y otras ide recientes). En este caso, parece imposible implementar la función que está solicitando.

Dicho esto, no soy especialista en absoluto. Eso es todo lo que sé sobre eso.

0

lenguajes interpretados como PHP Incluso tienen soporte para esto en el editor de Komodo. Estoy seguro de que hay muchos editores más que lo soportan para casi cualquier idioma.

Cuestiones relacionadas