Обновить
64K+

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

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

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

Заводим C++ корутины на микроконтроллере

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

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

Недавно я обнаружил что LLM агенты уже могут реализовывать довольно сложные задачи самостоятельно с неплохим качеством кода.

И тут я понял - чего бы не попробовать сделать своё расширение для clang с корутинами, которые гарантированно не используют аллокации и поверх этого реализовать небольшую операционную систему на корутинах для микроконтроллера.

Читать далее

Новости

GoOS: от любопытства к собственному ядру

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

Ещё в школе, когда я впервые начал писать на Pascal, меня заинтересовал вопрос: что именно происходит, когда запускается программа? Программа читает клавиатуру, выводит текст, выделяет память. Но кто её запускает? Кто выделяет ей процессорное время? Почему она не может прочитать память другого процесса? Как нажатие клавиши превращается в событие для приложения? И что происходит между включением компьютера и первым приглашением командной строки? Вместо того чтобы ограничиться прикладным программированием, я полез разбираться в загрузчиках, памяти и работе процессора.

Но теперь у этой истории истории есть своё собственное имя - GoOS. Если вам интересно почитать об этом подробнее - добро пожаловать!

Читать далее

Make Perl Great Again. Часть 1: Hello World

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

Все знают, что любая книга по программированию начинается с приведения примера программы hello world. Я тоже не буду оригинальничать и покажу, как надо писать hello world. Но в отличие от других авторов, которые очень быстро переходят от этой программы к каким-то очень высоким материям, философским обоснованиям, паттернам программирования и шаблонам проектирования (чтобы это всё ни значило), я ограничусь только hello world. Кто-то же должен заполнить пробел между hello world и… веб-сервером :-).

Читать далее

Дизассемблер для arm64, x86-64, i386, WebAssembly, .NET и Java — в одном HTML-файле

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

Всем уже надоели клоны (их есть у меня) и спекуляция на чужом имени — хочется увидеть что-то по-настоящему новое и полезное.

Встречайте дизассемблер для ARM64, 32-битного ARM, x86-64, i386, WebAssembly, .NET (CIL) и байт-кода Java: файлы Mach-O, ELF, PE, APK и IPA из macOS, iOS, Linux, Android и Windows. Один HTML-файл, работает без сети, ничего не отправляет — скачиваете на дискету, и этот инструмент с вами навсегда. Всё уместилось в 1,22 МБ.

Читать далее

Сломанный Ctrl+C — сначала гасла VM, а потом не прерывался sleep: Java, KVM и Linux

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

Обычный Ctrl+C оказался для моей Java VM неожиданной проблемой: сначала он завершал саму виртуальную машину, а после исправления перестал останавливать команды внутри Linux. Чтобы разобраться, пришлось пройти весь путь от host terminal через UART и KVM до гостевого TTY и Unix-сигналов. В статье разберём не только причину, но и метод диагностики, который пригодится далеко за пределами виртуализации.

Разбираемся, куда пропал Ctrl+C

Современное веб-приложение на C: CGI, SQLite и один бинарник

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

Автор оригинала выпустил коммерческий веб-продукт с аккаунтами, оплатой через Stripe и письмами через Postmark на технологии 1994 года: CGI-программа на C, OpenBSD httpd и файл SQLite. Без фреймворка, шаблонизатора, контейнера и JavaScript, с тремя зависимостями. В статье: как устроен стек BCHS, чем CGI удобен сегодня (отладка в шелле, минимальный риск цепочки поставок, выкатка заменой одного файла) и чего в нём не хватает.

Читать далее

Дерево, Лес или DAG? Как мы строили модель данных для цифрового офиса сотрудника

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

Предметное поле банковского приложения для сотрудников: как его визуализировать — как лес, дерево или граф? Я Валерий Разномазов, тимлид команды системных аналитиков проекта «Цифровой офис сотрудника», в рамках которого мы создаем приложение для сотрудников Россельхозбанка. В этой статье я рассказываю, как мы строили модель данных для приложения «Цифровой офис сотрудника» в РСХБ и почему отказались от классического «дерева» в пользу ориентированного ациклического графа (Directed Acyclic Graph, DAG).

Дерево, Лес или DAG?

Свой переключатель раскладки на Delphi, от низкоуровневого хука до скоринга n‑грамм

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

Знакомая картина. Пишешь на автомате сложный однострочник в терминале или строчку кода в любимой IDE, нажимаешь клавишу – и с тоской наблюдаешь, как вместо команды на экране появляется россыпь кракозябр вроде git ghjvjnt или docker compose гз (примеры – для примера). Шелл ожидаемо выдает ошибку, пальцы по привычке зажимают Ctrl+Backspace или долбят клавишу удаления, а рабочий настрой разбивается о банальный язык ввода.

Хуже этого может быть только поведение так называемых «умных помощников», которые вроде бы призваны эту боль лечить. Начинаешь набивать пароль в консоли – утилита радостно лезет переводить скрытые символы. Объявляешь в коде переменную user_name – программа бодро режет ее по нижнему подчеркиванию и превращает хвост в кириллицу. Запускаешь терминальную утилиту со сложными ключами – переключатель решает проявить инициативу прямо посреди флагов сборки. В итоге ловишь себя на том, что тратишь больше сил на борьбу с самодеятельностью программы, чем на саму опечатку, и в приступе раздражения просто выгружаешь ее из трея (или вносишь в исключения). Прекрасно, круг замкнулся.

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

Казалось бы, тема автоматического переключения раскладки исследована вдоль и поперек еще в нулевых. Есть ветеран Punto Switcher, доживающий свой век под крылом Яндекса, есть минималистичная Caramba Switcher от того же автора, есть комбайны вроде EveryLang с переводчиками и распознаванием текста, есть узкоспециализированные Aml Maple и Key Switcher, а для любителей открытого кода – Mahou.

Читать далее

Генератор парсеров ISPA

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

Этот пост написан для тех, кто глубоко погружён в разработку компиляторов или DSL, часто сталкивается с задачами парсинга, строит сложные конфигурации или движки с нуля. Этот инструмент предназначен для разбора большинства контекстно-свободных языков с минимальными усилиями. Он не претендует на то, чтобы генерировать код, который невозможно превзойти по производительности, — добиться более высокой производительности в написанном вручную парсере всё же сложнее.

Следует философии:

1. Статическая генерация. Никакой генерации в рантайме
2. Отсутствие зависимостей — сгенерированный парсер должен легко настраиваться
3. Вывод на несколько языков
4. Семантические действия и обработка ошибок прямо в грамматике, без её раздувания
5. Гибкость использования как в тривиальных, так и в очень крупных проектах
6. Простой в использовании API

Читать далее

Vodka, или почему nginx.exe у нас в шесть раз быстрее, чем под Wine

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

Всем привет!

Вторая статья про революционный проект Vodka, где будут реальные замеры производительности nginx.exe. А ещё на этот раз я более подробно расскажу про архитектуру проекта. И даже покажу, как это, установить Windows на Linux!

Читать далее

Особенности разработки встраиваемого программного обеспечения. Часть 2

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

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

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

Читать далее

От RISC‑V до pull request в open source: что сделали участники летней школы СПбГУ за месяц

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

В начале августа завершилась Летняя проектная школа программирования СПбГУ. 30 студентов, в том числе обучающиеся на образовательных программах ТОП ИТ СПбГУ, якорным партнером которых выступает YADRO, работали над задачами в области системного программирования, архитектуры RISC-V, разработки компиляторов, использования ПЛИС и оптимизации ПО с открытым исходным кодом. На итоговой защите выступили 29 участников. Помимо подготовки учебных отчетов, участники находили ошибки в проектах с открытым исходным кодом, готовили сообщения об ошибках (bug reports) и запросы на включение изменений (pull requests), профилировали приложения и оптимизировали библиотеки.

Школа проходила с 6 июля по 1 августа. В ее основе лежало проектное обучение: студенты осваивали новые технологии и инженерные подходы, работая над практическими задачами вместе с наставниками. Отдельное направление было посвящено RISC-V. О проектной работе и ее результатах рассказываем в этом материале.

Читать далее

Linux из Java без JNI: от FFM и /dev/kvm до интерактивной консоли

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

Да, направление здесь немного непривычное: обычно Java запускают в Linux, а здесь я решил попробовать запустить Linux из Java.

Обычно Java и KVM находятся довольно далеко друг от друга: с одной стороны JVM и управляемая память, с другой /dev/kvm, ioctl, регистры vCPU и физическая память guest ОС. В этой статье разберём, как связать эти два мира через Foreign Function & Memory API без JNI. На примере panama-kvm пройдём путь от первого вызова KVM API до загрузки Linux, настройки памяти, обработки VM exits и интерактивной консоли внутри гостевой системы.

Запустить VM из Java

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

Make Perl Great Again! Поиски простоты в программировании

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

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

Давайте я возьму какую‑то простую практическую задачу и решу ее, но не просто так, а как можно проще. Итак...

Читать далее

Доставка вебхуков: повторы, дубли и ещё три источника проблем

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

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

Читать далее

Смотрим ILA без программатора на Zynq SoC

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

Всем привет!
Сегодня я хочу рассмотреть довольно интересную возможность на Zynq SoC, связанную с отладкой с помощью ILA (Integrated Logic Analyzer) без физического подключения через JTAG.

В этой статье мы попробуем разобраться, как использовать Xilinx Virtual Cable, соберем драйвера, посмотрим как подключаться из Hardware Manager Vivado.

Читать далее

Работают ли запреты внутри песочницы ИИ-агента?

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

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

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

Читать далее

Rust 1.99.0: функции с переменным числом аргументов, информация о схеме размещения типа

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

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

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

$ rustup update stable

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

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

Читать далее

Часы Unix тикали от розетки: откуда взялся 1970 год и что сломается в 2038-м

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

Первое издание Unix Programmer's Manual датировано 3 ноября 1971 года, и на странице про системный вызов time в нем написано, что система хранит время в шестидесятых долях секунды, прошедших с полуночи 1 января 1971 года. Я наткнулась на эту строчку, когда пыталась ответить себе на вопрос, который, по-моему, хоть раз возникал у каждого, кто видел в логах загадочное 1 января 1970 года: почему именно этот день. Выяснилось, что поначалу Unix собирался считать время с другого года и в других единицах, а тикали его часы от электрической розетки.

Вторая половина истории про будущее. Во вторник, 19 января 2038 года, в 06:14:07 по Москве закончится 32-битный счетчик секунд, и программы, которые на него полагаются, проснутся в пятнице, 13 декабря 1901 года. Я проверила это на C, на JavaScript и на ext4, где файл, датированный 2040 годом, у меня уехал в 1903-й, а заодно выяснила, что кое-где 2038 год наступил уже двадцать лет назад.

Читать далее

Особенности разработки встраиваемого программного обеспечения. Часть 1

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

В этой статье пойдет речь о немаловажных особенностях разработки встраиваемого программного обеспечения (далее ВПО) для микроконтроллеров (далее МК) с низким уровнем абстракции аппаратного обеспечения.

Это не полноценный гайд по написанию кода ВПО, которых на просторах интернета сегодня тьма, а лишь нюансы, которые помогут писать хороший код.

Особенности этой огромной отрасли, embedded-разработки, лежат на поверхности и вытекают из ответа на вопрос: а какая вообще стоит задача? Если обобщить, то прозвучит это так: закодировать алгоритм работы, как правило, многозадачной однопоточной системы с низким уровнем абстракции аппаратного обеспечения.

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