2016-01-13 3 views
3

I read, что из Go 1.4 время выполнения Go записывается в самом Go (а не в C).Как возможно, чтобы время выполнения Go было записано в Go?

Как это возможно? Если программы Go работают поверх среды выполнения, а среда выполнения - это программа Go, выполняется ли среда выполнения поверх себя?

+2

Этот вопрос может быть полезен: [Написание компилятора на своем языке] (http://stackoverflow.com/q/193560/142162) –

+0

@TimCooper - Спасибо, это полезно. Кажется, что писать компилятор для языка на этом языке возможно, потому что, как только он загрузится, компилятор сможет скомпилировать себя. Однако мне кажется невозможным, что среда выполнения может поддерживать себя: например, может ли сборщик мусора собирать собственный мусор? – user200783

+1

Почему трудно понять, что язык может использовать библиотеки (и фреймворки), написанные на том же языке (и скомпилированные этим же компилятором)? И почему бы это сделать не так, чтобы он мог сделать свою собственную сборку мусора, как и все остальное, используя этот язык? –

ответ

3

Вкратце: тщательно.

В течение длительного времени: небезопасный пакет позволяет выполнять арифметические операции с указателем и произвольные отбрасывания, необходимые для реализации go gc. Вы избегаете использовать gc в коде gc go так же, как и в обычном коде go: используя данные из стека или статического кода. В приведенной ниже ссылке упоминается, что компилятор mainline go обеспечивает это во время выполнения через недокументированную опцию. Некоторые биты сборки позволяют создавать системные вызовы, что позволяет вам делать все от процессов нереста до открытия файлов.

В более длинном и более авторитетном издателе: см. Ian Lance Taylor (of the go team)'s post on golang-nuts.

Смежные вопросы