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