Обновить
103.32

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

CPython — Сборка мусора изнутри, ч.4

Уровень сложностиСложный
Время на прочтение35 мин
Охват и читатели9.3K

Пришло время поговорить о главной функции сборщика мусора в CPython. В предыдущих частях (1, 2, 3) мы говорили о поколениях, инкрементальной и полной сборке мусора — но все они в итоге вызывают главную функцию, которая и реализует основной алгоритм циклического сборщика мусора — находит и разрывает циклы у объектов, которые уже вышли из использования.

В первой статье на тему устройства сборщика мусора я написал, что история началась, когда я попробовал исправить ошибку в CPython. И вот, в четвёртой статье, я наконец‑то добрался до функции, в которой была ошибка.

Если вам интересно, давайте посмотрим, как работает «сердце» сборщика мусора.

Читать далее

Новости

Думал что дебаггер, а на деле HexEdit: Основы работы с опкодами и патчинга для начинающих

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7.5K

Привет Хабр, и всем читающим! Сегодня разберемся в патчинге, в отличиях между ним и дебаггингом, и поймем как пользоваться hex-редактором для реверс-инжиниринга. (И да, я когда писал статью, перепутал термины Debugger и Hex-editor, и только под конец понял что стоит статью изменить, прошу учитывать)

Дисклеймер важен, его пожалуйста прочитать обязательно!

Ну и приятного чтения, господа :-)

Начать Исследование

Синтезатор на PSP с подключением MIDI клавиатуры

Время на прочтение3 мин
Охват и читатели11K

Я сделал синтезатор на PSP с управлением по MIDI! Приложение максимально простое, 4 голоса (квадрат, пила, треугольник, синус), огибающая, фильтр и возможность сохранять 5 пресетов. MIDI клавиатура через классическую схему с оптопарой подключается в PSP's headphone remote (HPRM), тот самый порт рядом с гнездом 3.5мм для наушников.

Читать далее

Делаем приложение на Расте с GUI нестандартным способом

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.8K

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

Читать далее

Рвём call-graph или «Как я самому себе реверс усложнял»

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели6.3K

Так сложилось, что меня всегда интересовала тема реверса, дизассембла и вообще того, как выглядит бинарь изнутри, особенно с точки зрения всяких кряков. Многие пользовались разным софтом, в который уже встроены обходы лицензий, а кто-то, вполне возможно, даже вспомнит тот качевый музон, который воспроизводили всякого рода KeyGen.exe.

Но для того, чтобы крякнуть программу, нужно понять, что и где патчить, и какая функция отвечает за валидацию лицензии. Для этого и существуют программы вроде IDA Pro. Помимо дизассемблирования они умеют генерировать псевдокод на C, строить графы вызовов и много чего еще.

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

Читать далее

ESP32: Подключаем датчик влажности без мам, пап и скетчей

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели13K

Чего только не реализовано на ESP32?

На этом микропоцессоре создано множество интернет и не только вещей. Вот и я уже очень давно хочу приобщиться к IOT, а также дополнительно прокачать себя в низкоуровневом программировании.

Однако ванильные Arduino‑скетчи, коими завалены все туториалы, меня не интересуют. Хочется «настоящего» программирования, сложностей, бессонных ночей, разборов документации и тому подобное...
Потому я выбрал путь изучения ESP32 с помощью C и ESP‑IDF.

С чего же начать? — конечно же метеостанция!

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

Читать далее

Как компьютер понимает Языки программирования: история о том, как ваш код превращается в нули и единицы

Время на прочтение14 мин
Охват и читатели9.9K

Привет, Хабр! (И тебе, случайный читатель, который думает, что "код - это магия", а процессор - маленький гномик, который внутри ноутбука читает for i in range(10) и послушно бегает кругами.)

Сегодня разберёмся с вопросом, который в какой-то момент приходит в голову каждому разработчику, а потом быстро вытесняется дедлайном:

Как вообще компьютер “читает” Python или 1С или любой другой язык программирования, если он понимает только 0 и 1? И почему ваш идеальный код иногда превращается в "segmentation fault" / "Неопределённая ошибка" / “Пользователь не найден (хотя он сидит напротив)”?

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

Поехали. Будет без хардкора уровня “компилятор за 21 день”, но с понятными аналогиями, для статьи упростил всё до минимума. Реально постарался переварить информацию и выдать её в красивой упаковке. Кстати, в статье будут примеры из двух разных миров Python и 1С, так что будет интересно…

Читать далее

BareMetal CI Part 3: Ansible-коллекция для установки инструментов разработчика

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели9.3K

Автоматизируете настройку Linux для embedded-разработки? Я собрал Ansible-коллекцию, которая за пару минут установит arm-none-eabi-gcc, J-Link, can-utils и драйверы PEAK CAN на любую машину. Больше никаких ручных команд и забытых зависимостей — всё одной кнопкой, с поддержкой CI/CD.

Читать далее

Передача JPEG-видео по RTP/UDP на ESP32 (RFC 2435)

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели20K

В этой статье я разберу, как реализовать передачу JPEG-видео по RTP поверх UDP напрямую с ESP32 - так, чтобы поток открывался в VLC и ffplay, без RTSP, FFmpeg и промежуточных серверов.

Читать далее

CPython — Сборка мусора изнутри, ч.3

Уровень сложностиСложный
Время на прочтение24 мин
Охват и читатели8.8K

В прошлых частях мы поговорили о том, как происходит регистрация объектов в сборщике мусора, о том как происходит планирование и вызов сборки мусора, что такое молодое поколение и как устроена для него сборка мусора. В этой части пришло время поговорить об инкрементальной сборке мусора — главному нововведению версии 3.14 в части сборки мусора. Поговорим, как она устроена, какие даёт преимущества и какие имеет недостатки, а также затронем полную сборку мусора.

Если вам интересно, давайте попробуем разобраться.

Читать далее

Разработка конвертера формата кардиограммы ECG в формат EDF

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.1K

В предыдущей статье я разобрался с устройством формата файлов ECG кардиограммы цифрового портативного кардиографа «Кардиан-ПМ». Это было сделано с целью получения доступа к информации о кардиограмме с помощью какого-либо другого ПО. Идея пришла использовать формат EDF – популярный формат временных рядов с открытой спецификацией. Как оказалось, этот формат используют на практике также для хранения кардиограмм. Одна из популярных программ, где можно открыть этот формат, – EDFbrowser. Именно с этой программой я и предпочёл работать.

Читать далее

Ненормальные непотребства, трюки, хаки и алгоритмы на C

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели18K

Доброго времени суток, господа и дамы! Иногда у некоторых людей возникает желание заняться откровенным непотребством в программировании — то, что не несет практической пользы напрямую, но помогает развлечься. И я — не исключение. В этой статье я хочу рассказать вам о лайфхаках, трюках (магических и не очень), алгоритмах на языке C!

Идея написать эту статью зародилась из моего поста, после него я начал серию статей, которая раскрывала много интересных моментов — от математических алгоритмов и оптимизации до ГПСЧ.

Если вы видите на экране эту шестую часть нашей бесконечной саги о ненормальном программировании на C, значит, мы с вами прошли уже немало: от конвертации миль в километры через Фибоначчи до ГПСЧ и быстрых вычислений.

В этой статье будет еще порция свежих хаков, фанов, трюков, еще больше магии и скорости!

Добро пожаловать в шестую часть. Прошу под кат — там будет жарко, быстро и очень, очень интересно.

Читать далее

Конфигуратор микроконтроллеров STM8S103/105

Время на прочтение10 мин
Охват и читатели14K

Разработана программа с целью обучения и быстрого создания программ для управления робототехническими комплексами или электропреобразовательными установками. Программа представляет собой приложение для персонального компьютера (ПК) с операционной системой (ОС) Windows 10 и выше, разрядностью 64-бит, (версия 32-бит проверялась на Windows 7), позволяющее визуально создавать конфигурацию периферийных устройств микроконтроллеров (МК) STM8S103/STM8S105, что позволяет ускорить процесс создания “прошивки” для МК и (или) уменьшить количество ошибок при разработке. Программа по созданной визуально конфигурации, путем выбора из заданных альтернатив, ввода числовых значений и контроля правильности ввода (предупреждает об ошибках), формирует файлы проекта для программирования МК на языках C (с библиотекой SPL или программирование на уровне регистров) и Assembler (язык выбирается в настройках программы). Позволяет сохранить созданную конфигурацию в файл для использования в дальнейшем. Имеется необходимая справочная информация по МК, SPL, C упрощающая создание кода. Созданные файлы проекта можно перед отправкой в IDE редактировать в сразу этой программе.

Скачать программу Конфигуратор микроконтроллеров STM8S103/105.

Читать далее

Ближайшие события

NetBSD и NVIDIA Optimus

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

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

Читать далее

Может ли устареть инкремент: обзор выполнения оператора на современных вычислительных платформах

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели8.9K

Привет, Хабр! В ходе своей работы я часто изучаю сам и обучаю других писать и оптимизировать код. Однако когда я рекомендую в своих материалах «делайте так», я не всегда уверен, что тиражирую актуальную и достоверную информацию.

Для подтверждения своих слов я изучаю и цитирую авторитетные источники, рекомендуемые в подборках книг, материалах конференций и курсах по C и C++.

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

В этой статье мы разберём один из таких примеров. Возьмём небольшой пример кода, сформируем рекомендации по его эффективному написанию и оценим, насколько сложно (и возможно ли вообще) обосновать их применение.

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

Рассмотрим «простой» пример цикла, выполняющего сложение двух массивов. Слово «простой» взято в кавычки не случайно. Даже тезисное обсуждение эффективных методов сложения массивов на GPU (NVIDIA или AMD) с коллегами занимает несколько часов. Полноценно раскрыть эту тему в одной статье невозможно.
Поэтому сосредоточимся лишь на части примера – операции инкремента «i++» в управляющей части цикла.

Для анализа обратимся к книгам, рекомендованным на профильных it-ресурсах: Хабр, Яндекс.Практикум, Proglib и др.

Чтобы уточнить информацию, рассмотрим официальные руководства следующих производителей вычислительных устройств: CISC (Intel, AMD), VLIW (МЦСТ, Texas Instruments), RISC (Apple, Qualcomm, MediaTek и др.) и GPU (NVIDIA, AMD).

Читать далее

А не замахнуться ли нам на Вильяма нашего Аккермана?

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели7.2K

Продолжение статьи о разработке стекового процессора с оригинальной архитектурой.
Здесь мы занимаемся инфраструктурой - ассемблером, компилятором С и эмулятором процессора.

Про функцию Аккермана тоже будет, она используется в качестве теста.
Уж извините за кликбейтный заголовок.

Читать далее

By the pricking of my thumbs, something wicked this way comes

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели6.4K

Эту фразу из «Макбета» Шекспира автор осмелится перевести как «благодаря зуду на кончиках моих пальцев может появиться что‑то очень странное».

Изначально хотелось всего‑лишь ознакомиться с Verilog, но, «опасное это дело, выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесет».

Занесло в сторону процессора с собственной архитектурой. Автор давно неровно дышит в сторону стековых процессоров, здесь так же присутствуют раздельные конвейеры для потоков управления/исполнения и расширяемая упаковка кода.

Надеюсь, это окажется кому‑то полезным, так же как когда‑то автору был полезен игрушечный hoc из книги Кернигана и Пайка «Unix — программное окружение».

Читать далее

ISO 7816-4: пишем файловую систему

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели9.1K

Стандарт ISO 7816 состоит из 15 частей и главным образом нацелен на приведение к общему виду тех отраслей, что используют смарт-карты. Четвертая часть документа описывает логическую структуру файловой системы, получившую широкое распространение: ее можно встретить в идентификационных документах, средствах криптографической защиты информации, в банковском секторе и телекоме.

Читать далее

Программа контроллера сети CAN

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

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

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

В общем «не стреляйте в музыканта, он играет как может».

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

И попытался кратко описать основные моменты программы.

Читать далее

IBM 5150 и разработка под самый первый PC

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели9.6K

Есть много интересных способов провести новогодние праздники, но поскольку я уже старенький — вместо классических алкогольного угара, ведра оливье и просмотра «Иронии судьбы» выбрал себе более редкое и необычное занятие.

Читать далее
1
23 ...