/dev/stdout – Telegram
/dev/stdout
3.99K subscribers
18.9K photos
2.57K videos
74 files
3.15K links
cat /dev/random
Download Telegram
Forwarded from lox (laptopcat)
🍌1
Forwarded from #HEX • IT
Компилятор Go генерирует абстрактный, портируемый ассемблер, который не привязан к конкретному оборудованию. Следовательно, сборщик Go использует этот псевдоассемблер для создания инструкций, специфичных для целевого оборудования.

Go позволяет использовать ассемблерные вставки в коде. Написание функций на ассемблере прямо в Go не так уж сложно, как кажется. В качестве примера, рассмотрим функцию sum, которая складывает два int64:

func sum(a int64, b int64) int64

Хотя это стандартная функция, в ней отсутствует тело. Поэтому компилятор выдаст ошибку при попытке сборки программы.

Для реализации функции на ассемблере добавим файл с расширением .s:

text sum(sb),$0-24
movq a+0(fp), ax
addq b+8(fp), ax
movq ax, ret+16(fp)
ret

Теперь мы можем собрать, протестировать и использовать функцию sum как обычную. Этот подход широко применяется в различных пакетах, таких как runtime, math, bytealg, syscall, reflect, crypto, позволяя использовать аппаратные оптимизации процессора и команды, отсутствующие в самом языке. Во многом благодаря этому можно создать полноценное ядро операционной системы.

Однако следует учитывать, что функции на ассемблере не могут быть оптимизированы и встроены компилятором. Для обхода этого ограничения разработчики создали встраиваемые функции.

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

Встраиваемые функции представляют собой элегантное решение, предоставляющее доступ к низкоуровневым операциям без необходимости расширения спецификации языка. В случае отсутствия специфических примитивов sync/atomic (например, в некоторых вариантах arm), или операций из math/bits, компилятор будет вставлять полифил на обычном Go.
58👍2🖕2
🥰102
/dev/stdout via @pic
Photo
domest os
👍1🤣1
/dev/stdout via @pic
Photo
7🤮2
Forwarded from lox (laptopcat)
🔥2💋1
7😭5
👍7
🤡1
Forwarded from Nimah 𒉭
FAGMAN

Facebook
Apple
Google
Microsoft
Amazon
Netflix
👍5
😁3
Bnny
👍1
Forwarded from bnuuyzone
3💘1
Forwarded from Склад Клюкыча (Клюква)
😐41