Желание написать об C++ API у меня возникло давно, и вот наконец выдался спокойный вечер. По роду деятельности я и мои ребята пишем код на C++ для программистов на C++ и Python, общее ядро функционала, который используется во всех продуктах нашей компании. Разумеется это подразумевает, что код должен иметь интуитивно понятный API, с общей логикой как для низкоуровневого C++, так и для высокоуровневого Python, вне зависимости от разночтения в языках некоторых базовых конструкций. Об объединении C++ и Python я много писал ранее в статьях про Boost.Python, сейчас я очень благодарен архитектуре и логике языка Python, я многое понял и перенял в С++ именно благодаря опыту построения общего API для этих двух таких разных языков, но сейчас речь пойдёт только и исключительно о C++, про API и про то, что такой зверский гибкий язык позволяет сделать с интерфейсом вашей замечательной библиотеки, если не учитывать ряд важных особенностей языка C++.
Читать полностью »
Рубрика «С++» - 19
О бедном C++ API замолвите словцо!
2014-07-11 в 0:16, admin, рубрики: api, c++, архитектура, дизайн api, принципы проектирования, Программирование, разработка, С++Накануне Tizen Developer Summit Russia 2014
2014-07-07 в 14:50, admin, рубрики: challenge, html5, javascript, mobile development, Samsung, tizen, tizen sdk, Tizen TV, Блог компании Samsung, конкурс, мобильная разработка, С++ Привет!
Сегодня у нас очень много новостей. Это и Tizen Developer Summit Russia в Москве, и Tizen Hackathon сразу после этого, и Tizen TV SDK.
Но… обо всём по порядку.
Читать полностью »
ZeptoLab и Codeforces объединяют усилия
2014-06-09 в 15:01, admin, рубрики: android, Android NDK, challenge, codeforces, framework, iOS, mobile games, Zeptolab, Блог компании ZeptoLab, Разработка под android, разработка под iOS, С++, метки: android, Android NDK, challenge, codeforces, framework, iOS, mobile games, Zeptolab, С++Ох и давненько мы не радовали читателей чем-нибудь свеженьким — за это время накопилось много того, чем делиться хочется. И мы не будем себя в этом сдерживать!
Эта статья будет интересна скорее разработчикам, ну а также всем тем, кто неравнодушен к прекрасному, происходящему по ту сторону игр.
У нас много новостей: мы серьезно выросли за этот период и перешагнули отметку в 80 человек, захватили практически весь этаж в БЦ и по традиции дали нашим художникам возможность оформить новое пространство с присущим им вкусом:
Выпустили Cut The Rope “Time Travel” и Cut The Rope 2 c уже всемирно полюбившимися персонажами:
Ну и, разумеется, в моменты релиза офис угощался специально обученными ОмНомовидными пироженками.
Сейчас у нас ведется разработка никак не связанных с Cut The Rope игр, которые свет увидит чуть позже (пока сохраним интригу).
За прошедший год мы существенно доработали и обкатали внутренний фреймворк, позволяющий писать весь игровой код на С++ и собирать билды сразу под iOS и Android. Также за прошедший год мы стали активно использовать возможности C++11, и, несмотря на очевидное количество legacy-кода в самом фреймворке, использование возможностей C++11 в проектном коде новых тайтлов становится нашим стандартом. Параллельно мы рассматриваем прочие средства разработки, например Unity. Однако, в нашем фреймворке есть ряд приимуществ, отказываться от которых так просто не хочется.Читать полностью »
Самый короткий веб-сервер на с++
2014-03-25 в 18:54, admin, рубрики: c++, библиотека с++, ненормальное программирование, Программирование, С++, сервер, метки: библиотека с++, Программирование, С++, серверВ предыдущей статье я рассказал, как написать простой сервер для передачи одного файла по протоколам http и https. Прошло немного времени и я решил сделать из этого кода универсальную библиотеку для быстрого создания серверов.
Полный код библиотеки можно посмотреть на гитхабе, а если в двух словах, то я добавил немного «египетских скобок», новомодных лямбда-функций и шаблонов. На сегодняшний день результатом стала кроссплатформенная библиотека для создания асинхронных серверов, состоящая из 5 файлов с общим размером 22.5 килобайт. Версия библиотеки для Линукс состоит из одного файла размером 18 килобайт (517 строк кода).
В этой статье я коротко расскажу как работает библиотека и покажу, как с ее помощью написать полностью работоспособный веб-сервер для статических сайтов.
Читать полностью »
Множественный выбор в QComboBox
2014-03-10 в 23:10, admin, рубрики: c++, qt, Qt Software, весна, медведи, природа, Программирование, С++, метки: Qt, весна, медведи, природа, С++
Картинка для привлечения внимания
(возможно имеющая отношение к посту)
Иногда, довольно удобным бывает возможность множественного выбора в виджете QComboBox. В этом небольшом туториале будет показано, как это cделать.
Читать полностью »
Кроссплатформенный сервер с неблокирующими сокетами. Часть 4
2014-02-20 в 9:53, admin, рубрики: c++, SSL, tcp, неблокируемые сокеты, ненормальное программирование, Программирование, С++, сервер, метки: SSL, tcp, неблокируемые сокеты, С++, сервер Эта статья продолжает мои предыдущие:
Простейший кросcплатформенный сервер с поддержкой ssl
Кроссплатформенный https сервер с неблокирующими сокетами
Кроссплатформенный https сервер с неблокирующими сокетами. Часть 2
Кроссплатформенный https сервер с неблокирующими сокетами. Часть 3
В своих статьях я поэтапно расписываю процесс создания однопоточного кроссплатформенного сервера на неблокирующих сокетах.
Во всех предыдущих статьях, сервер принимал и отправлял сообщения только по ssl протоколу. В этой статье я опишу добавление в сервер поддержки обычного нешифрованного tcp протокола и научу сервер отправлять в браузер графический файл.
Но сначала немного пройдусь по комментариям к предыдущим статьям.
Читать полностью »
C++ IDE от JetBrains: когда же?
2014-02-10 в 14:00, admin, рубрики: c++, IDE, jetbrains, Блог компании JetBrains, Программирование, С++, метки: IDE, jetbrains, С++После нашей удачной первоапрельской шутки нас регулярно спрашивают, когда же мы выпустим C++ IDE. Понятно, что все, кто пишет под Linux, давно ждут такую среду разработки, да и альтернатива имеющимся в Windows и Mac OS никому не помешает.
C++ IDE — это отдельный продукт, она основана на платформе IntelliJ, как и прочие наши IDE. Поддержка C++ в ReSharper — это совершенно другая тема, и про нее мы отдельно напишем (не сегодня).
О вольностях в ссылках или простейший обмен сообщениями
2014-02-05 в 11:25, admin, рубрики: c++, c++11, callback, callbacks, event-driven, С++, сообщения, метки: c++11, callback, callbacks, event-driven, С++, сообщения Обмен сообщениями достаточно фундаментальная вещь в науке Computer Science. Будем рассматривать её в приближении к событийно-ориентированному программированию (event-driven). Терминология, возможности и реализации могут отличаться: события (events), сообщения (messages), сигналы/слоты (signals/slots) и callbacks. В целом суть, что с приходом события запускается ответная реакция.
Сама система обмена сообщениями в статье послужила демонстрацией вольной, но допустимой интерпретации ссылок/указателей, упрощающей код. Получившаяся система тривиальна и умеет только регистрировать обработчик на определённый код сообщения и посылать сообщения с таким кодом.
Допустим что обработчики нетривиальные, а сообщений немного. И что мы сами генерируем сообщения и они не приходят нам по сети, например. В таком случае хочется иметь что-то более удобное с явными объявлениями переменных в сообщении. Например, нечто подобное:
StringMessage* str_message = ...;
send(my_message);
...
void handle_message(const Message* message) {
assert(message);
const StringMessage* str_message = dynamic_cast<const StringMessage*>(message);
assert(str_message);
std::cout << str_message->message ...
}
Но хочется убрать проверочный код, не имеющий отношения к логике работы, под капот. Заменим поэтому указатель на ссылку, показав что в обработчик точно приходит объект, а не NULL nullptr. И пусть обработчик сразу принимает требуемый им тип сообщения.
void handle_message(const StringMessage& message) {
...
}
Как осуществить задуманное и поддержать другие возможные классы сообщений?
Читать полностью »
Простейший кросcплатформенный сервер с поддержкой ssl
2014-02-05 в 11:12, admin, рубрики: c++, linux, openssl, Visual Studio, windows, кроссплатформенная разработка, Программирование, С++, сервер, метки: linux, openssl, windows, кроссплатформенная разработка, С++, сервер Не так давно передо мной встала задача: написать кроссплатформенный сервер для обработки запросов по протоколу ssl. До этого я писал сервера для обычных, не шифрованных протоколов, но с ssl столкнулся впервые.
Беглый обзор интернета показал, что лучшим решением будет не велосипедостроение, а использование библиотеки OpenSSL.
В этой статье я не хочу рассматривать процесс установки OpenSSL на Linux и Windows, замечу лишь, что для Windows процесс этот оказался нетривиальным. А рассказать я хочу о том, как мне удалось скомпилировать в Visual Studio пример простейшего сервера, входящий в состав исходников OpenSSL.
Неискушенному читателю может показаться: «что тут особенного — создал проект, включил в него готовый исходник, запустил»… Однако обо всем по порядку.
Результаты конкурса на самый глючный код C++
2014-01-27 в 15:19, admin, рубрики: c++, ненормальное программирование, С++, метки: С++После продолжительного обсуждения объявлены победители конкурса Grand C++ Error Explosion Competition. Награды должны были объявить в двух номинациях. Участники первой соревновались по максимальному количеству ошибок на минимальный объём кода. Вторая номинация — творческая, там важно не количество и размер, а качество и красота глюков.
В итоге, абсолютным победителем назван программист Эд Хэнвей (Ed Hanway), приславший такую программу.
#include ".//.//.//.//jeh.cpp"
#include "jeh.cpp"
`