github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2014/state-of-go.slide (about) 1 The State of Go 2 Where we are in June 2014 3 4 Andrew Gerrand 5 6 * Yesterday 7 8 9 * Initial reception 10 11 Looking back on the first months. 12 13 14 * Complaints 15 16 The complaints started right away… 17 18 .image state-of-go/msg-wrong.png _ 600 19 20 .image state-of-go/msg-lacks.png _ 600 21 22 23 * Familiar complaints 24 25 .image state-of-go/msg-generics.png _ 600 26 27 .image state-of-go/msg-type.png _ 600 28 29 .image state-of-go/msg-exceptions1b.png _ 600 30 31 32 * Familiar complaints 33 34 .image state-of-go/indent.png 500 _ 35 36 The first HN thread about Go was mostly an argument about braces and indentation. 37 38 39 * Historic moments 40 41 The first public language change (Dec 10, 2009): 42 43 .image state-of-go/msg-semi.png _ 400 44 45 46 * The gopher 47 48 .image state-of-go/msg-logo1.png _ 800 49 50 .image state-of-go/sadgopher.png _ 250 51 52 53 * The gopher 54 55 .image state-of-go/msg-logo2.png _ 800 56 57 58 * The gopher 59 60 .image state-of-go/msg-logo3.jpg _ 700 61 62 63 * A keen observation 64 65 .image state-of-go/msg-exceptions2.png _ 800 66 67 68 * Signs of hope 69 70 .image state-of-go/msg-nogenerics.png _ 600 71 72 73 * Today 74 75 76 * Growth 77 78 .image state-of-go/redmonk.png _ 600 79 80 .image state-of-go/oloh.png 81 82 83 * User groups 84 85 Today there are 48 active user groups in 15 countries across 5 continents. 86 87 88 * GopherCon 89 90 .image state-of-go/gophercon.png 91 92 Community-driven. 3 days. 700 attendees. 24 talks. 1 panel. 4 hours of lightning talks! 93 94 95 * The gopher 96 97 .image state-of-go/gophers.jpg 98 99 * The gopher 100 101 .image state-of-go/bus.jpg 102 103 * The gopher 104 105 .image state-of-go/tattoo.jpg 106 107 108 * Go 1.3 109 110 Released last Wednesday, 18 June 2014. 111 112 Highlights: 113 114 - Native Client support (amd64, 386) 115 - DragonFly BSD, Plan 9, and Solaris support 116 - Improved performance (GC, contiguous stacks, race detector, regexp) 117 - Faster incremental builds (linker overhaul) 118 - Precise GC of stacks 119 - Static analysis in godoc 120 121 122 * Tomorrow 123 124 125 * Upcoming conferences 126 127 .image state-of-go/dotgo.png 128 129 .image state-of-go/india.png 130 131 132 * Go 1.4 133 134 Due December 1st, 2014. 135 136 What might be in it? (Speculative list follows.) 137 138 139 * New language features 140 141 Nope. 142 143 144 * Canonical import paths 145 146 A means for a repository to specify its canonical import path. 147 148 Goal: stop people from checking out repos from the wrong path. 149 150 Applications: 151 152 - Stable vanity import paths. 153 154 "camlistore.org" -> "camlistore.googlesource.com/camlistore" 155 156 - Make GitHub's fork model less painful. 157 158 (Proposal forthcoming.) 159 160 161 * Internal packages 162 163 Current proposal: 164 165 "An import of a path containing the element “internal” is disallowed if the importing code is outside the tree rooted at the parent of the “internal” directory." 166 167 - Code in `/a/b/c/internal/d/e/f` can be imported only by code in the directory tree rooted at `/a/b/c`. 168 - `$GOROOT/src/pkg/internal/xxx` can be imported only by other code in the standard library (`$GOROOT/src/`). 169 170 And, later: 171 172 - `$GOPATH/src/mypkg/internal/foo` can be imported only by code in `$GOPATH/src/mypkg`. 173 174 .link http://golang.org/s/go14internal 175 176 177 * src/pkg → src 178 179 Move the standard library from `$GOROOT/src/pkg` to `$GOROOT/src`. 180 181 Basically makes `$GOROOT` work just like `$GOPATH`. 182 183 (Not a big deal for most, but a nice clean up for the core.) 184 185 .link http://golang.org/s/go14nopkg 186 187 188 * File system access throttling 189 190 Throttling of access to the file system at the `os` package level. 191 192 Goal: 193 194 - Launch a million goroutines that do file system stuff. 195 - Don't launch a million operating system threads to block on the syscalls. 196 197 Make it work just as nicely as it does with the network. 198 199 (Proposal forthcoming.) 200 201 202 * "go generate" 203 204 A convenience for generating Go source code. Example uses: 205 206 - yacc: generating .go files from yacc grammar (.y) files 207 - protobufs: generating .pb.go files from protocol buffer definition (.proto) files 208 - HTML: embedding .html files into Go source code 209 - Other ideas abound… 210 211 Proposed mechanism: 212 213 Add generator directive in Go source files: 214 215 //go:generate yacc -o gopher.go gopher.y 216 217 Use the Go tool to execute the directives: 218 219 % go generate [packagepath] 220 221 (Proposal forthcoming.) 222 223 224 * More tool chain work 225 226 - `cmd/go` support for `gccgo` 227 - `cmd/go` support for embedded data files 228 - Race detector improvements 229 230 The transition from C to Go continues: 231 232 - Linker rewritten in Go (`cmd/link`) 233 - Assembler rewritten in Go (`cmd/asm`) 234 - Possibly: `cmd/gc` translated to Go 235 236 237 * Better GC and malloc 238 239 - The existing allocator is based on TCMalloc (designed for C/C++). It can be re-designed to better suit Go. 240 - Lighter representation and colocation of GC metadata. 241 - Various strategies for reducing GC pause time (concurrent sweep, etc). 242 243 Rough estimate: 10-20% overall speedup, 20-50% GC pause reduction, 5-10% RSS reduction. 244 245 Details: 246 247 .link http://golang.org/s/go14mallocgc 248 249 * Other runtime changes 250 251 Concurrency improvements: 252 253 - Lock-free fast path for non-blocking receive from empty channel. 254 - Rewrite select to hold only one channel lock at a time. 255 256 C to Go: 257 258 - G-stack runtime converted to Go. 259 260 261 * Package changes 262 263 - Easier structuring features in `text/template` 264 - Bring `reflect.Value` back to 3 words 265 - Fix embedded field visibility (`reflect`) 266 - Safe version of `encoding/gob` 267 - Unicode 7 support 268 269 270 * Ports 271 272 - Native Client `arm` 273 - PowerPC 64 274 - ARM64 275 276 277 * Go support for Android 278 279 Go support for the NDK. (Like C/C++ today, but better!) 280 281 Goal: enough support for writing games. 282 283 Based on the work of Elias Naur and others in the community. 284 285 .link http://golang.org/s/go14android 286 287 288 * More 289 290 .link http://golang.org/s/go14todo 291 292 293 * Questions? 294