Archive for October, 2006

Recovecos oscuros de C, C99 y C++

Advertencia: Post para coders. Puede producir dolor de cabeza. También puede contener información horriblemente equivocada, en cuyo caso se ruegan correcciones en los comentarios.
Hoy me he pasado un buen rato preguntandome por qué no funcionaba esto (recemos para que el WordPress no me destroce demasiado el codigo :P) :

#include <cstdio>
int main() 
{
    int i; float f=1.0f;
    i = *reinterpret_cast<float*>(&f);
    printf("i = 0x%0x\n", i);
    return 0;
}

Compilando sin optimización funcionaba como se esperaba, y con optimización daba un resultado distinto. Al principio pensé “un error del gcc, seguro”, pero me he puesto a buscar y resulta que no es un bug, sino una feature. ISO C tiene reglas en contra del aliasing de punteros que dicen que acceder a una variable mediante un puntero de un tipo incompatible es ilegal, asi que al activar las optimizaciones asume que esas cosas no pasan y genera un resultado incorrecto. Una solucion típica es el clasico hack en el que se define una union de un int y un float, se escribe en un miembro y se lee en el otro, pero creo que el estandar dice que en este caso el resultado está definido por la implementación. Mala cosa. Tambien he leido por ahi que una buena opcion es usar memcpy, hacer una copia de lo que sea a otra posicion de memoria y te olvidas del aliasing.

Mas cositas. Programando en la uni el otro dia pensamos en lo bonito que seria disponer de tipos de tamaño fijo, como los uint8, int32, que todos hemos usado alguna vez. Pues bien, en C existen y en C++ no. Ahora alguien se puede preguntar “¿pero cómo? si C es un subconjunto de C++!”, pero esto no solo no es cierto, sino que desde la aparición de C99 hay incluso más diferencias (el estandar de C++ es del 98). En este caso, C99 especifica una cabecera stdint.h que define tipos con nombres como int8_t.

Por ultimo, una curiosidad del FAQ de C++: esta permitido hacer un cast de “Blah *” a “const Blah *”, pero no un cast de “Blah **” a “const Blah **”.

Y eso es todo por hoy. Si teneis alguna historia similar que contar son bienvenidos los comentarios.

Comments (3)

BCNParty 110

Este último fin de semana he estado en la BCNParty.

El jueves por la noche llegué con stage7 a Barcelona, donde shash nos recogió y nos llevó a su casa. stage7 había terminado durante el viaje su tema para la compo de streamed music, una versión de mi track jarresco para la syltia(coop 4k Bauknecht/Necrostudios) que me encanta como ha quedado :D. Como llovía nos quedamos en casa de shash haciendo cosillas de la intro y viendo grandes éxitos en YouTube.

El viernes nos levantamos tarde y llegamos a la party sobre las 16:00. Sesión de partycoding, partycomposing-con-el-vim, y por la noche descanso para degustar la super sangria of the death que yomizmo preparó. Fueron unas horas geniales en las que los miembros de TimeScratchers nos deleitaron con un montón de chistes, mientras otros traducian los chistes al inglés (como razonable éxito ;) para que los sceners extranjeros pudieran entender algo.

El sábado era el dia clave para terminar la intro, es decir, el último :D. Terminé el track como buenamente pude, a pesar de la completa falta de inspiración, y nos pusimos a sincronizarlo todo. No tuvimos demasiados problemas para conseguir el tamaño correcto, aunque hubo un momento de pánico cuando casi me cargo el sinte intentando sustituir la rutina de los ADSRs por un decay exponencial que iba mas o menos bien en mi maquina (40% de consumo aproximado de CPU, eso si :P) pero hacia sufrir demasiado al PC cuando lo pasé a windows. Todavía seguimos buscando el porqué. Resultado final: Red trip by Collapse and Necrostudios.
Entregamos la intro 15 minutos antes de las proyecciones, nos hicimos unos pintxos en el bar de enfrente del partyplace *muy* rápido y despues de ver las compos nos fuimos de fiesta toda la noche. Llegamos justo a tiempo para desayunar en la estación y despedir a stage7, que se iba a las 8:00. Después a dormir un rato, lo justo para llegar a la entrega de premios.

Al final quedamos segundos. Personalmente estoy bastante contento con la intro teniendo en cuenta la carencia de ideas en los dias previos. Ha quedado algo bastante potable y bien terminado. El nivel de las compos en general fue un poco menor de lo esperado, pero al menos ganó una demo española y escena.org vuelve a estar online ;)
En resumen, la party ha estado muy bien a pesar de la falta de prods (lástima) y me lo he pasado genial. Gracias a todos!

Comments

No estamos solos…

A veces en la inmensidad de Internet te encuentras algo que te produce la reconfortante sensación de que ahí afuera, en alguna parte, hay alguien que comparte tus inquietudes. Ayer me pasó al ver esta viñeta de Randall Munroe:

Even the identity matrix doesn't work normally

(URL original: http://xkcd.com/c55.html)

El resto de las tiras que hay en el site son muy recomendables también, si tienes gustos parecidos a los mios en lo que al humor se refiere, claro :)

Comments (2)

Inercia Demoparty 2006 (segunda parte)

Ya ha terminado la party. El viernes PpluX leyó su papel en el congreso, yo medio terminé la intro4k que había empezado y nos subimos en el autobús. Llegamos al partyplace sobre las 18:30 y Evil me dice que como el demoshow iba a ser a las 22:00, tenia hasta las 21:00 para reducir los 50 bytes que me sobraban, empaquetar la intro y subirla. Sin problemas.

Mientras tanto, hablamos con la orgo del congreso para aclarar el tema del shuttle a Lisboa el dia siguiente, que supuestamente salía a las 6:00 del sábado. Sin embargo, nos dicen que habían cambiado el autobús a esa misma tarde y que para llegar el sábado por la mañana a Lisboa tendríamos que pillar el taxi hasta Portalegre y luego un bus desde allí. Por lo menos conseguimos que nos reservaran el taxi para el dia siguiente a las 7:00.

Vuelta a la party, subo la 4k y poco después llega jeenio. Me hacía ilusión participar en la pirated demo compo y se lo propuse a jeenio y a mauge, que también estaba por allí. Jeenio grabó la música asombrosamente rápido mientres mauge y yo retocabamos los gráficos de la cafre, de Stravaganza. ps nos retrasa aun más la deadline (real sceners always deliver after the deadline :D) y conseguimos presentarla también.

En total, 2 intro4k, una intro64k, una demo, dos pirated demos y 2 wilds.

Tras el demoshow, jam session con jeenio, evil, xernobyl, otro chico que no se quien es pero que tocaba muy bien el teclado y ps cantando de vez en cuando hasta prácticamente las 6 de la mañana :D. Al final la última noche compensó con creces el poco tiempo que habia pasado en el partyplace hasta el momento.

A las 7:00 cogimos el taxi hasta Portalegre, luego autobús a Lisboa, metro+bus para llegar hasta el aeropuerto, avión hasta Madrid, enlace por los pelos con el vuelo hacia Valencia, carrerita de un lado a otro de la terminal 4 de Barajas incluída (las maletas llegaron en el siguiente vuelo y esta mañana nos las han traido) y finalmente llegada a casa. Sin lugar a dudas ha sido el dia en el que más transbordos he hecho en toda mi vida.

En resumen, ha sido muy divertido, aunque ha sido una lastima que hubiera tan poca gente. No sé cuantos asistentes han tenido las últimas ediciones de la Inércia, pero me da la sensación de que les ha perjudicado hacer la party entre semana en una ciudad tan pequeña. Muchas gracias a ps y a evil por su labor como orgos, por invitarme a la party y por llevarnos de cena :)

Y dentro de 12 dias… BCN \o/

Comments (1)

This blog is protected by Dave\'s Spam Karma 2: 17770 Spams eaten and counting...