Nulabilidad en #java y en #kotlin

Hoy voy a hablar sobre la nulabilidad en Kotlin.

Un poco de historia:

Como sabemos, tradicionalmente en los lenguajes de programación los tipos de valor no son nullables, mientras que los tipos de referencia sí lo son. Los tipos por referencia, generalmente objetos, tienen su contenido en una zona de memoria y cuando tenemos ese objeto en la pila o lo pasamos a otra función, con lo que estamos trabajando es con una referencia, con un puntero.

Al final un puntero acaba siendo un número que hace referencia a una posición en la memoria.
Y la referencia nula (o puntero a la posición 0) originalmente no tenía ningún significado en especial. Al principio se aprovechaba toda la memoria que era poco y no había memoria virtual ni traducciones de direcciones ni nada de eso.

Al final generalmente cuando algo había ido mal, acabábamos con punteros que hacían referencia a posiciones inválidas o que no queríamos, que muchas veces eran valores bajos que hacían referencia a partes bajas de la memoria. Por ejemplo si hacíamos un “malloc” que fallaba, esto devolvía NULL, un puntero a la posición 0, y si luego accedíamos en un campo, igual estábamos accediendo a la posición de memoria 96 por ejemplo. Lo cual era bastante peliagudo. Pero con arquitecturas sistemas operativos más modernos, esto empezó a suponer violaciones de acceso y no reinicios del ordenador, bucles infinitos o crashes legendarios. La aplicación petaba y la podíamos volver a arrancar.

Leer más...

Hablemos de Kotlin

Llevo algunas semanas trabajando en Kotlin. Y voy a empezar a escribir una serie de artículos sobre dicho lenguaje, su ecosistema y cosas relacionadas.

¿Qué es Kotlin?

Kotlin es un lenguaje de programación fuertemente tipado desarrollado por JetBrains (los creadores de IntelliJ IDEA).

Ha sido fuertemente influenciado por lenguajes como Scala o C#.

Targetea a la JVM (máquina virtual de Java 6) y a Javascript de forma nativa.

Leer más...

Followup

Llevaba bastante tiempo sin escribir por aquí.

He estado unos meses sabáticos de descanso y desconexión fuera del trabajo, haciendo lo que me rotaba, jugando y finiquitando algunos asuntos personales. Dejé de ser autónomo, y pronto estaré empadronado donde llevo ya viviendo independizado más de un año.

Tengo unos cuantos proyectos en standby y me gustaría retomarlos poco a poco, a la vez que voy cerrando otros. Pero siempre centrándome en mí, y disfrutando de lo que hago. Sin compromisos de tiempos, con calma y nunca con más de dos proyectos personales a la semana.

También me gustaría volver a retomar el escribir los artículos técnicos que solía escribir. Tengo pendientes algunos temas interesantes y en este tiempo han ido saliendo muchas cosas sobre las que vale la pena escribir.

Así que: stay tuned.

Leer más...

Typescript, nodejs, generadores, harmony, q, taskjs y autocompletado

Introducción:

Últimamente he estado probando y experimentando con algunas tecnologías interesantes: virtualización a nivel de sistema operativo: chroot / lxc / docker. He estado experimentando también con heroku y monhohq. Y hace tiempo estuve experimentando con node-webkit y cross-walk y traceur compiler.

Este post lo escribo a poco de que salga nodejs 0.12, y typescript 1.0 y tras haberle dado otra oportunidad a dart en su versión 1.1 con muchas expectativas y con un resultado algo decepcionante. Con generadores implementados en v8 y disponibles en node.js a partir de la 0.11, y con task.js y q de por medio, habiendo adquirido mucha más experiencia con promesas, señales y streams, y con las promesas ya propuestas en el draft de harmony.

Leer más...

Haxe3 + Starling + Continuation + Air

La metaprogramación de haxe es tan potente que permite modificar el AST en tiempo de compilación directamente desde haxe (código que se ejecuta en tiempo de compilación para modificar el AST de la compilación). Esto permite que se puedan crear pseudolenguajes, o que puedas programar en haxe y generar shaders de opengl. Pero lo que me gustaría comentar ahora es el proyecto continuation. Básicamente convierte código lineal en código asíncrono añadiendo cierta metainformación a la clase y a los métodos que lo van a usar de forma que se preprocese el código y se genere código asíncrono.
Desde Haxe3 además se pueden cargar archivos .SWC fácilmente.

Descargar proyecto (388KB):

 Proyecto FlashDevelop + Haxe3 + Starling + Continuation + Android APK

Leer más...

Suscribirse via RSS