Банально не писать в одну строку подобный код.
А для того, что бы его не писали, в конечном итоге язык не должен содержать конструкций, которые позволяют так писать. В этом случае Go — хороший язык, в нем нет подобных конструкций
Да, и для «добивания» удобочитаемости в комплекте к компилятору Go идут gofmt + govet + golint, которые не только помогут отформатировать код согласно гайдлайну, но и проведут статический анализ (приятный бонус)
У нас есть функция на asm __unsafe_get_addr
В указанном нами коде мы говорим линкеру и компилятору, что когда происходит вызов getAddr нужно вызывать __unsafe_get_addr
Весь код на Go вроде бы понятен, даже если б не было комментариев ввиду предельной простоты синстаксиса. Makefile и link.ld — тема не для данной статьи, слишком объемно выйдет. Что касается кода на асме — это немного модифицированный пример из доков multiboot, все изменения указаны. Второй кусок кода на асме описывается под ним.
По большому счету на данный момент Вы правы. Однако не забывайте, на данный момент код работает на той стадии, когда рантайм Go просто не применим, по причине его отсутсвия. Даже если бы разработка велась на C, то на данном этапе и от него были бы лишь только название да немного синтаксиса.
Да, насколько мне известно, понимаете правильно, Garbage Collector отключен, так-же как и весь рантайм, т.е. при такой разработке надо вручную заботится о памяти. Если будет продолжение, то будет описанно и управление памятью в том числе.
(Пример был общим, с некоторым уклоном в ruby)
А для того, что бы его не писали, в конечном итоге язык не должен содержать конструкций, которые позволяют так писать. В этом случае Go — хороший язык, в нем нет подобных конструкций
Да, и для «добивания» удобочитаемости в комплекте к компилятору Go идут gofmt + govet + golint, которые не только помогут отформатировать код согласно гайдлайну, но и проведут статический анализ (приятный бонус)
.map(?:?: rescue) rescue
Завидую Вам
Вроде правильно отформатировал
Если написать в общем виде то
Приводит к сворачиванию функции internal_name, в функцию external_name. При этом internal_name может быть множество на единственную external_name
P.S. абстрактный пример в вакуме
В указанном нами коде мы говорим линкеру и компилятору, что когда происходит вызов getAddr нужно вызывать __unsafe_get_addr