<!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="slidy.css"
  type="text/css" media="screen, projection, print" />
<script src="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="gordon/bumper480x270.png" style="margin: -135px 0 0 0;"/>
</div>
<!-- <img src="../google.png" style="position: fixed; top: auto; bottom: 30px; left: 20px; right: auto;"/> -->
<br/>
<img src="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="gordon/bumper640x360.png">
	</center>
	<br><br>
	<div style="color: #ffcc00;">
	<!-- <h3><i>rsc@google.com</i></h3> -->
	</div>
</div>

</body></html>
