¿"Tipo seguro" y "fuertemente tipado" significan lo mismo?¿"Tipo seguro" y "fuertemente tipado" significan lo mismo?
Respuesta
No, no necesariamente, aunque depende de su definición de los términos, y no hay definiciones muy claras y ampliamente aceptadas.
Por ejemplo, los lenguajes de programación dinámicos a menudo son seguros, pero no fuertemente tipados. En otras palabras, no hay información de tipo de tiempo de compilación que determine qué puede y qué no puede hacer con un tipo, pero en tiempo de ejecución, el tiempo de ejecución se asegura de que no utilice un tipo como si fuera otro.
Por ejemplo, en C# 4.0, que puede hacer:
dynamic foo = "hello";
dynamic length = foo.Length; // Uses String.Length at execution time
foo = new int[] { 10, 20, 30 };
length = foo.Length; // Uses Array.Length at execution time
dynamic bar = (FileStream) foo; // Fails!
La última línea es la clave para que sea de tipo seguro: no hay una segura conversión de una matriz int a un FileStream
, por lo que la operación falla - en lugar de tratar los bytes del objeto de matriz como si fuera un FileStream
.
EDITAR: C# normalmente está "fuertemente tipado" (como idioma) y tipo seguro: el compilador no le permitirá intentar realizar llamadas arbitrarias sobre un objeto, y el tiempo de ejecución no le permitirá realizar conversiones inapropiadas .
No estoy del todo seguro de dónde encaja el código no seguro - No sé lo suficiente sobre él para comentar, me temo.
La tipificación dinámica en C# 4 permite un código débilmente tipeado pero seguro a la hora de escribir, como se muestra arriba.
Tenga en cuenta que foreach
realiza una conversión implícita, por lo que es una especie de híbrido:
ArrayList list = new ArrayList();
list.Add("foo");
foreach (FileStream stream in list)
{
...
}
Esto compilará (había another question en este recientemente), pero se producirá un error en tiempo de ejecución. Irónicamente, eso se debe a que está tratando de a escribir fuertemente con respecto a la variable stream
, lo que significa que debe realizar un molde sobre el resultado del iterador.
Jon, ¿puedes definir/explicar un poco (si tienes tiempo) con respecto a C#. – Wondering
Hm, parece que su definición de "seguro para tipos" simplemente significa que el motor de ejecución no accederá a un dato pensando que es del tipo incorrecto. Estoy sorprendido de esto, porque según esa definición, los genéricos C# no agregan ningún tipo de seguridad en comparación con el uso de ArrayList no genérico, por ejemplo. ¿Diría que los genéricos son solo un ejemplo de tipeo fuerte, pero no de seguridad? – Timwi
@Timwi: CLR proporciona el tipo de seguridad en ambos casos, pero puede verlo en un nivel superior: si tengo que emitir los resultados de extraer un valor de un 'ArrayList', ese molde puede fallar. Fallará de una manera bastante segura, pero el acto de "obtener valor de cadena de la lista" es aún más arriesgado de lo que sería con una 'Lista
"Tipo seguro" significa que no hay conversión y que no se pueden producir errores de tipo de tiempo de ejecución.
Algunas personas argumentan que "Fuertemente tipado" no significa nada, o "es bueno", o "me siento cómodo con eso".
De todos modos, "Tipo seguro" se refiere a una parte del código o API, cuando "Fuertemente tipado" se refiere a todo un idioma o plataforma.
En realidad, el tipo de seguridad no implica que la verificación de tipos se realice en tiempo de compilación. Siempre y cuando se realice * en algún lugar *, entonces todo está bien. – Noldorin
Buena pregunta. Leer this entrada de la Wikipedia, he aquí un extracto:
Benjamin C. Pierce, autor de Tipos y lenguajes de programación avanzada y Tipos y lenguajes de programación, dice, "Me pasó un par de semanas ... tratando de ordenar a cabo la terminología de "totalmente en con tipo," "tipos estáticos", "seguro", etc., y lo encontraron sorprendentemente difícil .... el uso de estos términos es tan variada como para hacerlos casi inútil ."
Ellos son el básicamente mismo, es sólo una cuestión de interpretación:
de Wikipedia:
Seguridad de tipos es sinónimo de una de las muchas definiciones de tipificación fuerte, pero la seguridad de tipo y la tipificación dinámica son mutuamente compatibles. Un lenguaje de tipado dinámico como Smalltalk puede verse como un lenguaje fuertemente tipado con un sistema de tipo muy permisivo donde cualquier sintactica lly programa correcto está bien tipado; siempre y cuando su semántica dinámica asegure que ningún programa de este tipo "va mal" en un sentido apropiado, cumple con la definición anterior y se puede llamar seguro de tipo.
ype safe significa impedir que los programas accedan a la memoria fuera de los límites de las propiedades públicas de un objeto. Cuando el código no es seguro para tipos, pueden ocurrir efectos secundarios no deseados. La seguridad de tipo es importante para el aislamiento del ensamblaje y la aplicación de la seguridad. Cuando el código es seguro para tipos, el tiempo de ejecución de lenguaje común puede aislar por completo los ensamblados
- 1. ¿Es seguro arrojar valores arbitrarios del tipo subyacente a un tipo de enumeración fuertemente tipado?
- 2. Does statemachine y statechart significan lo mismo?
- 3. ¿El rubí está fuertemente o débilmente tipado?
- 4. En .Net/C#, ¿es nulo fuertemente tipado?
- 5. fuertemente tipado C++ 0x comparación de enumeraciones
- 6. ¿.NET MVC tiene un RedirectToAction fuertemente tipado?
- 7. actionlink fuertemente tipado con asp.net mvc beta?
- 8. Diseño Objeto fuertemente tipado de XML
- 9. Entity Framework con MVC fuertemente tipado
- 10. ActionLink fuertemente tipado en Asp.Net MVC 2?
- 11. ¿Es PowerShell un lenguaje fuertemente tipado?
- 12. Asp.net WebAPI HttpClient fuertemente tipado PostAync
- 13. asp.net vistas de mvc y viewdata fuertemente tipado
- 14. ¿Utiliza ItemType para un control de repetidor fuertemente tipado?
- 15. Razor no funciona fácilmente con Html.ActionLink fuertemente tipado?
- 16. funciones variables de tipo seguro con parámetros del mismo tipo
- 17. Acceso fuertemente tipado a Amazon S3 utilizando C#
- 18. ¿Dónde debería colocar mi asp.net-mvc fuertemente tipado viewdata?
- 19. TryUpdateModel contra el parámetro del método fuertemente tipado
- 20. qué exactamente está fuertemente tipado Ver datos en Asp.Net MVC
- 21. asp.net mvc fuertemente tipado ver modelo con multiselect
- 22. ¿Qué es un conjunto de datos fuertemente tipado?
- 23. .NET MVC 4 Modelo de vista fuertemente tipado que contiene Modelo fuertemente tipado con EditorPedido y Vista preliminar de EditorTemplate no vinculante
- 24. Entity Framework - Seleccione columnas específicas y retorne fuertemente tipado sin perder el molde
- 25. Buscando un formato de serialización rápido, compacto, transmisible, multilingüe y fuertemente tipado
- 26. Encuadernación de datos fuertemente tipada y genéricos?
- 27. ¿Cómo hacer PHP más Javatized (también conocido como fuertemente tipado, más robusto)?
- 28. Cadena de conexión dinámica para un conjunto de datos fuertemente tipado
- 29. Message Buses y MOM: ¿lo mismo?
- 30. Tipo de datos escalar vs. primitivo: ¿son lo mismo?
¿No debería ser esta la wiki de la comunidad? – Linuxios