Pregunta

los lenguajes de programación se agrupan en 2 clases principales " Dinámico " &erio; " Estático " ;. - ¿Es este siempre el caso de que un lenguaje de programación esté en uno de ellos y no en ambos, quiero decir, puede un lenguaje ser dinámico y estático al mismo tiempo?

¿Fue útil?

Solución

La distinción static y dynamic language es bastante ambigua, ya que puede referirse a muchos criterios diferentes (más o menos adecuados). Intentaré responder por cada caso:

Interpretación / Compilación

Esto no depende del lenguaje en sí, sino solo de la implementación utilizada. Por lo tanto, los idiomas pueden ejecutarse a través de un intérprete y un compilador. Ejemplos

  • Haskell (GHC / GHCI / Abrazos)
  • C ++ (G ++ / Ch)
  • F #

Algunos lenguajes compilados también tienen la posibilidad de compilar su código en tiempo de ejecución (.NET).

Escritura estática / dinámica

La escritura estática y dinámica (tipografía de pato) se puede combinar en un solo idioma. Vea dynamic de C #, VB con la opción Explicit / Strict off o Boo . La tipificación estructural se puede utilizar para formular una tipificación estricta sin jerarquías de tipos explícitas. Los tipos base polimórficos ( System.Object ) también admiten algún tipo de comportamiento dinámico, aunque el tipo se proporciona de forma estática.

Construcciones meta (por ejemplo, Reflexión, generación de tipos de tiempo de ejecución)

También están disponibles en Java y .NET.

Técnicas funcionales (por ejemplo, funciones de orden superior, continuaciones)

También se puede replicar en lenguajes de tipo estático. Ver Haskell o Scala.

Otros consejos

C # 4.0 es un lenguaje estático que admite dinámica resolución también. La palabra clave dynamic básicamente le dice al compilador: no te preocupes por esto por ahora. Si no puede resolver el tipo en tiempo de ejecución, se genera una excepción.

Objective-C es otro ejemplo. Es un superconjunto estricto de C, y C está tipificado estáticamente. Pero el " objetivo " Las cosas pueden ser totalmente dinámicas (todos los objetos declarados como tipo id ). El compilador realiza algunas comprobaciones de tipo estático de los objetos Objective-C, aunque está limitado ya que muchos métodos estándar devuelven id . Por ejemplo, la colección NSArray devuelve objetos de tipo id , por lo que el compilador no puede detectar: ??

NSMutableArray *a = [NSMutableArray arrayWithObject:@"I am a string"];
NSNumber *n = [a objectAtIndex:0]; //assigning a string to a number!

aunque podría marcar, NSNumber * n = @ " Soy una cadena " , en tiempo de compilación.

Sí Es posible tener tanto estático como dinámico juntos.

Si uno usa C #, entonces estamos en una pista estática y el movimiento usamos un nuevo System.linq.Expression tree API en VS 2010 (.NET 4.0). Estamos apuntando nuestro código hacia el marco llamado DLR (Dynamic Language Runtime) una capa por encima de CLR.

Incluso nuestro código creado por clase de expresión también puede ser usado por otros lenguajes dinámicos como IronPython, etc.

Del mismo modo, podemos usar el código de hierro python sobre CLR. Todo lo que necesitamos para asegurarnos de que emiten un árbol de expresión y está dirigido hacia el DLR.

  

¿Puede un lenguaje ser dinámico y estático al mismo tiempo?

Dinámico y estático se refieren a muchas cosas diferentes de una manera bastante vaga. En particular, los idiomas pueden tipificarse de forma estática o dinámica, lo que significa que la verificación de tipos se aplica en cierta medida en la compilación o se aplaza por completo al tiempo de ejecución. Pero las personas a menudo se refieren a un lenguaje como " dinámico " Debido a que tiene un REPL, las definiciones y expresiones se pueden evaluar interactivamente. De hecho, F # es un lenguaje de tipo estático que fue votado como el mejor lenguaje dinámico en una encuesta. Dinámico también puede referirse a la capacidad de hacer introspección / reflexión.

Supongo que un lenguaje puede ser tanto dinámico como estático al mismo tiempo. En particular, al ser estático, se verifica el tipo y se admite la evaluación interactiva.

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