Skip to main content

Posts

Showing posts from July, 2016

Lazy GNU make variables

GNU make has two 'flavors' of variable: simple and recursive. Everyone is familiar the the recursive style (which uses = for definition):

    BAR = banana
    FOO = one $(BAR), two $(BAR)s
    BAR = guava

The value of FOO is determined each time FOO is used. In a large Makefile that can mean that FOO is expanded over and over again. If expanding FOO is an expensive operation then determining its value each time can slow down the Makefile. For example,

    TODAY = $(shell date +%d/%m/%y)

would be very expensive is it would shell out to run date every time TODAY is used (and might have the strange effect of returning different dates if you run your make near midnight).

(I've written about that before and in my book on GNU make)

The other flavor of make variable is simple: its value is fixed the moment it's defined:

    BAR = banana
    FOO := one $(BAR), two $(BAR)s
    BAR = guava

There FOO is set to one banana, two bananas and not one guava, two guavas (as was the case above…

Le Sixième Élément : le code source dans le cinéma

Depuis les années soixante, les ordinateurs jouent un rôle important dans le cinéma. Parfois, ils jouent le rôle de méchants, parfois celui d’outils. Parfois ce sont les enemies jurés de l’humanité, parfois leurs amis. Mais quand un informaticien voit l'écran d'un ordinateur sur le grand (ou le petit) écran, qu'est-ce qu'il voit réellement? Est-ce que c'est du vrai code source ou n'importe quoi ?  Dans Terminator, Schwarzenegger voit un Apple II. Dans le Martien, on montre vraiment du code de la NASA. En revanche, dans Ironman, c'est du code pour un ordinateur LEGO. Du coup, le code est parfois hilarant, fascinant, stupide ou révélateur. Il y a même des 'easter egg'.