Entradas

Optimizaciones Rust.

Rust utiliza LLVM y toda su infraestructura de opctimizaciones. A persar de lo dicho durante años con los compiladores  jit  la realidad ha  demostrado que las estrategias más efectivas para conseguir el mejor rendimiento,  son las optimizaciones en tiempo de compilación apoyadas en tipado estático. En este sentido, Rust es fuerte. Pero tanto en Rust como en C++, hay cuestiones que se dejan al compilador. Por ejemplo el  RVO , hasta hace poco, era una opción del compilador. En otros veteranos lenguajes, como Pascal, por ejemplo, es algo explícito que  viene de serie. Y por ser explícito es sencillo y fácil de entender. En C++, saber cuándo y cómo el compilador hace su magia con el  RVO  u otras  optimizaciones complejas, dificulta el poder afinar al máximo en rendimiento. Otro ejemplo let mut a : [ i32 ; 4 ]; Podemos crear una variable sin darle un valor. Podemos dárselo más tarde, pero  en el caso del array, Rust ...

Un poquito de seguridad, por favor

Nos encontramos en un periodo de guerra civil. Las naves espaciales rebeldes atacando desde una base oculta, han logrado su primera victoria contra el malvado Imperio Galáctico. Durante la batalla, los espías rebeldes han conseguido apoderarse de los planos secretos del arma total y definitiva del Imperio: la web, una especificación enrevesada con potencial suficiente para destruir todos los ordenadores de la galaxia. Perseguida por los siniestros agentes del Imperio, la princesa Leia vuela hacia su patria a bordo de su nave espacial llevando consigo los planos robados que podrán salvar los ordenadores y devolver la libertad a internet… Contexto Los navegadores, renderizadores y máquinas virtuales, se han convertido en grandes monstruos difíciles de controlar. Todas las tecnologías de navegadores web están en C++ El paso del tiempo y la complejidad de la especificación, han hecho que alcancen tamaños poco manejables. A esto hay que añadirle que C++, tiene implícito "unde...

Charla elixir en erlunge Madrid 2014-10

En octubre de 2014, tuve la oportunidad de hablar de Elixir en una reunión Erlunge en Madrid. Las diapositivas están  aquí Son muy pesadas y cargarlas todas toma su tiempo. El código fuente de las mismas…  aquí La experiencia fue fantástica, pero quise abarcar demasiado. La reunión fue muy larga a pesar de tratar los temas a gran velocidad. Quise aprovechar la ocasión para tratar temas básicos y otros nada básicos que son realmente importantes para entender la aportación que puede hacer Elixir al ecosistema Erlang. En definitiva, demasiado alcance y contenido. No obstante, reitero que la experiencia fue sensacional.

Dart, desarrollo web

He escrito mis primeros dos programas  cliente web . El primer programa, una prueba de concepto sencilla…  link El segundo, consiste en un puzle con la característica fundamental de que se puede configurar con tres topologías…  link Se trataba de crear aplicaciones interactivas 100% cliente (ejecución en el navegador). Son pruebas de concepto escritas con el lenguaje  Dart . Una vez superado este punto, ya es posible crear interfaes para aplicaciones y servicios, que seguramente consistirán en la entrega del programa  cliente web  (página  html ), y esta realizará peticiones  http  y/o  REST , recibiendo respuestas casi seguro  JSON . Además de utilizar en algunos casos  websockets . Investigo con frecuencia nuevos lenguajes de programación. Muchos de estos, por lo nuevo que son o su orientación, no disponen de  bindigns  con  toolkits  gráficos tipo  Qt ,  WxWidgets ,...

¿Qué opino de los Threads?

Hoy un compañero de trabajo me preguntó ¿qué opinas de los threads? Lo he explicado muchas veces, pero no tengo inconveniente en repetirlo y tratar de ser lo más claro posible. Así que le contesté lo siguiente... To thread or not to thread… And the winner is… NO. Pero sólo para empezar. “NO” es una palabrita muy suave, muy flojita, breve, pequeña, insignificante en ocasiones. La respuesta se merece un poco más de atención, un poco más de elocuencia y contundencia que un simple, raquítico y triste “NO”. Trataré de completar un poco la respuesta. Este NO, no significa un rechazo a la concurrencia o al paralelismo (está de moda decir que concurrencia no es paralelismo, pero creo que con concurrencia nos entenderemos lo suficiente). Espero poder dejar eso claro en la siguiente explicación. En el origen de los tiempos, los sistemas ejecutaban una cosa, y bastante merito tenían (algunos). Hacer varias cosas simultáneamente fue una gran idea y una gran neces...

Elixir. TCP server sencillo

Imagen
Para ser  telnet friendly  recibiremos y enviaremos texto separado por retornos de carro. El programa se limitará a responder lo mismo que reciba. Para trocear los mensajes en líneas separadas por retorno de carro, leeremos byte a byte y los meteremos en un buffer. Sí, hay otra forma de hacerlo más sencillo, pero hacerlo a mano es más didáctico. Al final también indicaremos la forma  erlangish ¿Es mejor que el buffer sea un  binary  o una  lista ? iex> {microsecs, :ok} = :timer.tc fn -> (1..1000 |> Enum.each fn _ -> (1..1000 |> (Enum.reduce [], &( [rem(&1, 10)+48|&2])) |> Enum.reverse |> to_string) end) end; IO.puts microsecs/1000000.0 3.493395 iex> {microsecs, :ok} = :timer.tc fn->(1..1000 |> Enum.each fn _ -> (1..1000 |> Enum.reduce "", &(&2 <> (<<rem(&1, 10)+48>>))) end) end; IO.puts microsecs/1000000.0 7.098454 La respuesta es una lista. Cre...