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

C *

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

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

Маленькая C-функция из преисподней

Время на прочтение5 мин
Количество просмотров3.6K
Недавно мой студент и я пытались понять одну тонкость в стандарте C. Самый простой способ прояснить подобные вопросы — это узнать, учли ли её разработчики компиляторов, то есть написать код и посмотреть, что с ним будут делать разные компиляторы.

Я написал такую функцию:
int foo (char x) {
  char y = x;
  return ++x > y;
}

Так как ++x увеличивает на 1 значение x, очевидно, что функция должна возвращать "1" для большинства значений x. Вопрос состоит в том, что она вернет для значения CHAR_MAX?

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

О производительности сетевых программ

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


Заключительная лекция курса «Сетевое программирование в UNIX», который подготовили специалисты SkyDNS и компании «Айдеко», получилась многогранной.

На лекции были рассмотрены две основных темы. Марк Коренберг («Айдеко») и Александр Патраков (SkyDNS) рассказали, как простыми модификациями можно ускорить работу цикла обработки событий и объяснили, как пользоваться флагом EPOLLET.
Читать дальше →

Подсчет ссылок атомарными переменными в C/C++ и GCC

Время на прочтение7 мин
Количество просмотров7.2K
Автор: Alexander Sandler, оригинал статьи (27 мая 2009)

Введение


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

Простой многопоточный тип доступа к данным и атомарные переменные

Время на прочтение6 мин
Количество просмотров20K
Автор: Alexander Sandler, оригинал статьи (23 декабря 2008)

Введение


В этой статье мне бы хотелось продолжить тему, начатую в моих предыдущих постах (см. ниже — прим. пер.). Вопрос, на который я попытаюсь ответить — что является наиболее эффективным и безопасным способом доступа к переменным простого типа данных из двух или более потоков. То есть, как изменить переменную из двух потоков одновременно, не нарушив ее значения.
Читать дальше →

Мы не написали книгу! Практический опыт создания учебного пособия по программированию

Время на прочтение3 мин
Количество просмотров3.4K
Идею написать эту заметку подарила статья «Мы написали книгу! Практический опыт издания книги о программировании». Как и тот автор, я начала писать в начале года и закончила к середине апреля, работала примерно в том же объеме. Но произведение немного иного толка — учебное пособие по языку программирования C.

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

Потребность в таком пособии назрела к началу декабря прошедшего учебного года. Декабрь ушел на просмотр существующей литературы и пособий по языку C. Не смотря на то, что среди просмотренного были достойные произведения, ни одно из них не подходило. Например, известное издание K&R, которое часто рекомендуют, не подходит для начинающих. Другие издания либо были объемны, либо не давали объективных знаний. Мне же нужно было пособие, рассчитанное не более чем на 30 пар (60 академ.часов).
Читать дальше →

С11 исправит ошибки С99

Время на прочтение2 мин
Количество просмотров8.4K
В декабре 2011 года был утверждён стандарт ISO/IEC 9899:2011, он же C11 или C1X, новый стандарт для языка программирования C.

Дэнни Калев (Danny Kalev), бывший член комитета стандартизации C++, вкратце объясняет, в чём суть главных нововведений в C11: новая модель памяти для лучшей поддержки многопоточности, анонимные структуры и объединения и многие другие функции, которые уже присутствуют в C++.

Некоторые обязательные функции C99 становятся опциональными в C11 (массивы переменной длины, комплексный тип данных и др.), но добавляются некоторые функции C++. Комитеты C и C++ плотно сотрудничали, чтобы обеспечить максимальную совместимость языков.
Читать дальше →

Как решить проблему 10 000 соединений?

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


Способы решения этой проблемы, поднятой еще в 2001 году программистом Дэном Кегелем, рассматриваются в девятой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». За подробностями – добро пожаловать под кат.
Читать дальше →

Как сделать программу нетерпеливой?

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


Программы, которые были написаны в прошлых лекциях курса «Сетевое программирование в UNIX», обладали бесконечным запасом терпения, то есть беспрекословно ждали, пока не поступят данные для обработки. В новой лекции вы узнаете, как ограничить терпение программы определенными временными рамками.
Читать дальше →

Эффективное чтение

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


Настало время для седьмой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». Автор курса Александр Патраков объясняет студентам, как ускорить чтение небольших порций данных из сокета.
Читать дальше →

Асинхронные запросы к MySQL на API (libmysqlclient)

Время на прочтение3 мин
Количество просмотров6.6K
Так получается, что сейчас тружусь над планировщиком для MySQL соединений. И тут недавно пришлось покапаться в документации/блогах и т.д. И вот решил поделиться с сообществом как реализовать асинхронные запросы к MySQL серверу на С++ используя API и библиотеку libmysqlclient.

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

Реализация разделяемой памяти между драйвером и приложением

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

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

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

Использование сети CAN и стека CANopen

Время на прочтение6 мин
Количество просмотров47K
Однажды передо мной встала задача разработать встраиваемую систему, в которой бы данные могли передаваться между узлами c максимальной надежностью. Тогда то я впервые и узнал о CAN.

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

CAN (Controller Area Network) — это стандарт, созданный компанией Bosсh для сетей, используемых в автоматизации и промышленности. Стандарт нашел широкое применение в промышленном производстве, технологиях «умного дома», а так же в автомобилестроении. Очень хорошо подходит для связывания различных датчиков и управляющих устройств в единую сеть.
Как правило, CAN-сеть это сеть типа «шина», в которой все узлы могут передавать и принимать данные.
Она обладает небольшой скоростью, но высокой надежностью.

Далее я хочу поверхностно описать стандарт и рассказать об использовании такой сети на практике.
Читать дальше →

Многозадачность в микроконтроллерах на основе продолжений

Время на прочтение8 мин
Количество просмотров27K
Программисты C и так не избалованы возможностями языка, а разработчики встроенных систем на микроконтроллерах ограничены еще больше, зачастую их программы работают на голом железе, без поддержки ОС.
Возможность использования в С сопрограмм, генераторов, кооперативной многозадачности часто может сильно упростить программу и сэкономить силы, но эти возможности языка не очевидны и многие про них не знают.
Продолжения (contionuation) позволяют запомнить состояние выполнения программного потока (функции), и вернуться к этому месту в дальнейшем.
Используя продолжения, мы можем получить сопрограммы (coroutine), а это уже практически готовые генераторы, итераторы и кооперативная многозадачность.
Читать дальше →

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

Итоги 20-го международного конкурса непонятного кода на C

Время на прочтение2 мин
Количество просмотров16K
Организаторы IOCCC (Международный конкурс на самый непонятный код C) нажали кнопку «турбо». Если результаты прошлого конкурса опубликовали спустя четыре года после проведения, теперь прошло всего два месяца — и вот они.

Участвовать в конкурсе могут готовые программы размером меньше 4096 байт, при этом количество значимых символов, без учёта пробелов, знаков табуляции и знаков ; ( ), не должно превышать 2048. Задачей конкурса является «проверять компиляторы на стресс, демонстрировать тонкости языка программирования Си и важность соблюдения стиля программирования (делая обратное)».
Читать дальше →

Расставим точки над структурами C/C++

Время на прочтение4 мин
Количество просмотров282K
Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: во-первых я не Господи, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…


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

Кросс-платформенные многопоточные приложения

Время на прочтение6 мин
Количество просмотров15K
Для создания переносимых многопоточных приложений предлагаю воспользоваться библиотекой Glib.
Glib — это достаточно большая кросс-платформенная библиотека, которая, кроме потоков, включает в себя поддержку интернационализации, работу со строками, массивами, файлами, таймерами, и много чего другого, вплоть до XML парсера и поддерки .ini конфигурационных файлов.
В тоже время эта библиотека достаточно маленькая и почти не имеет зависимостей, что позволяет без особых проблем включать её в Windows-проекты, а в unix-подобных системах Glib уже есть.
Читать дальше →

Реализация exceptions на plain C

Время на прочтение4 мин
Количество просмотров7.1K
Продолжение вот этой статьи habrahabr.ru/post/131212, где я собирался показать, как «и ошибки удобно обрабатывать и exceptions при этом не использовать», да всё руки не доходили.

Итак, будем считать, что у нас ситуация, что «настоящие C++ exceptions» использовать нельзя — например, языком разработки является C или компилятор С++ для нашей платформы не поддерживает exceptions (или формально поддерживает, а реально этим пользоваться нельзя). Это, конечно, нетипично для desktop приложений, но вполне обычно для embedded разработки.
Читать дальше →

Насколько большие массивы (и значения) в PHP? (Подсказка: ОЧЕНЬ БОЛЬШИЕ)

Время на прочтение7 мин
Количество просмотров31K
В этой статье я хочу исследовать расход памяти у массивов (и значений в целом) в PHP используя следующий скрипт в качестве примера, который создаёт 100 000 уникальных целочисленных элементов массива и в конце измеряет количество использованной памяти.
Читать дальше →

Отладка программ на C для начинающих

Время на прочтение3 мин
Количество просмотров34K
… или что делать если «Hello world!» упала.

Всё последующее в основном написано для ОС Linux и консольной отладки, хотя кое-что можно использовать и в других условиях.
Читать дальше →

Загадочный язык программирования фреймворка Duqu определён

Время на прочтение2 мин
Количество просмотров7.8K
Две недели назад специалисты «Лаборатории Касперского» обратились к сообществу с просьбой помочь определить язык программирования, на котором написана троянская программа Duqu. Обнаруженная в октябре 2011 года, она до сих пор ставила в тупик экспертов.

«Лаборатория Касперского» сначала обратились к экспертам по реверс-инжинирингу, но те ничем не смогли помочь. Ясно было, что язык программирования — определённо не C++, не Objective C, не Java, не Python, не Ada, не Lua и ещё не 30 других языков программирования, которые они проверили. После нескольких месяцев безуспешных попыток анализа оставалось только предположить, что ключевой фрагмент вредоносной программы написан на неком неизвестном языке.

Однако, благодаря помощи сообщества эту головоломку всё-таки удалось решить.
Читать дальше →

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