c: a humbling language

96
OSDC 2007 A Humbling Language Rusty Russell

Upload: guestaa63aa

Post on 27-Jun-2015

2.651 views

Category:

Technology


0 download

DESCRIPTION

OSDC 2007 opening keynote. Not sure it makes sense if you weren't there, but someone asked for slides.

TRANSCRIPT

Page 1: C: A Humbling Language

OSDC 2007

A Humbling Language

Rusty Russell

Page 2: C: A Humbling Language

Time Better Spent

● tcmalloc– http://goog-perftools.sourceforge.net/doc/tcmalloc.html

● tdb– ftp://ftp.samba.org/pub/unpacked/tdb

● lguest– http://lguest.ozlabs.org

Page 3: C: A Humbling Language

A B C D E F GH I J K L MN O P Q R S TU V W X Y Z

Page 4: C: A Humbling Language

B C D G L MN O P R S U V W Z

Page 5: C: A Humbling Language

C L MN O S V W Z

Page 6: C: A Humbling Language

C O S

Page 7: C: A Humbling Language

C OO S

Page 8: C: A Humbling Language

C S

Page 9: C: A Humbling Language

C SS

Page 10: C: A Humbling Language

C

Page 11: C: A Humbling Language

C

Page 12: C: A Humbling Language

C

Page 13: C: A Humbling Language

C: A Historic Language

Page 14: C: A Humbling Language

http://www.thorstenkoerner.de/uploads/thompson_ritchie.jpg

Page 15: C: A Humbling Language

+=registerentry

Page 16: C: A Humbling Language

foo.c

Page 17: C: A Humbling Language

foo.c

preprocessor

Page 18: C: A Humbling Language

foo.c

preprocessor

#define FOO 17

Page 19: C: A Humbling Language

foo.c

preprocessor

#define FOO(x) (17*(x))

Page 20: C: A Humbling Language

foo.c

preprocessor

#ifdef LINUX...#else...#endif

Page 21: C: A Humbling Language

foo.c

preprocessor

#include "foo.h"

Page 22: C: A Humbling Language

foo.c

preprocessor

#include "foo.h"

foo.h

Page 23: C: A Humbling Language

foo.c

preprocessor

#include "foo.h"

foo.h#include <stdio.h>

Page 24: C: A Humbling Language

foo.c

preprocessor

#include "foo.h"

foo.h#include <stdio.h>

stdio.h

Page 25: C: A Humbling Language

foo.c

preprocessor

#include "foo.h"

foo.h#include <stdio.h>

stdio.h

# include <features.h># include <stddef.h># include <bits/types.h>#include <libio.h># include <stdarg.h>#include <bits/stdio_lim.h>#include <bits/sys_errlist.h># include <getopt.h># include <bits/stdio.h># include <bits/stdio2.h># include <bits/stdio-ldbl.h>

Page 26: C: A Humbling Language

foo.c

preprocessor

Page 27: C: A Humbling Language

foo.c

preprocessor

foo.i

Page 28: C: A Humbling Language

foo.c

preprocessor

foo.i

Page 29: C: A Humbling Language

foo.c

preprocessor

compiler

Page 30: C: A Humbling Language

foo.c

preprocessor

compiler

Page 31: C: A Humbling Language

foo.c

preprocessor

compiler

foo.s

Page 32: C: A Humbling Language

foo.c

preprocessor

compiler

assembler

Page 33: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

Page 34: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

Page 35: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

Page 36: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

make

Page 37: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

make

ccache

Page 38: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

make

ccachedistcc

Page 39: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

make

ccachedistcc

ccontrol

Page 40: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

make

ccachedistcc

ccontrol

gcc *.c

Page 41: C: A Humbling Language

1988

Page 42: C: A Humbling Language

entryvoidconst

volatileenum

function prototypes

Page 43: C: A Humbling Language

1999

Page 44: C: A Humbling Language

inline

Page 45: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

int foo(int x)...

Page 46: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

int foo(int x)...

Page 47: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

foo.h

Page 48: C: A Humbling Language

foo.c bar.c baz.c

preprocessor

compiler

assembler

linker

foobarbaz

foo.hinline int foo(int x)...

Page 49: C: A Humbling Language

WTF?

Page 50: C: A Humbling Language

WTF?This isn't a scripting

language!

Page 51: C: A Humbling Language
Page 52: C: A Humbling Language
Page 53: C: A Humbling Language
Page 54: C: A Humbling Language
Page 55: C: A Humbling Language
Page 56: C: A Humbling Language

Images from Wikipedia

Page 57: C: A Humbling Language

C

Page 58: C: A Humbling Language

C C

Page 59: C: A Humbling Language

C CC C

Page 60: C: A Humbling Language

Control

Page 61: C: A Humbling Language

Cycles

Page 62: C: A Humbling Language

Core

Page 63: C: A Humbling Language

Cache

Page 64: C: A Humbling Language

“Sell Me a C!”

Page 65: C: A Humbling Language

The Magic

Page 66: C: A Humbling Language

The Magic

Page 67: C: A Humbling Language
Page 68: C: A Humbling Language

struct list_head{

struct list_head *next, *prev;};

Page 69: C: A Humbling Language

struct list_head{

struct list_head *next, *prev;};

struct thing{

struct list_head elem;...

};

Page 70: C: A Humbling Language

void *kmalloc(size_t size, gfp_t flags);

Page 71: C: A Humbling Language

Just a little magic?

Page 72: C: A Humbling Language

long f(struct foo *a, struct foo *b){

return b – a;}

Page 73: C: A Humbling Language

Magic to get closer to the machine...

Page 74: C: A Humbling Language

struct elems{

unsigned int num_elems;struct elem[0];

};

Page 75: C: A Humbling Language

#define memcpy(t, f, n) \ (__builtin_constant_p(n) ? \ __constant_memcpy((t),(f),(n)) : \ __memcpy((t),(f),(n)))

Page 76: C: A Humbling Language

Magic to strengthen language features...

Page 77: C: A Humbling Language

Magic to strengthen language features...DANGER!

Page 78: C: A Humbling Language

#define new(type) \((type *)malloc(sizeof(type))

Page 79: C: A Humbling Language

#define min(x,y) ({ \typeof(x) _x = (x); \typeof(y) _y = (y); \(void) (&_x == &_y); \_x < _y ? _x : _y; })

Page 80: C: A Humbling Language

_Bool

Page 81: C: A Humbling Language

#include <stdbool.h>

Page 82: C: A Humbling Language

#include <stdbool.h>

#define bool _Bool

Page 83: C: A Humbling Language
Page 84: C: A Humbling Language

#define begin {#define end }

Page 85: C: A Humbling Language
Page 86: C: A Humbling Language

talloc(context, type)

Page 87: C: A Humbling Language
Page 88: C: A Humbling Language
Page 89: C: A Humbling Language
Page 90: C: A Humbling Language
Page 91: C: A Humbling Language
Page 92: C: A Humbling Language
Page 93: C: A Humbling Language
Page 94: C: A Humbling Language

valgrind

Page 95: C: A Humbling Language
Page 96: C: A Humbling Language

C