Обновить
256K+

C++ *

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

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

Пишем свой парсер математических выражений и калькулятор командной строки

Время на прочтение14 мин
Охват и читатели28K


Примечание: полный исходный код проекта можно найти здесь.

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

Я размышлял над этой задачей, проводя инженерные разработки для моей магистерской работы. Оказалось, что я трачу много времени на поиск одних и тех же физических единиц измерения, чтобы проверить преобразования и правильность своих вычислений.
Читать дальше →

Наблюдения за «погодными условиями» в проекте с C++/CLI

Время на прочтение8 мин
Охват и читатели3.6K

Каждая команда в своей работе сталкивается с необходимостью внедрения новой технологии или языка программирования в проект. Иногда это внедрение проходит успешно, а иногда нет. В этой статье хотелось бы рассказать о нашем опыте использования C++/CLI.

Читать далее

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Время на прочтение8 мин
Охват и читатели9.9K
Всем привет!

Проблема использования С++ в микроконтроллерах терзала меня довольно долгое время. Дело было в том, что я искренне не понимал, как этот объектно ориентированный язык может быть применим к встраиваем системам. Я имею ввиду, как выделять классы и на базе чего составлять объекты, то есть как именно применять этот язык правильно. Спустя некоторое время и прочтения n-ого количества литературы, я пришёл к кое каким результатам, о чем и хочу поведать в этой статье. Имеют ли какую либо ценность эти результаты или нет — остается на суд читателя. Мне будет очень интересно почитать критику к моему подходу, чтобы наконец ответить себе на вопрос: «Как же правильно использовать C++ при программировании микроконтроллеров?».

Предупреждаю, в статье будет много исходного кода.
Читать дальше →

Снова про шаблоны C++ в микроконтроллерах

Время на прочтение5 мин
Охват и читатели12K

Идея использования шаблонов языка C++ для программирования контроллеров не является чем-то новым, в сети доступно большое количество материалов. Кратко напомню основные преимущества: перенос значительной части ошибок из runtime в compile-time за счет строгого контроля типов, а также приближение к объектно-ориентированному подходу, близкий и удобный многим, без необходимости хранения полей в статическом классе (все поля являются шаблонными параметрами). Однако стоит заметить, что практически все авторы по большому счету ограничиваются в своих работах примерами на работу с регистрами и портами ввода-вывода. В своей статье я хочу продолжить эти идеи.

Читать далее

Использование libpq в VisualStudio (Windows)

Время на прочтение2 мин
Охват и читатели14K

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

Я столкнулся с рядом проблем при попытке подключить libpq в VS 2017: начиная с несоответствия документации по данной API с инструкциями по подключению, заканчивая умолчанием некоторых ключевых моментов.

В общем по порядку.

Читать далее

«Любовь. Python. C++». Доклад Яндекса

Время на прочтение8 мин
Охват и читатели11K
Что связывает языки Python и C++? Как извлечь из этого выгоду лично для себя? На большой конференции Pytup Александр Букин показал способы, благодаря которым можно оптимизировать свой код, а также выбирать и эффективно использовать сторонние библиотеки.

— Всем привет, меня зовут Александр Букин, я разрабатываю Яндекс.Погоду. Вы еще можете знать меня как сооснователя Pytup. Также я состою в программных комитетах таких классных конференций, как PyCon.ru и YaTalks.

Сегодня мы с вами поговорим о любви Python и C++. А точнее — о том, что же их объединяет, эти два прекрасных языка и, на самом деле, еще C, и что мы можем почерпнуть из этих прекрасных отношений.
Читать дальше →

Запуск сложных C++ приложений на микроконтроллерах

Время на прочтение8 мин
Охват и читатели17K
image Сегодня никого не удивить возможностью разрабатывать на C++ под микроконтроллеры. Проект mbed полностью ориентирован на этот язык. Ряд других RTOS предоставляют возможности разработки на С++. Это удобно, ведь программисту доступны средства объектно-ориентированного программирования. Вместе с тем, многие RTOS накладывают различные ограничения на использование C++. В данной статье мы рассмотрим внутреннюю организацию C++ и выясним причины этих ограничений.
Читать дальше →

Автоматизация создания объектов при помощи конвейера

Время на прочтение4 мин
Охват и читатели2.4K

Привет, Хабр!

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

Введение

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

На примере транспортных средств.

Есть у нас набор атомарных компонентов:

class EngineA;

class EngineB;

class wheelsA;

class wheelsB;

class FrameA;

class FrameB;

и т.д.

Если нам нужна машина - мы просто объявляем класс Car, в котором есть нужный корпус, колеса, двигатель и т.д. Аналогично с какой-нибудь лодкой лодкой, мы бы объявили класс Boat, и быстренько набросали агрегацию нужных частей лодки. Если же нам нужна и лодка, и машина, и даже самолет - мы можем без проблем воспользоваться паттерном фабрика, но что делать, если нам нужны машины, лодки, самолеты, и мы заранее не знаем сколько, когда, и в каком порядке.

Читать далее

C++ в Практикуме. Как обучить студентов плюсам, не отпугивая

Время на прочтение8 мин
Охват и читатели31K

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

Меня зовут Антон Полднев, я уже давно пишу в Яндексе на C++ и руковожу сервисом, написанным на этом языке. Параллельно я учу других людей навыкам разработки. С 2016 года я вёл курсы на Coursera, затем мы их прокачали и сделали на их основе курс для Практикума. В этом посте я расскажу, как мы учим людей C++, а также про основные особенности этого языка. 

Читать далее

Vulkan. Руководство разработчика. Window surface

Время на прочтение6 мин
Охват и читатели9.8K


Я из IT-компании CGTribe и здесь я перевожу руководство к Vulkan API. Ссылка на оригинал — vulkan-tutorial.com.

Моя следующая публикация посвящена переводу главы Window surface из раздела Drawing a triangle, подраздела Presentation.

Содержание
Читать дальше →

Реализация многозадачности на функциональных очередях (без RTOS)

Время на прочтение8 мин
Охват и читатели6K

Когда необходимо выполнять несколько действий (процессов/задач) одновременно на микроконтроллере, обычно мы задумываемся об использовании RTOS (Real Time Operating System). RTOS обычно занимает несколько дополнительных килобайт памяти. В то же время для приложений RTOS может добавить больше сложности, в том числе при отладке.

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

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

Читать далее

Торговый робот CryptoShloma

Время на прочтение3 мин
Охват и читатели10K

Здравствуйте, дорогие читали!

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

В качестве краткой предыстории: на этапе бума криптодвижа, мы начали заниматься майнингом криптовалют (и по сей день продолжаем). Тогда мы ничего не знали о торговле на криптобирже и просто «намайненые» монетки обменивали по рыночному курсу и выводили по чуть-чуть, как в простом обменнике, плюс к этому добавлялся страх скачков курса монет, и поэтому не совались в торговлю. Накопив некоторую сумму, мы размышляли, как можно увеличить накопления пассивным способом, желательно при этом особо ничего не делая. И решили изучить тему торгов на криптобирже. Поскольку я по своей специальности программист-автоматизатор, то нам в голову пришла идея, а почему бы не написать программу, которая по определённому алгоритму торговала бы в автоматическом режиме и по возможности была сделана так, чтобы и деньги не теряла. В первую очередь была интересна идея, которая позволяла бы математически всегда работать в +, без исключения. Мы хотели найти «золотой грааль», хотя понимали, что, это конечно утопия. В данной идее мы сразу поняли, чтобы это реализовать, придётся пожертвовать временем, и в торгах и временем на разработку.

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

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

Мы захотели создать простой и математически эффективный алгоритм, по которому машина будет торговать 24/7, 365 дней в году, к которой надо подходить раз в пол года просто посмотреть на баланс и радоваться накоплениям:)

Читать далее

ARM и программирование без блокировок

Время на прочтение7 мин
Охват и читатели19K


Выпуск ARM-процессора Apple M1 вдохновил меня на то, чтобы написать в Твиттер про опасности программирования без блокировок (lock-free). Этот твит вызвал бурную дискуссию. Обсуждение прошло довольно неплохо, учитывая то, что попытки втиснуть в рамки Твиттера обсуждениие такой сложной темы, как модели памяти центрального процессора, — в принципе бессмысленны. Но у меня осталось желание немного раскрыть тему.

Этот пост задуман не только как обычная вводная статья про опасности программирования без блокировок (о которых я в последний раз писал около 15 лет назад), но и как объяснение, почему слабая модель памяти ARM ломает некоторый код, и почему этот код, вероятно, не работал изначально. Я также хочу объяснить, почему стандарт C++11 значительно улучшил ситуацию в программировании без блокировок (несмотря на возражения против противоположной точки зрения).
Читать дальше →

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

Разработка средств измерения температуры

Время на прочтение20 мин
Охват и читатели14K

Объект. Микроконтроллер ATmega16.

Предмете. Измерение температуры.

Цель. Измерение температуры контактным методом.

Задачи. Измерение температуры контактным методом, обработка измерительного сигнала с помощью микроконтроллера и вывода значения температуры на 7-сегментный дисплей.

Программное обеспечение:

1. Программная среда разработки AVRStudio или AtmelStudio, для разработки программ для МК AtmelAVR® (Atmel).

2. Стандартный Windows-приложение - калькулятор (Microsoft).

3. Пакет программ для автоматизированного проектирования электронных схем – Proteus DesignSuite CAD Software (Labcenter electronics).

Ход работы предусматривает последовательное выполнение рекомендаций и действий, описанных далее в этом проекте по пунктам.

Читать далее

Espressif IoT Development Framework: 71 выстрел в ногу

Время на прочтение29 мин
Охват и читатели6.6K

0790_Espressif_IoT_Development_Framework_ru/image1.png
Один из наших читателей обратил наше внимание на Espressif IoT Development Framework. Он нашёл ошибку в коде проекта и поинтересовался, смог бы её найти статический анализатор PVS-Studio. Именно эту ошибку анализатор пока найти не может, зато нашёл множество других. По мотивам этой истории и найденных ошибок, мы решили написать классическую статью про проверку открытого проекта. Приятного изучения того, из-за чего IoT устройства могут "выстрелить вам в ногу".

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

Демонстративно вертим массивы для новичков

Время на прочтение3 мин
Охват и читатели18K

Каждый кто изучает программирование сталкивается с массивами и рано или поздно сталкивается с задачей, которую не в силах решить.

В этом посте я расскажу о некоторых алгоритмах обработки массивов, которые объяснят новичку суть работы с этой не такой уж и страшной структурой.

Читать далее

Проект arataga: реальный пример использования SObjectizer и RESTinio для работы с большим количеством HTTP-соединений

Время на прочтение17 мин
Охват и читатели2.3K

В последние 4.5 года я много рассказывал на Хабре про такие OpenSource проекты, как SObjectizer и RESTinio. Но вот об использовании SObjectizer и/или RESTinio в реальных проектах пока еще ни разу не удавалось поговорить (была лишь одна статья от стороннего автора).

Причина простая: мы не можем обсуждать те проекты, в которых мы сами применяли SObjectizer/RESTinio, ибо NDA. Равно как и не можем рассказывать о тех чужих проектах, о которых узнали в частном общении. Так что с наглядными примерами использования SObjectizer/RESTinio в реальной жизни всегда была напряженка.

Дабы как-то улучшить ситуацию пару лет назад мы даже сделали небольшой демо-проект Shrimp и опубликовали здесь серию статей о нем (раз, два, три). Но все-таки это было не более чем демонстрация.

К счастью или к несчастью, но далеко не самый удачный 2020-й год предоставил нам возможность показать как же выглядит реальный проект, в разработке которого SObjectizer и RESTinio активно используются. И в данной статье я попробую рассказать о том, как и для чего SObjectizer и RESTinio применяются в arataga, исходники которого можно найти на GitHub.

Читать далее

Vulkan. Руководство разработчика. Устройства и очереди

Время на прочтение11 мин
Охват и читатели12K


Я переводчик из ижевской компании CG Tribe, и я продолжаю выкладывать перевод руководства к Vulkan API. Ссылка на источник — vulkan-tutorial.com.

В этой публикации представлен перевод последних двух глав раздела Drawing a triangle, подраздела Setup, которые называются Physical devices and queue families и Logical device and queues.

Содержание
Читать дальше →

Введение в Data Parallel C++. Пишем первую программу

Время на прочтение7 мин
Охват и читатели15K


Перед вами введение в программирование на языке Data Parallel C++ или, коротко, DPC++. DPC++ основан на Khronos SYCL — это означает, что перед нами модель современного параллельного программирования. Новейшим текущим стандартом Khronos является SYCL 1.2.1, хотя предварительная спецификация SYCL 2020 уже доступна для изучения. Intel и другие участники рабочей группы SYCL в настоящее время занимаются финализацией следующей версии спецификации. DPC++ содержит расширения, которые облегчают использование SYCL, при этом многие из них, как ожидается, войдут в состав SYCL 2020. Внедрение таких расширений в компилятор DPC++ помогает сообществу оценить их эффективность заранее перед стандартизацией.
Читать дальше →

Создаем Swift Package на основе C++ библиотеки

Время на прочтение5 мин
Охват и читатели6.9K

Данная статья поможет вам создать свой первый Swift Package. Мы воспользуемся популярной C++ библиотекой для линейной алгебры Eigen, чтобы продемонстрировать, как можно обращаться к ней из Swift. Для простоты, мы портируем только часть возможностей Eigen.

Читать далее