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

C *

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

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

Micro-UART для МикроКонтроллера (ATtiny13A)

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

Рад приветствовать вновь всех посетителей этого славного места в интернете, чтобы привнести еще один скромный вклад.

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


Речь пойдет о программной реализации UART, для микроконтроллеров AVR компании Atmel, интеллектуальной собственностью которой с некоторых пор владеет компания Microchip.
Читать дальше →

Бег в мешках с завязанными глазами спиной вперед

Время на прочтение7 мин
Количество просмотров10K
Какой язык программирования самый быстрый — не всегда практичный, но крайне любопытный вопрос. Сайт benchmarksgame как раз об этом. Суть проекта в сравнении скорости языков программирования на ряде типовых задач. Надо сказать, что результаты не всегда предсказуемы. Что, если JavaScript такой же быстрый, как и C? Это же скандал!

Гордость и предубеждение


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

На benchmarksgame часто ссылаются, чтобы доказать преимущества или недостатки того или иного языка программирования. Однако тут нужно быть аккуратным. Те, кто профессионально занимаются замерами производительности, знают, что в этом деле есть множество подводных камней, и можно легко попасть в просак. Например, виртуальной машине Java нужно некоторое время, чтобы прогреться. Соответственно на слишком коротких тестах результаты будут нерепрезентабельны. К счастью, с точки зрения статистики на сайте используется очень даже систематичный подход.

Но цифрам все равно нельзя верить, и вот почему.


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

Проверка кода Reiser4 статическим анализатором PVS-Studio

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


Доброго времени суток!

Эта статья посвящена применению бесплатной версии (для свободных и открытых проектов) статического анализатора PVS-Studio. Проверять мы будем исходный код файловой системы Reiser4 и ее утилит.
Читать дальше →

Сегментация памяти (Схема памяти компьютера)

Время на прочтение19 мин
Количество просмотров62K
Представляю, Вам, перевод статьи одного из разработчиков PHP, в том числе версии 7 и выше, сертифицированного инженера ZendFramework. В данный момент работает в SensioLabs и большую часть занимается низкоуровневыми вещами, в том числе программированием в С под Unix. Оригинал статьи здесь.

Ошибка Сегментации: (Компьютерная верстка памяти)


Несколько слов, о чем эта запись в блоге


Я планирую в будущем писать технические статьи о PHP, связанные с глубоким пониманием памяти. Мне нужно, чтобы мои читатели имели такие знания, которые им помогут понять некоторые концепции дальнейшего объяснения. Для того, чтобы ответить на этот вопрос, нам придется перемотать время назад в 1960-е года. Я собираюсь объяснить вам, как работает компьютер, а точнее, как происходит доступ к памяти в современном компьютере, а затем вы поймете, из-за чего происходит это странное сообщение об ошибке — Segmentation Fault.

То, что вы будете читать здесь, краткое изложение основ дизайна компьютерной архитектуры. Я не буду заходить слишком далеко, если это не нужно, и буду использовать хорошо известные формулировки, так что, кто работает с компьютером каждый день может понять такие важные понятия о том, как работает ПК. Существует много книг о компьютерной архитектуре. Если вы хотите углубиться дальше в этой теме, я предлагаю вам достать некоторые из них и начать читать. Кроме того, откройте исходный код ядра ОС и изучите его, будь то ядро Linux, или любое другое.
Читать дальше →

Вредные заклинания в программировании

Время на прочтение3 мин
Количество просмотров24K
С тех пор, как я посмотрел легендарное видео Wat Гэри Бернхардта, меня завораживает странное поведение некоторых языков программирования. Некоторые из них таят больше сюрпризов, чем другие. Например, для Java написана целая книга с описанием пограничных ситуаций и странной специфики. Для C++ вы просто можете почитать сами спецификации всего за $200.

Далее поделюсь с вами моей коллекцией самых неожиданных, забавных и всё-таки валидных «заклинаний» программирования. По сути, использование этих особенностей поведения ЯП считается пагубным, поскольку ваш код никоим образом не должен быть непредсказуемым. Хорошо, что многие линтеры уже осведомлены и готовы посмеяться над вами, если попробуете какое-то из перечисленных дурачеств. Но как говорится, знание — сила, так что начнём.
Читать дальше →

JetBrains CLion для микроконтроллеров

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

Предыстория



CLion — это среда для разработки на С/С++, близкий родственник IntelliJ IDEA и, соответственно, Android Studio.


Я представляю вниманию сообщества перевод моего блог поста, в котором по шагам описано, как использовать эту IDE для написания прошивок микроконтроллеров.

Достижение максимальной производительности Быстрого Преобразования Фурье на основе управления данными

Время на прочтение1 мин
Количество просмотров19K
Статья поддерживается здесь:
[3] Caterpillar Implementation Based on Generated Code

// не вижу смысла писать на ресурсе а) с цензурой тэгов б) где каждый проходящий бот, набравший рейтинг галиматьей, сносит твой рейтинг и объяснение причины с него не требуется

Tcl/Tk – создание расширений/пакетов на базе динамических библиотек

Время на прочтение9 мин
Количество просмотров3.8K
В одной из наших заметок было высказано намерение написать графические оболочки для пакетов OpenSSL и NSS (Network Security Services). GUI для NSS было написано:
Читать дальше →

Технопорно с WebAssembly

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

По просьбам трудящихся, пишу о внутреннем устройстве WebAssembly.


WebAssembly — байткод для стековой виртуальной машины. Значит, для запуска кода такой нужны интерпретатор, стек и хранилище кода. Если мы хотим взаимодействовать с внешним миром, нужен интерфейс к внешней машине, хосту. Дополнительно стандарт определяет две структуры: непрерывную память и таблицы. В версии MVP стандарта их может быть по одной штуке каждого, или не быть вовсе.


В итоге, наш технобордель выглядит так:



  • Интерпретатор
  • Интерфейс к хосту
  • Стек
  • Хранилище кода
  • Память
  • Таблица

Займёмся делом!

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

Постигаем Си глубже, используя ассемблер. Часть 2 (условия)

Время на прочтение8 мин
Количество просмотров19K
Вот и вторая часть часть цикла. В ней мы будем разбирать условия. В этот раз попробуем другие уровни оптимизации, и посмотрим, как это может повлиять на код.
Читать дальше →

Yet another kaspersky crackme

Время на прочтение3 мин
Количество просмотров8.7K
Сей раз ЛК выпустила на свет шесть крякми, два из которых были написаны на человеческом языке С. Приступим к анализу. Линк, архив, семпл из статьи.
Читать дальше →

Меняем PID процесса в Linux с помощью модуля ядра

Время на прочтение4 мин
Количество просмотров11K
В этой статье мы попытаемся создать модуль ядра, способный изменить PID уже запущенного процесса в ОС Linux, а так же поэкспериментировать с процессами, получившими измененный PID.


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

Постигаем Си глубже, используя ассемблер

Время на прочтение8 мин
Количество просмотров57K
Вдохновением послужила эта статья: Разбираемся в С, изучая ассемблер. Продолжение так и не вышло, хотя тема интересная. Многие бы хотели писать код и понимать, как он работает. Поэтому я запущу цикл статей о том, как выглядит Си-код после декомпиляции, попутно разбирая основные структуры кода.
Читать дальше →

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

Отображение переменных окружения в Redis

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


Redis — это такое хранилище вида ключ-значение. Переменные окружения (environment variables) — напоминают то же самое. А что если это как-то объединить?


Для любителей пятничных постов, несложного хакинга и странных желаний — прошу под кат

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

Разработка приложений на языках C/C++ с использованием Tcl/Tk

Время на прочтение35 мин
Количество просмотров18K
image Мощный функционал скриптового языка Tcl в сочетании с виджетами Tk/TTK позволяет создавать в этой среде серьезные приложения. Этому способствует также его кросплатформенность и прекрасная интеграция с языками программирования C/C++.
Читать дальше →

Ускорение сборки C и C++ проектов

Время на прочтение13 мин
Количество просмотров44K
Многие программисты не понаслышке знают о том, что программа на языке C и C++ собирается очень долго. Кто-то решает эту проблему, сражаясь на мечах во время сборки, кто-то — походом на кухню «выпить кофе». Это статья для тех, кому это надоело, и он решил, что пора что-то предпринять. В этой статье разобраны различные способы ускорения сборки проекта, а также лечение болезни «поправил один заголовочный файл — пересобралась половина проекта».

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

Еще одна реализация регистронезависимого поиска по кириллическим символам в SQLite

Время на прочтение4 мин
Количество просмотров4.9K
Доброго времени суток, Хабровчане!

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

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

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

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

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


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


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

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

Релиз CLion 2017.3: существенные улучшения поддержки C++, интеграция с Valgrind Memcheck и Boost.Test и многое другое

Время на прочтение6 мин
Количество просмотров9.4K
Привет, Хабр!

Наша команда приготовила всем разработчикам на 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

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

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


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

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

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


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

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