b'\n_START_ARTICLE_\nSistema de tipos\n_START_SECTION_\nChequeo de tipificaci\xc3\xb3n\n_START_PARAGRAPH_\nEl proceso de verificar e imponer los l\xc3\xadmites impuestos por los tipos de datos \xe2\x80\x93comprobaci\xc3\xb3n (chequeo) de tipificaci\xc3\xb3n\xe2\x80\x93 puede ocurrir tanto en la compilaci\xc3\xb3n (una comprobaci\xc3\xb3n est\xc3\xa1tica) o en la ejecuci\xc3\xb3n (una comprobaci\xc3\xb3n din\xc3\xa1mica). Si un lenguaje impone fuertemente las reglas de tipificaci\xc3\xb3n (es decir, generalmente permitiendo solo las conversiones de tipo de dato autom\xc3\xa1ticas que no hagan perder informaci\xc3\xb3n), uno se puede referir al proceso como fuertemente tipado; si no, d\xc3\xa9bilmente tipado.\n_START_SECTION_\nTipado est\xc3\xa1tico\n_START_PARAGRAPH_\nSe dice de un lenguaje de programaci\xc3\xb3n que usa un tipado est\xc3\xa1tico cuando la comprobaci\xc3\xb3n de tipificaci\xc3\xb3n se realiza durante la compilaci\xc3\xb3n, y no durante la ejecuci\xc3\xb3n. Ejemplos de lenguajes que usan tipado est\xc3\xa1tico son C, C++, Java y Haskell. Comparado con el tipado din\xc3\xa1mico, el est\xc3\xa1tico permite que los errores de tipificaci\xc3\xb3n sean detectados antes, y que la ejecuci\xc3\xb3n del programa sea m\xc3\xa1s eficiente y segura.\n_START_SECTION_\nTipado din\xc3\xa1mico\n_START_PARAGRAPH_\nSe dice de un lenguaje de programaci\xc3\xb3n que usa un tipado din\xc3\xa1mico cuando la comprobaci\xc3\xb3n de tipificaci\xc3\xb3n se realiza durante su ejecuci\xc3\xb3n en vez de durante la compilaci\xc3\xb3n. Ejemplos de lenguajes que usan tipado din\xc3\xa1mico son Perl, Python y Lisp. Comparado con el tipado est\xc3\xa1tico, o sistema de enlazado temprano, el tipado din\xc3\xa1mico es m\xc3\xa1s flexible (debido a las limitaciones te\xc3\xb3ricas de la decidibilidad de ciertos problemas de an\xc3\xa1lisis de programas est\xc3\xa1ticos, que impiden el mismo nivel de flexibilidad que se consigue con el tipado est\xc3\xa1tico), a pesar de ejecutarse m\xc3\xa1s lentamente y ser m\xc3\xa1s propensos a contener errores de programaci\xc3\xb3n.\n_START_SECTION_\nTipado est\xc3\xa1tico y din\xc3\xa1mico combinados\n_START_PARAGRAPH_\nAlgunos lenguajes est\xc3\xa1ticamente tipados tienen una "puerta trasera" en el lenguaje que permite a los programadores escribir c\xc3\xb3digo que no es comprobado est\xc3\xa1ticamente. Por ejemplo, los lenguajes como Java y los parecidos al C tienen una "conversi\xc3\xb3n de tipos de datos forzada (cast)"; estas operaciones pueden ser inseguras durante la ejecuci\xc3\xb3n, porque pueden causar comportamientos indeseados cuando el programa se ejecuta. Otros lenguajes de programaci\xc3\xb3n como C# utilizan declaraciones de tipos de datos din\xc3\xa1micos en un ambiente est\xc3\xa1tico, permitiendo la flexibilidad casi completa de un lenguaje din\xc3\xa1mico en un lenguaje est\xc3\xa1tico._NEWLINE_La presencia de un tipado est\xc3\xa1tico en un lenguaje de programaci\xc3\xb3n no implica necesariamente la ausencia de mecanismos de tipado din\xc3\xa1mico. Por ejemplo, Java usa tipado est\xc3\xa1tico, pero ciertas operaciones requieren el soporte de test de tipos de datos durante la ejecuci\xc3\xb3n, que es una forma de tipado din\xc3\xa1mico. Ver lenguaje de programaci\xc3\xb3n para una discusi\xc3\xb3n m\xc3\xa1s amplia de la interacci\xc3\xb3n entre tipado est\xc3\xa1tico y din\xc3\xa1mico.\n_START_SECTION_\nChequeo de tipificaci\xc3\xb3n est\xc3\xa1tico y din\xc3\xa1mico en la pr\xc3\xa1ctica\n_START_PARAGRAPH_\nLa elecci\xc3\xb3n entre sistemas de tipificaci\xc3\xb3n din\xc3\xa1mico y est\xc3\xa1tico requiere algunas contraprestaciones._NEWLINE_El tipado est\xc3\xa1tico busca errores en los tipos de datos durante la compilaci\xc3\xb3n. Esto deber\xc3\xada incrementar la fiabilidad de los programas procesados. Sin embargo, los programadores, normalmente, est\xc3\xa1n en desacuerdo en c\xc3\xb3mo los errores de tipos de datos m\xc3\xa1s comunes ocurren, y en qu\xc3\xa9 proporci\xc3\xb3n de estos errores que se han escrito podr\xc3\xadan haberse cazado con un tipado est\xc3\xa1tico. El tipado est\xc3\xa1tico aboga por la creencia de que los programas son m\xc3\xa1s fiables cuando son chequeados sus tipos de datos, mientras que el tipado din\xc3\xa1mico apunta al c\xc3\xb3digo distribuido que se ha probado que es fiable y un conjunto peque\xc3\xb1o de errores. El valor del tipado est\xc3\xa1tico, entonces, se incrementa a la par que se endurece el sistema de tipificaci\xc3\xb3n. 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\xc3\xa1n suficientemente bien declarados por el programador o inferidos por el compilador.\xe2\x80\x8b_NEWLINE_El tipado est\xc3\xa1tico resulta, normalmente, en un c\xc3\xb3digo compilado que se ejecuta m\xc3\xa1s r\xc3\xa1pidamente. Cuando el compilador conoce los tipos de datos exactos que est\xc3\xa1n en uso, puede producir c\xc3\xb3digo m\xc3\xa1quina optimizado. Adem\xc3\xa1s, los compiladores en los lenguajes de tipado est\xc3\xa1tico pueden encontrar atajos m\xc3\xa1s f\xc3\xa1cilmente. Algunos lenguajes de tipificaci\xc3\xb3n din\xc3\xa1mica como el lisp permiten declaraciones de tipos de datos opcionales para la optimizaci\xc3\xb3n por esta misma raz\xc3\xb3n. El tipado est\xc3\xa1tico generaliza este uso. Ver optimizaci\xc3\xb3n de software _NEWLINE_En contraste, el tipado din\xc3\xa1mico permite a los compiladores e int\xc3\xa9rpretes ejecutarse m\xc3\xa1s r\xc3\xa1pidamente, debido a que los cambios en el c\xc3\xb3digo fuente en los lenguajes din\xc3\xa1micamente tipados puede resultar en menores comprobaciones y menos c\xc3\xb3digo que revisar. Esto tambi\xc3\xa9n reduce el ciclo editar-compilar-comprobar-depurar._NEWLINE_Lenguajes est\xc3\xa1ticamente tipados que no dispongan de inferencia (como Java), requieren que el programador declare los tipos de datos que un m\xc3\xa9todo o funci\xc3\xb3n puede procesar. Esto puede hacer la veces de documentaci\xc3\xb3n adicional del programa, que el compilador no permitir\xc3\xa1 que el programador ignore o drift out of synchronization. Sin embargo, un lenguaje puede ser de tipificaci\xc3\xb3n est\xc3\xa1tica sin requerir la declaraci\xc3\xb3n del tipo de dato (ejemplos incluyen Scala y C#3.0), as\xc3\xad que esto no es una consecuencia de tipificaci\xc3\xb3n est\xc3\xa1tica._NEWLINE_El tipado din\xc3\xa1mico permite construcciones que algunos sistemas de tipado est\xc3\xa1tico rechazar\xc3\xadan al considerarlas ilegales. Por ejemplo, la funci\xc3\xb3n eval de Python, la cual ejecuta datos arbitrarios como si fueran c\xc3\xb3digo. Adem\xc3\xa1s, el tipado din\xc3\xa1mico es m\xc3\xa1s adecuado para c\xc3\xb3digo de transici\xc3\xb3n o para el prototipado. Desarrollos recientes en lenguajes como Haskell (por ejemplo, los tipos algebraicos generalizados), permiten a lenguajes de tipado est\xc3\xa1tico, ejecutar c\xc3\xb3digo a partir de estructuras de datos de una forma segura._NEWLINE_El tipado din\xc3\xa1mico t\xc3\xadpicamente hace que la metaprogramaci\xc3\xb3n sea menos verbosa. Por ejemplo, los gen\xc3\xa9ricos de C++ requiere una escritura m\xc3\xa1s descriptiva que su equivalente en Ruby o Python, precisamente porque es necesario especificar los tipos implicados.\n_START_SECTION_\nControversia\n_START_PARAGRAPH_\nHay frecuentemente conflictos entre aquellos que prefieren la tipificaci\xc3\xb3n fuerte y/o est\xc3\xa1tica y aquellos que se inclinan por la tipificaci\xc3\xb3n din\xc3\xa1mica o libre. El primer grupo aboga por la detecci\xc3\xb3n temprana de errores durante la compilaci\xc3\xb3n y el aumento de rendimiento en tiempo de ejecuci\xc3\xb3n, mientras que el segundo grupo aboga por los prototipos r\xc3\xa1pidos que son posibles con un sistema de tipificaci\xc3\xb3n din\xc3\xa1mico.\xe2\x80\x8b'