Top Banner
OSDC 2007 A Humbling Language Rusty Russell
96

C: A Humbling Language

Jun 27, 2015

Download

Technology

guestaa63aa

OSDC 2007 opening keynote. Not sure it makes sense if you weren't there, but someone asked for slides.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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