Me resulta frustrante cómo la velocidad de desarrollo que deberían ofrecer los lenguajes dinámicos se ve significativamente comprometida por la falta de compleciones y otros activos que los IDE le darían en sus contrapartes estáticas.
No se trata solo de escribir menos: es el aumento de la productividad y la diversión que obtienes al explorar las API sin tener que consultar constantemente una documentación que no está integrada con el editor.
Hasta la fecha, todas las combinaciones de lenguaje dinámico IDE +, que para ser justos no son tanto, he intentado:
- calesa
- lento
- despistado / demasiado entusiasta (como mostrar todas las terminaciones posibles)
- o simplemente no tan completo como, por ejemplo, Eclipse + Java.
Soy consciente de que el análisis de código dinámico no es una tarea trivial. Pero uno no puede evitar preguntarse: ¿ es este código realmente tan difícil de entender ?
Entonces mi pregunta es:
¿Algún IDE en particular (o menos configuraciones todo en uno) ha logrado un soporte totalmente sobresaliente para un lenguaje dinámico, o esto sigue siendo un problema 'sin resolver'?
fuente
Respuestas:
Smalltalk, un lenguaje muy dinámico, siempre ha tenido un IDE excelente, en el que pequeñas cosas como la refactorización automática, SUnit (el abuelo de todos los * marcos de la Unidad), "¿quién envía este mensaje?", "¿Quién implementa este método?" y similares fueron pioneros. Entonces, sí, los IDE pueden admitir lenguajes dinámicos a un nivel que, hasta hace muy poco, superó con creces los de los idiomas estáticamente tipados.
S. Lott dice que "los lenguajes dinámicos no pueden tener el mismo tipo de terminación de código que los lenguajes estáticos. Es esencialmente imposible".
¿"Esencialmente imposible" en un sentido teórico y absolutista? Seguro. En un sentido práctico? Realmente no. Hay muchas formas de inferir el tipo de lenguajes dinámicos, estáticamente ( k-CFA , RoelTyper ), en tiempo de ejecución ( PIC ) y otros métodos, como usar el historial reciente de un programador: "Cómo el historial del programa puede mejorar la finalización del código" .
Ciertamente, las comunidades Pharo y Squeak están muy contentas con sus herramientas de finalización de código .
fuente
Casi todo lo que sabes de IDEs se desarrolló por primera vez en Smalltak, que es un lenguaje dinámico. Todo lo demás es solo copiarlos. Claramente, todas estas características son posibles en lenguajes dinámicos.
Hoy, los lenguajes dinámicos están detrás de los lenguajes estáticos. ¿Pero por qué?
Hasta hace poco, se pensaba universalmente que la escritura estática era superior a la escritura dinámica. Muchos codificadores han cambiado de opinión más recientemente sobre ese punto. Centrarse en IDEs para lenguajes de tipo dinámico no estaba allí.
Creo que las características para IDEs son menos útiles en lenguajes escritos dinámicamente. Cuando trabajo en Java u Objective-C, siento que el IDE es necesario para ayudarme a trabajar con el lenguaje, pero lo mismo no es cierto para los lenguajes dinámicos.
Algunas partes de la tarea son más fáciles en un lenguaje estático. Es sencillo descubrir el tipo de expresión. Hacer lo mismo en un lenguaje dinámico requiere un análisis completo del programa o registrar los tipos durante el tiempo de ejecución. Dado que mucho de lo que el IDE gira en torno a los tipos, eso tiene un efecto.
fuente
I think that the features for IDEs are less useful in dynamically typed languages
- Divertido, pienso exactamente lo contrario. Dado que muchos lenguajes dinámicos no requieren que declare variables de antemano, escribir mal una variable es una preocupación seria ... una preocupación que se alivia con un buen IDE. Mientras tanto, el resto de las características principales (coloración de sintaxis, herramientas de refactorización, características de depuración) son igualmente útiles en todos los idiomas.workOrder
y otras escribiránworkorder
. Estas son dos variables separadas en Python> _ <Me encontré con ese problema con Python, más o menos. Quería vim como mi editor, pero eso significaba que no tendría un entorno IDE. Entonces, rodé el mío con los complementos vim. Actualmente, creo que tengo un mejor entorno de desarrollo que cualquier IDE que haya usado en el pasado.
Mi configuración está alojada en github , no dude en echar un vistazo y cuna lo que quiera. Para una descripción rápida de los complementos:
Hay algunas otras cosas, pero tiene todas las características que tienen los IDE más populares. No me costó ni un centavo, y puedo aprovechar todo el poder de vim. Splits, comandos de movimiento, registros, saltos, poder ejecutar todo mi entorno de desarrollo con el teclado ...
fuente
Teniendo en cuenta que su evaluación es difícil de entender (¿"totalmente sobresaliente"?
Comparar trivialmente con Eclipse + Java es una tontería porque los lenguajes dinámicos no son Java.
No exactamente.
Probablemente no tenga solución. Sus requisitos ("falta de terminaciones y otros activos") dificultan ser más precisos.
Los lenguajes dinámicos no pueden tener el mismo tipo de terminación de código que los lenguajes estáticos. Es esencialmente imposible.
Algunos IDE hacen un buen trabajo de adivinanzas. Eclipse, por ejemplo, tiene complementos para lenguajes dinámicos.
fuente
Creo que esta presentación de Steve Yegge sigue siendo relevante. en pocas palabras, hay algunas ideas de script Java decentes (intelliJ IDEA), pero los lenguajes dinámicos en general están poniéndose al día, no porque haya algo intrínsecamente más difícil al hacer estas herramientas (o de hecho lenguajes), son solo los lenguajes estáticos adquiridos Toda la atención primero.
fuente
Programa todo el día en javascript / php y ruby trabajando en aplicaciones web y el mejor IDE que he encontrado para esto es Aptana. Tiene código de finalización para los tres idiomas (y python), recoge mis variables locales y, además, cuando trabaja con html y css, recoge los identificadores en el html para usar en css / javascript, y recoge la función nombres para cuando estoy haciendo algo rápido y sucio y escribiendo JavaScript en línea (lo sé mal, pero a veces es útil como prueba de concepto). Ha incorporado tareas de rastrillo y soporte integrado para git y una consola de línea de comandos. Me tomó un poco levantarme, pero una vez que lo hice, descubrí que casi nunca dejo mi IDE al codificar y me ahorra mucho tiempo.
fuente
He descubierto que el soporte de Wing IDE para Python es realmente sobresaliente. Hace un buen trabajo con la finalización del código, y su depurador es tan poderoso como lo es Visual Studio para el C # no dinámico.
Puedo dar fe de que no tiene errores, es lento o despistado. Nunca he usado Eclipse, por lo que soy ignorante en ese punto, pero creo que la pregunta más importante es: ¿hay alguna barrera inherente para desarrollar un IDE completo y que mejore la productividad para lenguajes dinámicos. Dada mi experiencia con Python y Wing, me inclino a decir que ese no es el caso. Sin embargo, es ciertamente más difícil.
fuente
Visual Studio de Microsoft es un IDE que utilizan muchos programadores y es compatible con IronRuby , IronPython y F #. La mayoría consideraría que Ruby y Python son un lenguaje de programación dinámico, mientras que F # lo sería menos.
En respuesta al comentario, F # es un lenguaje de programación.
Si bien la definición exacta de lo que define exactamente un "lenguaje dinámico" aún está en debate, la mayoría estaría de acuerdo en que JavaScript es más "dinámico" que C #, por ejemplo. De acuerdo con Wikipedia:
No quiero abrir una lata de gusanos aquí. Algunos sugerirían que F # se describe más correctamente como un lenguaje funcional en lugar de dinámico, y no me gustaría hacer una excepción. Lo que creo que sería justo decir que es de los diversos lenguajes .Net, F # es generalmente considerado como el más apropiado para la programación dinámica que C # o VB.
Es posible que desee ver: ¿Qué califica un lenguaje de programación como dinámico?
fuente
dynamic
incorporado ahora. Pero de cualquier manera, ninguno de los dos está tipificado dinámicamente y la mayoría de las otras características (sin mencionar las cuestiones culturales) asociadas con los "lenguajes dinámicos" también faltan.La principal diferencia entre los idiomas tipados estáticamente y los idiomas tipados dinámicamente es que el sistema puede saber, con certeza, qué significa una referencia de símbolo en tiempo de compilación.
Esto hace que sea realmente fácil recopilar la información que necesita para hacer un buen IDE directamente a partir de la información generada por el compilador en el momento de la compilación (que en su mayor parte se pasa al tiempo de "edición").
Si tiene una firma de método independiente que simplemente dice que el método toma una "Cosa", ¿cómo puede un editor ayudarlo a saber qué enviar? ¿Cómo puede ayudar a sugerir formas de usar la cosa?
La escritura de pato tampoco ayuda aquí, incluso el editor más inteligente posible no podrá decirte eso simplemente porque tu objeto tiene un método .executeFooOp () que puede codificar ".executeBarOp" en ese objeto. (Aunque podría rastrear el resto de la base de código y hacer algunas suposiciones inteligentes).
Sin embargo, si sabe que es una "Cadena" en la firma, conoce todos los métodos a los que puede llamar en esa cadena Y puede sugerir esa variable cuando ese usuario está en el medio de escribir una llamada a un método que requiere un Cadena como parámetro. Incluso podría sugerir subclases en las que podría integrarse si lo desea.
La información simplemente no está allí con lenguajes escritos dinámicamente a menos que pueda hacer un escaneo completo de toda la base de código con algo MUCHO más inteligente que su compilador típico.
fuente
Al menos para PHP, muchos IDEs "entienden" algo como
Si documenta de manera estandarizada (en este caso phpDocumentor ), el IDE lo aprovechará al máximo.
fuente
De todos los IDEs para lenguajes dinámicos (lenguajes que resuelven el tipo en tiempo de ejecución), el mejor es ... Visual Studio para Python
Vale la pena intentarlo.
fuente