Атомики в Go - это один из методов синхронизации горутин. Они находятся в пакете стандартной библиотеки sync/atomic. Некоторые статьи сравнивают atomics с mutex, так как это примитивы синхронизации низкого уровня. Они предоставляют бенчмарки и сравнения по скорости, например Go: How to Reduce Lock Contention with the Atomic Package.
Рубрика «assembly»
Атомики в Go: особенности внутренней реализации
2023-06-30 в 15:10, admin, рубрики: assembly, atomic, atomics, backend, concurrency, Go, golang, MutexО разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
2023-04-29 в 13:52, admin, рубрики: assembly, bytecode, c++, java, python, python3Цель настоящей статьи - изучить лямбда функции: чем они отличаются от обычных функций и изучить, как они реализованы в С++, Python 3 и Java.
На протяжении этой статьи я буду использовать godbolt.org, чтобы компилировать код и изучать машинный код или байт код. Я думаю, что при чтении статьи может быть удобнее смотреть не на приведённый машинный код в статье, а на этом сайте.
C++
Имплементация маппера MMC1 ассемблер 6502 nes-famicom-dendy
2023-03-10 в 21:35, admin, рубрики: 6502, assembly, dendy, Famicom, mmc1, NesИгры не использующие мапперы в NES ограничены, 16 кб PRG ROM (хранилище программного кода) и 8 кб CHR ROM (хранилище графики). С развитием разработки игр на NES, встал вопрос, а как увеличить данные ограничения и на помощь пришли микросхемы мапперы. Что же такое мапперы мы и разберем сегодня и как их использовать в своем коде.
Что такое мапперы?
Трясём стариной — или как вспомнить Ассемблер, если ты его учил 20 лет назад
2021-09-23 в 13:00, admin, рубрики: assembly, ruvds_статьи, ассемблер (x86), ассемблер для начинающих, Блог компании RUVDS.com, ламповый код, ненормальное программирование, программирование микроконтроллеров, системное программированиеВнутренности Go: оборачиваем переменные цикла в замыкании
2019-09-26 в 10:01, admin, рубрики: assembly, AST, compilers, Go, programming languages, Блог компании Badoo, высокая производительность, замыкания, Программирование, указатели
Сегодня я решил перевести для вас небольшую статью о внутренностях реализации так называемых замыканий или closures. В дополнение вы узнаете о том, как Go пытается автоматически определить, нужно ли использовать указатель/ссылку или значение в разных случаях. Понимание этих вещей позволит избежать ошибок. Да и просто все эти внутренности чертовски интересны, как мне кажется!
А еще я хотел бы пригласить вас на Golang Conf 2019, которая пройдет 7 октября в Москве. Я член программного комитета конференции, и мы с коллегами выбрали много не менее хардкорных и очень, очень интересных докладов. То, что я люблю!
Под катом передаю слово автору.
Встраиваемые функции в Go
2019-09-16 в 21:16, admin, рубрики: assembly, Go, golang, ida, дизассемблирование, низкоуровневое программирование
Go позволяет писать на ассемблере. Но авторы языка написали такую стандартную библиотеку, что бы этого делать не пришлось. Есть способы писать переносимый и быстрый код одновремено. Как? Добро пожаловат под cut.
Читать полностью »
Индексаторы в C# под капотом: индексируем лучше Доу-Джонса
2019-05-13 в 7:01, admin, рубрики: .net, assembly, benchmark, C#, высокая производительность, индексатор, производительностьДоброго времени суток. В данной статье я предлагаю ознакомиться с индексаторами в различных типах. Посмотрим код языка ассемблера для данных индексаторов и характеристики каждой инструкций по ее скорости. Также я предложу несколько очевидных выводов. Но что именно использовать в конкретно вашей ситуации решать вам — стоит ли жертвовать удобством ради скорости или наоборот.
Адаптация программ для ZX Spectrum к TR-DOS современными средствами. Часть 1
2019-05-11 в 1:35, admin, рубрики: assembly, retrocomputers, Z80, zx spectrum, защита информации, Программирование, реверс-инжиниринг, старое железоВ отличие от современных компьютеров, на спектрумах понятия файловой системы не было как такового. Это значит, что загрузка с каждого типа носителя требовала отдельной реализации и в большинстве случаев программу нельзя было просто так скопировать с кассеты на дискету. В случаях, когда загрузчик программы был написан на бейсике, его можно было адаптировать к TR-DOS довольно простой доработкой. Однако ситуация осложнялась тем, что во многих играх (как фирменных так и взломанных) загрузчики были написаны в машинных кодах и иногда содержали защиту от копирования.
Несмотря на наличие «волшебной кнопки», которая просто делала полный дамп памяти компьютера и позволяла хоть как-то сохранить программу на дискету, среди специалистов считалось хорошим тоном создавать дисковые версии игр с сохранением оригинальной загрузочной картинки и прочих атрибутов.
В этой статье я расскажу, как выполнить такую адаптация на примере игры Pac-Man, а именно, оригинального образа Pac-Man.tzx.
История взлома классической игры на Dendy или Contra со спрэдганом в начале
2019-04-17 в 11:14, admin, рубрики: 6502, assembly, Nes, reverse engineering, romhacking, Игры и игровые приставки, реверс-инженеринг, реверс-инжиниринг, реверс-инжиниринг для новичковРаз уж прошлая моя статья, к моему большому удивлению, вас заинтересовала. Я решил дополнить её результат, хакнутую версию игры "Contra (J) [T+Rus_Chronix]", небольшим функционалом, заодно показав "code injection" на NES. В этот раз я сделаю так, чтоб игроки начинали игру с прокачанным Spreadgun, для его получения в игре нужно подобрать иконку "S", а за ней "R".
Все заинтересовавшиеся welcome под кат.Читать полностью »
Low-level Brainfuck
2018-11-03 в 19:12, admin, рубрики: assembly, Brainfuck, interpreter, Pascal, tasm, ПрограммированиеBuilding a Brainfuck translator in TurboAssembler.
To begin with, we will write an interpreter in a high-level language, for example, in Pascal.
Let's write a program that outputs a character whose ascii-code corresponds to the number of +
Therefore, we only need the bf-commands + and .
var
data_mem: array[1..10] of integer; // data array
command_mem: string; // command array
i: integer; // index of command array
j: integer; // index of data array
begin
j:=1;
readln(command_mem);
for i:=1 to length(command_mem) do begin // in the cycle we process the string
if (command_mem[i]='+') then data_mem[j]:= data_mem[j]+1;
if (command_mem[i]='.') then write(chr(data_mem[j]));
end;
end.
bf-code +++++++++++++++++++++++++++++++++. will issue !
(the ascii-code of the symbol ! is 33).
The efficiency of the program can be checked in online ide ideone.com.
Читать полностью »