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

20

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

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

1 ответ

41

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

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

  

Существуют две официальные цепочки инструментов компилятора Go. Этот документ фокусируется   на компилятор gc Go и инструменты (6g, 8g и т. д.). Информацию о том, как   для работы с gccgo, более традиционным компилятором, использующим задний конец GCC,   см. Настройка и использование gccgo.

     

Компиляторы Go поддерживают три набора инструкций. Существуют важные   различия в качестве компиляторов для разных   архитектуры.

     

amd64 (a.k.a. x86-64); 6g, 6l, 6c, 6a   Зрелая реализация.   компилятор имеет эффективный оптимизатор (регистратор) и генерирует хорошие   кода (хотя иногда gccgo может заметно улучшить).

     

386 (a.k.a. x86 или x86-32); 8g, 8л, 8с, 8а   Сравнение с портом amd64.

     

arm (a.k.a. ARM); 5g, 5l, 5c, 5a   Поддерживает только двоичные файлы Linux. Менее широко используется, чем   другие порты и, следовательно, не прошли тщательную проверку.

     

За исключением   такие как код интерфейса операционной системы низкого уровня, время выполнения   поддержка одинакова во всех портах и ​​включает мусор маркировки и разметки   коллектора, эффективного массива и нарезки строк и поддержки для   эффективные горуты, такие как стеки, которые растут и сокращаются по требованию.

     

Компиляторы могут ориентироваться на FreeBSD, Linux, NetBSD, OpenBSD, OS X   (Darwin) и операционных систем Windows. Полный набор поддерживаемых   комбинации перечислены в обсуждении переменных среды   ниже.

На сервере вы обычно будете нацеливаться на платформу 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