TGViewer
BASCODE BASCODE @bascodech · 140 subscribers
Post #36 250
Как Go написан на Go, или История одного парадокса.

Сегодня коллега задал вопрос, который заставил меня улыбнуться: "Как вообще может быть, что Go написан на Go?" И правда, звучит парадоксально, но за этим стоит красивая инженерная история.

Изначально компилятор Go был написан на C. Кен Томпсон и команда начали именно так в 2007 году, используя yacc для парсера. Это логично... Нужно же было с чего-то начать. Первые версии Go (с 1.0 до 1.4) компилировались именно C-компилятором. Но у команды был план.

В 2013 году началась большая работа по переписыванию компилятора на сам Go. Процесс был хитрый: сначала написали транслятор, который автоматически переводил C-код в Go-код, затем постепенно рефакторили и переписывали части вручную. К версии 1.5 (август 2015) компилятор Go полностью стал self-hosted, то есть написан на том же языке, который компилирует.

Зачем это было нужно? Во-первых, dogfooding. Команда Go теперь сама использует свой язык для самых критичных компонентов, что заставляет делать его лучше. Во-вторых, барьер входа для контрибьюторов резко снизился, не нужно знать C, чтобы улучшать компилятор Go. В-третьих, все оптимизации и улучшения языка автоматически ускоряют и сам компилятор.

Я регулярно заглядываю в исходники компилятора, чтобы понять, как работают сложные вещи и как пишут код лучшие умы. И знаете что? Код там удивительно читаемый! Это отличный пример того, как писать на Go правильно, просто, понятно и эффективно.

P.S. Кстати, процесс, когда компилятор языка написан на самом языке, называется bootstrapping. И да, для первой компиляции нового компилятора Go вам всё ещё нужна предыдущая версия Go. Вот такая рекурсия 🔄
  • 🔥 4
More from @bascodech
  1. Sep 18, 2026Мысли про дебаггинг и IDE в 2026 Вот интересная история... Расс Кокс выложил пять сессий,…
  2. Sep 14, 2026Кодить без AI сейчас как заниматься айкидо. Красиво и глубоко и десять лет до черного пояс…
  3. Sep 7, 2026Выложил свой statusline для claude code в публичный репозиторий. Лимитов у подписки три: п…
  4. Sep 5, 2026Рубрика "лысая мудрость" Как я больше года храбро готовился, но так ничего и не сделал. Вт…
  5. Sep 2, 2026Распаковал 30 релизов Go подряд, 2.9 ГБ исходников. Ради одного вопроса. Вопрос такой: поч…
  6. Aug 29, 2026Сегодня у кого-то будет распаковка :-)
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →