eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingktóre języki 'historyczne' są ważne
Ilość wypowiedzi w tym wątku: 115

  • 71. Data: 2011-02-01 22:24:43
    Temat: Re: które języki 'historyczne' s? ważne
    Od: Wojciech Jaczewski <w...@o...pl>

    Stachu 'Dozzie' K. wrote:

    > Wydajność się zyskuje nie na fistaszkach w rodzaju oszczędzenia jednego
    > bajtu czy czterech cykli procesora, tylko na złożoności obliczeniowej
    > (asymptotycznej).

    To są takie rozważania teoretyczne, ale jak popatrzeć czasem na dyskusje na
    LKML, to tam jednak czasami przejmują się pojedynczymi instukcjami. Sądzę,
    że ma to sens - w końcu oni mają w tym doświadczenie.


  • 72. Data: 2011-02-01 22:29:00
    Temat: Re: które języki 'historyczne' s? ważne
    Od: "R. P." <r...@w...pl>

    W dniu 2011-02-01 23:24, Wojciech Jaczewski pisze:
    > Stachu 'Dozzie' K. wrote:
    >
    >> Wydajność się zyskuje nie na fistaszkach w rodzaju oszczędzenia jednego
    >> bajtu czy czterech cykli procesora, tylko na złożoności obliczeniowej
    >> (asymptotycznej).
    >
    > To są takie rozważania teoretyczne, ale jak popatrzeć czasem na dyskusje na
    > LKML, to tam jednak czasami przejmują się pojedynczymi instukcjami. Sądzę,
    > że ma to sens - w końcu oni mają w tym doświadczenie.
    >

    Dokładnie tak!

    Wiesz, Dozzie chyba jednak fantazjuje. Zapytany o Haskella nabrał wody w
    usta. ;) Coś tam pewnie słyszał, ale do końca nie wie gdzie ;)


  • 73. Data: 2011-02-01 22:30:25
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Wojciech Jaczewski <w...@o...pl>

    Krzysiek Kowaliczek wrote:

    >> Magia typu void*. Nie ma co się rozpisywać. Jako programista
    >> unixowy/linuxowy doskonale wiesz co mam na myśli.
    >>
    >
    > Rozumiem że w programie dostajesz magiczne dane, ponieważ słaby
    > system typów nie uratował Cię od pomyłki?

    W przypadku sterowników urządzeń te magiczne dane można otrzymać z
    urządzenia. Urządzenie zwykle śle strumień bajtów, bez systemu typów.


  • 74. Data: 2011-02-01 22:32:57
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Wojciech Jaczewski <w...@o...pl>

    A. L. wrote:

    > Mit ze "systemy operacyjne tzreba pisac w C bo nei ma typowania i jest
    > bliskiasemblerowi" jest jednym z najbardziej idiotycznych mitow jakie
    > sie rozpowszechniaja, a jak juz pisalem, fakt ze wiele programow
    > "systemowych" jest napisanych w nietypowanym i niepewnym (non safe) C
    > jest sprawca wielu problemow.

    Jest sprawcą wielu problemów, ponieważ te programy istnieją i działają.
    Gdyby programy nie powstały (bo ktoś tyle czasu zajmował się hierarchią
    obiektów itp. technikami dobrego projektowania, że ostatecznie pominął ten
    drobny szczegół, jak zrobienie działającego programu), to i problemów by nie
    wywołały.


  • 75. Data: 2011-02-01 22:45:29
    Temat: Re: które języki 'historyczne' s? ważne
    Od: Jędrzej Dudkiewicz <j...@n...com>

    On 02/01/2011 11:05 PM, R. P. wrote:
    > W dniu 2011-02-01 23:00, Jędrzej Dudkiewicz pisze:
    >> Awk jest specjalizowanym narzędziem do przetwarzania tekstu, nic
    >> dziwnego, że będzie działał szybciej niż napisany naprędce program w
    >> C++. Fakt, że jest interpretowany, specjalnie nie przeszkadza, bo część
    >> międląca napisy to kod cyzelowany pewnie od późnych lat
    >> siedemdziesiątych. XIX wieku. W sensie - od dawna.
    >
    > Jasne, ale zaznaczam, że to był ten sam algorytm (dość trywialny
    > O(n))... w C++ pomimo zastosowania resize'ów i używania referencji gdzie
    > się da nie udało mi się uzyskać takiej wydajności jak w naprędce
    > napisanym programie w awk, od którego nie jestem żadnym specjalistą i
    > znam go co nieco tylko!

    Skoro algorytm był trywialny, to znaczy, że znaczenie miało tylko
    wycyzelowanie kodu go wykonującego. Gdyby cyzelowanie oznaczało tylko
    referencje i resize, to programowanie byłoby proste.

    >>> Tak mierzyłem. Miałem zestaw funkcji wczytujący pliki do pamięci (pliki
    >>> 2-3 Gb) - stream okazał się 3x wolniejszy od chamskiego C-owego fgets'a.
    >>> To są fakty.
    >>
    >> Bo stream może zrobić 3 razy więcej od chamskiego C-owego fgets. Poza
    >> tym fgets czyta do stałego bufora. W świetle tego trzykrotna różnica nie
    >> jest taka powalająca.
    >
    > Może zrobić 3x więcej. Ale jeśli mnie interesuje tylko wczytanie pliku
    > linia po linii do wektora, to wolę użyć fgets.

    No to po co używasz streamów? Jak chcesz znaleźć pierwsze wystąpienie
    litery 'a' w stringu to używasz wyrażeń regularnych?

    > 3x szybciej to nie jest
    > duża różnica? Tzn. że task skończy się 3x szybciej, a trwa kilka dni (bo
    > plików jest setki tysięcy)...

    Ale przecież ja mówiłem o osiągach w porównaniu z możliwościami. To Twój
    problem, że ich nie używasz.

    JD


  • 76. Data: 2011-02-01 23:31:46
    Temat: Re: które języki 'historyczne' s? ważne
    Od: Andrzej Jarzabek <a...@g...com>

    On 01/02/2011 20:28, R. P. wrote:
    > W dniu 2011-02-01 20:57, Andrzej Jarzabek pisze:
    >>
    >> Powiem szczerze: bez konkretów i w świetle tego, co napisałeś,
    >> najbardziej prawdopodobnym wyjaśnieniem wydaje się to, że kiepsko to
    >> zaimplementowałeś bo słabo znasz C++.
    >
    > LOL. Algorytm był prosty, kolejne linie wczytywałem do wektora, na

    A do czego wrzucałeś kolejne linie w awk?

    > początku był zrobiony resize na wektorze, podobnie jak były robione
    > resize'y na stringach. I dupa. Niewiele pomogło. Po prostu narzut
    > związany z obsługą klas,

    Nie ma żadnego narzutu.

    > albo kiepska implementacja string.

    Jet to możliwe, ale nie da się tego stwierdzić co najmniej bez
    obejrzenia Twojego kodu.

    > Przetwarzałeś texty w C++? Masz doświadczenie? Bo jakoś nie wierzę...

    To uwierz.

    > gdybyś przetwarzał, to byś wiedział, że std::string ma wiele wad.

    Niewątpliwie ma, ale raczej nie takich, jak myślisz.

    >>> Tak mierzyłem. Miałem zestaw funkcji wczytujący pliki do pamięci (pliki
    >>> 2-3 Gb) - stream okazał się 3x wolniejszy od chamskiego C-owego fgets'a.
    >>> To są fakty.
    >>
    >> Ditto, plus: jeśli zrobię 1000 razy wolniejszą implementację fgets, to
    >> przyznasz, że C się nie nadaje?
    >
    > Nie, uznam że jesteś cienki ;)

    A skąd wiesz, że tej implementacji biblioteki standardowej, na której to
    testowałeś, ie napisał ktoś, kto jest cienki?

    (pomijając w tym momencie możliwość, że to Ty jeteś cienki)


  • 77. Data: 2011-02-02 00:06:03
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Andrzej Jarzabek <a...@g...com>

    On 01/02/2011 21:50, Marek Borowski wrote:
    >
    > Cos mam wrazenie ze mylicie systemy z systemami. Operacje bliskie
    > hardware najwygodniej sie robi w C. Jak np w innych jezykach wysokiego
    > poziomu deklarujesz wywolanie funkcji z pod konkretnego adresu he ?
    >
    > W C prosze bardzo:
    >
    > void (*fun)(void) = (void (*)(void))0xFC00;
    > fun();

    Naprawdę muszę pisać, jak to można zrobić w C++?

    > Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
    > narzutow ?
    >
    > W C jest to trywialne:
    >
    > uint8_t *buffer;
    >
    > a po odebraniu;
    >
    > struct Packet* usb = (struct Packet*) buffer;
    >
    > usb->requestType i jedziemy.

    Naprawdę? Szkoda tylko, że jak piszesz tę strukturę, to musisz pilnować,
    żeby wszystkie pola były na swoim miejscu i żeby Ci kompilator nie
    namieszał paddingiem na przykład.

    Jak w C zapiszesz pole pakietu, które jest zaczyna się od ósmego bajta i
    jest czterobajtową liczbą, powiedzmy bez znaku, zapisaną w formacie -
    uwaga - big endian?

    W C++ za to możesz bez problemu wrapnąć bufor bajtowy w klasę, która
    jako dane pole udotępnia ci dajmy na to 14 bajt bufora albo wartość
    liczbową w natywnym formacie, zapisaną jako big endian na bajtach od 4 do 7.


  • 78. Data: 2011-02-02 01:01:13
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Jędrzej Dudkiewicz <j...@n...com>

    On 02/02/2011 01:06 AM, Andrzej Jarzabek wrote:
    > On 01/02/2011 21:50, Marek Borowski wrote:
    >>
    >> Cos mam wrazenie ze mylicie systemy z systemami. Operacje bliskie
    >> hardware najwygodniej sie robi w C. Jak np w innych jezykach wysokiego
    >> poziomu deklarujesz wywolanie funkcji z pod konkretnego adresu he ?
    >>
    >> W C prosze bardzo:
    >>
    >> void (*fun)(void) = (void (*)(void))0xFC00;
    >> fun();
    >
    > Naprawdę muszę pisać, jak to można zrobić w C++?
    >
    >> Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
    >> narzutow ?
    >>
    >> W C jest to trywialne:
    >>
    >> uint8_t *buffer;
    >>
    >> a po odebraniu;
    >>
    >> struct Packet* usb = (struct Packet*) buffer;
    >>
    >> usb->requestType i jedziemy.
    >
    > Naprawdę? Szkoda tylko, że jak piszesz tę strukturę, to musisz pilnować,
    > żeby wszystkie pola były na swoim miejscu i żeby Ci kompilator nie
    > namieszał paddingiem na przykład.

    __attribute__((packed)), pola struktury nie mogą być przekładane.

    > Jak w C zapiszesz pole pakietu, które jest zaczyna się od ósmego bajta i
    > jest czterobajtową liczbą, powiedzmy bez znaku, zapisaną w formacie -
    > uwaga - big endian?

    Rozumiem, że chodzi o deklarację tego pola w strukturze? Otóż wstawię na
    początek pól na łączną wartość 7 bajtów, potem wstawię czterobajtową
    zmienną, a potem wywołam funkcję "preprocess_packet", która mi zawoła
    ntohl i pochodne na wskazanych polach, w tym na tej zmiennej.

    > W C++ za to możesz bez problemu wrapnąć bufor bajtowy w klasę, która
    > jako dane pole udotępnia ci dajmy na to 14 bajt bufora albo wartość
    > liczbową w natywnym formacie, zapisaną jako big endian na bajtach od 4
    > do 7.

    Jasne, ale w środku albo będziesz kopiował dane do oddzielnych pól, albo
    będziesz trzymał wskaźniki do nich i wołał ntohl przy dostępie, albo
    wstawisz powyższy syf. To trzecie ma najmniejszy narzut pamięciowy i
    obliczeniowy w czasie wykonania.

    Tak czy owak, zaletą C++ jest to, że jakby co, to można tego rozwiązania
    użyć, ale znacznie ładniej zapakowanego.

    JD


  • 79. Data: 2011-02-02 01:25:32
    Temat: Re: które języki 'historyczne' s ważne
    Od: Michoo <m...@v...pl>

    W dniu 01.02.2011 21:29, R. P. pisze:
    >> No dobrze, ale jaką dokładnie operację w C porównujesz z wywołaniem
    >> metody wirtualnej?
    >
    > Np. wsk. do funkcji z indeksem.
    Wywołanie metody wirtualnej to jest wywołanie pod adres
    vtable[nr_metody] gdzie vtable to wskaźnik będący pierwszym elementem
    składowym obiektu.

    ebx zawiera wskaźnik do obiektu z 2 metodami virt, wywołanie 2giej. Zrób
    to szybciej w C.

    0x080487c4 <main+68>: mov eax,DWORD PTR [ebx]
    0x080487c6 <main+70>: mov DWORD PTR [esp],ebx
    0x080487c9 <main+73>: call DWORD PTR [eax+0x4]

    --
    Pozdrawiam
    Michoo


  • 80. Data: 2011-02-02 02:22:11
    Temat: Re: które języki 'historyczne' s? ważne
    Od: Michoo <m...@v...pl>

    W dniu 01.02.2011 19:30, R. P. pisze:
    > Tak mierzyłem. Miałem zestaw funkcji wczytujący pliki do pamięci (pliki
    > 2-3 Gb) - stream okazał się 3x wolniejszy od chamskiego C-owego fgets'a.
    Wierzę.

    > To są fakty.
    Tak, ale świadczące o programiście/pomiarze/kompilatorze a nie o języku.

    Ja na kodzie http://prowizorka.da.ru/~michoo/smieci/iogets.cpp
    dostrzegam ~12% różnicy.

    michoo@altair:/tmp$ head -n 1 /progs/file|wc -c
    15
    michoo@altair:/tmp$ wc -l /progs/file
    67108864 /progs/file
    michoo@altair:/tmp$ ls -lh /progs/file
    -rw-r--r-- 1 michoo michoo 960M 02-02 02:36 /progs/file
    michoo@altair:/tmp$ g++ kod.cpp -O2 -D RUN_C_RUN
    michoo@altair:/tmp$ /usr/bin/time ./a.out </progs/file
    C
    7.98user 0.92system 0:11.96elapsed 74%CPU (0avgtext+0avgdata
    3344maxresident)k
    1209576inputs+0outputs (0major+264minor)pagefaults 0swaps
    michoo@altair:/tmp$ g++ kod.cpp -O2
    michoo@altair:/tmp$ /usr/bin/time ./a.out </progs/file
    C++
    9.67user 0.94system 0:12.19elapsed 87%CPU (0avgtext+0avgdata
    3776maxresident)k
    1209576inputs+0outputs (0major+292minor)pagefaults 0swaps

    No chyba, że ktoś odpala ten kod w trybie kompatybilności z C.
    michoo@altair:/tmp$ /usr/bin/time ./a.out </progs/file
    C++
    95.26user 1.52system 1:41.08elapsed 95%CPU (0avgtext+0avgdata
    3744maxresident)k
    1209576inputs+0outputs (0major+290minor)pagefaults 0swaps

    --
    Pozdrawiam
    Michoo

strony : 1 ... 7 . [ 8 ] . 9 ... 12


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: