<!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/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 &lt;- expensiveComputation(x, y, z)
}

func main() {
	ch := make(chan int)
	go computeAndSend(ch, x, y, z)
	v2 := anotherExpensiveComputation(a, b, c)
	v1 := &lt;-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.
    &lt;-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 &lt;- 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 &lt;- 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 &lt;- 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 &lt;- 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 &lt;- 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 &lt;- 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>
		<li>regular releases (~ weekly)</li>
		<li>all development done in public Mercurial repository</li>
		<li>outside contributions welcome</li>
		<li>two independent compiler implementations</li>
		<li>XML, JSON, HTTP, TLS/SSL, native RPC, (network channels,) ...</li>
	</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>
		<li>(in progress) Linux arm, Native Client x86, Windows x86.</li>
	</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>
		<li>generics?</li>
		<li>exceptions?</li>
		<li>unions or sum types?</li>
	</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>
