среда, 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 есть один существенный недостаток, который практически исключает его использование в реальной разработке.