summaryrefslogtreecommitdiff
path: root/chicago-talk/chicago-talk.factor
blob: 6b2ee33506a2134435eddc997c9dfa39f52721b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
! Copyright (C) 2009 Slava Pestov.
! See https://factorcode.org/license.txt for BSD license.
USING: slides help.markup ;
IN: chicago-talk

CONSTANT: chicago-slides
{
    { $slide "factor"
      { $url "https://factorcode.org" }
    }
    { $slide "goals"
      "high level language"
      "expressive and extensible"
      "reasonable performance"
      "interactive development with arbitrary redefinition"
      "standalone app deployment (strip out compiler and REPL)"
    }
    { $slide "challenges"

      "higher-order functions"
      "dynamic typing"
      "memory allocation"
      "float boxing/unboxing"
      "integer overflow checks"
      "user-defined abstractions"
    }
    { $slide "implementation"
      "VM: 12 kloc of C, library: >100 kloc of Factor"
      "generational copying garbage collection, card marking write barrier"
      "full continuations, tail calls"
      "simple non-optimizing “bootstrap” compiler"
      "optimizing compiler"
    }
    { $slide "optimizing compiler"
      "about 12,000 lines of Factor code"
      "targets x86-32, x86-64, PowerPC"
      "factor code ⇒ high-level SSA ⇒ low-level SSA ⇒ machine code"
    }
    { $slide "high-level optimizer"
      "macro expansion, defunctionalization"
      "type and interval inference, sparse conditional constant propagation, method inlining"
      "escape analysis and tuple unboxing"
    }
    { $slide "low-level optimizer"
      "alias analysis, value numbering, write barrier elimination"
      "linear scan register allocation"
    }
}

: chicago-talk ( -- )
    chicago-slides "Chicago talk" slides-window ;

MAIN: chicago-talk