HackerTube
HomeLongsLikedHistoryWatch laterCategoriesPlaylistsSettings

GopherCon 2016: The Design of the Go Assembler - Rob Pike

Gopher Academy3 HN recommenders · recommended in 3 months, 2017-2025
YouTube
116K views · 10 years ago · talk · evergreen

Rob Pike's GopherCon 2016 talk on the design of the Go assembler, explaining why Go uses a common assembly language translated to each architecture.

HN points to it for background on how the Go toolchain targets many architectures and why its assembler is designed that way.

C, C++, Rust, Go & systems languagesCompilers, interpreters & program analysis#go#assembler#compilers#robpike#toolchainportability

9 comments from Hacker News

@MathMonkeyMan2025 · in “Show HN: Torque – A lightweight meta-assembler for any processor”

I'm reminded of a 2016 [talk][1] where Rob Pike describes the common-denominator assembly language that the Go compiler generates. Then that assembly is translated into machine-specific code via table lookups. See the 11 minute mark. [1]: ▶ this video

CitesView on HN
@saclark112024 · in “Show HN: Go Plan9 Memo”

> Overall, pretty weird stuff. I am not sure why the Go team went down this route. Maybe it simplifies the compiler by having this bespoke assembly format? Rob Pike spoke on the design of Go's assembler at a talk in 2016 [1][2]. I think it basically came down to the observation that most assembly language is roughly the same, so why not build a common assembly language that "lets you talk to the machine at the lowest level and yet not have to learn a new syntax." It also enables them to automatically generate a working assembler given an instruction manual PDF for a new architecture as input. [1]: ▶ this video [2]: link

CitesView on HN
@yencabulator2024 · in “Runtime code generation and execution in Go”

Generally the inline assembly is hand-written and must follow the platform rules, see "Architecture-specific details" in link The few tools that generate that asm, such as link , would also have follow the rules. You're not meant to take C source, crank it through GCC, and slurp that in as inline asm in Go. Background: ▶ this video

CitesView on HN
@cxr2023 · in “The Simplicity of Single-File Golang Deployments”

> I kind of miss cgi-bin. If we're ever to get back to a place where random "power users" can knock up a quick server to meet some computing need they have, easy deployment has to be a big part of that. Can we make it as easy to deploy as to post on Instagram? I'd be happy with a future that takes some cues from literate programming, where if you want to deploy some application, the way you do it is to upload a copy of the software manual/specification. This should be sufficient to "teach" the server how the application should behave. It's tempting to say "Ah, sounds like super advanced ChatGPT-ops or something approaching real AGI", but what I have in mind is something decidedly less magical. It's more akin to the sort of thing that Rob Pike brought up in his "The Design of the Go Assembler" talk ("you have a machine readable description[...] why not read it with a machine?"). < ▶ this video >

CitesView on HN
@jhawk282018 · in “Porting Alpine Linux to RISC-V”

Go uses a common assembly with ways to covert into the specific architecture which makes porting the toolchain to new targets somewhat trivial. ( ▶ this video )

CitesView on HN
@fourseventy2017 · in “Go Assembly by Example”

This is relevant ▶ this video Its Rob Pike talking about the go assembler and he answers a few of your questions.

RecommendsView on HN
@znpy2017 · in “Orbit: An Optimizing Compiler for Scheme (1986) [pdf]”

Interestingly, one of the pages you link ( link ) links a paper (grep "1986: Kelsey dissertation on rewrite-based compilation ") that shows the implementation of a compiler with multiple frontends (BASIC, Scheme, Pascal) using only source-to-source) transformation. I find this interesting because in a certain way, this reminds me of how the go assembler works ( ▶ this video ). For those who haven't seen the talk: basically the go compiler works on the assumption that pretty much all computer, in a way, move memory from one address to another, generate and handle interrupts, have call/return instructions and so on. Thus, the go compiler emits (IIRC) some sort of "intermediate assembler" (somehow similar to llvm's intermediate representation, but simpler) and then proceeds to "translate" such assembler to various platform native assembler. I clearly remember Rob Pike (in the talk) saying "so the task of supporting a new platform becomes a task in text processing" (okay, maybe it was worded a bit better). This might be a bit tangential, but it is interesting how some "new" ideas aren't that new after all. But I guess this is due to Rob Pike's deep experience and history with computers.

CitesView on HN
@bkeroack2017 · in “A Foray into Go Assembly Programming”

Here's a good talk about the Go assembler backend: ▶ this video Spoiler: they're nearly to the point (maybe now they've achieved it fully) of autogenerating a new language backend from ISA documentation PDFs! Bring that up next time someone complains about Go not using LLVM.

RecommendsView on HN
@chubot2017 · in “Show HN: How to write a tiny compiler”

Have you looked at the Go toolchain at all? I don't know much about it, but they implemented their back ends in a manner that is much smaller than LLVM and GCC. And it sounds like the architecture of the compiler is significantly different. I watched this talk and it was pretty interesting: ▶ this video link If I am understanding right, the claim is that they have a single assembly language for ALL GO architectures, based on something Ken Thompson wrote in the 90's for some National Instruments (?) chip. He actually says that all assembly language looks the same now. I was sort of surprised by that claim. I would like to hear a critique of this from other compiler writers. Does the fact that Go uses a single assembly language make the code slower? I imagine taking advantage of target-specific knowledge is useful, but I don't know how much. LLVM has this pretty elaborate TableGen system to express target-specific knowledge. He also makes the claim that they will be able auto-generate a new backend from the PDF description of the architecture. And he says somewhere that they reduce a lot of the work to simple "text processing" (symbol manipulation) and didn't require opening up any processor manuals. I can see how arithmetic and bitshifting is the same among all architectures. But I would think that even loads and stores have differences, at least if you want to use the processor efficiently. But he says everything kinda looks the same. Also, another thought is that compiling to W

RecommendsView on HN
GopherCon 2014 Opening Keynote by Rob Pike56:36

GopherCon 2014 Opening Keynote by Rob Pike

Confreaks
38K views • 12 years ago
Rob Pike about the target group of the Go programming language (golang)0:27

Rob Pike about the target group of the Go programming language (golang)

f8C4G86p KbqEFe47
7K views • 6 years ago
GopherCon 2014 Inside the Gophers Studio with Blake Mizerany48:19

GopherCon 2014 Inside the Gophers Studio with Blake Mizerany

Confreaks
8K views • 12 years ago
Sydney Golang Meetup - Rob Pike - Go 2 Draft Specifications1:07:00

Sydney Golang Meetup - Rob Pike - Go 2 Draft Specifications

Macquarie Group
57K views • 7 years ago
The Go Programming Language59:26

The Go Programming Language

Google TechTalks
406K views • 17 years ago
Gopherfest 2015 | Go Proverbs with Rob Pike22:29

Gopherfest 2015 | Go Proverbs with Rob Pike

The Go Programming Language
317K views • 10 years ago
Google I/O 2012 - Go Concurrency Patterns51:27

Google I/O 2012 - Go Concurrency Patterns

Google for Developers
894K views • 14 years ago
Google I/O 2012 - Meet the Go Team1:00:29

Google I/O 2012 - Meet the Go Team

Google for Developers
108K views • 14 years ago
Lang NEXT 2014 Panel  Systems Programming in 2014 and Beyond1:05:56

Lang NEXT 2014 Panel Systems Programming in 2014 and Beyond

25msr
3K views • 8 years ago
dotGo 2015 - Rob Pike - Simplicity is Complicated23:12

dotGo 2015 - Rob Pike - Simplicity is Complicated

dotconferences
172K views • 10 years ago
OSCON 2010:  Rob Pike, "Public Static Void"12:31

OSCON 2010: Rob Pike, "Public Static Void"

O'Reilly
119K views • 16 years ago
Lexical Scanning in Go - Rob Pike51:18

Lexical Scanning in Go - Rob Pike

GoogleFOSSSydney
162K views • 15 years ago
Origins of Go Concurrency style by Rob Pike38:19

Origins of Go Concurrency style by Rob Pike

jasonofthel33t
28K views • 14 years ago
Google I/O 2011: Writing Web Apps in Go51:12

Google I/O 2011: Writing Web Apps in Go

Google for Developers
135K views • 15 years ago
Concurrency is not Parallelism by Rob Pike31:23

Concurrency is not Parallelism by Rob Pike

gnbitcom
191K views • 10 years ago
Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency1:00:40

Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency

Hydra
47K views • 7 years ago
Hacking with Andrew and Brad: tip.golang.org1:02:49

Hacking with Andrew and Brad: tip.golang.org

The Go Programming Language
99K views • 11 years ago
Gopherfest 2017 | Upspin with Rob Pike31:18

Gopherfest 2017 | Upspin with Rob Pike

The Go Programming Language
50K views • 9 years ago
GopherCon 2015: Go GC: Solving the Latency Problem - Rick Hudson22:51

GopherCon 2015: Go GC: Solving the Latency Problem - Rick Hudson

Gopher Academy
22K views • 11 years ago
TypeScript is being ported to Go | interview with Anders Hejlsberg1:01:31

TypeScript is being ported to Go | interview with Anders Hejlsberg

Michigan TypeScript
102K views • 1 year ago