Обновить
128K+

C++ *

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

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

Аккуратнее с vtable, или как выстрелить себе в ногу обновлением библиотеки

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

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


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

Баги, которые разрушили ваш замок

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

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C
  1. D как улучшенный C
  2. Баги, которые разрушили ваш замок
  3. Портируем make.c на D

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


А может, дело не в вас? Я покажу вам, что эти ошибки не ваша вина: это вина инструментов, и если только улучшить инструменты, то ваш замок будет в безопасности.


И вам даже не придётся идти ни на какие компромиссы.

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

D как улучшенный C

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

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C

Язык D был с самого начала спроектирован так, чтобы легко и напрямую обращаться к C и, в меньшей степени, C++. Благодаря этому в нём доступны бесчисленные C-библиотеки, стандартная библиотека C и конечно же системные API, которые как правило построены на API языка C.


Но C — это не только библиотеки. На C написаны многие большие и неоценимо полезные программы, такие как операционная система Linux и значительная часть программ для неё. И хотя программы на D могут обращаться к библиотекам на C, обратное неверно. Программы на C не могут обращаться к коду на D. Невозможно (или по крайней мере очень сложно) скомпилировать несколько файлов на D и слинковать их в программу на C. Проблема в том, что скомпилированные файлы на D могут обращаться к чему-то, что существует только в рантайме D, а добавлять его в линковку обычно оказывается непрактично (рантайм довольно объёмный).


Также код на языке D не может существовать в программе, если D не контролирует функцию main(), потому что именно так происходит запуск рантайма D. Поэтому библиотеки на D оказываются недоступны для программ на C, а программы-химеры (смесь C и D) становятся непрактичными. Нельзя взять и «просто попробовать» язык D, добавляя модули на D в существующие модули программы на C.


Так было до тех пор, пока не появился Better C.

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

Source Modding — Часть 2 — Всё есть сущность

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

В предыдущей части урока мы научились базовой работе с VPC и печати сообщений в консоль разработчика.


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


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

Source Modding — Часть 1 — Основы основ

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

В мире существует множество игровых движков, но нет ни одного движка, похожего на Source своей историей и особенностями.


В этом (пилотном) уроке мы разберем простейшие действия с исходными кодами SDK, а также внесем наше первое изменение в код Half-Life 2.


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

Код игры Command & Conquer: баги из 90-х. Том второй

Время на прочтение13 мин
Охват и читатели12K
image1.png

Американская компания Electronic Arts Inc (EA) выложила в открытый доступ исходный код игр Command & Conquer: Tiberian Dawn и Command & Conquer: Red Alert. В исходном коде было обнаружено несколько десятков ошибок с помощью анализатора PVS-Studio, поэтому встречайте продолжение описания найденных дефектов.
Читать дальше →

Отображение данных в формате json на структуру c++ и обратно (работа над ошибками)

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

Предыдущий вариант решения задачи отображения между структурой с++ и json получился как первый блин — комом. К счастью, разработка — процесс итерационный, и за первой версией всегда будет вторая. Комментарии (спасибо всем) и анализ дырок в первом блине позволили кое-что улучшить.

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

Работаем в IntelliJ IDEA на слабом железе

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

Обнаружил секретный репозиторий на гитхабе JetBrains под названием Projector. Благодаря нему написал кусок кода в IntelliJ IDEA, запущенной на Android-планшете. Рассказываю, как это повторить.


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

Как мы обучили сфинкса для голосового помощника

Время на прочтение6 мин
Охват и читатели5.4K
В процессе разработки проекта «голосовой помощник» одним из требований была возможность распознавания управляющих команд в оффлайн режиме. Это было нужно, так как в противном случае пришлось бы постоянно слушать и посылать поток с аудиоданными на распознавание, получать ответ и анализировать его.

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


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

Использование C и C++ в Data Science для новичков

Время на прочтение11 мин
Охват и читатели27K
Решим классическую задачу Data Science на C99 и C++11.

В то время как такие языки как Python и R становятся все более популярными для науки о данных, C и C++ могут быть сильным выбором для эффективного решения задач в Data Science. В этой статье мы будем использовать C99 и C++11 для написания программы, работающей с квартетом Энскомба, о котором я расскажу далее.

О своей мотивации к постоянному изучению языков я написал в статье, посвященной Python и GNU Octave, которую стоит прочитать. Все программы предназначены для командной строки, а не для графического интерфейса пользователя (GUI). Полные примеры доступны в репозитории polyglot_fit.

Задача по программированию


Программа, которую вы напишете в этой серии:

  • Считывает данные из CSV-файла
  • Интерполирует данные прямой линией (т.е., f(x)=m ⋅ x + q).
  • Записывает результат в файл изображения
Читать дальше →

PVS-Studio теперь в Compiler Explorer

Время на прочтение4 мин
Охват и читатели5.7K
image1.png

Совсем недавно произошло знаменательное событие: PVS-Studio появился в Compiler Explorer! Теперь вы можете быстро и легко проанализировать код на наличие ошибок прямо на сайте godbolt.org (Compiler Explorer). Это нововведение открывает большое количество новых возможностей – от утоления любопытства по поводу способностей анализатора до возможности быстро поделиться результатом проверки с другом. О том, как использовать эти возможности, и пойдёт речь в этой статье. Осторожно – большие гифки!
Читать дальше →

IDA Pro: каким не должен быть SDK

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

Приветствую,



Эта статья будет о том, как не нужно делать, когда разрабатываешь SDK для своего продукта. А примером, можно даже сказать, самым ярким, будет IDA Pro. Те, кто хоть раз что-то разрабатывал под неё и старался поддерживать, при чтении этих строк, наверняка, сейчас вздрогнули и покрылись холодным потом. Здесь я собрал опыт сопровождения проектов, начиная с IDA v6.5, и заканчивая последней на момент написания статьи версии — v7.5. В общем, погнали.

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

О нет! Моя Data Science ржавеет

Время на прочтение9 мин
Охват и читатели10K
Привет, Хабр!

Предлагаем вашему вниманию перевод интереснейшего исследования от компании Crowdstrike. Материал посвящен использованию языка Rust в области Data Science (применительно к malware analysis) и демонстрирует, в чем Rust на таком поле может посоперничать даже с NumPy и SciPy, не говоря уж о чистом Python.


Приятного чтения!
Читать дальше →

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

Game of Life с битовой магией, многопоточностью и на GPU

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

Всем привет!


Недавняя статья на Хабре в очередной раз показала неостывающий интерес к игре «Жизнь» в частности и всевозможным оптимизациям в общем. Статья и комментарии к ней, особенно любопытство к вычислениям на GPU, вдохновили меня на то, чтобы поделиться своими изысканиями на данном поприще и, забегая вперёд, скажу, что повествование пойдёт о расчётах на GPU, битовой магии, многопоточности и огромных полях для игры «Жизнь», порядка миллиарда клеток.


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

Хеш-таблицы

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

Предисловие


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


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


image

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

Ох уж этот std::make_shared…

Время на прочтение6 мин
Охват и читатели47K
C++ Core Guidelines содержат правило R22, предписывающее использовать std::make_shared вместо вызова конструктора std::shared_ptr. В Core Guidelines приводится всего лишь один аргумент за такое решение — экономия на аллокации (и деаллокации).

А если копнуть чуть глубже?
Читать дальше →

IDA Pro: работа с библиотечным кодом (не WinAPI)

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

Всем привет,



При работе в IDA мне, да и, наверняка, вам тоже, часто приходится иметь дело с приложениями, которые имеют достаточно большой объём кода, не имеют символьной информации и, к тому же, содержат много библиотечного кода. Зачастую такой код нужно уметь отличать от написанного пользователем. И, если на вход библиотечного кода подаются только int, void * да const char *, можно отделаться одними лишь сигнатурами (созданные с помощью FLAIR-утилит sig-файлы). Но, если нужны структуры, аргументы, их количество, тут без дополнительной магии не обойдёшься… В качестве примера я буду работать с игрой для Sony Playstation 1, написанной с использованием PSYQ v4.7.

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

Как первокурсники Питерской Вышки за семестр написали торрент-клиент, анализатор кода, фоторедактор и не только

Время на прочтение6 мин
Охват и читатели11K
Учиться программированию, изучая только теорию, — это то же самое, что учиться играть на рояле, слушая лекции об игре на рояле. Первокурсники «Прикладной математики и информатики» в Питерской Вышке начинают изучать C++ в первом семестре. В дополнение к домашним работам с февраля они пишут на С++ семестровые командные проекты. Тему ребята придумывают самостоятельно, от игр и игровых движков до собственного анализатора кода.

Под катом подробности внутренней кухни: рассказ о том, как была устроена работа над проектами. 

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

Учебник по симулятору сети ns-3 теперь одним pdf-файлом

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


После завершения публикации перевода заключительных глав учебника, хочу предложить его уже в виде единого pdf-файла, снабженного оглавлением и алфавитным указателем. Файл на Google-диске: учебник.

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

Учебник по симулятору сети ns-3. Заключительные главы 8, 9

Время на прочтение11 мин
Охват и читатели1.7K
image
[главы 1,2]
[глава 3]
[глава 4]
[глава 5]
[глава 6]
[глава 7]

Глава 8 Сбор информации
8.1 Мотивация
8.2 Пример кода
8.3 GnuplotHelper
8.4 Поддерживаемые типы трасс
8.5 FileHelper
8.6 Итоги
Глава 9 Заключение
9.1 На будущее
9.2 Завершение

Глава 8 Сбор информации


В последней главе этого руководства представлены некоторые компоненты, которые были добавлены в ns‑3 в версии 3.18 и те, что сейчас находятся в стадии разработки. Этот раздел также находится в стадии разработки.
Читать дальше →