<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Go, Networked (January 21, 2010)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="font-size-adjustment" content="-1" />
<link rel="stylesheet" href="support/slidy.css"
  type="text/css" media="screen, projection, print" />
<script src="support/slidy.js" type="text/javascript">
</script>
</head>
<body>
<!-- this defines the slide background -->

<div class="background">

  <div class="header">
  <!-- sized and colored via CSS -->
  </div>

  <div class="footer"></div>
  </div>

<div class="slide titlepage">
<div style="height: 135px; width: 480px; overflow: hidden; position: fixed; top: auto; bottom: 10px; left: auto; right: 0;  ">
<img src="support/gordon/bumper480x270.png" style="margin: -135px 0 0 0;"/>
</div>
<br/>
<img src="support/go-logo-white.png">
<br/>
<br/>
<h1 style="padding-right: 0pt; margin-right: 0pt; color: #0066cc; font-size: 250%; border-bottom: 0px;">The Go Programming Language</h1>
<div style="color: #ffcc00;">
<h2>Russ Cox</h2>
<!-- <h3><i>rsc@google.com</i></h3> -->
<br/>
<h3>CNS Winter Research Review<br/><br/>January 21, 2010</h3>
<br/>
<br/>
<!--
<h4><i>click to start; then left/right arrow to change slides</i></h4> -->
</div>
</div>

<div class="slide">
	<h1>Go</h1>

	<h2>New</h2>
	<h2>Experimental</h2>
	<h2>Concurrent</h2>
	<h2>Garbage-collected</h2>
	<h2>Systems</h2>
	<h2>Language</h2>
</div>

<div class="slide">
	<h1>Hello, world</h1>
<pre>
package main

import "fmt"

func main() {
	fmt.Printf("Hello, 世界\n")
}
</pre>
</div>

<div class="slide">
	<h1>History</h1>
	
	<h2>Design started in late 2007.</h2>
	<h2>Implementation starting to work mid-2008.</h2>
	<h2>Released as an open source project in November 2009.</h2>
	<h2>Work continues.</h2>
	<h2>Robert&nbsp;Griesemer, Ken&nbsp;Thompson, Rob&nbsp;Pike, Ian&nbsp;Lance&nbsp;Taylor, Russ&nbsp;Cox, many others</h2>
</div>

<div class="slide">
	<h1>Goals and Motivation</h1>
	
	<h2>Go fast!</h2>
	<h2>Make programming fun again.</h2>
	<h2>Targeted at systems software, broadly.</h2>
</div>

<div class="slide">
	<h1>Why isn't programming fun?</h1>
	
	<div class="incremental">
	<h2>Compiled, statically-typed languages (C, C++, Java) require too much typing and too much typing:</h2>
	
	<ul>
		<li>verbose, lots of repetition</li>
		<li>too much focus on type hierarchy</li>
		<li>types get in the way as much as they help</li>
		<li>compiles take far too long</li>
	</ul>
	</div>
	
	<div class="incremental">
	<h2>Dynamic languages (Python, JavaScript) fix these problems (no more types, no more compiler) but introduce others:</h2>
	
	<ul>
		<li>errors at run time that should be caught statically</li>
		<li>no compilation means slow code</li>
	</ul>
	</div>
	
	<h2 class="incremental">Can we combine the best of both?</h2>
</div>

<div class="slide">
	<h1>Why a new language?</h1>
	
	<div class="incremental">
	<h2>No new systems language in 10+ years.</h2>
	<h2>Current languages designed before ...</h2>
	<h3>... rise of large-scale, networked and multicore computing</h3>
	<h3>... rise of Internet-scale distributed development (many libraries)</h3>
	</div>
</div>
	
<div class="slide">
	<h1>Go</h1>
	
	<h2>Make the language fast.</h2>
	<h2>Make the tools fast.</h2>
</div>

<div class="slide">
	<h1>Compilation Demo</h1>
	
	<h2>Build all standard Go packages: ~120,000 lines of code.</h2>
</div>

<div class="slide">
	<h1>Go in one slide</h1>
	
	<h2 class="incremental">Lightweight syntax.</h2>
	
	<h2 class="incremental">Static types: enough to compile well, but inferred much of the time.</h2>
	
	<h2 class="incremental">Methods: on any type, orthogonal to type system.</h2>
	
	<h2 class="incremental">Abstract types: interface values, relations inferred statically.</h2>
	
	<h2 class="incremental">Visibility: inferred from case of name.</h2>

	<h2 class="incremental">First-class functions.</h2>
	
	<h2 class="incremental">Garbage collection.</h2>

	<br/>
	
	<h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2>
</div>

<div class="slide">
	<h1>Go, concurrently</h1>
	
	<h2>Cheap to create a new flow of control (goroutine):</h2>
	
<pre>
func main() {
	go expensiveComputation(x, y, z)
	anotherExpensiveComputation(a, b, c)
}
</pre>

	<h2>Two expensive computations in parallel.</h2>
</div>

<div class="slide">
	<h1>Go, concurrently</h1>
	
	<h2>Cheap to create a new flow of control (goroutine):</h2>
	
<pre>
	for {
		rw := l.Accept()
		conn := newConn(rw, handler)
		go conn.serve()
	}
</pre>

	<h2>Concurrent web server.</h2>
	<h2>Network connections multiplexed onto epoll.</h2>
		<ul>
		<li>many blocked Read calls != many blocked OS threads</li>
		</ul>

</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>Use explicit messages to communicate and synchronize.</h2>
	
<pre>
func computeAndSend(ch chan int, x, y, z int) {
	ch <- expensiveComputation(x, y, z)
}

func main() {
	ch := make(chan int)
	go computeAndSend(ch, x, y, z)
	v2 := anotherExpensiveComputation(a, b, c)
	v1 := <-ch
	fmt.Println(v1, v2)
}
</pre>
	<h2>Notice communication of result in addition to synchronization.</h2>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client</h2>

<pre>
func (client *Client) Call(method string, args, reply interface{}) os.Error {
    // Send RPC message.
    call := client.Go(method, args, reply, nil)
	
    // Read reply from Done channel.
    <-call.Done

    return call.Error
}
</pre>	
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		resp := client.readResponse()
		client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()
		if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)
		c.Done <- c
	}
}
</pre>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		<font style="color: black;">resp := client.readResponse()</font>
		client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()
		if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)
		c.Done <- c
	}
}
</pre>
<h2>Read response from network.</h2>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		resp := client.readResponse()
		<font style="color: black;">client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()</font>
		if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)
		c.Done <- c
	}
}
</pre>
<h2>Look up request by sequence number.</h2>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		resp := client.readResponse()
		client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()
		<font style="color: black;">if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)</font>
		c.Done <- c
	}
}
</pre>
<h2>Decode response fields from payload.</h2>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		resp := client.readResponse()
		client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()
		if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)
		<font style="color: black;">c.Done <- c</font>
	}
}
</pre>
<h2>Tell client that it finished.</h2>
</div>

<div class="slide">
	<h1>Go, synchronized</h1>
	
	<h2>RPC client demux</h2>

<pre>
func (client *Client) input() {
	for {
		resp := client.readResponse()
		client.mutex.Lock()
		c := client.pending[resp.Seq]
		client.pending[resp.Seq] = c, false
		client.mutex.Unlock()
		if resp.Error != "" {
			c.Error = os.ErrorString(resp.error)
		}
		resp.Decode(c.Reply)
		c.Done <- c
	}
}
</pre>

<h2>Can create multiple Calls with same Done channel
and distinguish which finished by inspecting value sent on channel.
</h2>

</div>

<div class="slide">
	<h1>Goroutine demo</h1>
	
	<h2>Chain together 100,000 goroutines connected by 100,001 channels.</h2>
	
	<h2>Send a value to one end of the chain.</h2>
	
	<h2>Each passes it along, increments.</h2>
	
	<h2>Receive value out the other end of the chain.</h2>
</div>
	

<div class="slide">
	<h1>Go Status</h1>
</div>

<div class="slide">
	<h1>Go Status</h1>
	
	<h2>Open source:</h2>
	<ul>
	<li>released on November 10, 2009
	<li>regular releases (~ weekly)
	<li>all development done in public Mercurial repository
	<li>outside contributions welcome
	<li>two independent compiler implementations
	<li>XML, JSON, HTTP, TLS/SSL, native RPC, (network channels,) ...
	</ul>
</div>

<div class="slide">
	<h1>Go Status</h1>
	
	<h2>Open source</h2>

	<h2>Portable:</h2>
	<ul>
	<li>FreeBSD, Linux, OS X (x86, x86-64)
	<li>(in progress) Linux arm, Native Client x86, Windows x86.
	</ul>
</div>

<div class="slide">
	<h1>Go Status</h1>
	
	<h2>Open source</h2>
	<h2>Portable</h2>

	<h2>Still in progress, experimental.  Yet to come:</h2>
	<ul>
	<li>production garbage collector
	<li>generics?
	<li>exceptions?
	<li>unions or sum types?
	</ul>
</div>

<div class="slide titlepage">
	<h1>Questions?</h1>
	<br><br>
	<center>
	<img src="support/bumper640x360.png">
	</center>
	<br><br>
	<div style="color: #ffcc00;">
	<!-- <h3><i>rsc@google.com</i></h3> -->
	</div>
</div>

</body></html>
