fbpx
Wikipedia

Sistema de tipos

En ciencias de la computación, un sistema de tipos define cómo un lenguaje de programación clasifica los valores y las expresiones en tipos, cómo se pueden manipular estos tipos y cómo interactúan. Un tipo de dato indica un conjunto de valores que tienen el mismo significado genérico o propósito (aunque algunos tipos, como los tipos de datos abstractos y tipos de datos función tal vez no representen valores en el programa que se está ejecutando). Los sistemas de tipificación varían significativamente entre lenguajes, siendo quizás las más importantes variaciones las que estén en sus propias implementaciones de la sintáctica en tiempo de compilación y la operativa en tiempo de ejecución.

Un compilador puede usar el tipo estático de un valor para optimizar el almacenamiento que necesita y la elección de los algoritmos para las operaciones sobre ese valor. Por ejemplo, en muchos compiladores de C el tipo de dato "flotante" se representa en 32 bits, de acuerdo con la especificación IEEE para los números de coma flotante de simple precisión. Entonces, C usa operaciones específicas de coma flotante sobre estos valores (suma de coma flotante, multiplicación, etc.).

El rango del tipo de dato limita y la forma de su evaluación afecta en el "tipado" del lenguaje. Además, un lenguaje de programación puede asociar una operación concreta con diferentes algoritmos para cada tipo de dato en el caso del polimorfismo. En matemáticas y lógica, la teoría de tipos es el estudio de los sistemas de tipos, aunque los sistemas de tipos de datos concretos de los lenguajes de programación se originaron a partir de los problemas técnicos de las arquitecturas del ordenador, implementación del compilador y diseño del lenguaje.

Básicos

Asignar tipos de datos (tipificar) da significado a colecciones de bits. Los tipos de datos normalmente tienen asociaciones tanto con valores en la memoria o con objetos como con variables. Como cualquier valor simplemente consiste en un conjunto de bits de un ordenador, el hardware no hace distinción entre dirección de memoria, código de instrucción, caracteres, enteros y números en coma flotante. Los tipos de datos informan a los programas y programadores cómo deben ser tratados esos bits.

Las principales funciones que los sistemas de tipificación ofrecen son:

  • Seguridad - El uso de tipos de datos puede permitir a un compilador detectar incoherencias en el significado o código probablemente inválido. Por ejemplo, podemos identificar una expresión 3 / "Hello, World" como inválida porque no se puede dividir (de forma normal) un entero por una cadena de caracteres. Un sistema de tipado fuerte ofrece más seguridad, pero no garantiza, necesariamente una seguridad completa (ver seguridad de la tipificación para más información).
  • Optimización - Un sistema de tipado estático puede dar información muy útil al compilador. Por ejemplo, si un tipo de dato dice que un valor debe alinearse en múltiplos de 4, el compilador puede usar de forma más eficiente las instrucciones máquina.
  • Documentación - En sistemas de tipificación más expresivos, los tipos de datos pueden servir como una forma de documentación, porque pueden ilustrar la intención del programador. Por ejemplo, los ítem de tiempos pueden ser un subtipo de un entero, pero si un programador declara una función como que devuelve ítems de tiempo en lugar de un simple entero, esto documenta parte del significado de la función.
  • Abstracción (o modularidad) - Los tipos de datos permiten a los programadores pensar en los programas a un alto nivel, sin tener que preocuparse con el bajo nivel de la implementación. Por ejemplo, los programadores pueden pensar en una cadena de caracteres como un valor en lugar de un simple array de bytes. O los tipos de datos pueden permitir a los programadores expresar la Interfaz entre dos subsistemas. Esto localiza las definiciones requeridas para la interoperabilidad de los subsistemas y previene de inconsistencias cuando estos subsistemas se comuniquen.

Un programa normalmente asocia cada valor con un tipo de dato determinado (aunque un tipo de dato puede tener más de un subtipo). Otras entidades, como los objetos, bibliotecas, canales de comunicación, dependencias o, incluso, los propios tipos de datos, pueden ser asociados con un tipo de dato. Por ejemplo:

Un sistema de tipado, especificado en cada lenguaje de programación, estipula las formas en que los programas pueden ser escritos y hace ilegal cualquier comportamiento fuera de estas reglas.

Chequeo de tipificación

El proceso de verificar e imponer los límites impuestos por los tipos de datos –comprobación (chequeo) de tipificación– puede ocurrir tanto en la compilación (una comprobación estática) o en la ejecución (una comprobación dinámica). Si un lenguaje impone fuertemente las reglas de tipificación (es decir, generalmente permitiendo solo las conversiones de tipo de dato automáticas que no hagan perder información), uno se puede referir al proceso como fuertemente tipado; si no, débilmente tipado.

Tipado estático

Se dice de un lenguaje de programación que usa un tipado estático cuando la comprobación de tipificación se realiza durante la compilación, y no durante la ejecución. Ejemplos de lenguajes que usan tipado estático son C, C++, Java y Haskell. Comparado con el tipado dinámico, el estático permite que los errores de tipificación sean detectados antes, y que la ejecución del programa sea más eficiente y segura.

Tipado dinámico

Se dice de un lenguaje de programación que usa un tipado dinámico cuando la comprobación de tipificación se realiza durante su ejecución en vez de durante la compilación. Ejemplos de lenguajes que usan tipado dinámico son Perl, Python y Lisp. Comparado con el tipado estático, o sistema de enlazado temprano, el tipado dinámico es más flexible (debido a las limitaciones teóricas de la decidibilidad de ciertos problemas de análisis de programas estáticos, que impiden el mismo nivel de flexibilidad que se consigue con el tipado dinámico), a pesar de ejecutarse más lentamente y ser más propensos a contener errores de programación.

Tipado estático y dinámico combinados

Algunos lenguajes estáticamente tipados tienen una "puerta trasera" en el lenguaje que permite a los programadores escribir código que no es comprobado estáticamente. Por ejemplo, los lenguajes como Java y los parecidos al C tienen una "conversión de tipos de datos forzada (cast)"; estas operaciones pueden ser inseguras durante la ejecución, porque pueden causar comportamientos indeseados cuando el programa se ejecuta. Otros lenguajes de programación como C# utilizan declaraciones de tipos de datos dinámicos en un ambiente estático, permitiendo la flexibilidad casi completa de un lenguaje dinámico en un lenguaje estático.

La presencia de un tipado estático en un lenguaje de programación no implica necesariamente la ausencia de mecanismos de tipado dinámico. Por ejemplo, Java usa tipado estático, pero ciertas operaciones requieren el soporte de test de tipos de datos durante la ejecución, que es una forma de tipado dinámico. Ver lenguaje de programación para una discusión más amplia de la interacción entre tipado estático y dinámico.

Chequeo de tipificación estático y dinámico en la práctica

La elección entre sistemas de tipificación dinámico y estático requiere algunas contraprestaciones.

El tipado estático busca errores en los tipos de datos durante la compilación. Esto debería incrementar la fiabilidad de los programas procesados. Sin embargo, los programadores, normalmente, están en desacuerdo en cómo los errores de tipos de datos más comunes ocurren, y en qué proporción de estos errores que se han escrito podrían haberse cazado con un tipado estático. El tipado estático aboga por la creencia de que los programas son más fiables cuando son chequeados sus tipos de datos, mientras que el tipado dinámico apunta al código distribuido que se ha probado que es fiable y un conjunto pequeño de errores. El valor del tipado estático, entonces, se incrementa a la par que se endurece el sistema de tipificación. Los defensores de los lenguajes fuertemente tipados como ML y Haskell han sugerido que casi todos los errores pueden ser considerados errores de los tipos de datos, si los tipos de datos usados en un programa están suficientemente bien declarados por el programador o inferidos por el compilador.[1]

El tipado estático resulta, normalmente, en un código compilado que se ejecuta más rápidamente. Cuando el compilador conoce los tipos de datos exactos que están en uso, puede producir código máquina optimizado. Además, los compiladores en los lenguajes de tipado estático pueden encontrar atajos más fácilmente. Algunos lenguajes de tipificación dinámica como el lisp permiten declaraciones de tipos de datos opcionales para la optimización por esta misma razón. El tipado estático generaliza este uso. Ver optimización de software

En contraste, el tipado dinámico permite a los compiladores e intérpretes ejecutarse más rápidamente, debido a que los cambios en el código fuente en los lenguajes dinámicamente tipados puede resultar en menores comprobaciones y menos código que revisar. Esto también reduce el ciclo editar-compilar-comprobar-depurar.

Lenguajes estáticamente tipados que no dispongan de inferencia (como Java), requieren que el programador declare los tipos de datos que un método o función puede procesar. Esto puede hacer la veces de documentación adicional del programa, que el compilador no permitirá que el programador ignore o drift out of synchronization. Sin embargo, un lenguaje puede ser de tipificación estática sin requerir la declaración del tipo de dato (ejemplos incluyen Scala y C#3.0), así que esto no es una consecuencia de tipificación estática.

El tipado dinámico permite construcciones que algunos sistemas de tipado estático rechazarían al considerarlas ilegales. Por ejemplo, la función eval de Python, la cual ejecuta datos arbitrarios como si fueran código. Además, el tipado dinámico es más adecuado para código de transición o para el prototipado. Desarrollos recientes en lenguajes como Haskell (por ejemplo, los tipos algebraicos generalizados), permiten a lenguajes de tipado estático, ejecutar código a partir de estructuras de datos de una forma segura.

El tipado dinámico típicamente hace que la metaprogramación sea menos verbosa. Por ejemplo, los genéricos de C++ requiere una escritura más descriptiva que su equivalente en Ruby o Python, precisamente porque es necesario especificar los tipos implicados.[cita requerida]

Controversia

Hay frecuentemente conflictos entre aquellos que prefieren la tipificación fuerte y/o estática y aquellos que se inclinan por la tipificación dinámica o libre. El primer grupo aboga por la detección temprana de errores durante la compilación y el aumento de rendimiento en tiempo de ejecución, mientras que el segundo grupo aboga por los prototipos rápidos que son posibles con un sistema de tipificación dinámico.[2]

Véase también

Referencias

  1. Dependent Types in Practical Programming - Xi, Pfenning (ResearchIndex)
  2. Meijer, Erik and Peter Drayton. . Microsoft Corporation. Archivado desde el original el 16 de febrero de 2007. 

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre Types.
  •   Wikilibros alberga un libro o manual sobre Class Declarations.
  • , by Chris Smith
  •   Datos: Q865760

sistema, tipos, este, artículo, sección, tiene, referencias, pero, necesita, más, para, complementar, verificabilidad, este, aviso, puesto, octubre, 2017, ciencias, computación, sistema, tipos, define, cómo, lenguaje, programación, clasifica, valores, expresio. Este articulo o seccion tiene referencias pero necesita mas para complementar su verificabilidad Este aviso fue puesto el 9 de octubre de 2017 En ciencias de la computacion un sistema de tipos define como un lenguaje de programacion clasifica los valores y las expresiones en tipos como se pueden manipular estos tipos y como interactuan Un tipo de dato indica un conjunto de valores que tienen el mismo significado generico o proposito aunque algunos tipos como los tipos de datos abstractos y tipos de datos funcion tal vez no representen valores en el programa que se esta ejecutando Los sistemas de tipificacion varian significativamente entre lenguajes siendo quizas las mas importantes variaciones las que esten en sus propias implementaciones de la sintactica en tiempo de compilacion y la operativa en tiempo de ejecucion Un compilador puede usar el tipo estatico de un valor para optimizar el almacenamiento que necesita y la eleccion de los algoritmos para las operaciones sobre ese valor Por ejemplo en muchos compiladores de C el tipo de dato flotante se representa en 32 bits de acuerdo con la especificacion IEEE para los numeros de coma flotante de simple precision Entonces C usa operaciones especificas de coma flotante sobre estos valores suma de coma flotante multiplicacion etc El rango del tipo de dato limita y la forma de su evaluacion afecta en el tipado del lenguaje Ademas un lenguaje de programacion puede asociar una operacion concreta con diferentes algoritmos para cada tipo de dato en el caso del polimorfismo En matematicas y logica la teoria de tipos es el estudio de los sistemas de tipos aunque los sistemas de tipos de datos concretos de los lenguajes de programacion se originaron a partir de los problemas tecnicos de las arquitecturas del ordenador implementacion del compilador y diseno del lenguaje Indice 1 Basicos 2 Chequeo de tipificacion 2 1 Tipado estatico 2 2 Tipado dinamico 2 3 Tipado estatico y dinamico combinados 2 4 Chequeo de tipificacion estatico y dinamico en la practica 3 Controversia 4 Vease tambien 5 Referencias 6 Enlaces externosBasicos EditarAsignar tipos de datos tipificar da significado a colecciones de bits Los tipos de datos normalmente tienen asociaciones tanto con valores en la memoria o con objetos como con variables Como cualquier valor simplemente consiste en un conjunto de bits de un ordenador el hardware no hace distincion entre direccion de memoria codigo de instruccion caracteres enteros y numeros en coma flotante Los tipos de datos informan a los programas y programadores como deben ser tratados esos bits Las principales funciones que los sistemas de tipificacion ofrecen son Seguridad El uso de tipos de datos puede permitir a un compilador detectar incoherencias en el significado o codigo probablemente invalido Por ejemplo podemos identificar una expresion 3 Hello World como invalida porque no se puede dividir de forma normal un entero por una cadena de caracteres Un sistema de tipado fuerte ofrece mas seguridad pero no garantiza necesariamente una seguridad completa ver seguridad de la tipificacion para mas informacion Optimizacion Un sistema de tipado estatico puede dar informacion muy util al compilador Por ejemplo si un tipo de dato dice que un valor debe alinearse en multiplos de 4 el compilador puede usar de forma mas eficiente las instrucciones maquina Documentacion En sistemas de tipificacion mas expresivos los tipos de datos pueden servir como una forma de documentacion porque pueden ilustrar la intencion del programador Por ejemplo los item de tiempos pueden ser un subtipo de un entero pero si un programador declara una funcion como que devuelve items de tiempo en lugar de un simple entero esto documenta parte del significado de la funcion Abstraccion o modularidad Los tipos de datos permiten a los programadores pensar en los programas a un alto nivel sin tener que preocuparse con el bajo nivel de la implementacion Por ejemplo los programadores pueden pensar en una cadena de caracteres como un valor en lugar de un simple array de bytes O los tipos de datos pueden permitir a los programadores expresar la Interfaz entre dos subsistemas Esto localiza las definiciones requeridas para la interoperabilidad de los subsistemas y previene de inconsistencias cuando estos subsistemas se comuniquen Un programa normalmente asocia cada valor con un tipo de dato determinado aunque un tipo de dato puede tener mas de un subtipo Otras entidades como los objetos bibliotecas canales de comunicacion dependencias o incluso los propios tipos de datos pueden ser asociados con un tipo de dato Por ejemplo Tipo de dato un tipo de dato de un valor clase un tipo de dato de un objetoUn sistema de tipado especificado en cada lenguaje de programacion estipula las formas en que los programas pueden ser escritos y hace ilegal cualquier comportamiento fuera de estas reglas Chequeo de tipificacion EditarEl proceso de verificar e imponer los limites impuestos por los tipos de datos comprobacion chequeo de tipificacion puede ocurrir tanto en la compilacion una comprobacion estatica o en la ejecucion una comprobacion dinamica Si un lenguaje impone fuertemente las reglas de tipificacion es decir generalmente permitiendo solo las conversiones de tipo de dato automaticas que no hagan perder informacion uno se puede referir al proceso como fuertemente tipado si no debilmente tipado Tipado estatico Editar Se dice de un lenguaje de programacion que usa un tipado estatico cuando la comprobacion de tipificacion se realiza durante la compilacion y no durante la ejecucion Ejemplos de lenguajes que usan tipado estatico son C C Java y Haskell Comparado con el tipado dinamico el estatico permite que los errores de tipificacion sean detectados antes y que la ejecucion del programa sea mas eficiente y segura Tipado dinamico Editar Articulo principal Tipado dinamico Se dice de un lenguaje de programacion que usa un tipado dinamico cuando la comprobacion de tipificacion se realiza durante su ejecucion en vez de durante la compilacion Ejemplos de lenguajes que usan tipado dinamico son Perl Python y Lisp Comparado con el tipado estatico o sistema de enlazado temprano el tipado dinamico es mas flexible debido a las limitaciones teoricas de la decidibilidad de ciertos problemas de analisis de programas estaticos que impiden el mismo nivel de flexibilidad que se consigue con el tipado dinamico a pesar de ejecutarse mas lentamente y ser mas propensos a contener errores de programacion Tipado estatico y dinamico combinados Editar Algunos lenguajes estaticamente tipados tienen una puerta trasera en el lenguaje que permite a los programadores escribir codigo que no es comprobado estaticamente Por ejemplo los lenguajes como Java y los parecidos al C tienen una conversion de tipos de datos forzada cast estas operaciones pueden ser inseguras durante la ejecucion porque pueden causar comportamientos indeseados cuando el programa se ejecuta Otros lenguajes de programacion como C utilizan declaraciones de tipos de datos dinamicos en un ambiente estatico permitiendo la flexibilidad casi completa de un lenguaje dinamico en un lenguaje estatico La presencia de un tipado estatico en un lenguaje de programacion no implica necesariamente la ausencia de mecanismos de tipado dinamico Por ejemplo Java usa tipado estatico pero ciertas operaciones requieren el soporte de test de tipos de datos durante la ejecucion que es una forma de tipado dinamico Ver lenguaje de programacion para una discusion mas amplia de la interaccion entre tipado estatico y dinamico Chequeo de tipificacion estatico y dinamico en la practica Editar La eleccion entre sistemas de tipificacion dinamico y estatico requiere algunas contraprestaciones El tipado estatico busca errores en los tipos de datos durante la compilacion Esto deberia incrementar la fiabilidad de los programas procesados Sin embargo los programadores normalmente estan en desacuerdo en como los errores de tipos de datos mas comunes ocurren y en que proporcion de estos errores que se han escrito podrian haberse cazado con un tipado estatico El tipado estatico aboga por la creencia de que los programas son mas fiables cuando son chequeados sus tipos de datos mientras que el tipado dinamico apunta al codigo distribuido que se ha probado que es fiable y un conjunto pequeno de errores El valor del tipado estatico entonces se incrementa a la par que se endurece el sistema de tipificacion Los defensores de los lenguajes fuertemente tipados como ML y Haskell han sugerido que casi todos los errores pueden ser considerados errores de los tipos de datos si los tipos de datos usados en un programa estan suficientemente bien declarados por el programador o inferidos por el compilador 1 El tipado estatico resulta normalmente en un codigo compilado que se ejecuta mas rapidamente Cuando el compilador conoce los tipos de datos exactos que estan en uso puede producir codigo maquina optimizado Ademas los compiladores en los lenguajes de tipado estatico pueden encontrar atajos mas facilmente Algunos lenguajes de tipificacion dinamica como el lisp permiten declaraciones de tipos de datos opcionales para la optimizacion por esta misma razon El tipado estatico generaliza este uso Ver optimizacion de softwareEn contraste el tipado dinamico permite a los compiladores e interpretes ejecutarse mas rapidamente debido a que los cambios en el codigo fuente en los lenguajes dinamicamente tipados puede resultar en menores comprobaciones y menos codigo que revisar Esto tambien reduce el ciclo editar compilar comprobar depurar Lenguajes estaticamente tipados que no dispongan de inferencia como Java requieren que el programador declare los tipos de datos que un metodo o funcion puede procesar Esto puede hacer la veces de documentacion adicional del programa que el compilador no permitira que el programador ignore o drift out of synchronization Sin embargo un lenguaje puede ser de tipificacion estatica sin requerir la declaracion del tipo de dato ejemplos incluyen Scala y C 3 0 asi que esto no es una consecuencia de tipificacion estatica El tipado dinamico permite construcciones que algunos sistemas de tipado estatico rechazarian al considerarlas ilegales Por ejemplo la funcion eval de Python la cual ejecuta datos arbitrarios como si fueran codigo Ademas el tipado dinamico es mas adecuado para codigo de transicion o para el prototipado Desarrollos recientes en lenguajes como Haskell por ejemplo los tipos algebraicos generalizados permiten a lenguajes de tipado estatico ejecutar codigo a partir de estructuras de datos de una forma segura El tipado dinamico tipicamente hace que la metaprogramacion sea menos verbosa Por ejemplo los genericos de C requiere una escritura mas descriptiva que su equivalente en Ruby o Python precisamente porque es necesario especificar los tipos implicados cita requerida Controversia EditarHay frecuentemente conflictos entre aquellos que prefieren la tipificacion fuerte y o estatica y aquellos que se inclinan por la tipificacion dinamica o libre El primer grupo aboga por la deteccion temprana de errores durante la compilacion y el aumento de rendimiento en tiempo de ejecucion mientras que el segundo grupo aboga por los prototipos rapidos que son posibles con un sistema de tipificacion dinamico 2 Vease tambien EditarSobrecarga Polimorfismo Lenguaje de programacion Signatura Tipado fuerteReferencias Editar Dependent Types in Practical Programming Xi Pfenning ResearchIndex Meijer Erik and Peter Drayton Static Typing Where Possible Dynamic Typing When Needed The End of the Cold War Between Programming Languages Microsoft Corporation Archivado desde el original el 16 de febrero de 2007 Enlaces externos Editar Wikilibros alberga un libro o manual sobre Types Wikilibros alberga un libro o manual sobre Class Declarations What To Know Before Debating Type Systems by Chris Smith Datos Q865760 Obtenido de https es wikipedia org w index php title Sistema de tipos amp oldid 138985147, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos