Является ли Googles GOLANG интерпретатором или компилятором?

21

Я изучал Голанг и вижу, что у него есть компилятор. Но компилируется ли он в код уровня сборки или просто конвертируется в BYTECODES, а затем вызывается эта компиляция? Я имею в виду, что даже в PHP мы можем преобразовать его в BYTECODES и повысить производительность. Является ли golang ЗАМЕНА для системного программирования и компиляции?

    
задан Daniel Li 03.09.2012 в 15:37
источник

1 ответ

42

Это действительно компилятор (фактически он включает 2 компилятора) и делает полностью самодостаточные исполняемые файлы. Вам не нужна никакая дополнительная библиотека или какая-либо среда выполнения для ее запуска на вашем сервере. Вам просто нужно скомпилировать его для архитектуры вашего целевого компьютера.

Из документации :

There are two official Go compiler tool chains. This document focuses on the gc Go compiler and tools (6g, 8g etc.). For information on how to work on gccgo, a more traditional compiler using the GCC back end, see Setting up and using gccgo.

The Go compilers support three instruction sets. There are important differences in the quality of the compilers for the different architectures.

amd64 (a.k.a. x86-64); 6g,6l,6c,6a A mature implementation. The compiler has an effective optimizer (registerizer) and generates good code (although gccgo can do noticeably better sometimes).

386 (a.k.a. x86 or x86-32); 8g,8l,8c,8a Comparable to the amd64 port.

arm (a.k.a. ARM); 5g,5l,5c,5a Supports only Linux binaries. Less widely used than the other ports and therefore not as thoroughly tested.

Except for things like low-level operating system interface code, the run-time support is the same in all ports and includes a mark-and-sweep garbage collector, efficient array and string slicing, and support for efficient goroutines, such as stacks that grow and shrink on demand.

The compilers can target the FreeBSD, Linux, NetBSD, OpenBSD, OS X (Darwin), and Windows operating systems. The full set of supported combinations is listed in the discussion of environment variables below.

На сервере вы обычно выбираете платформу amd64 .

Обратите внимание, что Go хорошо известен своей скоростью компиляции. При развертывании своих серверных программ я не создаю для разных платформ на компьютере разработчика: я развертываю исходные коды и компилирую непосредственно на рабочих серверах. Начиная с Go1 у меня никогда не было кода, компилируемого на одной платформе и не компилируемого на другой.

В Windows у меня не было проблем с созданием exe на моем компьютере для разработки и простой отправкой этого exe людям, которые никогда не устанавливали ничего, связанного с Go.

    
ответ дан Denys Séguret 03.09.2012 в 15:47
  • Таким образом, он не преобразовывает его в байт-коды и фактически компилирует. –  Sep 3 '12 at 13:50 03.09.2012 в 15:50
  • Да. он компилируется точно в том же смысле, что и любая программа C скомпилирована. Все статически связано. –  Denys Séguret 03.09.2012 в 15:51
  • Может ли он выводить код .S для того, что он генерирует? –  Skaperen 03.09.2012 в 19:05
  • @Skaperen @nos. Вы можете передать -S компилятору, чтобы увидеть код сборки. go build -gcflags -S будет запускать компилятор, передавая -S для сборки сборки. Вы также можете вызвать компилятор напрямую, например. go tool 8g -S <source.go> –  axw 04.09.2012 в 03:37
  • @ProgramCpp 'runtime' встроен в exe. –  Winger Sendon 13.03.2018 в 18:40