Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(195)

Delta Between Two Patch Sets: 2014/state-of-the-gopher.slide

Issue 159940043: code review 159940043: go.talks: add dotGo State Of the Gopher talk (Closed)
Left Patch Set: Created 9 years, 5 months ago
Right Patch Set: diff -r b4ea80aa5952cb669907e97048544cc0ea9a0c3a https://code.google.com/p/go.talks Created 9 years, 5 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | 2014/state-of-the-gopher/build.png » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 The State of the Gopher (Oct)
2 10 Oct 2014
3 Tags: dotgo, gopher
4
5 Brad Fitzpatrick
6 Gopher, Google
7 @bradfitz
8 bradfitz@golang.org
9
10 * The State of the Gopher
11
12 - where we've been
13 - where we're going
14
15 .image state-of-the-gopher/gopher.jpg
16
17 * bradfitz
18
19 - Work on Go's standard library, builders, etc
20 - Started contributing to Go May 2010
21 - [[http://camlistore.org]], my big, old Go project: personal data storage & ind exing for life
22
23 * The Past
24
25 * Userbase before November 2009
26
27 - 3-10 people inside Google?
28
29 * November 2009
30
31 - Go is [[http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html][ope n sourced]]:
32
33 .image state-of-the-gopher/opensource.png
34
35 * Website in 2009
36
37 .image state-of-the-gopher/website1.png
38
39 * Website in 2009
40
41 .image state-of-the-gopher/website2.png
42
43 * Compilers in 2009
44
45 - already two: `gc` and `gccgo`
46
47 * Aside: GC vs gc
48
49 - `gc`: "Go compiler", based originally on Plan 9's C compiler. The main Go comp iler.
50 - `GC`: "Garbage Collector"
51
52 * Ports in 2009
53
54 - linux-386
55 - linux-amd64
56 - linux-arm, just starting to work
57 - darwin-386
58 - darwin-amd64
59 - nacl-386 (first attempt)
60 With gccgo, more.
61
62 * Tools in 2009
63
64 - gofmt
65 - gofix
66 - godoc
67
68 * Release Highlights
69
70 * weekly releases
71
72 - "weekly.2009-12-09"
73 - break users weekly, not daily
74 - gofix appears
75
76 * monthly releases
77
78 - "r56" ... "r60"
79 - break users monthly, not weekly
80 - still painful to write and use packages (Makefiles)
81
82 * Go 1.0 (2012-03-28)
83
84 - the "error" type
85 - delete(m, k)
86
87 // before Go 1:
88 latLong[storeID] = LatLong{}, false
89 name[userID] = "", false
90
91 // new:
92 delete(name, userID)
93
94 - [[https://golang.org/doc/go1compat][stability promise]] + API check tool:
95
96 pkg net/http, const StatusOK = 200
97 pkg net/http, const StatusOK ideal-int
98 pkg net/http, type RoundTripper interface { RoundTrip }
99 pkg net/http, type Server struct, TLSConfig *tls.Config
100 pkg net/http, var DefaultServeMux *ServeMux
101 pkg time, method (*Timer) Reset(Duration) bool
102 pkg unicode/utf8, func ValidRune(int32) bool
103
104 - the `go` tool (get, build, test, ...)
105
106 * Go 1.1 (2013-05-03)
107
108 - method values
109
110 type S struct { once sync.Once; ... }
111 func (s *S) init() { ... }
112 func (s *S) Foo() {
113 s.once.Do(s.init)
114
115 - func "terminating statement"
116
117 func abs(n int) int {
118 switch {
119 case n < 0: return -n
120 default: return n
121 }
122 }
123
124 - 64-bit "int", large heaps
125 - 30-40% speed improvement, stdlib++
126 - more precise heap GC, usually
127
128 * Aside: precise vs conservative GC
129
130 Conservative GC: if it "looks like" a pointer, treat it like one.
131
132 [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
133 [ ptr? ] [ byte slice (skipped in Go 1.0) ]
134 [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
135
136 Terrible for 32-bit (e.g. ARM) computers: many integers look like pointers.
137
138 Precise GC:
139
140 [ int ] [ ptr ] [ string ] [ byte slice ]
141 [ int ] [ t f t f ] [ ptr ] [ int ] [ float64 ] [ ptr ]
142
143 Requires knowing what every position in memory _actually_ is.
144
145 - no false retention, only look at some memory during GC
146
147 * Go 1.2 (2013-12-01)
148
149 - 6 month release cycle begins
150 - setting slice capacity with s[i:j:k]
151
152 s := make([]byte, 10, 20)
153 foo(s[10:12:15])
154
155 func foo(s []byte) { fmt.Println(len(s), cap(s)) }
156
157 - preemption in scheduler
158 - go test -cover
159
160 * Go 1.3 (2014-06-18)
161
162 - no language changes
163 - GOOS=solaris,dragonfly,plan9,nacl
164 - precise GC of the stack (mostly)
165 - contiguous stacks (mostly)
166
167 * Aside: Segmented vs. Contiguous stacks
168
169 - C++/Java: one huge stack per thread
170 - Go <= 1.2: multiple discontiguous 4K stacks, bounce between
171 - Go 1.3: one little stack, grow & shrink as needed
172 .image state-of-the-gopher/contig-stack.png _ 550
173
174 * The present (relative to Nov 2009)
175
176 * More ports
177
178 - Windows
179 - FreeBSD, OpenBSD, NetBSD
180 - Solaris, Plan 9, DragonFly BSD
181 - NaCl (again)
182
183 * Better docs
184
185 - [[http://blog.golangorg][Blog]] articles,
186 - Community [[https://code.google.com/p/go-wiki/w/list][Wiki]],
187 - [[https://code.google.com/p/go-wiki/wiki/Books][Books]]
188
189 * Users: up and to the right
190
191 - Go [[https://code.google.com/p/go-wiki/wiki/GoUserGroups][user groups]], [[htt p://go-meetups.appspot.com/][meetups]]
192 - GitHub commits, stars, forks
193 - Since 2009: `golang-nuts@` (1450 → 14134), `-dev` (37 → 2152)
194 .link http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud- infrastructure/ Go: the emerging language of cloud infrastructure
195
196 .image state-of-the-gopher/oloh.png
197
198 * The Cloud
199
200 - Docker
201 - CoreOS, etcd, fleet
202 - Juju
203 - NATS, gnatsd, Packer, Heka
204 - dl.google.com, Vitess, Kubernetes
205 - App Engine
206
207 * Conferences
208
209 [[http://connpass.com/series/312/][GoCon Tokyo]]
210
211 * Conferences
212
213 .image state-of-the-gopher/gophercon.png
214
215 * Conferences
216
217 .image state-of-the-gopher/dotgo.png
218
219 * Conferences
220
221 .image state-of-the-gopher/india.png
222
223 * CoreOS
224
225 .image state-of-the-gopher/bus.jpg
226
227 - increasingly running [[http://build.golang.org]], each in a Docker container
228 - Go powering Go development!
229
230 * build.golang.org
231
232 .image state-of-the-gopher/build.png 400 _
233
234 * Better tools
235
236 - go/parser: godoc, [[http://godoc.org]], gofmt, gofix →
237 - [[http://godoc.org/code.google.com/p/go.tools/cmd/goimports][goimports]]: auto matic import lines
238 - go/types, gofix+types,·
239 - go/ast, go/ssa, [[http://godoc.org/code.google.com/p/go.tools/cmd/oracle][orac le]],
240 - [[http://godoc.org/code.google.com/p/go.tools/cmd/eg][eg]], example-based refa ctoring
241 - [[http://godoc.org/code.google.com/p/go.tools/cmd/gorename][gorename]], safe g lobal renaming tool
242
243 Tooling begets better tooling!
244
245 - goimports + go/types + go/parser == [[https://twitter.com/sqs/status/520203018 957250560][goreturns]] (lazy "return err")
246
247 * The Future
248
249 * Go 1.4
250
251 * Go 1.4 (2014-12-01?)
252
253 - fully precise GC of the stack + heap
254 - segmented stacks & conservative GC deleted
255 - stack copier & shrinker requires precise stack types too
256
257 - `runtime` conversion from C to Go: maps, channels, interfaces, type checks, pr intln, defer, panic, etc.
258
259 - Garbage collector and scheduler are still in C
260
261 * Go 1.4
262
263 - [[http://golang.org/s/go14android][GOOS=android]] (Elias Naur, David Crawshaw)
264 - GOOS=nacl GOARCH=arm
265 - [[http://golang.org/s/go14internal]["internal" packages]]
266 - [[http://golang.org/s/go1.4-generate]["go generate"]]
267 - [[https://docs.google.com/a/golang.org/document/d/1QXzI9I1pOfZPujQzxhyRy6EeHYT QitKKjHfpq0zpxZs][syscall package frozen, go.sys]]
268 - "go tool pprof" converted from Perl (!) to Go
269 - minor stdlib additions, improvements
270
271 * Go 1.5
272
273 * Go 1.5 (2014-06-01?)
274
275 - Concurrent GC is main theme
276 - Roadmap: [[http://golang.org/s/go14gc]] (GC in 1.4, 1.5, 1.6+)
277
278 * Go 1.5: ports
279
280 - GOOS=ios revival? (Minux, David Crawshaw)
281 - GOARCH=ppc64 (minux)
282 - GOARCH=arm64 (aram, dfc)
283
284 * Go 1.5: removing more C
285
286 Didn't make Go 1.4:
287
288 - `cmd/link`: linker rewrite in Go
289 - `cmd/asm`: assembler rewrite in Go
290 - "gc" compiler in Go
291
292 * "gc" Compiler in Go
293
294 - lots of C
295 - C → Go translator == kinda ugly Go
296 - refactor that Go with tools: `eg`, `gorename`, etc
297 - add packages, tests
298 - unify all `8g`, `5g`, `6g`, `9g`
299 - SSA form, new optimizations
300
301 See rsc's GopherCon [[http://talks.golang.org/2014/c2go.slide#1][slides]], [[htt p://gophercon.sourcegraph.com/post/83820197495/russ-cox-porting-the-go-compiler- from-c-to-go][notes]], [[https://www.youtube.com/watch?v=QIE5nV5fDwA][video]].
302
303 * Go 1.5 Tracing
304
305 - Dmitry's GOTRACE + Chrome trace viewer
306
307 .image state-of-the-gopher/trace.png
308
309 * Go 1.6
310
311 - More GC work
312 - Ongoing compiler-in-Go cleanup & optimizations
313 - PNaCl?
314 - [[https://docs.google.com/a/google.com/document/d/1d3iI2QWURgDIsSR6G2275vMeQ_X 7w-qxM2Vp7iGwwuM/pub][NUMA-aware scheduler]]?
315 - unknown surprises
316 Who knows.
317 Find out next year at dotGo Paris 2015!
318
319 * Go 2.0
320
321 - maybe one day
322
323 * Outside of the core
324
325 * libraries & tools
326
327 - HTTP/2, to be merged into `net/http`
328 - go.tools: `goimports`, `eg`, `gorename`, `oracle`, ...
329 - go.text: Unicode collation, normalization, ...
330 - go.mobile: Android, iOS, gaming, 3D graphics, event handling
331 - go.crypto
332 - go.net
333 - go.tools
334 - go.syscall
335
336 * gccgo
337
338 - keeping up with spec
339 - better in some ways (codegen, OS, arch)
340 - worse in others (precise GC, escape analysis)
341 - work underway to improve
342
343 All checking & improving each other:
344
345 - gc, gccgo, go/types, language spec, unit tests
346
347 * Notable other compilers
348
349 - [[https://github.com/go-llvm/llgo][llgo]], Go → LLVM → PNaCL, etc
350 - [[https://github.com/tardisgo/tardisgo][TARDIS Go]], Go → Haxe → JS, anything
351 - [[https://github.com/gopherjs/gopherjs][GopherJS]], Go → JS
352
353 And all three written in Go, use `go/parser`, `go/types`, etc.
354 We can't wait to join them.
355
356 * In summary
357
358 * The growth is exciting
359
360 - things are getting cleaner,
361 - things are getting faster,
362 - things are getting more impressive,
363 - everything is growing on top of everything else,
364 - hard to keep up with golang-dev@, golang-nuts@, bugs, wiki, new github project s, code reviews,
365
366 * You all are awesome·
367
368 - keep being awesome
369 - keep making awesome things
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b