Как стать автором
Обновить
38.57
Рейтинг

C *

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

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

Что Должно Быть в Каждом FirmWare Pепозитории

C *Разработка робототехники *Программирование микроконтроллеров *DevOps *Производство и разработка электроники *
Tutorial

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

То есть перечислить самые универсальные и переносимые программные компоненты (кирпичики), которые могут пригодиться в практически любой сборке.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 1.7K
Комментарии 7

Новости

Select принципиально неисправен. Мультиплексирование ввода/вывода часть #2

Блог компании OTUS Программирование *C *
Перевод

В предыдущей статье блога мы обсудили краткую историю системного вызова select(2). В ней делается вывод, что для эмуляции консолей, игр и нетривиальных TCP/IP-приложений было необходимо определенное мультиплексирование ввода-вывода.

Разработчики BSD (Berkeley Software Distribution) выбрали модель мультиплексирования select, и за ними последовали другие Unix-подобные системы. Но является ли select единственной моделью мультиплексирования?

Читать далее
Всего голосов 8: ↑5 и ↓3 +2
Просмотры 1.8K
Комментарии 0

FizzBuzz по-взрослому

Высокая производительность *Ненормальное программирование *C *

Тема эта стала неинтересной, всё то же и так же из раза в раз

Сеньоры начинают и проигрывают пенсионерам.

Это уже третий раз и должны уже наверно свыкнуться. ))

FizzBuzz по-сениорски

FizzBuzz по-пенсионерски

Продолжаем разгонять FizzBuzz

FizzBuzz по-македонски

Немного лирики. Хабр из места, где пишут в стиле "смотрите коллеги, можно и так ..." превратился в место хвастовства и рекламы. Пенсионеры хорошо знают, что невозможно написать код, который нельзя улучшить. И реальные сеньоры только рады, когда им пишешь про то, как можно улучшить их код. Я проверял ))

Читать далее
Всего голосов 15: ↑8 и ↓7 +1
Просмотры 2.8K
Комментарии 5

Тандем Cpp/Dot для Описания Сложных ToolСhain(ов)

CAD/CAM *C *Программирование микроконтроллеров *Схемотехника *Подготовка технической документации *
Tutorial

Разработка современного софта это далеко не только про код.

Разработка современного софта это во многом про ToolСhain(ы). Прежде чем начать исполняться исходники проходят гигантский путь. C каждым поколением выходят все более и более массивные системы сборки.
Современные технологии разработки софта это многостадийные конвейеры из различных утилит. Понять их весьма сложно, но можно. А поможет нам в этом хипстерский язык программирования Dot.

Читать далее
Всего голосов 13: ↑10 и ↓3 +7
Просмотры 1.6K
Комментарии 8

Разработка программы отображения для гидроакустической станции под Linux

Программирование *C *Визуализация данных *Промышленное программирование *Разработка под Linux *

Гидроакустическая станция серийная, Echologger MRS-900. Однолучевая, луч сканирует по кругу или в секторе. Штатное программное обеспечение есть, работает под Windows. От меня потребовалась версия под Linux.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 4K
Комментарии 11

Фокусы оптимизации размера исполняемых файлов ELF. Поддержка 4 ОС в 400 байт единственного бинарника

Блог компании SkillFactory Python *Программирование *C++ *C *
Перевод

В этом посте я расскажу о некоторых уловках, которыми я воспользовалась, чтобы уменьшить двоичные файлы С/С++/Python с помощью ассемблера для x86. Здесь всё крутится вокруг кодовой базы Cosmopolitan. Дело в том, что из недавнего отзыва по проекту ELKS я узнала, что мой код там всем понравился и они хотят узнать больше о том, что трюки cosmo могут дать проектам вроде «Linux-порта i8086». Я почувствовала, что мы с ребятами проекта ELKS «одной крови», ведь первое, что я написала при создании Cosmopolitan, — это загрузчик i8086, который назывался Actually Portable Executable. А ещё мне было приятно узнать, что людям, которые погрузились в эту проблему гораздо раньше меня, нравятся мои наработки в Cosmopolitan. И тогда я решила, что неплохо было бы поделиться ими с более широкой аудиторией.


[Shinmyoumaru Sukuna]

Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Просмотры 4.7K
Комментарии 14

Как я портирую код с помощью Hebron

Open source *.NET *C *C# *

В своей предыдущей статье я упомянул Hebron - утилиту для портирования кода с C на C# или на Rust.

В этой статье хотелось бы подробно расписать - как я с ней работаю.

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

Итак, портирование осуществляется в 4 шага:

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 3.2K
Комментарии 3

StbSharp: история ненужного проекта

.NET *Разработка игр *C *C# *Unity *
Из песочницы

В этой статье я бы хотел рассказать о своем хобби проекте под названием StbSharp.

Итак, в 2016 году мне пришла в голову весьма банальная идея - сделать собственный игровой кросс-платформенный движок на C#. И я озаботился поиском кросс-платформенной же библиотеки для загрузки картинок. Внезапно выяснилось, что подходящей просто не существовало. Было множество платформо-зависимых решений(напр. System.Drawing). А так же имелась SixLabors.ImageSharp. Но она была в состоянии ранней альфы. Мне же хотелось работать с решением, проверенным временем. Так я пришёл к идее портировать stb_image.h (очень популярной в геймдеве single-header библиотеки для загрузки картинок) на C#.

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

Однако, проект показался мне столь интересным, что я проигнорировал эти справедливые возражения.

Читать далее
Всего голосов 37: ↑37 и ↓0 +37
Просмотры 5.5K
Комментарии 23

FizzBuzz по-македонски

Высокая производительность *Ненормальное программирование *C *

Long story short

Сеньоры начинают и проигрывают

Тут как на олимпийских играх - быстрее, короче, изящней.

В продолжение увлекательной дискуссии

FizzBuzz по-сениорски

FizzBuzz по-пенсионерски

Продолжаем разгонять FizzBuzz

Читать далее
Всего голосов 24: ↑16 и ↓8 +8
Просмотры 3.4K
Комментарии 4

Написание расширений PostgreSQL на языке С — это интересно

Блог компании OTUS Программирование *C *
Перевод

PostgreSQL — это мощная система управления реляционными базами данных с открытым исходным кодом. Она дополняет язык SQL новыми фичами. СУБД определяется не только ее производительностью и встроенными фичами, но и способностью поддерживать персонализированную/дополнительную, специфичную для пользователя функциональность. Некоторые из этих возможностей могут быть представлены в виде конструкций или модулей базы данных, таких как хранимые процедуры или функции, но их объем обычно ограничен функциональностью, предоставляемой СУБД. Например, как вы напишете кастомное приложение для анализа запросов, которое будет находиться внутри вашей СУБД?

Читать далее
Всего голосов 15: ↑13 и ↓2 +11
Просмотры 2.4K
Комментарии 1

Как не быть программистом, раскурить eBPF за сутки и начать мониторить DNS

Python *Системное программирование *C *Разработка под Linux *
Tutorial

Представим: сервер может отправлять легитимные запросы, но IP, на которые он будет их слать, неизвестны. В журнале сетевого фильтра видно что запросы таки да, идут. Но не ясно - это как раз легитимные или информация уже утекает к злоумышленникам? Было бы проще если бы был известен домен на который сервер посылает данные. Увы, но PTR не в моде, а securitytrails показывает или ничего, или слишком много по этому IP.

Можно запустить tcpdump. Но кто захочет постоянно смотреть в монитор? А если сервер не один? Есть packetbeat. Это чудовище, которое выжрало процессор на всех серверах. Брр… Не хочу о нём вспоминать. Osquery - неплохой инструмент который многое знает о сетевых подключениях и ничего - о DNS-запросах. Соответствующее предложение было просто закрыто. Zeek - о нём я узнал когда начал искать как отслеживать DNS-запросы. Похоже он неплох, но меня смутило два момента: он следит не только за DNS, а значит ресурсы будут тратиться на работу результат которой мне не нужен (хотя, возможно, в настройках можно выбрать протоколы); а ещё он ничего не знает о том какой процесс послал запрос.

Неужели это всё? Я вроде бы что-то слышал про eBPF…

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 6.9K
Комментарии 7

Архитектура Хорошо Поддерживаемого драйвера для I2C/SPI Чипа

C *Разработка робототехники *Программирование микроконтроллеров *
Tutorial

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

Читать далее
Всего голосов 25: ↑18 и ↓7 +11
Просмотры 4.5K
Комментарии 15

Приёмы высокоуровневой векторизации на примере Card Raytracer

Высокая производительность *C++ *Работа с 3D-графикой *C *
Из песочницы

Хочу рассказать о том, как занимался оптимизацией card raytracer - минимального рейтрейсера, код которого умещается на визитке.

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

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

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

Наверное, статья в большей степени полезна новичкам, но и опытные разработчики (по привычке с 2000-го года пишущие SIMD-код интринсиками) могут найти что-то новое.

Компилятор - в основном Clang, можно GCC, в конечном итоге я адаптировал и под MSVC.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 2.1K
Комментарии 6

С PATH_MAX не всё так просто

Блог компании PVS-Studio C++ *C *
Перевод

PATH_MAX


C и C++ программисты в какой-то момент могут столкнуться с ограниченным размером PATH_MAX и задаться вопросом – какого размера создавать буфер, чтобы отследить путь к директориям или файлам?

Читать дальше →
Всего голосов 21: ↑14 и ↓7 +7
Просмотры 3.4K
Комментарии 39

Руководство по CMake для разработчиков C++ библиотек

Open source *Программирование *C++ *C *Системы сборки *
Из песочницы
Tutorial

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

Читать далее
Всего голосов 71: ↑71 и ↓0 +71
Просмотры 18K
Комментарии 43

Разбираемся с EXCEPTION_CONTINUE_EXECUTION

C *Разработка под Windows *
Из песочницы

Механизм структурированной обработки исключений (Structured Exception Handling, SEH) позволяет не только "отловить" сгенерированное исключение, но и вернуться к инструкции, вызвавшей сбой и попробовать выполнить ее заново.

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

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 2K
Комментарии 9

Логотип PSone и где он обитает

Программирование *Работа с 3D-графикой *C *Старое железо Игры и игровые консоли

Знакомая картинка? Думаю, что знакома она многим. Дети 90-х (ух, что тогда творилось, в песне Монеточки это всё описано), видели этот логотип при старте приставки PS1. И оказалось, что

Читать, что там оказалось
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 7K
Комментарии 13

Продолжаем разгонять FizzBuzz

Высокая производительность *Ненормальное программирование *C *

После написания первой статьи про FizzBuzz (которая неожиданно для меня стала выбором редакции на Технотексте 2021) у меня появлялись мысли о том, как еще можно ускорить, но все время было не до того. И тут мне прилетает перчатка.

Читать далее
Всего голосов 46: ↑44 и ↓2 +42
Просмотры 6.5K
Комментарии 5

17 Атрибутов Хорошего Канального Протокола Передачи Данных

Сетевые технологии *C *Разработка робототехники *Программирование микроконтроллеров *Робототехника

В этом тексте представлены атрибуты хорошего и простого канального Master-Slave протокола для пакетного обмена информацией между устройствами на общей шине таких как RS485, CAN, LoRa, BLE.
Несмотря на то, что есть канальные протоколы ModBus, DLMS, RDS, UBX, NEC, Pelco-D, yModem, многие компании всё же придумывают собственный канальный протокол для взаимодействия между своими электронными платами. Тут представлены общие атрибуты таких доморощенных протоколов.

Читать далее
Всего голосов 14: ↑9 и ↓5 +4
Просмотры 4.6K
Комментарии 28

FizzBuzz по-пенсионерски

Высокая производительность *Ненормальное программирование *C *
Recovery mode

Статья коллеги @qrdl про собеседование с написанием вариантов FizzBuzz очень понравилась.

Но очень не понравился код, совсем не понравился. (Так бывает, статья задорная, веселая, с понтами, а код не хороший) И после публикации технотекстов пришлось внимательно изучить https://habr.com/ru/post/540136/ и понять, разобраться в своем неприятии, ну и потренироваться самому.

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

Читать далее
Всего голосов 47: ↑42 и ↓5 +37
Просмотры 7.7K
Комментарии 17

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

Работа

Программист С
49 вакансий