Как стать автором
Поиск
Написать публикацию
Обновить
70.59

Системное программирование *

Обеспечение работы прикладного ПО

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

Rust 1.84.0: MSRV при выборе зависимости, новый резолвер трейтов и API для отслеживания происхождения указателей

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.5K

Команда Rust рада сообщить о новой версии языка — 1.84.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.84.0 вам достаточно выполнить команду:


$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →

Детали протокола управления блоком питания Fnirsi DPS-150

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

В предыдущей статье я начал разбирать протокол управления блоком питания Fnirsi DPS-150. Там был разобран формат посылки, были выявлены команды и отклики на них, а также сделан черновой анализ внутренностей фирменной программы управления блоком. Детали процесса я обещал показать позже. Вот, эта пора настала. Сегодня мы получим настолько полные таблицы команд и откликов, насколько это требуется для реальной работы.

Читать далее

Chisel вместо Verilog, искажение тактового дерева и прототипирование ASIC: прокачиваем FPGA-скилы новыми темами

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.9K

Осенью мы в YADRO совместно с сообществом FPGA Systems собрали FPGA-энтузиастов сразу в двух городах — Москве и Санкт-Петербурге. Получилось почти 12 часов докладов — по проектированию на FPGA и ASIC, альтернативным HDL, запуску GPU AMD на ПЛИС с RISC-V, искажению времени и другим фантастическим явлениям темам. Самые полезные, по мнению зрителей, — в этом посте.

Читать далее

Можно ли собрать в одном большом гайде всё, что полезно знать о языке C и его применениях

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

Мне показалась очень интересной тема открытая в недавней статье

Собрал в одном большом гайде всё, что хотел бы знать, когда изучал язык C

 Во вступлении там написано:

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

Мне кажется полезно все таки обозначить в каком смысле язык C — это основа, и чем он обеспечивает фундамент. Я рад что имею возможность сформулировать что-то в данном направлении не со слов иностранного авторитета, а не базе собственного опыта который, тем не менее, формировался на основе анализа-применения действующих решений-теорий сформулированных во многом иностранными специалистами, но надеюсь с примесью собственной креативности в какой-то степени. Ну и хочется озвучить свой ответ на вопрос: "Когда C — идеальный выбор?", может в интерпретации: "А бывает ли язык Си идеальным выбором?"

По моему, тема очень полезная, хотелось бы увидеть и поддержать ее развитие.

Читать далее

Как я собственный язык на КуМире писал

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

Привет, Хабр!

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

(картинка позаимствована с одного из официальных туториалов)

Читать далее

Honey — я устал #2

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

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

Читать далее

Давайте уже на праздниках: проводим каникулы как инженер

Время на прочтение1 мин
Количество просмотров4.8K

Что делать, когда селедку под шубой уже доели, а за работу садиться еще рано?

Мы позаботилась о ваших планах на новогодние каникулы. Собрали семь инженерных дел, с которыми праздничные дни пройдут познавательно и продуктивно. Для удобного планирования подготовили чек-лист — скачивайте, переходите по ссылкам и выбирайте дело по душе.

Читать далее

Толкаем байты, или Простейший эмулятор своими руками

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров12K

Есть хороший способ начать свой путь в системное программирование: написать эмулятор и ассемблер для какого-нибудь простого процессора. Сегодня популярностью в узких кругах пользуются fantasy consoles: виртуальные игровые приставки в ретродухе. Я расскажу, как создать свой вариант виртуальной приставки BytePusher с процессором, имеющим всего одну команду. Если вы интересуетесь системным программированием, любите изучать необычные архитектуры процессоров или цените произведения из области демосцены, то эта статья для вас.

Читать далее

WireGuard и QUIC

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров26K

Когда мы хотим защитить передаваемые данные, мы используем VPN. Но иногда хочется, чтобы и сам факт использования VPN, тоже был бы скрыт. Мы настолько переживаем за свои данные:)

Так как сейчас очень популярным стал WireGuard, он основан на UDP. А из популярных UDP протоколов, которые могут через себя прокачивать большой трафик, это QUIC. Это совмещение TCP и TLS, основанное на UDP. Поэтому естественной мыслью стала мимикрировать WireGuard трафик под QUIC трафик. Для этого пришлось изучить код WireGuard в ядре Linux. Код патча ядра Linux лежит на QUICWireGuard.

Читать далее

В тихом омуте… или интересный режим работы смартфона OnePlus 6T

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

Несколько лет назад один из членов нашей команды заказал себе OnePlus 6T прямо из Китая. Телефон пришел в оригинальной упаковке и типовой комплектации: с зарядным устройством, кабелем и чехлом. Смартфон без проблем проработал год, ничем, на первый взгляд, не отличаясь от тех, что продаются в России.
Но однажды приложения начали предупреждать о наличии root-доступа, а некоторые, особенно банковские, вообще перестали запускаться. При этом прошивка никаким образом не модифицировалась, а обновления устанавливались исключительно из официальных источников, относящихся к ОС. Такое странное поведение смартфона побудило нас провести исследование, результаты которого описаны в этой статье.

Читать далее

Будущее PostgreSQL: как 64-битный счетчик транзакций решает проблему масштабирования

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров13K

Много лет в комьюнити PostgreSQL никто не верил что эта СУБД в принципе может использоваться в системах с большой транзакционной нагрузкой. То есть, какие-то тестовые лаборатории, бэкенд веб-приложений средней руки и так далее — вот его типичные задачи. А когда нужна серьёзная нагрузка, это уже надо брать СУБД за много денег и не сомневаться. Ну и раз никто не верил, то и не развивал особенно его в эту сторону, оставляя всё больше повисших в воздухе вопросов.

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

Читать далее

Немного об отладке. Часть 2

Уровень сложностиСредний
Время на прочтение116 мин
Количество просмотров4K

Приветствую еще раз.

Это 2 часть небольшой статьи об отладчиках. В прошлой мы разобрали базу: инструкции + системные вызовы, написали свой отладчик, препарировали gdb и смотрели на отладку в высокоуровневых ЯП со своим рантаймом.

В этой мы посмотрим на процесс отладки в IDE изнутри, а потом пойдем еще глубже...

Путешествие на остальные 20 минут

Немного об отладке. Часть 1

Уровень сложностиСредний
Время на прочтение127 мин
Количество просмотров7.8K

Приветствую.

Вы когда нибудь отлаживали программы? Не врите, что нет. Благодаря отладчикам наши программы работают корректно (или хотя бы близко к этому).

Но вот знаете ли вы как отладка устроена: точки останова, шаги, бэктрейс, чтение переменных?

Нет или да - ответ не важен. Эта статья даст ответы на многие вопросы об отладке, которые вы, возможно, и не задавали себе.

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

Путешествие на 20 минут

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

Безразличие к регистру — ошибка на миллиарды долларов

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров4K

К данной статье я намеренно переиначил популярный в некоторых кругах заголовок ("Billion dollar mistake" про null как значение ссылок/указателей). Старое цепляется за своё зубами и когтями. Новое приходит в новые ниши и уже не имеет этих проблем. Но без их рассмотрения мы рискуем повторять прежние ошибки...

И шо мы имеем с гусь?

Дрю ДеВолт — автор языка Hare и платформы кодохостинга SourceHut

Время на прочтение6 мин
Количество просмотров3.4K
Дрю ДеВолт объясняет, что веб-интерфейс Github.com требует множества лишних действий. Гораздо эффективнее использовать консольный почтовый клиент, отправляя тот же пулл-реквест одной командой из консоли

Американский разработчик Дрю ДеВолт (Drew DeVault) известен как создатель и исполнительный директор платформы для хостинга проектов SourceHut, которую Фонд сохранения свободы ПО выбрал как альтернативу майкрософтовскому сервису GitHub (наряду с CodeBerg) в рамках кампании Give Up GitHub по уходу свободных проектов с этого коммерческого хостинга, задача которого — генерировать продажи Copilot.

ДеВолт также известен как автор нового языка системного программирования Hare, который похож на С, только лучше и проще его.
Читать дальше →

Самые быстрые страусы: выбираем способ организовать обмен прерываниями между машинами QEMU c KVM и без

Уровень сложностиСложный
Время на прочтение21 мин
Количество просмотров4.3K

QEMU позволяет эмулировать работу не только одной отдельной машины, но и связывать несколько независимых машин между собой. Для организации такой связи их обычно объединяют в одну сеть, например с использованием virio-net-pci. Но виртуальный ethernet — не единственный способ, связь может быть и более близкой и плотной: общая память и mailbox, линии gpio и даже NTB.

Быстрая работа связанных QEMU машин приятна при разработке/отладке и очень важна при массовом прогоне автотестов в CI: нужна как высокая пропускная способность, так и низкая задержка передачи сообщения. Для одной из задач с коллегами из отдела системного программирования YADRO я оптимизировал часть такой связки, а именно — обмен прерываниями. В статье расскажу о дизайне нескольких подходов организации IQI, разберу внутреннее устройство QEMU и поделюсь, как оправдались наши ожидания. 

Читать далее

Rust 1.83.0: новые возможности констант

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

Команда Rust рада сообщить о новой версии языка — 1.83.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.83.0 вам достаточно выполнить команду:


$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →

Стабилизируем положение потенциометра, считанное с АЦП

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров8.7K
Считать показания потенциометра для удобного аналогового управления системой, что может быть проще? Сеть завалена примерами работы с АЦП. Считали значение, вот мы и знаем положение… Но не всё так просто – эти значения всё время будут разными. Близкими, но разными. То есть, программа будет считать, что положение головки регулятора всё время дрожит.



В статье будет показано несколько методов борьбы с этими дрожаниями, начиная от самых простых (которые в подавляющем большинстве случаев достаточны), через более сложные и вплоть до алгоритма, придуманного специально для недавнего проекта. Наверняка, я уже 100500-й, кто такой алгоритм придумал, но после опроса знакомых, оказалось, что в списке тех, кто его собирается опубликовать, мой номер значительно меньше. Среди типовых он не находится. Возможно, кому-то он тоже окажется полезным.
Читать дальше →

Поревьюим и порефакторим — Ассемблер для любопытных #2

Время на прочтение12 мин
Количество просмотров3.3K

Ещё статья про ассемблер для тех кто с ним не знаком. В предыдущей про 5 ассемблеров последний примерчик вызвал критику за "упрощенизм". А давайте посмотрим вместе как его улучшить и немножко нарастить - в качестве "продолжения знакомства".

Заодно полюбуемся на несовместимость Linux и BSD, а также на различие 32 и 64-битной версии обеих ОС - и подумаем как с этим бороться.

Автор не претендует на непогрешимость, поэтому приглашаем умудрённых коллег делиться идеями и подсказками в комментариях если что упущено.

cmpb $0, (%eax)

Ответ на статью о «Наиболее быстром интерпретаторе»

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

Недавно была опубликована статья под заголовком "Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода". Несколько тезисов из статьи вызвали у меня сомнения в их справедливости. Об этом я попробовал написать ряд комментариев тире вопросов к указанной статье. Но основной лейтмотив всех ответов сводился к тому - "а ты напиши свою статью". Подход не столько инженерно-научный, сколько детсадовский. Мне бы хватило и содержательных ответов в формате комментариев, но как говорится - уговорили :).

Итак, что же утверждается автором статьи про наиболее быстрый интерпретатор:

Читать далее

Вклад авторов