Přehled
Příklady
Screenshoty
Srovnání
Aplikace
Stažení
Documentation
Bazar
Stav & Plány
FAQ - Často kladené dotazy
Autoři & Licence
Forum
Financování U++
Hledej na tomto webu
Jazyk
čeština











SourceForge.net Logo



U++ Core vs D programming language

 

 

Autoři programovacího jazyka D mají na svých stránkách pěkný příklad jeho použití:

 

http://www.digitalmars.com/d/2.0/cppstrings.html

 

Využili jsme ho a přepsali jej do U++. Testovali jsme na systému s Ubuntu 64 s použitím "gdc" kompilátoru s nastavením doporučeným v zmiňovaném článku.

 

Museli jsme použít větší soubor než "Alice30.txt", protože náš systém byl na tak malý soubor příliš rychlý. Proto jsme zkombinovali několik souborů ze stejného stejného zdroje do 2MB souboru.

 

Také jsme z kódu odstranili části starající se o výstup abychom docílili relevantnějších výsledků.

 

Výsledky:

 

Jazyk D

U++

U++ / Jazyk D

0.072s

0.043s

1.7

 

To znamená, že C++ je pořád o dost napřed před of D (o 70%) pokud jej nebrzdí design standartní knihovny a průměrná implementace...

 

#include <Core/Core.h>

 

using namespace Upp;

 

#define NOOUTPUT

 

int main(int argc, const char *argv[])

{

    int n;

    VectorMap<String, int> map;

    Cout() << "   lines   words   bytes file\n";

    int total_lines = 0;

    int total_words = 0;

    int total_bytes = 0;

    for(int i = 1; i < argc; i++) {

        String f = LoadFile(argv[i]);

        int lines = 0;

        int words = 0;

        const char *q = f;

        for(;;) {

            int c = *q;

            if(IsAlpha(c)) {

                const char *b = q++;

                while(IsAlNum(*q)) q++;

                map.GetAdd(String(b, q), 0)++;

                words++;

            }

            else {

                if(!c) break;

                if(c == '\n')

                    ++lines;

                q++;

            }

        }

        Cout() << Format("%8d%8d%8d %s\n", lines, words, f.GetCount(), argv[i]);

        total_lines += lines;

        total_words += words;

        total_bytes += f.GetCount();

    }

    Vector<int> order = GetSortOrder(map.GetKeys());

#ifndef NOOUTPUT

    Cout() << Format("--------------------------------------%8d%8d%8d total\n", total_lines, total_words, total_bytes);

 

    for(int i = 0; i < order.GetCount(); i++)

        Cout() << map.GetKey(order[i]) << ": " << map[order[i]] << '\n';

#endif

    return 0;

}

 

 

Naposledy upravil dolik 24.06.2010. Tato stránka je také dostupná english a русский. Chcete přispět?. T++