Много слов о 0.1.7

Mar 13, 2009 15:08


А здесь, как всегда: в хрустальном захолустье светло -
И здесь нет ничего, что бы могло измениться.
И время течет, но, по-моему, то туда, то сюда,

У меня накопилось куча новостей по LAMB:

  1. Trolltech Nokia Qt Software зарелизили Qt 4.5.0. В том числе там лежит и новый q3porting.xml. Из интересного в нем - там пофикшена бага с Q3SqlFiledInfo. Но до сих пор осталось большое количество redefine-ов. В связи с тем, что варнинги о них засоряют stderr LAMB-а - к следущему релизу перепешу qt3to4tolamb.pl так, чтобы в LAMB-овский конфиг($lamb_dir/qt-config/qt3-qt4.lamb) записывалось только последнее из изменений из q3porting.xml. Кроме того, добавилось энное(довольно небольшое) количество записей, при обработке которых обнаружилась одна ошибка в LAMB, за что Qt особое спасибо.
  2. Оказалось, что некоторые из проектов-тестов(из $qt3_dir/doc/examples) по сути состоят из множества маленьких подпроектиков, которые слабо связаны между собой. Поэтому имеет смысл разбивать на тесты не по папкам, а по проектным файлам. Поэтому в 0.1.6 получится немножко отличная от описанной картина:
    gark87@linux-rrve:~/lamb/lamb-0.1.6-src> grep OK ./exam/results | grep WRONG
    picture[WRONG][WRONG][OK] gridview[WRONG][OK][OK] wizard[WRONG][OK][OK] progressbar[OK][OK][WRONG]
    addressbook[WRONG][OK][WRONG] layout[WRONG][OK][OK] qfd[WRONG][OK][OK] tictac[WRONG][OK][OK]
    richtext[WRONG][OK][OK] sound[WRONG][OK][OK] server[WRONG][OK][OK] httpd[WRONG][OK][OK]
    mail[OK][OK][WRONG] networkprotocol[OK][OK][WRONG] dclock[WRONG][WRONG][OK] statistics[WRONG][OK][OK]
    cursor[WRONG][OK][OK] drawdemo[WRONG][OK][WRONG] box[WRONG][WRONG][OK] overlay[WRONG][OK][OK]
    sharedbox[WRONG][WRONG][OK] drawlines[WRONG][OK][OK] popup[WRONG][WRONG][OK] application[WRONG][OK][OK]
    итого:
    "чистый" qt3to4 = 22/130
    qt3to4++ (qt3to4 + using namespace Qt;) = 38/130
    LAMB = 38/130
  3. Теперь вместе с $lamb_dir/qt-config/qt3-qt4.lamb(файл, сгенеренный по q3porting.xml и содержащий соответствующие изменения) и $lamb_dir/qt-config/qt-functions.lamb(файл, содержащий изменения которых у qt3to4 нет, а у LAMB в том или ином виде есть) для портирования Qt3->Qt4 есть еще файл $lamb_dir/qt-config/qt-header.patch - это патч, который предлагается наложить на $qt4_dir/include для лучшей работы LAMB. Тут дело вот в чем: некоторые методы поменяли только тип возвращаемого значения, сохранив при этом сигнатуру. А для LAMB было бы проще "считать", что этих функций нет. Поэтому патч содержит некоторое количество конструкций типа
    #ifndef LAMB
    ... some function declaration here ...
    #endif
    Поэтому для Qt3->Qt4 рекомендуется сначала наложить патч, а только потом запускать LAMB
  4. И наконец, вышел LAMB 0.1.7 на sf.net
    ChangeLog приводить не буду, вот результаты тестирования на $qt3_dir/doc/examples

    gark87@linux-rrve:~/lamb/lamb-0.1.7> grep OK ./exam/results | grep WRONG
    picture[WRONG][WRONG][OK]
    gridview[WRONG][OK][OK]
    wizard[WRONG][OK][OK]
    progressbar[OK][OK][WRONG]
    addressbook[WRONG][OK][WRONG]
    layout[WRONG][OK][OK]
    qfd[WRONG][OK][OK]
    tictac[WRONG][OK][OK]
    richtext[WRONG][OK][OK]
    sound[WRONG][OK][OK]
    server[WRONG][OK][OK]
    httpd[WRONG][OK][OK]
    mail[OK][OK][WRONG]
    networkprotocol[OK][OK][WRONG]
    dclock[WRONG][WRONG][OK]
    statistics[WRONG][OK][OK]
    cursor[WRONG][OK][OK]
    drawdemo[WRONG][OK][WRONG]
    box[WRONG][WRONG][OK]
    overlay[WRONG][OK][OK]
    sharedbox[WRONG][WRONG][OK]
    scrollview[WRONG][WRONG][OK]
    drawlines[WRONG][OK][OK]
    popup[WRONG][WRONG][OK]
    blob[WRONG][WRONG][OK]
    extract[WRONG][WRONG][OK]
    custom1[WRONG][WRONG][OK]
    subclass1[WRONG][WRONG][OK]
    form2[WRONG][WRONG][OK]
    connect1[WRONG][WRONG][OK]
    table3[WRONG][WRONG][OK]
    navigating[WRONG][WRONG][OK]
    form1[WRONG][WRONG][OK]
    retrieve2[WRONG][WRONG][OK]
    application[WRONG][OK][OK]
    итого:
    "чистый" qt3to4 = 22/130
    qt3to4++ (qt3to4 + using namespace Qt;) = 38/130
    LAMB = 49/130
  5. Из особенно забавного: в qt3to4 есть NeedHeader, а в LAMB соответствующий ему ClassNeedsHeader. Это конструкции, позволяющие проинклюдить header. если данный класс используется в файле. Но возможны такие ситуации:
    Файл b.h
    ==================================
    class B
    {
    public:
    int b();
    };
    ==================================

    Файл a.h
    ==================================
    class B;
    class A
    {
    public:
    B* b;
    };
    ==================================

    Файл main.cpp
    ==================================
    #include "a.h"
    int main()
    {
    return A().b->b();
    }
    ==================================

    А в конфиге config.lamb
    ==================================
    ClassNeedsHeader("b.h") B
    ==================================

    Раньше в предыдущей версии библиотеки определение класса B находилось в файле a.h. qt3to4 с такими ситуациями справиться не может, ибо формально токен B в файле main.cpp не встречается.
    А LAMB(из-за GCC) понимает, что идет работа с incomplete type и если надо добавляет header. И это не просто умозрительный пример - в QtSql есть например QSqlError.>

lamb, sourceforge, qt3to4, trolltech, programming

Previous post Next post
Up