Обложка поста

Подборка книг о компиляторах и обо всем, что с ними связано

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

«Шелл» на С: пишем командную оболочку для Unix

Многие считают, что сделать программу, которой будут пользоваться миллионы, очень трудно. Однако за любым, даже самым сложным, продуктом всегда стоит простая идея. Одним из них является командная оболочка, или «шелл». В этой статье мы расскажем, как написать упрощенную командную оболочку Unix на C.

Компилятор Си в одну инструкцию: обзор инструмента M/o/Vfuscator

M/o/Vfuscator компилирует программы в инструкции mov, и только в них. Инструмент ориентирован на язык Си и архитектуру процессора x86, но адаптивен и легко настраивается под другие языки и архитектуры.

Обложка поста

Как создать свою операционную систему с нуля

Книга «Операционная система с 0 до 1» опубликована на GitHub и имеет более 2 000 звездочек и 100 форков. Как понятно из названия, прочитав её, вы сможете создать свою собственную…

Обложка поста
Обложка поста

Как работать с бинарными данными для создания своего собственного формата файлов

В этой статье мы поговорим о том, как можно считывать и записывать двоичные данные. В руководстве мы будем использовать псевдокод, но вы можете писать на любом удобном языке программирования, который…

Хитрости с битовыми операциями

Нашли и оформили подборку различных хитрых приёмов с битовыми операциями. С основами битовых операций также можно ознакомиться в нашей статье. Если вы знаете какие-то трюки, которые не вошли в этот список…

Обложка поста
Обложка поста

Руководство по созданию ядра для x86-системы. Часть 2. Система ввода / вывода

Рассказывает Arjun Sreedharan  В прошлой статье я писал о том, как создать простейшее x86-ядро, использующее GRUB, работающее в защищённом режиме и выводящее на экран строку. В этот раз мы подключим к ядру драйвер…

Руководство по созданию ядра для x86-системы. Часть 1. Просто ядро

Рассказывает Arjun Sreedharan  Давайте напишем простое ядро, которое можно загрузить при помощи бутлоадера GRUB x86-системы. Это ядро будет отображать сообщение на экране и ждать. …

Обложка поста
Обложка поста

«Гарантия корректности» как методика обхода багов

Вам когда-нибудь приходилось гарантировать корректность выполнения своей программы? На самом деле это большой объем работы, который не всегда возможно выполнить. В самих доказательствах могут быть ошибки, об этом говорится и…

Викторина: проведет ли компилятор GCC эти оптимизации?

Посмотрим, как хорошо вы знаете способности GCC оптимизировать код. Эта викторина содержит 6 вопросов, в каждой по две вставки кода. Первая вставка иллюстрирует код до некой оптимизации, вторая — после нее.

Обложка поста

На чём пишут в NASA?

Вопрос: в NASA пишут на Python’е? …

Обложка поста

Советы по языку программирования Си: 10 полезных приемов

Си — это один из самых важных и широко распространённых языков программирования. Его можно использовать не только для общих целей, но и для написания низкоуровневых программ, работающих с «железом». Си…

Обложка поста

В Сети появилась серия статей-руководств по созданию собственной ОС на ассемблере и Rust

Предлагаем вашему вниманию серию англоязычных статей, опубликованную в блоге Филиппа Опперманна. В ней подробно разбирается процесс разработки собственной 64-битной ОС на ассемблере и Rust. Серия пополняется, но на основе уже написанных статей можно написать достаточно функциональную операционную…

Обложка поста

Важность C при обучении программированию

Рассказывает Афзал Ахмед Зишан Введение Программирование — процесс создания разработчиком софта, который бы запускался на компьютере и решал конечное количество проблем. Люди занимались программированием с тех пор, как были изобретены…

Хитрости с битовыми операциями на примере языка Си

В случае, когда производительность критична, можно использовать различные средства оптимизации вычислений. Одним из таких средств являются битовые операции (если алгоритм уже не подразумевает их использование). Например, координаты в двухмерном пространстве…

Обложка поста

Структура исполняемого файла Windows

Иногда полезно знать, что находится в бинарнике вашей программы, и во что превращается исходный код во время компиляции. На этой диаграмме показана структура исполняемого фала Windows, также известного как Portable…

Оператор GOTO в Python

Оператор GOTO не ругал только ленивый. Тем не менее, это инструмент, и польза или вред от него определяется только тем, как его используют.

Обложка поста

Сравнение интерпретатора, обычного и JIT компиляторов

Рассказывает автор блога Nick Desaulniers Интерпретаторы и компиляторы — программы, которые используются для трансляции или запуска других программ. Интерпретируемые программы пишутся на языках вроде JavaScript, Ruby, Python, PHP и Perl.

Оптимизация в GCC — ответы на вопросы викторины

Рассказывает автор блога ridiculousfish.com В этой статье даны ответы на 6 вопросов из викторины по оптимизациям компилятора GCC. В каждом по две вставки кода. Первая вставка иллюстрирует код до некой оптимизации, вторая…

Обложка поста

Почему большинство высокоуровневых языков медленно работают

Последние пару месяцев мне часто задают этот вопрос, поэтому я решил ответить на него статьей. Причин, по которым большинство высокоуровневых языков программирования медленно работают, обычно две: они плохо работают с…

Величайшая программа из когда-либо написанных

Как вы думаете, какую из существующих программ можно назвать самой великой? Можете ли вы сказать про одну из своих программ, что она круче всех остальных? Есть мнение и, прямо скажем, далеко не…

Обложка поста

Искусство упаковки структур в C

От переводчика Объем памяти и скорость процессора стремительно растет. Старые техники оптимизации применяются все меньше, и, в конце концов, забываются. Однако иногда возникают ситуации, когда опыт прошлых лет становится бесценным.

Обложка поста
Обложка поста

Самоизменяющаяся программа на C под x86_64

Зачем вообще может понадобиться писать программу, которая меняет свой код во время выполнения? Это ужасно! Да, да, я знаю. И все-таки, зачем? Ну, например, это хороший учебный пример. Но главная…

Объясните, что делает код ((n & (n — 1)) == 0)

Вернемся к «истокам». Что означает A & B == 0? Это означает, что А и B не содержат на одних и тех же позициях единичных битов. Если n & (n…

Обложка поста

Dead beef

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

Обложка поста

Обычно main — это функция. Но всегда ли это так?

Идея написать эту статью пришла мне в голову, когда одного из моих коллег заставили пройти начальный курс по CS в моем университете. Мы с ним искали способ написать корректную программу…

Обложка поста