<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chapter 1 Design Philosophy and History on Go: Under the Hood</title><link>https://golang.design/under-the-hood/en/part1overview/ch01intro/</link><description>Recent content in Chapter 1 Design Philosophy and History on Go: Under the Hood</description><generator>Hugo</generator><language>en</language><atom:link href="https://golang.design/under-the-hood/en/part1overview/ch01intro/index.xml" rel="self" type="application/rss+xml"/><item><title>1.1 The Evolution of Programming Languages</title><link>https://golang.design/under-the-hood/en/part1overview/ch01intro/history/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://golang.design/under-the-hood/en/part1overview/ch01intro/history/</guid><description>&lt;h1 id="11-the-evolution-of-programming-languages"&gt;1.1 The Evolution of Programming Languages&lt;/h1&gt;
&lt;p&gt;To understand why Go turned out the way it did, why it is so restrained, so obsessed with compilation speed, so concerned with concurrency, we first have to look at the language landscape it was born into, and at whose pain it set out to solve. Go was not designed in a vacuum. It is the response of a group of people who spent their careers writing systems software, a response to their long-standing dissatisfaction with the mainstream languages of the time. Understanding this background gives a unified starting point for all the trade-offs the rest of this book examines, in the scheduler, the memory model, and generics.&lt;/p&gt;</description></item><item><title>1.2 An Overview of the Go Language</title><link>https://golang.design/under-the-hood/en/part1overview/ch01intro/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://golang.design/under-the-hood/en/part1overview/ch01intro/go/</guid><description>&lt;h1 id="12-an-overview-of-the-go-language"&gt;1.2 An Overview of the Go Language&lt;/h1&gt;
&lt;p&gt;This section builds a skeleton for the whole book. It is not a syntax manual; Go&amp;rsquo;s syntax is explained clearly in any introductory book, and repeating it would serve no purpose.
What we want to do is first establish a &lt;strong&gt;bird&amp;rsquo;s-eye view of the whole&lt;/strong&gt;: which layers make up Go, which &lt;strong&gt;distinctive&lt;/strong&gt; design decisions it carries,
and where in this book each of those decisions is developed. Once you have read this section, you can dive into any later chapter without losing your way.&lt;/p&gt;</description></item><item><title>1.3 Communicating Sequential Processes</title><link>https://golang.design/under-the-hood/en/part1overview/ch01intro/csp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://golang.design/under-the-hood/en/part1overview/ch01intro/csp/</guid><description>&lt;h1 id="13-communicating-sequential-processes"&gt;1.3 Communicating Sequential Processes&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;This section comes with an online talk: &lt;a href="https://www.youtube.com/watch?v=Z8ZpWVuEx8c"&gt;YouTube&lt;/a&gt;, &lt;a href="https://changkun.de/s/csp/"&gt;Google Slides&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The intellectual source of Go&amp;rsquo;s concurrency model is &lt;strong&gt;Communicating Sequential Processes&lt;/strong&gt; (CSP), which Hoare proposed in CACM in 1978. This section traces that lineage from the perspective of the history of ideas, because it explains why goroutines and channels look the way they do today. The implementation details of channels and select (the ring buffer in hchan, the pairing of &lt;code&gt;gopark&lt;/code&gt; and &lt;code&gt;goready&lt;/code&gt;, the two-round locking in &lt;code&gt;selectgo&lt;/code&gt;) are left for &lt;a href="../../../part3concurrency/ch10chan/readme"&gt;Chapter 10&lt;/a&gt;. Here we are concerned with &amp;ldquo;why CSP&amp;rdquo;, and with how that choice has shaped the appearance of Go programs.&lt;/p&gt;</description></item></channel></rss>