Рубрика «C» - 49

Доброго времени суток, Хабровчане!

Проблема поиска по русским символам в SQLite давно уже стала притчей во языцех, причины ее появления довольно подробно описаны здесь. Впрочем, есть довольно распространенные решения данной проблемы, самым популярным из которых является подключение ICU, библиотеки, с помощью которой можно реализовать полноценный поиск по Unicode. Но мне хотелось более короткого в плане кода решения чтобы в результате поиск был:

  • регистронезависимым;
  • по русским и английским символам;
  • игнорирование символа ё/Ё при поиске;
  • быстрым;
  • использовал встроенный NOCASE collation.

Читать полностью »

Скриптуем на WebAssembly, или WebAssembly без Web - 1

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

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

Далее — проверка концепции на прочность, инструментарий и первый скриптовый модуль.

Читать полностью »

Привет!

Наша команда приготовила всем разработчикам на C и C++ новогодний подарок под елку – новый релиз CLion 2017.3! В этом посте постараемся рассказать, чем он хорош, прикинуть дальнейшие направления для развития продукта и, конечно, ответить на все интересующие вас вопросы в комментариях.

image

Коротко об основных улучшениях для тех, кто не хочет много читать:

  • Поддержка языка C++
    • Улучшения в таких подсистемах парсера, как list initialization и name lookup
    • Поддержка расширений специфичных для компилятора Microsoft Visual C++
    • Поддержка макроса __COUNTER__
    • И не только!
  • Новые инструменты и фреймворки
    • Valgrind Memcheck
    • Boost.Test
    • CMake 3.9, GDB 8.0, LLDB 5.0
  • Существенные переработки и расширение возможностей в настройке компилятора, окружения, CMake, отладчика, и пр.
  • Возможность запуска почти произвольной функции main, иконки для запуска функций main и тестов
  • Возможность разрабатывать на Kotlin/Native в CLion

Можно прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта и попробовать новые возможности (для этого мы даже подготовили специальный небольшой демо-проект). А ниже мы поговорим об улучшениях более подробно.
Читать полностью »

Пишем простой модуль ядра Linux - 1

Захват Золотого Кольца-0

Linux предоставляет мощный и обширный API для приложений, но иногда его недостаточно. Для взаимодействия с оборудованием или осуществления операций с доступом к привилегированной информации в системе нужен драйвер ядра.

Модуль ядра Linux — это скомпилированный двоичный код, который вставляется непосредственно в ядро Linux, работая в кольце 0, внутреннем и наименее защищённом кольце выполнения команд в процессоре x86–64. Здесь код исполняется совершенно без всяких проверок, но зато на невероятной скорости и с доступом к любым ресурсам системы.

Не для простых смертных

Написание модуля ядра Linux — занятие не для слабонервных. Изменяя ядро, вы рискуете потерять данные. В коде ядра нет стандартной защиты, как в обычных приложениях Linux. Если сделать ошибку, то повесите всю систему.
Читать полностью »

Недавно сайт Pinguem.ru совместно с командой PVS-Studio устраивали конкурс, в котором программистам было необходимо в течение месяца использовать статический анализатор PVS-Studio для нахождения и исправления ошибок в коде open-source проектов. Благодаря их стараниям, программы в мире стали чуточку безопаснее и надежнее. В статье мы рассмотрим парочку наиболее интересных ошибок, которые были найдены при помощи PVS-Studio.

Picture 13

Читать полностью »

Данная статья служит одной простой цели: помочь человеку, который вдруг решил разработать свою операционную систему (в частности, ядро) для архитектуры x86, выйти на тот этап, где он сможет просто добавлять свой функционал, не беспокоясь о сборке, запуске и прочих слабо относящихся к самой разработке деталей. В интернете и на хабре в частности уже есть материалы по данной теме, но довольно трудно написать хотя бы “Hello world”-ядро, не открывая десятков вкладок, что я и попытаюсь исправить. Примеры кода будут по большей части на языке C, но многие другие языки тоже можно адаптировать для OSDev. Давно желавшим и только что осознавшим желание разработать свою операционную систему с нуля — добро пожаловать под кат.
Читать полностью »

Парсинг NMEA GNSS для микроконтроллеров и встраиваемых систем - 1

Попал в руки OpenCPU модуль L218. Кроме всего прочего, он имеет на борту GNSS. Соответственно возникла потребность в разборе NMEA фрейма. Поставляемое SDK заточено под «C code», и т.к править кучу Makefile-в было лениво, попытки использовать готовые проекты провалились.

Тогда пришлось написать свою реализацию разбора NMEA сообщений. На эту не самую умную и интересную задачу, пришлось потратить свободный вечер. Будет приятно, если кому-то понадобиться решить похожую задачу и этот пример с этим поможет.
Читать полностью »

memory leak

Нас часто спрашивают, умеет ли статический анализатор кода PVS-Studio выявлять утечки памяти (memory leaks). Чтобы много раз не писать похожие тексты в письмах, мы решили дать подробный ответ в блоге. Да, PVS-Studio умеет выявлять утечки памяти и других ресурсов. Для этого в PVS-Studio реализовано несколько диагностик и в статье будут продемонстрированы примеры обнаружения ошибок в реальных проектах.
Читать полностью »

Сравнение качества кода Firebird, MySQL и PostgreSQL - 1

Сегодняшняя статья несколько необычна. Как минимум по той причине, что вместо анализа одного проекта, будем искать ошибки сразу в трёх, а также посмотрим, где найдутся наиболее интересные баги. А самое интересное — мы выясним, кто молодец и пишет самый качественный код. Итак, на повестке дня — разбор ошибок в коде проектов Firebird, MySQL и PostgreSQL.
Читать полностью »

image
Здравствуйте. Сегодня речь пойдёт про Conan — современный менеджер зависимостей для C/C++. Если Вы уже активно работаете с ним, то навряд ли найдёт что-нибудь новое для себя. Иначе — прошу под кат.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js