вівторок, 2 червня 2009 р.

C++0x: static_assert

Поцяцькався з новою VS2010 beta і вирішив слідкувати за новим стандартом, до якого надіюсь залишилось не так довго.
Найперша і найдоступніша фіча, застосування якій можна знайти відразу - це static_assert. Призначення її очевидне - перевірка виразів на етапі компіляції. Раніше для цих цілей я використовував Boost.StaticAssert (і зараз використовую, бо переводити комерційні проекти на VS2010 ще рано, та і про кросплатформеність поки ще рано мріяти). Але на відміну від boost версії тут є можливість вказувати текст помилки.
При компіляції коду де присутня стрічка
static_assert(false, "It is false");
бачимо:
------ Build started: Project: test1, Configuration: Debug Win32 ------
ClCompile:
test1.cpp
c:\documents and settings\alexandr\my documents\visual studio 10\projects\test1\test1\test1.cpp(18): error C2338: It is false
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
При використанні boost
BOOST_STATIC_ASSERT(false);
отримуємо не такий зрозумілий вивід:
------ Build started: Project: test1, Configuration: Debug Win32 ------
Compiling...
test1.cpp
c:\documents and settings\alexandr\my documents\Visual Studio 2005\projects\test1\test1\test1.cpp(18):(3455) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE'
with
[
x=false
]
test1 - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Чекаємо з нетерпінням стандарту, а поки використовуємо boost реалізацію.

понеділок, 1 червня 2009 р.

Суб’єктивний огляд MS Visual Studio 2010 Beta

Після денного завантаження всіх компонентів нової MS Visual Studio 2010 Beta нарешті встановив її. Перше що кидається в очі це жахливий синій інтерфейс, дуже повільна робота і неприємно розмазані шрифти(можливо недоліки бета версії; можливо у Windows XP воно так і повинно виглядати, бо розраховували на Windows 7). Також у новоствореному проекті під час сканування файлів проекту - Solution Explorer бридко блимає :(

Порадувало досить симпатичне діалогове вікно створення нового проекту. Непоганий дизайн, ергономічність і все досить логічно структурузовано:


З нового, що відразу помітно:
  • мова F# встановлена за умовчанням (відразу з’явилося бажання вивчати функціональне програмування), що не може не радувати;
  • нова .NET Framework 4.0 (так як шарпові мови цікавлять мало про нововведення тут);
  • можливіть вибору версії .NET Framework під час створення проекту;
  • у діалоговому вікні створення проекту є пункт Online Templates, де знаходяться декілька досить цікавих шаблонів;
  • покращений редактор коду;
  • додали Extension Manager зі зручним інтерфейсом доступу до додатків, їхнім встановленням і керуванням (є досить цікаві і надія що будуть досить зручні додатки для доступу до систем контролю версій)
  • додали Parallel Patterns Library (PPL). Річ досить цікава, але як я зрозумів не кросплатформена (але ж Microsoft це ніколи не хвилювало), тому доведеться використовувати OpenMP покищо (omp.h наявний). Ще були додані Asynchronous Agents Library, Work scheduler і Resource manager, але їх я ще не вивчав. Досить зручно використовувати для розпаралелювання циклів(Concurrency::paparallel_for_each, Concurrency::paparallel_for):

    #include <ppl.h>
    #include <array>
    #include <iostream>

    template<class Ty>
    void square_function(Ty& n)
    {
    n *= n;
    }

    int main(int argc, char* argv[])
    {
    std::tr1::array<int, 5> values = { 1, 2, 3, 4, 5 };
    Concurrency::paparallel_for_each(values.begin(), values.end(), &square_function<int>);
    return 0;
    }
  • додані нові C++ фічі (Lambda functions, Transporting exceptions, Rvalue references, auto keyword, decltype keyword).

Це все, що я помітив після 10 хвилинного знайомства з новою студією (воно було того не варте).

UPD1 02.06.2009