среда, 21 декабря 2011 г.

Лямбды в C++11 - тонкости использования

Переходя от теории к практике, при применении лямбд со списками захвата надо соблюдать известную осторожность. Вызвано это особенностями их реализации, прописанными в стандарте. А именно: лямбда-функция, имеющая список, захвата, это (по своей сути) экземпляр локального класса, объявленного внутри той функции/блока, где она определяется. Выход за границы этого блока череват тем, что некоторые захваченные переменные станут невалидными. И если для простых случаев, когда лямбда просто возвращается из метода, всё более-менее очевидно, то для случаев, когда лямбда-функция (её экземпляр) сохраняется в теле класса, могут быть неожиданности.


четверг, 15 декабря 2011 г.

Qt 4.8.0 Released

Из блога Qt:


Qt 4.8.0 Released:
Qt has reached another important evolutionary milestone today. We are very proud to announce that Qt 4.8.0 has now been released. Many people have worked long and hard to deliver Qt 4.8.0. Today that hard work reaches final release maturity, and we are celebrating!

Featuring Qt Platform Abstraction, threaded OpenGL support, multithreaded HTTP and optimized file system access, Qt 4.8.0 can be downloaded as binary or source packages (Qt Download Page).

Content


Those of you that have been testing and using Qt 4.8 through its earlier stages will know the key benefits it brings. If you haven’t been following it, here are some key features that are new in Qt 4.8.0:


  • Qt Platform Abstraction (QPA)


    QPA restructures the GUI stack to enable easier porting of Qt to different windowing systems and devices. More info on: Lighthouse has grown up now.

  • Threaded OpenGL support


    Enables those of us that are not OpenGL-ninjas to render OpenGL from more than one thread concurrently. More info on: Threaded OpenGL in 4.8.

  • Multithreaded HTTP


    HTTP requests are now handled in a separate thread by default. This should make application guis smoother, as networking will no longer use the main event loop.

  • Optimized file system access


    The file system stack received some heavy lifting under the hood. The result is better I/O performance, achieved by reducing the number of system calls performed for I/O and by better use of cached data, when available. The improvements in performance can be seen across all platforms.

Qt 4.8.0 ships with QtWebKit 2.2.1. More details of the major changes can be found in the Qt 4.8 beta blog post.

Downloads


The source and binary packages for Qt 4.8.0 can be downloaded from the Qt Download Page. The source code can also be found in the public repository, where the “v4.8.0″ tag matches the released packages. Please note that the documentation has been moved to Qt Developer network, as part of moving Qt to the Qt Project.

Feedback


Thanks for all the feedback and contributions to Qt 4.8 so far. Further feedback can be provided in the Qt Bug Tracker.

Qt Project


We have started looking into moving Qt 4 to the Qt Project, which will make it simpler for you to contribute changes using Gerrit (the same infrastructure as used for Qt 5 already). This might take some time, but we are eager to see it happen.

суббота, 10 декабря 2011 г.

Алиса научилась говорить

Случилось это вчера, в 5 часов утра. Первым словом, конечно, было не "МамаПапа" :) . Первый законченный диалог выглядел следующим образом:

You > Боб это женщина?
Alice > Echo: Боб это женщина?
Alice > <no lexical label for Predicate Category> это <no lexical label for 'False' category>
You > Мэри это женщина?
Alice > Echo: Мэри это женщина?
Alice > <no lexical label for Predicate Category> это <no lexical label for 'True' category>

Очевидно, требуются пояснения - а кто такая Алиса? Точнее, кто такая Элис? Это вольная транскрипция известной в IT-кругах аббревиатуры A.L.I.C.E. - "Artifical Linguistic Internet Computer Entity". Конечно, в сеть Алисе выходить пока рано (в силу возраста и возможностей), но вот остальные четыре слова к ней уже применимы. Вполне себе рукотворная, компьютерная сущность, умеющая понимать (пока) простейшие вопросы в форме "подлежащее-сказуемое-дополнение", "осозновать" (т. е. анализировать) их, и формулировать в ответ такие же трёхкомпонентные утверждения. Из приведённого выше диалога можно заметить, что ALICE не знает, какое слово в русском языке соответствует понятию "предикат", а также понятием "Ложь" и "Истина". Но это не мешает ей/ему преобразовать некое утверждение из абстрактного вида в текстовый. 

суббота, 3 декабря 2011 г.

Реализация обобщённой pimpl-идиомы от Герба Саттера


Известный гуру C++ поделился своей идеей обобщённой реализации pimpl-идиомы с использованием возможностей нового стандарта. Основная задача, решаемая этой реализацией - это, на самом деле, упростить декларацию классов с pimpl-реализациями и пробросом параметров конструкторов. От реализации интерфейсных методов посредством делегирования разработчик всё равно не избавлен. Но, хоть что-то. :)

GotW #101: Solution:
The solution to GotW #101 is now live.


Filed under: C++






Для понимания этого материала также полезна эта ссылка:


GotW #100
в которой объясняется общий подход к использованию этой идиомы в разработке.
Но у предложенного Саттером обобщенного класса pimpl есть один существенный недостаток, который практически исключает его использование в реальной разработке.

воскресенье, 27 ноября 2011 г.

QtCreator - "второй" взгляд

На "второй" взгляд, Qt Creator оказался ненамного хуже (в использовании) своего более мощного собрата - Visual Studio. В плане разработке на C++, конечно же. После лёгкого допила в плане поддержки определения типов переменных в auto-декларациях, работать стало совсем кофортно. Из IntelliSence немного напрягающем (помимо изветных багов, которые нокиевцы активно правят) осталось только невозможность добавить декларацию метода в класс из точки его использования (потенциально реализовать такой функционал можно). С другой стороны, есть приятная фишка синхронизации декларации и заголовка определения метода при изменении одного из них. Фишка удобная и полезная.

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

пятница, 25 ноября 2011 г.

Вышел «Крутой Сэм-3»

Компьюлента пишет:

Вышел «Крутой Сэм-3»:
Сэмюэль Стоун, гроза пришельцев, вернулся, сообщает компания «1С-СофтКлаб». Сегодня в продажу поступила локализованная ПК-версия игры. Западный релиз, напомним, состоялся 22 ноября. В списке платформ — ПК, PlayStation 3 и Xbox 360, но даты консольного выпуска ещё уточняются.

Про user-defined literals в новом стандарте (C++11)

Using The C++ Literal Operator

Overview

The C++11 standard has added a new operator that can be overloaded. Literals in programming languages are hard-coded constants in programs. For example, writing 1.2L, "Hello World!", 4096, etc. are all literals (i.e., the first is a long double value, the second is a const char[13] value, and the third is an int). The C++11 standard allows one to define custom literal types that can be transformed at compile-time or run-time into appropriate values. This post explores such using g++ v4.7 snapshot 20111029.

Полностью читать здесь: http://preney.ca/paul/2011/11/01/using-the-cpp-literal-operator/

четверг, 24 ноября 2011 г.

Как выглядит будущее: В России разработан инновационный «туманный экран»

В России разработан инновационный «туманный экран»:
Система, созданная астраханской компанией Displair, проецирует изображение на «экран» из холодного тумана, позволяя осуществлять управление при помощи мультитач-жестов непосредственно в воздухе.

C++ / C++0x. Лямбда-выражения

Достаточно древний материал (аж 2009-го года), но может быть полезным.

C++ / C++0x. Лямбда-выражения: Буквально на днях случайно наткнулся на Хабре на статью о лямбда-выражениях из нового (будущего) стандарта C++. Статья хорошая и даёт понять преимущества лямбда-выражений, однако, мне показалось, что статья недостаточно полная, поэтому я решил попробовать более детально изложить материал.



Qt Creator 2.4.0 rc released

Отправлено вам пользователем Flex Ferrum через Google Reader:

источник: Qt Labs Blog, Автор: Eike Ziller, дата: 16.11.11

Four weeks after we released the Qt Creator 2.4.0 beta, and almost the same time after the big news that we went open governance with the "Qt Project", we publish the Qt Creator 2.4.0 release candidate today. If you haven't read yet what is new in 2.4 I recommend the the beta blog post to you. The release candidate adds lots of bug fixes on top if it, and we consider it "almost done".
So, if you really want to help us, take one of the release candidate packages, give it a test, and report all issues you find to us on our bug tracker :)
Download Qt Creator 2.4.0 RC

Здесь вы можете:

И на Солнце есть пятна

И в сервисах Google есть баги:

Не могу стать постоянным читателем ни одного из блогов

ответ:
"Это известная проблема и сотрудники Google работают над ее решением." :)


Variadic templates в C++0x

Variadic templates в C++0x

Те, кто читал книгу Андрея Александреску «Современное программирование на C++» знают, что существует обширный класс задач (в области метапрограммирования с использованием шаблонов), когда шаблону при инстанцировании необходимо указать переменное (заранее неизвестное) количество аргументов. Типичные примеры таких задач:
— Описание кортежей (tuples)
— Описание типов наподобие вариантов (variants)
— Описание функторов (в этом случае перечень типов аргументов зависит от сигнатуры функции)
— Классификация типов по заранее заданным множествам
— и т. п.

В каждой такой задаче точное количество типов, передаваемых соответствующему шаблону в качестве аргументов, заранее определить сложно. И, вообще говоря, зависит от желания и потребностей того, кто намеревается использовать соответствующий шаблонный класс.
В рамках действующего стандарта С++ сколь-нибудь удобного решения таких задач не существует. Шаблоны могут принимать строго определённое количество параметров и никак иначе. А. Александреску (в упомянутой выше книге) предлагает общее решение, основанное на т. н. «списках типов», в котором типы представлены в виде односвязного списка, реализованного посредством рекурсивных шаблонов. Альтернативным решением (используемом, например, в boost::variant и boost::tuple) является объявление шаблонного класса с большим количеством параметров, которым (всем, кроме первого) присвоено некоторое значение по умолчанию. Оба этих решения являются половинчатыми и не охватывают весь спектр возможных задач. По этому, для устранения недостатков существующих решений и упрощения кода новый стандарт предлагает С++-разработчикам новый вариант объявления шаблонов? «шаблоны с переменным количеством параметров» или, в оригинале, «variadic templates».