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

В сентябре прошлого года мы порадовали вас новостью о начале программы публичного превью (Public Early Access Program) нашей новой кросс-платформенной IDE для разработки на C и C++ — CLion. А уже сегодня мы готовы сказать — релиз CLion 1.0 состоялся! За два года от первого (полушутливого) объявления о начале разработки C++ IDE мы прошли огромный путь — переосмыслили свои навыки и умения по работе с кодом на C++, дружно освоили CMake, расширили команду, протестировали CLion на десятках больших проектов на C и C++.

Но самое главное — это каждодневная поддержка C++ коммьюнити, которое (спасибо вам!) приняло нас очень благосклонно. Спасибо за слова поддержки, репорты багов, предложения новых фич, сотни ретвитов и репостов наших новостей и анонсов! Сегодня мы готовы показать вам и рассказать, что же вошло в CLion 1.0.

CLion 1.0 — мощный инструмент для мощного языка - 1
Читать полностью »

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

PVS-Studio
Мы временами экспериментируем с триальным режимом, чтобы знакомство с анализатором PVS-Studio проходило как можно эффективней. Сейчас мы вновь поменяли формат триальной версии. Эта заметка должна ответить на все вопросы, которое могут возникнуть у разработчиков, пожелавших познакомиться с нашим инструментом. Фактически эта статья является ответом на вопрос «можно ли попробовать демонстрационную версию и какие в ней ограничения?».
Читать полностью »

Bugs. Bugs Never Change
Вы открыли статью, на которую вы должны дать ссылку в Twitter. Или разместить в любимой программисткой группе. Это принесёт пользу и нам, и открытым проектам. Чтобы программисты всего мира узнали о PVS-Studio, мы проверяем открытые проекты и делаем их лучше. А заодно пишем интересные и полезные статьи. Чем больше люди будут узнавать про наши статьи, тем приятнее нам будет это делать и тем больше проектов мы будем проверять. Совместный profit.
Читать полностью »

image

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

Так появилось «Электрокардиографическое дерево Пифагора».
Читать полностью »

John Carmack
Примечание от переводчика. Изначально эта статья была опубликована на сайте AltDevBlogADay. Но сайт, к сожалению, прекратил своё существование. Более года эта статья оставалась недоступна читателям. Мы обратились к Джону Кармаку, и он сказал, что не против, чтобы мы разместили эту статью на нашем сайте. Что мы с удовольствием и сделали. С оригиналом статьи можно познакомится, воспользовавшись Wayback Machine — Internet Archive: Static Code Analysis.

Поскольку все статьи на нашем сайте представлены на русском и английском языке, то мы выполнили перевод статьи Static Code Analysis на русский язык. А заодно решили опубликовать её на Хабре. Здесь уже публиковался пересказ этой статьи. Но уверен, многим будет интересно прочитать именно перевод.

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

Генерация кода во время исполнения или «Пишем свой JIT-компилятор» - 1
Современные компиляторы очень хорошо умеют оптимизировать код. Они удаляют никогда не выполняющиеся условные переходы, вычисляют константные выражения, избавляются от бессмысленных арифметических действий (умножение на 1, сложение с 0). Они оперируют данными, известными на момент компиляции.
В момент выполнения информации об обрабатываемых данных гораздо больше. На её основании можно выполнить дополнительные оптимизации и ускорить работу программы.
Оптимизированный для частного случая алгоритм всегда работает быстрее универсального (по крайней мере, не медленнее).
Что если для каждого набора входных данных генерировать оптимальный для обработки этих данных алгоритм?
Очевидно, часть времени выполнения уйдёт на оптимизацию, но если оптимизированный код выполняется часто, затраты окупятся с лихвой.
Как же технически это сделать? Довольно просто — в программу включается мини-компилятор, генерирующий необходимый код. Идея не нова, технология называется “компиляция времени исполнения” или JIT-компиляция. Ключевую роль JIT-компиляция играет в виртуальных машинах и интерпретаторах языков программирования. Часто используемые участки кода (или байт-кода) преобразуются в машинные команды, что позволяет сильно повысить производительность.
Java, Python, C#, JavaScript, Flash ActionScript — неполный (совсем неполный) список языков, в которых это используется. Я предлагаю решить конкретную задачу с использованием этой технологии и посмотреть, что получится.
Читать полностью »

boxshell

ROTE — простая библиотека на языке C, служащая для эмуляции терминала VT100. Она создает терминал и предоставляет доступ к его состоянию в виде структуры языка C. В терминале можно запустить дочерний процесс, «нажимать» в нем клавиши и смотреть, что он рисует на терминале. Кроме того, есть функция для отрисовки состояния терминала в окне curses.

Зачем на практике может потребоваться эмулировать терминал и взаимодействовать через него с дочерним процессом? В первую очередь это нужно для автоматического тестирования программ, рисующих что-то на терминале с помощью curses, по моему мнению. Как иначе написать тесты для программы, которая ждёт, что пользователь нажмёт клавишу, и выводит результаты в определенное место экрана средствами curses?

Несмотря на всё удобство и внутреннюю красоту ROTE, использовать её напрямую в тестах было бы громоздко. Поэтому я решил упростить задачу, привязав ROTE к языку Lua, который я очень люблю и знаю, как писать тесты. Так и родилась библиотека lua-rote, о которой я хочу рассказать.
Читать полностью »

Идея в следующем. Чтобы не было разыменование нулевого указателя, нужно, чтобы не было нулевого указателя. Ваш КО. Так сложилось, что однажды я исправил небольшую проблему в ядре Linux, но это была не текущая ветка ядра, а стабильная. В текущей на тот момент эту проблему тоже исправили, но по другому.
Читать полностью »

Привздохнув, произнесла:
«Как же долго я спала!»

image Когда-то, впервые встретив Unix, я был очарован логической стройностью и завершенностью системы. Несколько лет после этого я яростно изучал устройство ядра и системные вызовы, читая все что удавалось достать. Понемногу мое увлечение сошло на нет, нашлись более насущные дела и вот, начиная с какого-то времени, я стал обнаруживать то одну то другую фичу про которые я раньше не знал. Процесс естественный, однако слишком часто такие казусы обьединяет одно — отсутствие авторитетного источника документации. Часто ответ находится в виде третьего сверху комментария на stackoverflow, часто приходится сводить вместе два-три источника чтобы получить ответ на именно тот вопрос который задавал. Я хочу привести здесь небольшую коллекцию таких плохо документированных особенностей. Ни одна из них не нова, некоторые даже очень не новы, но на каждую я убил в свое время несколько часов и часто до сих пор не знаю систематического описания.

Все примеры относятся к Linux, хотя многие из них справедливы для других *nix систем, я просто взял за основу самую активно развивающуюся ОС, к тому же ту, которая у меня перед глазами и где я могу быстро проверить предлагаемый код.

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


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