Greetings,

Because Qt is very powerful, I would like to clarify the importance of the following problems despite my previous informal attempts: - The recent Qt 5.10.1 still randomly crashes for apps written on the iPhone and for the Android as well. - QML is an interpreted language thus it can be reverse engineered and plagiarized quite easily.

As you know 1 crash makes your application worthless. Those are facts, whether today's mainstream developers like it or not.

I have a solution that solves those problems and it's called: "Fornux C++ Superset":

- Fornux C++ Superset harnesses the power of Clang.
- It now supports, as you have guessed, C++98 syntax.
- It's deterministic so it will not slow down your application randomly like with Java. - You can see attached examples memory leaks in C & C++ with cyclic references which are correctly handled and the memory usage never increases.

Like I mentioned previously, I am working hard on a free version I will be able to share in a month or two.


Regards,
Phil Bouchard
www.fornux.com
/**

    Fornux C++ Superset -- Example.

    Outputs:

    Speed: 16043.546433 loops / s; Memory usage: 4552 kilobytes

 */


#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>

#include <chrono>
#include <iostream>
#include <iomanip>


using namespace std;
using namespace std::chrono;


struct A
{
    int x;

    int i;
    int j;
};

struct B : virtual A
{
    int k;
    int l;
};

struct C : virtual A
{
    int m;
    int n;
};

struct D : B
{
    int o;
    int p;
};

struct E : C
{
    int o;
    int p;
};

struct list_node : D, E
{
    int q;
    int r;

    list_node * p;
};


int main()
{
    milliseconds before, after;
 
    before = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
    
    for (int i = 0; ; ++ i)
    {
        // cycle
        struct list_node * p = new list_node;
        p->p = new list_node;
        p->p->p = new list_node;
        p->p->p->p = p;
        
        // stats
        after = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
        struct rusage r_usage;
        getrusage(RUSAGE_SELF, & r_usage);
        cout << "\rSpeed: " << setprecision(11) << i * 1000.0 / (after - before).count() << " loops / s; Memory usage: " << r_usage.ru_maxrss << " kilobytes" << flush;
        usleep(1);
    }
 
    return 0;
}
/**

    Fornux C++ Superset -- Example.

    Outputs:
    
    Speed: 16563.387712 loops / s; Memory usage: 4544 kilobytes
    
 */


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>


double time_diff(struct timeval x , struct timeval y);

struct list_node
{
    struct list_node * p;
};


int main()
{
    struct timeval before, after;
 
    gettimeofday(& before, (struct timezone *) NULL); 
    
    for (int i = 0; ; ++ i)
    {
        // cycle
        struct list_node * p = malloc(sizeof(struct list_node));
        p->p = malloc(sizeof(struct list_node));
        p->p->p = malloc(sizeof(struct list_node));
        p->p->p->p = p;
        
        // stats
        gettimeofday(& after, (struct timezone *) NULL);
        struct rusage r_usage;
        getrusage(RUSAGE_SELF, & r_usage);
        printf("\rSpeed: %f loops / s; Memory usage: %ld kilobytes", i * 1000000.0 / time_diff(before , after), r_usage.ru_maxrss);
        fflush(stdout);
        usleep(1);
    }
 
    return 0;
}
 
double time_diff(struct timeval x , struct timeval y)
{
    double x_ms , y_ms , diff;
     
    x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec;
    y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec;
     
    diff = (double)y_ms - (double)x_ms;
     
    return diff;
}
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to