mirror of
https://github.com/golang/go
synced 2024-11-23 20:00:04 -07:00
create doc/talks/.
move talk-20091030 down. add talk given at Stanford 2010/01/12. add doc/go-logo-white.png. R=r CC=golang-dev https://golang.org/cl/186132
This commit is contained in:
parent
27be2915f3
commit
6c2e0fe1f9
BIN
doc/go-logo-white.png
Normal file
BIN
doc/go-logo-white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
411
doc/talks/go_talk-20100112.html
Normal file
411
doc/talks/go_talk-20100112.html
Normal file
@ -0,0 +1,411 @@
|
||||
<!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 (January 12, 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>Stanford University<br/><br/>January 12, 2010</h3>
|
||||
</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 Griesemer, Ken Thompson, Rob Pike, Ian Lance Taylor, Russ Cox, many others</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Why?</h1>
|
||||
|
||||
<h2>Go fast!</h2>
|
||||
<h2>Make programming fun again.</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>Go</h1>
|
||||
|
||||
<h2>Make the language fast.</h2>
|
||||
<h2>Make the tools fast.</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Static Types</h1>
|
||||
|
||||
<h2>Static types, but declarations can infer type from expression:</h2>
|
||||
|
||||
<pre>
|
||||
var one, hi = 1, "hello"
|
||||
|
||||
var double = func(x int) int { return x*2 }
|
||||
</pre>
|
||||
|
||||
<h2>Not full Hindley-Milner type inference.</h2>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Methods</h1>
|
||||
|
||||
<h2>Methods can be defined on any type.</h2>
|
||||
|
||||
<pre>
|
||||
type Point struct {
|
||||
X, Y float64
|
||||
}
|
||||
|
||||
func (p Point) Abs() float64 {
|
||||
return math.Sqrt(p.X*p.X + p.Y*p.Y)
|
||||
}
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Methods</h1>
|
||||
|
||||
<h2>Methods can be defined on any type.</h2>
|
||||
|
||||
<pre>
|
||||
type MyFloat float64
|
||||
|
||||
func (f MyFloat) Abs() float64 {
|
||||
v := float64(f)
|
||||
if v < 0 {
|
||||
v = -v
|
||||
}
|
||||
return v
|
||||
}
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Abstract Types</h1>
|
||||
|
||||
<h2>An interface type lists a set of methods. Any value with those methods satisfies the interface.</h2>
|
||||
|
||||
<pre>
|
||||
type Abser interface {
|
||||
Abs() float64
|
||||
}
|
||||
|
||||
func AbsPrinter(a Abser)
|
||||
</pre>
|
||||
|
||||
<h2>Can use Point or MyFloat (or ...):</h2>
|
||||
|
||||
<pre>
|
||||
p := Point{3, 4}
|
||||
AbsPrinter(p)
|
||||
|
||||
f := MyFloat(-10)
|
||||
AbsPrinter(f)
|
||||
</pre>
|
||||
|
||||
<h2>Notice that Point never declared that it implements Abser. It just does. Same with MyFloat.</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Packages</h1>
|
||||
|
||||
<h2>A Go program comprises one or more packages.</h2>
|
||||
<h2>Each package is one or more source files compiled and imported as a unit.</h2>
|
||||
<pre>
|
||||
package draw
|
||||
|
||||
type Point struct {
|
||||
X, Y int
|
||||
}
|
||||
</pre>
|
||||
|
||||
<pre>
|
||||
package main
|
||||
|
||||
import "draw"
|
||||
|
||||
var p draw.Point
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Visibility</h1>
|
||||
|
||||
<h2>Inside a package, all locally defined names are visible in all source files.</h2>
|
||||
|
||||
<h2>When imported, only the upper case names are visible.</h2>
|
||||
|
||||
<pre>
|
||||
package draw
|
||||
|
||||
type <span style="color: black;">Point</span> struct {
|
||||
<span style="color: black;">X</span>, <span style="color: black;">Y</span> int
|
||||
dist float64
|
||||
}
|
||||
|
||||
type cache map[Point] float64
|
||||
</pre>
|
||||
|
||||
<h2>Clients that <code>import "draw"</code> can use the black names only.</h2>
|
||||
|
||||
<h2>“Shift is the new <code>public</code>.”</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Approach: Concurrency</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 Approach: Synchronization</h1>
|
||||
|
||||
<h2>Use explicit messages to communicate and synchronize.</h2>
|
||||
|
||||
<pre>
|
||||
func computeAndSend(c chan int, x, y, z int) {
|
||||
c <- expensiveComputation(x, y, z)
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := make(chan int)
|
||||
go computeAndSend(c, x, y, z)
|
||||
v2 := anotherExpensiveComputation(a, b, c)
|
||||
v1 := <-c
|
||||
fmt.Println(v1, v2)
|
||||
}
|
||||
</pre>
|
||||
<h2>Notice communication of result in addition to synchronization.</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Go Fast: Language</h1>
|
||||
|
||||
<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">Concurrency: lightweight way to start new thread of control.</h2>
|
||||
|
||||
<h2 class="incremental">Synchronization: explicit, easy message passing.</h2>
|
||||
|
||||
<br/>
|
||||
|
||||
<h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Compile fast</h1>
|
||||
|
||||
<div class="incremental">
|
||||
<h2>Observation: much of the compile time for a source file is spent processing
|
||||
other, often unrelated files.</h2>
|
||||
|
||||
<h2>In C: <code>a.c</code> includes <code>b.h</code>, which includes <code>c.h</code>, which includes <code>d.h</code>.
|
||||
</h2>
|
||||
|
||||
<h2>Except that it's more often a tree instead of a chain.</h2>
|
||||
|
||||
<h2>On my Mac (OS X 10.5.8, gcc 4.0.1):</h2>
|
||||
<ul>
|
||||
<li>C: <code>#include <stdio.h></code> reads 360 lines from 9 files.
|
||||
<li>C++: <code>#include <iostream></code> reads 25,326 lines from 131 files.
|
||||
<li>Objective C: <code>#include <Carbon/Carbon.h></code> reads 124,730 lines from 689 files.
|
||||
</ul>
|
||||
|
||||
<h2>And we haven't done any real work yet!</h2>
|
||||
|
||||
<h2>Same story in Java, Python, but reading binaries instead of source files.</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Implementation: Summarize Dependencies</h1>
|
||||
|
||||
<pre>
|
||||
package gui
|
||||
|
||||
import "draw"
|
||||
|
||||
type Mouse struct {
|
||||
Loc draw.Point
|
||||
Buttons uint
|
||||
}
|
||||
</pre>
|
||||
<h2>Compiled form of <code>gui</code> summarizes the necessary part of <code>draw</code> (just <code>Point</code>).</h2>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Implementation: Summarize Dependencies</h1>
|
||||
|
||||
<h2>Compiled form of <code>gui</code> summarizes the necessary part of <code>draw</code> (just <code>Point</code>). Pseudo-object:</h2>
|
||||
|
||||
<pre>
|
||||
package gui
|
||||
type draw.Point struct {
|
||||
X, Y int
|
||||
}
|
||||
type gui.Mouse struct {
|
||||
Loc draw.Point
|
||||
Buttons uint
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h2>A file that imports <code>gui</code> compiles without consulting <code>draw</code> or its dependencies.</h2>
|
||||
|
||||
<h2>In Go: <code>import "fmt"</code> reads <i>one</i> file: 184 lines summarizing types from 7 packages.</h2>
|
||||
|
||||
<h2>Tiny effect in this program but can be exponential in large programs.</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 Status</h1>
|
||||
|
||||
<div class="incremental">
|
||||
<div>
|
||||
<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
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<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>
|
||||
<h2>Still in progress, experimental. Yet to come:</h2>
|
||||
<ul>
|
||||
<li>mature garbage collector
|
||||
<li>generics?
|
||||
<li>exceptions?
|
||||
<li>unions or sum types?
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</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>
|
277
doc/talks/slidy.css
Normal file
277
doc/talks/slidy.css
Normal file
@ -0,0 +1,277 @@
|
||||
/* http://www.w3.org/Talks/Tools/Slidy/slidy.css
|
||||
|
||||
Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
||||
W3C liability, trademark, document use and software licensing
|
||||
rules apply, see:
|
||||
|
||||
http://www.w3.org/Consortium/Legal/copyright-documents
|
||||
http://www.w3.org/Consortium/Legal/copyright-software
|
||||
*/
|
||||
body
|
||||
{
|
||||
margin: 0 0 0 0;
|
||||
padding: 0 0 0 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: black;
|
||||
background-color: white;
|
||||
font-family: "Lucida Sans", "Lucida Grande", Lucida, sans-serif;
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
.hidden { display: none; visibility: hidden }
|
||||
|
||||
div.toolbar {
|
||||
position: fixed; z-index: 200;
|
||||
top: auto; bottom: 0; left: 0; right: 0;
|
||||
height: 1.2em; text-align: right;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
font-size: 60%;
|
||||
color: red; background: rgb(240,240,240);
|
||||
}
|
||||
|
||||
div.background {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.handout {
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
div.slide.titlepage {
|
||||
color: white;
|
||||
background: black;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.slide {
|
||||
z-index: 20;
|
||||
margin: 0 0 0 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
border-width: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
line-height: 120%;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* this rule is hidden from IE 6 and below which don't support + selector */
|
||||
div.slide + div[class].slide { page-break-before: always;}
|
||||
|
||||
div.slide h1 {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
margin-top: 0;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-bottom: 0.5em;
|
||||
border-bottom: 4px solid #36c;
|
||||
display: block;
|
||||
font-size: 160%;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
div.slide h2 {
|
||||
font-size:120%;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
div.toc {
|
||||
position: absolute;
|
||||
top: auto;
|
||||
bottom: 4em;
|
||||
left: 4em;
|
||||
right: auto;
|
||||
width: 60%;
|
||||
max-width: 30em;
|
||||
height: 30em;
|
||||
border: solid thin black;
|
||||
padding: 1em;
|
||||
background: rgb(240,240,240);
|
||||
color: black;
|
||||
z-index: 300;
|
||||
overflow: auto;
|
||||
display: block;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.toc-heading {
|
||||
width: 100%;
|
||||
border-bottom: solid 1px rgb(180,180,180);
|
||||
margin-bottom: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
line-height: 140%;
|
||||
padding-top: 0.2em;
|
||||
padding-bottom: 0.2em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
/*
|
||||
border-style: solid;
|
||||
border-left-width: 1em;
|
||||
border-top-width: thin;
|
||||
border-right-width: thin;
|
||||
border-bottom-width: thin;
|
||||
border-color: #95ABD0;
|
||||
*/
|
||||
color: #0F398D;
|
||||
background-color: #fff8f8;
|
||||
}
|
||||
|
||||
@media print {
|
||||
div.slide {
|
||||
display: block;
|
||||
visibility: visible;
|
||||
position: relative;
|
||||
border-top-style: solid;
|
||||
border-top-width: thin;
|
||||
border-top-color: black;
|
||||
}
|
||||
div.slide pre { font-size: 60%; padding-left: 0.5em; }
|
||||
div.handout { display: block; visibility: visible; }
|
||||
}
|
||||
|
||||
blockquote { font-style: italic }
|
||||
|
||||
img { background-color: transparent }
|
||||
|
||||
p.copyright { font-size: smaller }
|
||||
|
||||
.center { text-align: center }
|
||||
.footnote { font-size: smaller; margin-left: 2em; }
|
||||
|
||||
a img { border-width: 0; border-style: none }
|
||||
|
||||
a:visited { color: navy }
|
||||
a:link { color: navy }
|
||||
a:hover { color: red; text-decoration: underline }
|
||||
a:active { color: red; text-decoration: underline }
|
||||
|
||||
a {text-decoration: none}
|
||||
.navbar a:link {color: white}
|
||||
.navbar a:visited {color: yellow}
|
||||
.navbar a:active {color: red}
|
||||
.navbar a:hover {color: red}
|
||||
|
||||
ul { list-style-type: square; }
|
||||
ul ul { list-style-type: disc; }
|
||||
ul ul ul { list-style-type: circle; }
|
||||
ul ul ul ul { list-style-type: disc; }
|
||||
li { margin-left: 2em; margin-top: 0.5em; }
|
||||
li li { font-size: 85%; font-style: italic }
|
||||
li li li { font-size: 85%; font-style: normal }
|
||||
|
||||
div dt
|
||||
{
|
||||
margin-left: 0;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div dd
|
||||
{
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
p.subhead { font-weight: bold; margin-top: 2em; }
|
||||
|
||||
p.smaller { font-size: smaller }
|
||||
|
||||
td,th { padding: 0.2em }
|
||||
|
||||
ul {
|
||||
margin: 0.5em 1.5em 0.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 0.5em 1.5em 0.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul { list-style-type: square; }
|
||||
ul ul { list-style-type: disc; }
|
||||
ul ul ul { list-style-type: circle; }
|
||||
ul ul ul ul { list-style-type: disc; }
|
||||
|
||||
ul li {
|
||||
list-style: square;
|
||||
//margin: 0.1em 0em 0.6em 0;
|
||||
padding: 0 0 0 0;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
ol li {
|
||||
margin: 0.1em 0em 0.6em 1.5em;
|
||||
padding: 0 0 0 0px;
|
||||
line-height: 140%;
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
li ul li {
|
||||
font-size: 85%;
|
||||
font-style: italic;
|
||||
list-style-type: disc;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
li li ul li {
|
||||
font-size: 85%;
|
||||
font-style: normal;
|
||||
list-style-type: circle;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
li li li ul li {
|
||||
list-style-type: disc;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
|
||||
li ol li {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
|
||||
li li ol li {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
/*
|
||||
setting class="outline on ol or ul makes it behave as an
|
||||
ouline list where blocklevel content in li elements is
|
||||
hidden by default and can be expanded or collapsed with
|
||||
mouse click. Set class="expand" on li to override default
|
||||
*/
|
||||
|
||||
ol.outline li:hover { cursor: pointer }
|
||||
ol.outline li.nofold:hover { cursor: default }
|
||||
|
||||
ul.outline li:hover { cursor: pointer }
|
||||
ul.outline li.nofold:hover { cursor: default }
|
||||
|
||||
ol.outline { list-style:decimal; }
|
||||
ol.outline ol { list-style-type:lower-alpha }
|
||||
|
||||
/* for slides with class "title" in table of contents */
|
||||
a.titleslide { font-weight: bold; font-style: italic }
|
2772
doc/talks/slidy.js
Normal file
2772
doc/talks/slidy.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -83,7 +83,7 @@
|
||||
<li><a href="/doc/effective_go.html">Effective Go</a></li>
|
||||
<li><a href="/doc/go_faq.html">FAQ</a></li>
|
||||
<li><a href="/doc/go_lang_faq.html">Language Design FAQ</a></li>
|
||||
<li><a href="http://www.youtube.com/watch?v=rKnDgT73v8s">Tech talk (1 hour)</a> (<a href="/doc/go_talk-20091030.pdf">PDF</a>)</li>
|
||||
<li><a href="http://www.youtube.com/watch?v=rKnDgT73v8s">Tech talk (1 hour)</a> (<a href="/doc/talks/go_talk-20091030.pdf">PDF</a>)</li>
|
||||
<li><a href="/doc/go_spec.html">Language Specification</a></li>
|
||||
<li><a href="/doc/go_mem.html">Memory Model</a></li>
|
||||
<li><a href="/doc/go_for_cpp_programmers.html">Go for C++ Programmers</a></li>
|
||||
|
Loading…
Reference in New Issue
Block a user