Ian Lance Taylor
airs.com · Personal blog · on HN since 2008
Ian Lance Taylor, a compiler and linker engineer known for the gold linker and Go, writes about toolchains and programming.
What HN saysCommenters call his 20-part linkers series the best source on how linkers work, and also praise his cross-compiler explanation and programming posts as insightful.
52HN people shared it
22linked it in comments
41stories submitted
857story points
6 months agolast shared
2008people per year2026
Most-shared posts
- 1Linkers (2007)10 people · 174 points · first shared 2010 · 7 comments on HN
- 2Go Experience Report: The Append Function3 people · 5 points · first shared 2017 · discussion on HN
- 3C++ 'const'3 people · 4 points · first shared 2015 · discussion on HN
- 4Gccgo in GCC3 people · 4 points · first shared 2010 · discussion on HN
- 5Linkers Part 43 people · 2 points · first shared 2010 · discussion on HN
- 6Archives 513 people · first shared 2010
- 7Leaving Google2 people · 565 points · first shared 2025 · 382 comments on HN
- 8Debugging (2003)2 people · 50 points · first shared 2013 · 5 comments on HN
- 9DejaGNU (2011)2 people · 5 points · first shared 2025 · discussion on HN
- 10Go Interfaces, by one of the Go authors2 people · 4 points · first shared 2009 · discussion on HN
- 11The Conversation Game2 people · 4 points · first shared 2025 · discussion on HN
- 12Executable Stack2 people · 2 points · first shared 2011 · discussion on HN
- 13Gold Linker(2008) [pdf]2 people · 2 points · first shared 2016 · discussion on HN
- 14Signed Overflow (2008)2 people · 1 points · first shared 2013 · discussion on HN
- 15Destructors2 people · 1 points · first shared 2010 · discussion on HN
What HN people wrote when they linked it
sheepscreek · 2025-05-11
Interestingly, the blog has very few posts. What I would really like to read is a follow up to https://www.airs.com/blog/archives/552 (“The 2016 Election”)
canucker2016 · 2023-07-27
Best source I've read is Ian Taylor's blog about his work on the gold linker:
https://www.airs.com/blog/archives/38
"Once again, the goal is speed, in this case being faster than my second linker. That linker has been significantly slowed down over the years by adding support for ELF and for shared libraries. This support was patched in rather than being designed in. Future plans for the new linker include support for incremental linking–which is another way of increasing speed."
Just think of the apps that were written in early Unix days - simple single-purpose apps, probably just one source code file , just one obj and libc to link together, no shared libs et al.
The linker code just grew organically as new "must-have" features were added. Correctness of features was more important than speed esp. when spinning rust was a limiting factor.
weinzierl · 2019-09-02
Best piece on linkers is in my opinion Ian Lance Taylor's (author of the gold linker) write up[1].
It obviously has been written in a hurry and could need some polish but the content is gold.
LWN published an overview with links to the different parts, to make it a little more accessible[2]. I always hoped Ian would turn it into the book he mentioned in the post.
[1] https://www.airs.com/blog/archives/38
[2] https://lwn.net/Articles/276782/
code4life · 2014-03-31
Here is a great explanation of why setting up a cross compiler is so difficult.
http://www.airs.com/blog/archives/492
saljam · 2012-08-13
Ian Lance Taylor (author of the gold linker) wrote a wonderful 20 part essay to how linkers work: http://www.airs.com/blog/archives/38
I'd also recommend reading the rest of his blog, at least the programming section. It's very insightful.
aix1 · 2026-05-14
Google has also been systematically destaffing various language infra teams.
https://www.linkedin.com/pulse/google-fires-entire-python-team-ahead-d…
https://www.airs.com/blog/archives/670
https://en.wikipedia.org/wiki/Google_Kythe
etc
dfawcus · 2026-03-22
Attribute (qualifier), or storage class?
https://www.airs.com/blog/archives/428
The use of 'const' in C is very much a mixed blessing; I certainly have experience of the 'const poisoning' issue. Possibly it would have been better as a storage class.
For bool, yes it was a useful addition. Especially for the cases where old code would have something like:
#define FLAG_A 1u
#define FLAG_B 2u
int has_flag_B (something *some) { return some->field & FLAG_B; }
and that was then combined with logic expecting 'true' to be 1; which could sneak in over time.
InDubioProRubio · 2024-08-22
https://www.airs.com/blog/archives/51
Pattermatching on assembler code and rearranging and reusage of sequences..
CalChris · 2021-06-09
Also by Ian Lance Taylor:
A New ELF Linker
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/3…
Gold
https://www.airs.com/ian/gold-slides.pdf
grey-area · 2020-06-16
Ian Lance Taylor has been involved in the language for a long time, since 2008. Here he is talking about the built-in function append and why it shouldn't really exist in 2017
https://www.airs.com/blog/archives/559
nwellnhof · 2017-12-04
That's because ELF allows symbol interposition and PE (Portable Executable) doesn't have a comparable feature. Symbol interposition doesn't come without a price, though, and is often criticized: https://www.macieira.org/blog/2012/01/sorry-state-of-dynamic-libraries… |
https://www.airs.com/blog/archives/307 |
https://news.ycombinator.com/item?id=8029564
cwzwarich · 2015-12-20
It looks like the optimization I remember was implemented in gccgo, but maybe they never added it to the main compiler: http://www.airs.com/blog/archives/277
maxlybbert · 2014-08-27
> Why bother running through a destructor chain ...
The Gold linker (written in C++) doesn't ( http://www.airs.com/blog/archives/362 ): "[I]n the gold linker I often deliberately omitted destructors, because many of the data structures live for the life the program; in such a case, destructors serve only to slow down program exit."
However, there are some things that you really want to know happened when the process exits for any reason. If possible, you'd probably like your files closed in a way that allows them to be re-opened. That's easy to do with destructors. Destructors: they were always for more than just memory management.
jacobparker · 2013-01-21
The common case is (probably) not that a compiler detects an instance of signed over/underflow. Instead, it can assume that this never happens and generate "dangerous" code.
A good post describing how these optimizations come about is http://www.airs.com/blog/archives/120
More options to warn about uses of or disable these optimizations would be welcome in compilers.
nkurz · 2011-05-16
There is some good level-headed non-dogmatic discussion in this thread. Here's some: http://gcc.gnu.org/ml/gcc/2010-05/msg00757.html
As another comment points out, this decision was made a year ago. Any updates on how the transition is going?
I searched a little, but found nothing. I did happen across an interesting earlier proposal though:
http://www.airs.com/blog/archives/187
sambeau · 2011-03-29
Ian Lance Taylor is the creator and maintainer of gccgo the Go front-end for gcc.
http://golang.org/doc/gccgo_install.html
He also has an interesting blog:
http://www.airs.com/blog/
shailesh · 2011-03-26
Ian Lance Taylor, contributor of the GCC Go frontend addresses the same concern, in http://www.airs.com/blog/archives/448
Basically, yes, it'll be increasingly out of date.
Edit: clarity.
kragen · 2011-03-06
> The articles I see on the sites you list are typically narrow, sensationalist, or self-serving.
I'm shocked that you would say that about LWN, or Ian Lance Taylor's blog, or Landon Dyer's blog, or James Hamilton's blog, or Google Research Videos. It's so far from reality that I feel compelled to ask if you've actually read them.
> many of them are written to gain votes on these sites, which are themselves advertising driven.
Or that. I mean, maybe Mark? Or Gruber? But can you seriously see James Hamilton or James Hague or Raymond Chen or LWN writing an article "to gain votes on these sites"? I mean, come on.
> But most of what gets posted on HN is junk.
True. But Byte published less than one article per day, and only a minority of its articles were of the high quality that we're talking about here.
> What you may not be aware of is that a well written technical magazine article takes weeks of research writing and careful editing, not to mention interviewing experts and preparing of graphics. Professional writers add breadth and perspective gathered from multiple domain experts and synthesize it to produce something with added value.
Well, I haven't written for Byte, but my limited experience writing magazine articles falls pretty far short of what you're describing there. Byte did have some pretty good stuff, it's true. But as often as not, professional writers synthesize those perspectives with errors and FUD.
And I'd like to point out that in…
andrewf · 2010-12-04
More information here: http://www.airs.com/blog/archives/448
catwell · 2012-06-20
to3m · 2016-04-30
Another note about .note.GNU-stack, from Ian Lance Tayler: http://www.airs.com/blog/archives/518
He has a 20-part series on linkers that may also be of interest, though I suppose since they were written some of the details may have changed:
Part 1: http://www.airs.com/blog/archives/38 ; Part 2: http://www.airs.com/blog/archives/39 ; Part 3: http://www.airs.com/blog/archives/40 ; Part 4: http://www.airs.com/blog/archives/41 ; Part 5: http://www.airs.com/blog/archives/42 ; Part 6: http://www.airs.com/blog/archives/43 ; Part 7: http://www.airs.com/blog/archives/44 ; Part 8: http://www.airs.com/blog/archives/45 ; Part 9: http://www.airs.com/blog/archives/46 ; Part 10: http://www.airs.com/blog/archives/47 ; Part 11: http://www.airs.com/blog/archives/48 ; Part 12: http://www.airs.com/blog/archives/49 ; Part 13: http://www.airs.com/blog/archives/50 ; Part 14: http://www.airs.com/blog/archives/51 ; Part 15: http://www.airs.com/blog/archives/52 ; Part 16: http://www.airs.com/blog/archives/53 ; Part 17: http://www.airs.com/blog/archives/54 ; Part 18: http://www.airs.com/blog/archives/55 ; Part 19: http://www.airs.com/blog/archives/56 ; Part 20: http://www.airs.com/blog/archives/57
almost · 2010-03-28
Thanks! I was thinking it was a little lacking in depth with just that one part :)
For the lazy:
Part 1 - http://www.airs.com/blog/archives/38
Part 2 - http://www.airs.com/blog/archives/39
Part 3 - http://www.airs.com/blog/archives/40
Part 4 - http://www.airs.com/blog/archives/41
Part 5 - http://www.airs.com/blog/archives/42
Part 6 - http://www.airs.com/blog/archives/43
Part 7 - http://www.airs.com/blog/archives/44
Part 8 - http://www.airs.com/blog/archives/45
Part 9 - http://www.airs.com/blog/archives/46
Part 10 - http://www.airs.com/blog/archives/47
Part 11 - http://www.airs.com/blog/archives/48
Part 12 - http://www.airs.com/blog/archives/49
Part 13 - http://www.airs.com/blog/archives/50
Part 14 - http://www.airs.com/blog/archives/51
Part 15 - http://www.airs.com/blog/archives/52
Part 16 - http://www.airs.com/blog/archives/53
Part 17 - http://www.airs.com/blog/archives/54
Part 18 - http://www.airs.com/blog/archives/55
Part 19 - http://www.airs.com/blog/archives/56
Part 20 - http://www.airs.com/blog/archives/57