SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Tipos Estáticos y Ceylon
Gavin King
http://ceylon-lang.org
Aprender Ceylon
Taller Ceylon
El sabado a las 9:30 AM
Goldsmith #40 Col. Polanco,
entre Dickens y Emilio
Castelar
Con Gavin y Enrique
Acerca de Ceylon
• Nuevo lenguaje de programación
• Para máquinas virtuales
– JVM y JavaScript (el entorno)
• Plataforma modular
– “módulo del lenguaje”— mínimo, ligero
– otros módulos independientes del entorno
– módulos para un solo entorno (JVM, JavaScript)
Acerca de Ceylon
• Herramientas
– Ceylon IDE y línea de comando
• Infraestructura para manejar y compartir los
módulos
– arquitectura de repositorios de módulos y dependencias
– Ceylon Herd (un repo central para la comunidad)
– entorno de módulos (JBoss Modules/CommonJS)
Expresividad
• Es muy fácil diseñar un lenguaje muy expresivo
• Por ejemplo, con los lenguajes “dinámicos” se
siente como que se puede hacer casi lo que sea
• Pero con lenguajes así es muy difícil crear
herramientas que nos ayuden como programadores
a encontrar bugs, refactorizar y analizar el código
– el compilador
– el IDE
– el compilador de documentación
Expresividad
• Para programas grandes las herramientas pueden
mejorar mucho la productividad
• Por lo tanto necesitamos un lenguaje con reglas
– Estas reglas nos estorban para expresarnos!
– Pero cuando están bien diseñadas frecuentemente nos
ayudan a llegar a un diseño más elegante y más robusto
– Ademas, las herramientas y las reglas nos ayudan a
comprender el código horrible que han hecho nuestros
compañeros locos! (Gasto mucho mas tiempo en leer el
código de otros que en escribir mi propio código)
Limites de expresividad
• Siempre podemos aumentar la expresividad de un
lenguaje añadiendo características, introduciendo
nuevas reglas especiales, nueva sintaxis
• Al final llegamos a tener un lenguaje tan
complicado que el programador no sabe todas las
reglas, ni puede reproducir el razonamiento del
compilador, ni entiende el código de otros o de las
bibliotecas que utiliza
• También hay limites básicos de decidibilidad que
restringen el razonamiento del compilador
Objetos y tipos estáticos
• Un lenguaje orientado a objetos es un lenguaje
con polimorfismo de subtipos
• Cuando combinamos subtipos con un sistema de
tipos estáticos, llegamos muy rápido al problema
de tipos contenedores (colecciones)
• Para modelar el contrato de un tipo contenedor
hay que introducir polimorfismo paramétrico
(generics)
– Entonces encontramos las dos variedades de
polimorfismo en Java, C#, C++, Ceylon, Scala, ...
Objetos y tipos estáticos
• La mala noticia: un sistema de tipos con la
combinación de los dos polimorfismos es
necesariamente bastante complejo
– Abandonamos objetos? Abandonamos tipos estáticos?
No! Al final vale la pena
• En cambio, buscamos cómo presentarlo de manera
más digerible y eliminar la complejidad
innecesaria
– Qué ofrece la nueva generación de lenguajes con tipos
estáticos? Pues que son los puntos dolorosos?
Los puntos dolorosos
• Declarar tipos resulta en verbosidad
• Abstraer sobre tipos que no controlamos
– por ejemplo, tipos definidos en otros módulos que no
tienen ningún supertipo en común
• Varianza con wildcards
• Tratar con funciones como valores y abstraer sobre
tipos de funciones
– para definir funciones genéricas de orden superior
• El valor null y la maldita NullPointerException
Verbosidad
• Poner el tipo como int, bool, char no cuesta mucho,
pero ahora, con generics, tratamos con tipos como
Map<String,WeakRef<Object?>>
String|{Character*}
• Inferencia de tipos (alcance local)
value weakRefMap = Map { key1 -> WeakRef(val1),
key2 -> WeakRef(val2) };
• Aliases de tipos
alias WeakRefMap => Map<String,WeakRef<Object?>>;
alias Stringish => String|{Character*};
Uniones, intersecciones
• A veces encontramos casos como
– print() que acepta un String, Integer, o Float
– readLine() que produce un String, EOF o Error
– send() que acepta algo que es Persistent y
Serializable
• Malas soluciones:
– usar Object
– sobrecargar print()
– crear una clase intermedia (algun tipo de wrapper)
– En un lenguaje dinámico no necesitamos nada así
Uniones, intersecciones
• Mejor solución con tipos unión e intersección
– void print(String|Integer|Float line) { ... }
– String|EOF|Error readLine() { ... }
– void send(Persistent&Serializable message) { ... }
• De hecho, uniones e intersecciones nos ayudan
mucho a simplificar el sistema de tipos y hacerlo
más elegante y más completo
–Les van a encantar, lo prometo
Varianza
• Covarianza: intuitivamente un Set<Integer> es un
Set<Number>
– también tenemos contravarianza
• Mala solución: wildcards de Java
– el Set<Integer> es un Set<? extends Number>
– casi nadie los entiende completamente
– resultan en errores muy confusos
– bastante verboso
Varianza
• Mejor solución con varianza de lado de declaración
• Declaramos la varianza del tipo donde lo definimos
– covariante out, contravariante in
– interface Set<out T> { ... }
– el compilador verifica que el tipo sí es verdaderamente
covariante o contravariante
• Cuando utilizamos el tipo, todo funciona como
intuitivamente esperamos
– ahora Set<Integer> sí es un Set<Number>
Null y Nothing
• Socavamos el sistema entero cuando ponemos
hoyos para “conveniencia”
– NullPointerException es una excepción de tipo en
tiempo de ejecución como tienes con los tipos
dinámicos!
• El tipo bottom o Nothing es un subtipo de todo tipo
– Corresponde al conjunto vacío en matemáticas
– Entonces el tipo bottom no tiene ningún valor
– Excepto en Java, C#, Scala ... donde tiene el valor null
– Oops.
Null y Nothing
• En Ceylon, el tipo Nothing no tiene ningún valor
• Tenemos una clase Null perfectamente ordinaria
con un único valor null
– Escribimos “un string o null” como String|Null
– O lo abreviamos como String?
• El compilador verifica que cada valor ha sido
inicializado antes de ser utilizado
– para no encontrar valores no inicializados en tiempo de
ejecución
• Ninguna NullPointerException ocurre jamás!
Acotamiento de tipos
• Cómo podemos obtener un String si tenemos un
valor de tipo String?
– un caso especial del problema de acotamiento
• El tipo de un valor puede cambiar con el flujo de
código condicional
• Ya no necesitamos los casts inseguros de C
String? name = process.arguments[0];
if (exists name) {
//aquí, name es de tipo String
print(“Hello, “ + name + “!”);
}
Funciones y tuplas
• Cómo podemos representar el tipo de una tupla
por ejemplo [0.0, 0.0, “origen”]
• Luego, cómo representar el tipo de una función
– combina un tipo de tupla con otro tipo
• Definimos Tuple y Callable como clases ordinarias y
proveemos azúcar sintáctica
– tipo de tupla: [Float, Float, String]
– tipo de función: Point(Float, Float, String)
• Nos deja definir funciones de orden superior
incluso funciones genéricas como compose()
La mala noticia
• El sistema de inferencia de tipos funciona bien sin
ambigüedades gracias al concepto de tipos
principales
– Cada expresión tiene su único tipo más específico, su
tipo principal (frecuentemente expresado con el uso de
unión y intersección)
• Funciones sobrecargadas rompen el sistema de
tipos principales
– Una función sobrecargada no tiene ningún tipo principal
– Como los lenguajes dinámicos no tenemos overloading
Conclusión
• Se puede mejorar mucho el sistema de tipos,
aliviando los puntos dolorosos
• Un punto clave es ajustar el punto de vista para
pensar en tipos como conjuntos
• Así podemos tratar con tipos de una manera más
sofisticada, formando expresiones con | y &,
introduciendo aliases, infiriendo tipos complejos
• El problema de decidibilidad limita lo que
podemos hacer
Conclusión
• La nueva generación de lenguajes de tipado
estático es mucho más expresiva
• Puede ser tan expresivo y flexible como un
lenguaje dinámico? No!
– O, más bien, expresa cosas diferentes (tipos)
• Aún vale la pena — tipado estático tiene sus
propias ventajas, facilita herramientas!
Preguntas
http://ceylon-lang.org
Taller Ceylon
El sabado a las 9:30 AM
Goldsmith #40 Col. Polanco, entre
Dickens y Emilio Castelar

Más contenido relacionado

Más de Software Guru

Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosSoftware Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
 
La importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosLa importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosSoftware Guru
 
La vida después de la escuela
La vida después de la escuelaLa vida después de la escuela
La vida después de la escuelaSoftware Guru
 
Proyectos FOSS, desde corporativos globales hasta pequeñas empresas
Proyectos FOSS, desde corporativos globales hasta pequeñas empresasProyectos FOSS, desde corporativos globales hasta pequeñas empresas
Proyectos FOSS, desde corporativos globales hasta pequeñas empresasSoftware Guru
 
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)Propuesta de blockchain para KYC / AML (detección de lavado de dinero)
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)Software Guru
 
JamStack, el futuro de los sitios Web
JamStack, el futuro de los sitios WebJamStack, el futuro de los sitios Web
JamStack, el futuro de los sitios WebSoftware Guru
 
Transformación a través del diseño
Transformación a través del diseñoTransformación a través del diseño
Transformación a través del diseñoSoftware Guru
 
Planear una investigación user research para usuarios con síndrome de Down
Planear una investigación user research para usuarios con síndrome de DownPlanear una investigación user research para usuarios con síndrome de Down
Planear una investigación user research para usuarios con síndrome de DownSoftware Guru
 

Más de Software Guru (20)

Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 
La importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosLa importancia de crear User Personas y Escenarios
La importancia de crear User Personas y Escenarios
 
La vida después de la escuela
La vida después de la escuelaLa vida después de la escuela
La vida después de la escuela
 
Proyectos FOSS, desde corporativos globales hasta pequeñas empresas
Proyectos FOSS, desde corporativos globales hasta pequeñas empresasProyectos FOSS, desde corporativos globales hasta pequeñas empresas
Proyectos FOSS, desde corporativos globales hasta pequeñas empresas
 
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)Propuesta de blockchain para KYC / AML (detección de lavado de dinero)
Propuesta de blockchain para KYC / AML (detección de lavado de dinero)
 
JamStack, el futuro de los sitios Web
JamStack, el futuro de los sitios WebJamStack, el futuro de los sitios Web
JamStack, el futuro de los sitios Web
 
Transformación a través del diseño
Transformación a través del diseñoTransformación a través del diseño
Transformación a través del diseño
 
Planear una investigación user research para usuarios con síndrome de Down
Planear una investigación user research para usuarios con síndrome de DownPlanear una investigación user research para usuarios con síndrome de Down
Planear una investigación user research para usuarios con síndrome de Down
 

Último

Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 

Último (20)

Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 

Cómo minimizar las desventajas del tipado estático y capitalizar sus ventajas

  • 1. Tipos Estáticos y Ceylon Gavin King http://ceylon-lang.org
  • 2. Aprender Ceylon Taller Ceylon El sabado a las 9:30 AM Goldsmith #40 Col. Polanco, entre Dickens y Emilio Castelar Con Gavin y Enrique
  • 3. Acerca de Ceylon • Nuevo lenguaje de programación • Para máquinas virtuales – JVM y JavaScript (el entorno) • Plataforma modular – “módulo del lenguaje”— mínimo, ligero – otros módulos independientes del entorno – módulos para un solo entorno (JVM, JavaScript)
  • 4. Acerca de Ceylon • Herramientas – Ceylon IDE y línea de comando • Infraestructura para manejar y compartir los módulos – arquitectura de repositorios de módulos y dependencias – Ceylon Herd (un repo central para la comunidad) – entorno de módulos (JBoss Modules/CommonJS)
  • 5. Expresividad • Es muy fácil diseñar un lenguaje muy expresivo • Por ejemplo, con los lenguajes “dinámicos” se siente como que se puede hacer casi lo que sea • Pero con lenguajes así es muy difícil crear herramientas que nos ayuden como programadores a encontrar bugs, refactorizar y analizar el código – el compilador – el IDE – el compilador de documentación
  • 6. Expresividad • Para programas grandes las herramientas pueden mejorar mucho la productividad • Por lo tanto necesitamos un lenguaje con reglas – Estas reglas nos estorban para expresarnos! – Pero cuando están bien diseñadas frecuentemente nos ayudan a llegar a un diseño más elegante y más robusto – Ademas, las herramientas y las reglas nos ayudan a comprender el código horrible que han hecho nuestros compañeros locos! (Gasto mucho mas tiempo en leer el código de otros que en escribir mi propio código)
  • 7. Limites de expresividad • Siempre podemos aumentar la expresividad de un lenguaje añadiendo características, introduciendo nuevas reglas especiales, nueva sintaxis • Al final llegamos a tener un lenguaje tan complicado que el programador no sabe todas las reglas, ni puede reproducir el razonamiento del compilador, ni entiende el código de otros o de las bibliotecas que utiliza • También hay limites básicos de decidibilidad que restringen el razonamiento del compilador
  • 8. Objetos y tipos estáticos • Un lenguaje orientado a objetos es un lenguaje con polimorfismo de subtipos • Cuando combinamos subtipos con un sistema de tipos estáticos, llegamos muy rápido al problema de tipos contenedores (colecciones) • Para modelar el contrato de un tipo contenedor hay que introducir polimorfismo paramétrico (generics) – Entonces encontramos las dos variedades de polimorfismo en Java, C#, C++, Ceylon, Scala, ...
  • 9. Objetos y tipos estáticos • La mala noticia: un sistema de tipos con la combinación de los dos polimorfismos es necesariamente bastante complejo – Abandonamos objetos? Abandonamos tipos estáticos? No! Al final vale la pena • En cambio, buscamos cómo presentarlo de manera más digerible y eliminar la complejidad innecesaria – Qué ofrece la nueva generación de lenguajes con tipos estáticos? Pues que son los puntos dolorosos?
  • 10. Los puntos dolorosos • Declarar tipos resulta en verbosidad • Abstraer sobre tipos que no controlamos – por ejemplo, tipos definidos en otros módulos que no tienen ningún supertipo en común • Varianza con wildcards • Tratar con funciones como valores y abstraer sobre tipos de funciones – para definir funciones genéricas de orden superior • El valor null y la maldita NullPointerException
  • 11. Verbosidad • Poner el tipo como int, bool, char no cuesta mucho, pero ahora, con generics, tratamos con tipos como Map<String,WeakRef<Object?>> String|{Character*} • Inferencia de tipos (alcance local) value weakRefMap = Map { key1 -> WeakRef(val1), key2 -> WeakRef(val2) }; • Aliases de tipos alias WeakRefMap => Map<String,WeakRef<Object?>>; alias Stringish => String|{Character*};
  • 12. Uniones, intersecciones • A veces encontramos casos como – print() que acepta un String, Integer, o Float – readLine() que produce un String, EOF o Error – send() que acepta algo que es Persistent y Serializable • Malas soluciones: – usar Object – sobrecargar print() – crear una clase intermedia (algun tipo de wrapper) – En un lenguaje dinámico no necesitamos nada así
  • 13. Uniones, intersecciones • Mejor solución con tipos unión e intersección – void print(String|Integer|Float line) { ... } – String|EOF|Error readLine() { ... } – void send(Persistent&Serializable message) { ... } • De hecho, uniones e intersecciones nos ayudan mucho a simplificar el sistema de tipos y hacerlo más elegante y más completo –Les van a encantar, lo prometo
  • 14. Varianza • Covarianza: intuitivamente un Set<Integer> es un Set<Number> – también tenemos contravarianza • Mala solución: wildcards de Java – el Set<Integer> es un Set<? extends Number> – casi nadie los entiende completamente – resultan en errores muy confusos – bastante verboso
  • 15. Varianza • Mejor solución con varianza de lado de declaración • Declaramos la varianza del tipo donde lo definimos – covariante out, contravariante in – interface Set<out T> { ... } – el compilador verifica que el tipo sí es verdaderamente covariante o contravariante • Cuando utilizamos el tipo, todo funciona como intuitivamente esperamos – ahora Set<Integer> sí es un Set<Number>
  • 16. Null y Nothing • Socavamos el sistema entero cuando ponemos hoyos para “conveniencia” – NullPointerException es una excepción de tipo en tiempo de ejecución como tienes con los tipos dinámicos! • El tipo bottom o Nothing es un subtipo de todo tipo – Corresponde al conjunto vacío en matemáticas – Entonces el tipo bottom no tiene ningún valor – Excepto en Java, C#, Scala ... donde tiene el valor null – Oops.
  • 17. Null y Nothing • En Ceylon, el tipo Nothing no tiene ningún valor • Tenemos una clase Null perfectamente ordinaria con un único valor null – Escribimos “un string o null” como String|Null – O lo abreviamos como String? • El compilador verifica que cada valor ha sido inicializado antes de ser utilizado – para no encontrar valores no inicializados en tiempo de ejecución • Ninguna NullPointerException ocurre jamás!
  • 18. Acotamiento de tipos • Cómo podemos obtener un String si tenemos un valor de tipo String? – un caso especial del problema de acotamiento • El tipo de un valor puede cambiar con el flujo de código condicional • Ya no necesitamos los casts inseguros de C String? name = process.arguments[0]; if (exists name) { //aquí, name es de tipo String print(“Hello, “ + name + “!”); }
  • 19. Funciones y tuplas • Cómo podemos representar el tipo de una tupla por ejemplo [0.0, 0.0, “origen”] • Luego, cómo representar el tipo de una función – combina un tipo de tupla con otro tipo • Definimos Tuple y Callable como clases ordinarias y proveemos azúcar sintáctica – tipo de tupla: [Float, Float, String] – tipo de función: Point(Float, Float, String) • Nos deja definir funciones de orden superior incluso funciones genéricas como compose()
  • 20. La mala noticia • El sistema de inferencia de tipos funciona bien sin ambigüedades gracias al concepto de tipos principales – Cada expresión tiene su único tipo más específico, su tipo principal (frecuentemente expresado con el uso de unión y intersección) • Funciones sobrecargadas rompen el sistema de tipos principales – Una función sobrecargada no tiene ningún tipo principal – Como los lenguajes dinámicos no tenemos overloading
  • 21. Conclusión • Se puede mejorar mucho el sistema de tipos, aliviando los puntos dolorosos • Un punto clave es ajustar el punto de vista para pensar en tipos como conjuntos • Así podemos tratar con tipos de una manera más sofisticada, formando expresiones con | y &, introduciendo aliases, infiriendo tipos complejos • El problema de decidibilidad limita lo que podemos hacer
  • 22. Conclusión • La nueva generación de lenguajes de tipado estático es mucho más expresiva • Puede ser tan expresivo y flexible como un lenguaje dinámico? No! – O, más bien, expresa cosas diferentes (tipos) • Aún vale la pena — tipado estático tiene sus propias ventajas, facilita herramientas!
  • 23. Preguntas http://ceylon-lang.org Taller Ceylon El sabado a las 9:30 AM Goldsmith #40 Col. Polanco, entre Dickens y Emilio Castelar