Обновить
256K+

C++ *

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

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

Автоматический контроль времени жизни общих C++-QML объектов

Время на прочтение6 мин
Охват и читатели11K
Речь пойдет об объектах, используемых в C++ и QML одновременно, верхушкой иерархии наследования которых является QObject. Насколько мне известно, реализации механизма автоматического контроля времени жизни таких объектов на уровне библиотеки не существует. Подобный механизм избавил бы от сложностей, возникающих при ручном контроле времени жизни объектов, а так же от потенциальных багов, утечек памяти и крешей приложения. В этой статье я опишу этапы реализации данного механизма, а так же проблемы, рассмотренные в процессе исследования данной проблемы.
Читать дальше →

Вычисление биномиальных коэффициентов… всё-таки программно

Время на прочтение4 мин
Охват и читатели8.2K
Ранее, в трёх статьях была затронута тема вычисления биномиальных коэффициентов.

Расчет биномиальных коэффициентов на Си (С++)
Расчет биномиальных коэффициентов с использованием Фурье-преобразований
Вычисление биномиальных коэффициентов… вручную

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

Выходу Dolphin Smalltalk 7 под Open Sourсe посвящается

Время на прочтение7 мин
Охват и читатели5.6K
На днях компания ObjectArts полностью открыла исходники и выпустила язык, и среду разработки Dolphin Smalltalk под открытой лицензией MIT! Я не смог пройти мимо, не попробовав проверить этот проект с помощью анализатора кода PVS-Studio. Могу поздравить разработчиков с тем, что у них получилось создать код высокого качества. Мне не удалось найти значимых ошибок. Однако как всегда есть некоторое количество багов и пахнущего кода. Надеюсь благодаря этой статье код станет чуть лучше.

О проекте


Dolphin Smalltalk — это среда разработки на собственном диалекте Smalltalk для Windows. Ключевыми особенностями является тесная интеграция с нативными виджетами и подсистемами операционной системы, включая COM и ActiveX, и приятный глазу графический дизайн.

Долгое время Dolphin Smalltalk был доступен в двух вариантах: условно-бесплатная ограниченная версия (community edition) и платный пакет для профессиональной разработки. Последний давал доступ ко всем функциям, включая продвинутые редакторы и публикацию приложений в standalone режиме, однако стоил около четырехсот долларов.

С помощью PVS-Studio 6.00 были проверены открытые исходники Dolphin Smalltalk Virtual Machine. Далее представлены результаты проверки статическим анализатором. Несмотря на то, что проект DolphinVM очень маленький, в его коде всё равно встречаются подозрительные места.
Читать дальше →

Слон и Моська, или подключение LCD к Attiny13A

Время на прочтение9 мин
Охват и читатели27K
Вновь приветствую читателей «Хабра»!

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

ProDBG переходит на Rust

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

Немного о ProDBG от переводчика и автора проекта


КДПВ ProDBG — это новый дебаггер, который сейчас разрабатывает Daniel Collin. Одна из целей проекта — поддержка множества архитектур и операционных систем. Изначально пишется на C/C++, заложена поддержка плагинов. На данный момент находится на ранней стадии разработки, и в основном нацелен на MacOS. Далее передаю слово автору поста.


Как известно тем из вас, кто читает меня в Твиттере, я не очень люблю C++. У него свои обычные проблемы с заголовочными файлами, отстойными шаблонами, и так далее. И большая проблема — найти альтернативу. Я рассматривал вариант перейти на C#, но сделать так, чтобы он хорошо заработал на всех платформах, кажется очень сложной задачей (например, на данный момент поддержка x86 на Mac практически отсутствует). К тому же некоторым людям такой выбор будет не по вкусу.

Мне нравится (Common) Lisp. Я восхищаюсь устройством его макросов, в нём есть та элегантность, которая встречается не во всех языках. Однако он кажется каким-то чужеродным для многих людей, так что вкладывать в проект станет намного сложнее. К тому же я хочу по возможности использовать язык без сборщика мусора, и хотя Lisp можно сильно ускорить, сделать это не так уж просто.
Читать дальше →

Низкоуровневая оптимизация параллельных алгоритмов или SIMD в .NET

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

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

Расчет биномиальных коэффициентов на Си (С++) и Python

Время на прочтение9 мин
Охват и читатели65K
При решении задач комбинаторики часто возникает необходимость в расчете биномиальные коэффициентов. Бином Ньютона, т.е. разложение image также использует биномиальные коэффициенты. Для их расчета можно использовать формулу, выражающую биномиальный коэффициент через факториалы: image или использовать рекуррентную формулу:image Из бинома Ньютона и рекуррентной формулы ясно, что биномиальные коэффициенты — целые числа. На данном примере хотелось показать, что даже при решении несложной задачи можно наступить на грабли.
Читать дальше →

Итоги 2015-го года для C++

Время на прочтение5 мин
Охват и читатели34K
Возможно, я скажу банальную вещь, но прошедший год был хорошим годом для С++!

Просто факты:
  • Вышла Visual Studio 2015 с отличной поддержкой возможностей С++14/17 и даже нескольких экспериментальных вещей
  • Вышел долгожданный GCC 5.0
  • С++ набрал серьёзную популярность. Где-то с июля — третье место в Tiobe Ranking
  • На конференции CppCon 2015 было сделано несколько важных анонсов


А теперь об этом и другом немного подробнее
Читать дальше →

Скриншотим игры — the hard way

Время на прочтение6 мин
Охват и читатели39K
Ну что такого сложного может быть в создании скриншота? Казалось бы — позови функцию, любезно предоставленную операционкой и получи готовую картинку. Наверняка многие из вас делали это не один раз, и, тем не менее, нельзя просто так взять и заскриншотить полноэкранное directx или opengl приложение. А точнее — можно, но в результате вы получите не скриншот этого приложения, а залитый черным прямоугольник.
Читать дальше →

Создание своего типа ассета в Unreal Engine 4 и кастомизация панели свойств

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


Здравствуйте меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Сегодня я хотел бы рассказать как в Unreal Engine создать свой тип ассета и как добавить дополнительный элемент на панель свойств ассета. Итак начнем.
Читать дальше →

Разработка цифровой аппаратуры на C++/SystemC глазами SystemVerilog программиста

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


SystemC это библиотека для C++ позволяющая моделировать всевозможные аппаратные системы на различном уровне абстракции. Поддерживается как традиционное дискретно-событийное моделирование, привычное программистам на Verilog и VHDL, так и аналоговое моделирование в духе SPICE/Verilog AMS. В комплект также входит библиотека и методология для виртуального прототипирования, библиотеки для написания тестовых окружений и верификации с использованием рандомизированных тестов.

В этой я расскажу о синтезируемом подмножестве SystemC, сравнивая его с синтезируемым SystemVerilog. Сам я пользуюсь SystemC уже где-то 3 года, а до этого несколько лет писал на Verilog/SystemVerilog. Попытаюсь охватить предмет с разных сторон: начиная с философских рассуждений о причинах возникновения SystemC, краткого обзора экосистемы и инструментария и заканчивая практическими примерами синтаксиса и семантики.

Подразумевается, что читатели знакомы с Verilog и C++.
Читать дальше →

Простые алгебраические типы данных

Время на прочтение12 мин
Охват и читатели37K
Это шестая статья из цикла «Теория категорий для программистов». Предыдущие статьи уже публиковались на Хабре:
0. Теория категорий для программистов: предисловие
1. Категория: суть композиции
2. Типы и функции
3. Категории, большие и малые
4. Категории Клейсли
5. Произведения и копроизведения

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

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

Произведение типов


Каноническая реализация произведения типов в языках программирования — это пара. В Haskell пара является примитивным конструктором типов, а в C++ это относительно сложный шаблон из стандартной библиотеки.
Pair
Строго говоря, произведение типов не коммутативно: нельзя подставить пару типа (Int, Bool) вместо (Bool, Int), хотя они и содержат одни и те же данные. Однако произведение коммутативно с точностью до изоморфизма, задаваемого функцией swap, которая обратна самой себе:
swap :: (a, b) -> (b, a)
swap (x, y) = (y, x)

Можно рассматривать такие пары как различные форматы хранения одной и той же информации, как big endian и little endian.
Читать дальше →

«Roslyn — еще очень сырая технология» — интервью с Сергеем Шкредовым, руководителем .NET-направления в JetBrains

Время на прочтение24 мин
Охват и читатели31K
Привет, это снова Без слайдов. Я Алексей Федоров, и на этот раз в гостях у меня побывал Сергей Шкредов, руководитель всего .NET-направления в компании JetBrains.



С Сергеем мы говорили:
  • о последних релизах ReSharer;
  • о новой схеме подписок и лицензий;
  • про непростые отношения с Microsoft;
  • о рантайме и развитии языка;
  • о том, как поменял ситуацию выход Roslyn;
  • о работе с фидбеком пользователей для улучшения продукта;
  • о планах развития других продуктов .NET стека;
  • о важности внутриотраслевого общения и обмена опытом;
  • про разработку продуктов для С++;
  • немного о ReSharper C++, на который должны подсесть даже разработчики Microsoft;
  • О том, как пользователи почувствуют изменения;
  • Как ReSharper будет развиваться дальше.


Вот видео



Под катом — текстовый вариант интервью.

Читать интервью...

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

Сравнение алгоритмов сортировки

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

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

В данной статье постараемся это выяснить. Для обеспечения наилучших результатов все представленные алгоритмы будут сортировать целочисленный массив из 200 элементов. Компьютер, на котором будет проводится тестирование имеет следующие характеристики: процессор AMD A6-3400M 4x1.4 GHz, оперативная память 8 GB, операционная система Windows 10 x64 build 10586.36.
Читать дальше →

Компилируем С\С++ код в WebAssembly

Время на прочтение6 мин
Охват и читатели20K
WebAssembly — это новый бинарный формат, в который могут быть скомпилированы веб-приложения. Он проектируется и реализуется прямо в тот момент, когда вы читаете эти строки и двигают его вперёд разработчики всех основных браузеров. Всё меняется очень быстро! В этой статье мы покажем текущее состояние проекта с достаточно глубоким погружением в инструментарий по работе с WebAssembly.

Для того, чтобы WebAssembly заработал, нам нужны две основных компоненты: инструменты для сборки кода в бинарник формата WebAssembly и браузеры, способные этот бинарник загрузить и выполнить. И то, и другое ещё не полностью создано и очень сильно зависит от завершения работы на спецификацией WebAssembly, но в общем-то это отдельные компоненты и их развитие идёт параллельно. Это разделение — хорошая вещь, оно позволит компиляторам создавать WebAssembly-приложения, способные работать в любом браузере, а браузерам — запускать WebAssembly-программы не зависимо от того, каким компилятором они были созданы. Другими словами — мы получаем открытую конкуренцию инструментов разработки и браузеров, что непрерывно будет двигать всё это вперёд, принося конечному пользователю отличный выбор. Кроме того, такое разделение позволяет командам разработчиков инструментария и браузеров работать параллельно и независимо.

Новый проект на стороне инструментарий WebAssembly, о котором я хочу сегодня рассказать, называется Binaryen. Binaryen это библиотека для поддержки WebAssembly в компиляторах, написанная на С++. Если вы лично не работаете над компилятором WebAssembly, то вам, вероятно, не нужно напрямую знать что-либо о Binaryen. Если вы используете какой-нибудь компилятор WebAssembly, то он, возможно, под капотом использует Binaryen — мы рассмотрим примеры ниже.
Читать дальше →

Intel® Tamper Protection Toolkit — обфусцирующий компилятор и средства проверки целостности кода

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

Совсем недавно компания Intel выпустила очень интересный набор инструментов для разработчиков программного обеспечения, позволяющий добавить защиту программного кода от взлома и существенно усложнить жизнь взломщикам программ. Этот набор включает в себя обфусцирующий компилятор, средство для создания файла подписи, используемого для проверки целостности загружаемых динамических библиотек, а также библиотеку функций проверки целостности и дополнительные полезные инструменты. Intel® Tamper Protection Toolkit beta можно совершенно бесплатно скачать на сайте Intel.
Читать дальше →

Как мы распаковку игры автоматизировали

Время на прочтение4 мин
Охват и читатели14K
Мое хобби, помимо программирования — разработка модификаций под игру S.T.A.L.K.E.R. Работаем мы в команде, где, как и принято, каждый отвечает за что-то свое. Я, помимо того, что вхожу в круг разработчиков, еще и осуществляю разработку ПО для команды. Под катом читайте, как мы автоматизировали распаковку игровых архивов, с какими проблемами столкнулись и как их решили.
Читать дальше →

Распараллеливание алгоритма Штрассена на Intel® Xeon Phi(TM)

Время на прочтение6 мин
Охват и читатели20K
Сопроцессоры Intel Xeon Phi(TM) представляют собой PCI Express устройство и имеют x86 архитектуру, обеспечивая высокую пиковую производительности — до 1,2 терафлопс (триллион операций с плавающей запятой в секунду) двойной точности на сопроцессор. Xeon Phi(TM) может обеспечивать одновременную работу до 244 потоков, и это нужно учитывать при программировании для достижения максимальной эффективности.

Недавно мы вместе с компанией Intel проводили небольшое исследование эффективности реализации алгоритма Штрассена для сопроцессора Intel Xeon Phi(TM). Кому интересны тонкости работы с этим устройством и просто любящих параллельное программирование, прошу под кат.


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

Конференция C++ Russia 2016, Санкт-Петербург

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

Всем привет!

26-27 февраля 2016 в Санкт-Петербурге пройдет крупнейшая в России конференция, посвященная исключительно C++. Мы постарались собрать лучшие доклады и охватить самые разные темы: от хардкорных корутин до энтерпрайзного мокирования, от создания краш-репортов до реактивного программирования. Кроме того, поговорим о boost, обсудим что происходит со стандартизацией параллельного программирования в C++, рассмотрим некоторые ежедневные проблемы, например, работу с С-строками. В этот раз мы опять попробуем устроить блиц-доклады, но этот раз на них можно регистрироваться заранее (хоть сейчас). Будет в этом году и кое-что совсем новое.

Интересно? Подробности под катом!
Читать дальше →

Сравнительный анализ языков C# и C++

Время на прочтение9 мин
Охват и читатели18K
Давайте взглянем на эти два языка внимательнее. Что важно для прилежного программиста? Чтобы его код был удобочитамым, дабы в любой момент, спустя любое время можно было изменить этот код.

C++


Чему учит нас C++, что он нам говорит, какие парадигмы он воздвигает?

1. Что можно именовать типы, методы и переменные маленькими буквами

        std::list<std::string> L;
	L.push_back(50);
	L.push_front(-50);

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

А то, что, во-первых, C++ не различает контекст типа и контекст переменной и функции! И вы не можете никак взять и объявить поле, скажем, size size или point point! Поэтому, имеет смысл именовать функции и переменные маленькими буквами, но только если тип именуется в стиле C#, а именование типа маленькими буквами портит весь смысл такого действия! А смысл заключается в невозможности пересечения имени типа и его членов!

Ну, а во-вторых, именование как C#, выглядит солиднее, красивее.

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