-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathorigin.slide
122 lines (87 loc) · 3.63 KB
/
origin.slide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Go programming language
* Creator
.image creators.png
“Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.” - golang.org
* Go
Subject: Re: prog lang discussion
From: Rob 'Commander' Pike
Date: Tue, Sep 25, 2007 at 3:12 PM
To: Robert Griesemer, Ken Thompson
i had a couple of thoughts on the drive home.
1. name
'go'. you can invent reasons for this name but it has nice properties.
it's short, easy to type. tools: goc, gol, goa. if there's an interactive
debugger/interpreter it could just be called 'go'. the suffix is .go
...
* GO
Go is efficient, scalable, and productive.
- Some programmers find it fun to work in.
- Others find it unimaginative, even boring.
* Big hardware
.image datacenter.jpg
* Go at Google
- Solve Google's problems, and Google has big problems.
- The hardware is big and the software is big. gazillions of lines of code
- Thousands of engineers work on the code.
- multicore processors, networked systems, massive computation clusters, and the web programming model
- C++ (mostly) for servers, plus lots of Java and Python.
- In short, development at Google is big, can be slow, and is often clumsy.
* Pain
What makes large-scale development hard with C++ or Java (at least):
- slow builds
- uncontrolled dependencies
- each programmer using a different subset of the language
- poor program understanding (documentation, etc.)
- duplication of effort
- cost of updates
- version skew
- difficulty of automation (auto rewriters etc.): tooling
- cross-language builds
Language _features_ don't usually address these.
A larger view of software engineering is required.
* The reason for Go
Goals:
- eliminate slowness
- eliminate clumsiness
- improve effectiveness
- maintain (even improve) scale
Go was designed by and for people who write—and read and debug and maintain—large software systems.
Go's purpose is _not_ research into programming language design.
Go's purpose is to make its designers' programming lives better.
* Guiding principles
- Simplicity, Safety and Readability are paramount
- Striving for orthogonality in design
- It's about `expressing algorithms`, not the type system.
- one feature at the time
As some critics would say: There's nothing new in Go!
They are missing the point:
The task of the programming language designer "is consolidation not innovation ".
(Hoare, 1973).
* The target
- Go aims to combine the safety and performance
- statically typed compiled language
- expressiveness and convenience of a dynamically typed interpreted language.
- It also aims to be suitable for modern systems - large scale - programming.
* Language Design in the Service of Software Engineering
Go is a compiled, concurrent, garbage-collected, statically typed language developed at Google.
- Readability - focus on sustaining engineering
- built-in concurrency and garbage collection
- Go's design considerations include rigorous dependency management
- the adaptability of software architecture as systems grow
* Features in Go
- Go is different.
- Go does not try to be like the other languages.
- Go does not compete on features.
- As of Go 1, the language is fixed.
- Many newcomers to Go ask for features from languages they know.
- Adding features to Go would not make it better, just bigger.
- That would make Go less interesting by being less different.
* But you need features!
- Of course, there must be some features.
- But which ones? The right ones!
- Design by consensus.
* Go was "the emerging language of cloud infrastructure".
* Go documentation is good simple
* -Go module-
* -Go Idioms-
* -Concurrency-