eGospodarka.pl
eGospodarka.pl poleca

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

  • 91. Data: 2011-02-02 09:09:27
    Temat: Re: które języki 'historyczne' s? ważne
    Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>

    On 2011-02-01, R. P. <r...@w...pl> wrote:
    > W dniu 2011-02-01 16:50, Stachu 'Dozzie' K. pisze:
    >> On 2011-02-01, R. P.<r...@w...pl> wrote:
    >>>>>> Wieksosc neisczesc spowodowana jest tym ze "programy systemowe"
    >>>>>> napisane sa w C z "chytrymi rzutami"
    >>>>>
    >>>>> Zgadza się. Są źródłem błędów. Ale dzięki nim pisane oprogramowanie może
    >>>>> też być bardzo wydajne... O tym nie wspominasz.
    >>>>
    >>>> Wydajność się zyskuje nie na fistaszkach w rodzaju oszczędzenia jednego
    >>>> bajtu czy czterech cykli procesora, tylko na złożoności obliczeniowej
    >>>> (asymptotycznej).
    >>>>
    >>>> Tak, w jądrze systemu operacyjnego też.
    >>>>
    >>>
    >>> Gadasz jak typowy teoretyk.
    >>
    >> Gadasz jak typowy pożal-się-Boże-praktyk bez przygotowania
    >> teoretycznego.
    >
    > Kulturą wypowiedzi to ty nie grzeszysz. Nie wiesz kim jestem i jakie mam
    > przygotowanie teoretyczne. A ja nie mam obowiązku tobie się z tego tłuaczyć.

    Ktoś tu mnie najpierw próbował wyzywać od "typowych teoretyków". Trochę
    nie na miejscu jest wytykanie mi przez ciebie takich zwrotów.

    --
    Secunia non olet.
    Stanislaw Klekot


  • 92. Data: 2011-02-02 09:34:32
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Maciej Sobczak <s...@g...com>

    On Feb 1, 10:50 pm, Marek Borowski <m...@b...com> wrote:

    > Operacje bliskie
    > hardware najwygodniej sie robi w C.

    Jeszcze tego nie pokazałeś.

    > 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;

    W Adzie:

    procedure Fun;
    for Fun'Address use 16#FC00;

    > Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
    > narzutow ?

    Robiąc rzut wskaźnika albo overlay - to drugie jest ciekawsze, bo w
    ogóle nie potrzeba żadnego wskaźnika.

    > W C jest to trywialne:

    Trywialne to jest np. w Adzie, bo w ogóle nie potrzeba wskaźnika.

    > Proste i wygodne.

    Oczywiście. Ale nadal nie pokazałeś, co takiego "systemowego" da się
    zrobić w C a czego nie da się zrobić np. w Adzie. Ironicznie,
    przykłady, które pokazałeś do tej pory, można by użyć akurat do tego,
    żeby C skrytykować.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 93. Data: 2011-02-02 09:36:34
    Temat: Re: które języki 'historyczne' s? ważne
    Od: "R. P." <r...@w...pl>

    W dniu 2011-02-02 10:09, Stachu 'Dozzie' K. pisze:
    > On 2011-02-01, R. P.<r...@w...pl> wrote:
    >> W dniu 2011-02-01 16:50, Stachu 'Dozzie' K. pisze:
    >>> On 2011-02-01, R. P.<r...@w...pl> wrote:
    >>>>>>> Wieksosc neisczesc spowodowana jest tym ze "programy systemowe"
    >>>>>>> napisane sa w C z "chytrymi rzutami"
    >>>>>>
    >>>>>> Zgadza się. Są źródłem błędów. Ale dzięki nim pisane oprogramowanie może
    >>>>>> też być bardzo wydajne... O tym nie wspominasz.
    >>>>>
    >>>>> Wydajność się zyskuje nie na fistaszkach w rodzaju oszczędzenia jednego
    >>>>> bajtu czy czterech cykli procesora, tylko na złożoności obliczeniowej
    >>>>> (asymptotycznej).
    >>>>>
    >>>>> Tak, w jądrze systemu operacyjnego też.
    >>>>>
    >>>>
    >>>> Gadasz jak typowy teoretyk.
    >>>
    >>> Gadasz jak typowy pożal-się-Boże-praktyk bez przygotowania
    >>> teoretycznego.
    >>
    >> Kulturą wypowiedzi to ty nie grzeszysz. Nie wiesz kim jestem i jakie mam
    >> przygotowanie teoretyczne. A ja nie mam obowiązku tobie się z tego tłuaczyć.
    >
    > Ktoś tu mnie najpierw próbował wyzywać od "typowych teoretyków". Trochę
    > nie na miejscu jest wytykanie mi przez ciebie takich zwrotów.

    A pisanie ciebie/ty z malej litery o czym swiadczy? Zauwazylem, ze
    robisz to nie tylko do mnie...


  • 94. Data: 2011-02-02 09:53:41
    Temat: Re: które języki 'historyczne' s? ważne
    Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>

    On 2011-02-02, R. P. <r...@w...pl> wrote:
    > W dniu 2011-02-02 10:09, Stachu 'Dozzie' K. pisze:
    >> On 2011-02-01, R. P.<r...@w...pl> wrote:
    >>> W dniu 2011-02-01 16:50, Stachu 'Dozzie' K. pisze:
    >>>> On 2011-02-01, R. P.<r...@w...pl> wrote:
    >>>>>>>> Wieksosc neisczesc spowodowana jest tym ze "programy systemowe"
    >>>>>>>> napisane sa w C z "chytrymi rzutami"
    >>>>>>>
    >>>>>>> Zgadza się. Są źródłem błędów. Ale dzięki nim pisane oprogramowanie może
    >>>>>>> też być bardzo wydajne... O tym nie wspominasz.
    >>>>>>
    >>>>>> Wydajność się zyskuje nie na fistaszkach w rodzaju oszczędzenia jednego
    >>>>>> bajtu czy czterech cykli procesora, tylko na złożoności obliczeniowej
    >>>>>> (asymptotycznej).
    >>>>>>
    >>>>>> Tak, w jądrze systemu operacyjnego też.
    >>>>>>
    >>>>>
    >>>>> Gadasz jak typowy teoretyk.
    >>>>
    >>>> Gadasz jak typowy pożal-się-Boże-praktyk bez przygotowania
    >>>> teoretycznego.
    >>>
    >>> Kulturą wypowiedzi to ty nie grzeszysz. Nie wiesz kim jestem i jakie mam
    >>> przygotowanie teoretyczne. A ja nie mam obowiązku tobie się z tego tłuaczyć.
    >>
    >> Ktoś tu mnie najpierw próbował wyzywać od "typowych teoretyków". Trochę
    >> nie na miejscu jest wytykanie mi przez ciebie takich zwrotów.
    >
    > A pisanie ciebie/ty z malej litery o czym swiadczy?

    O nienadużywaniu formy grzecznościowej.

    > Zauwazylem, ze
    > robisz to nie tylko do mnie...

    Pisanie zaimków osobowych drugiej osoby obu liczb wielką literą jest tak
    zwaną formą grzecznościową i jest używane w korespondencji. Forów i grup
    dyskusyjnych nie uważam za korespondencję. Gdybym napisał do ciebie
    e-maila albo inną prywatną wiadomość (think of phpBB), to formy
    grzecznościowej bym użył.

    Czyżbyś był z tych, którzy uważają że w reklamie "Miejsce na Twój
    banner" forma grzecznościowa zaimka jest użyta poprawnie?

    --
    Secunia non olet.
    Stanislaw Klekot


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

    On 02/02/2011 08:46 AM, Andrzej Jarzabek wrote:
    > On 02/02/2011 01:01, Jędrzej Dudkiewicz wrote:
    >> On 02/02/2011 01:06 AM, Andrzej Jarzabek wrote:
    >>>
    >>> 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.
    >
    > To nie jest zdaje się część standardowego języka C, tylko rozszerzenie,
    > które twórca implementacji dodał dlatego właśnie, że C się do tego
    > kiepsko nadaje.

    Możliwe, chociaż wydaje mi się, że akurat o paddingu standard C też nic
    nie mówi. Więc tak czy inaczej jesteś w krainie konkretnego kompilatora.

    >>> 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.
    >
    > Jeśli oprócz castowania należy jeszcze rozszerzyć język i do tego
    > jeszcze wołać funkcje, to w praktycznie każdym języku imperatywnym można
    > mieć równie "proste i wygodne" rozwiązanie, a w wielu można to zrobić
    > prościej, wygodniej i przenośnie.

    Pewnie, że można, ale nie wiem, czy się robi, za to każdy kompilator C
    ma te rozszerzenia. Co to za argument o wołaniu funkcji? W C++ nie
    musisz wołać?

    >>> 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.
    >
    > Nieprawda. Jeśli np. czytasz wartość tego pola tylko w co 20 pakiecie,
    > to mniejszy narzut ma konwertowanie przy dostępie.

    Jeśli czytam przy co 20 pakiecie, to prawdopodobnie znaczy to, że wyszło
    mi z pierwszego rzutowania, że w danym pakiecie mam dodatkowe dane w
    innym formacie, czyli robię kolejne rzutowanie i dopiero wtedy wołam
    funkcję. Możemy się tak licytować do śmierci, bo nie działamy na
    konkretnym przykładzie.

    > Modyfikowanie bufora ma z kolei taki problem, że łatwo wprowadzić buga:
    > wyskakuje w testowaniu błąd, dopisujesz funkcję preprocess_packet, a
    > tymczasem inny programista napisał jakiś kawałek kodu,, który gdzieś
    > dalej korzysta z założenia, że pod tym wskaźnikiem znajduje się
    > poprawnie sformatowany pakiet.

    Prawdopodobny scenariusz, ale tak samo masz w C++ - jeżeli nagle masz
    buga, którego "poprawiasz" w ten sposób, że zmieniasz interface klasy
    (bo przecież kontrakt przed bugiem był taki, że wartość była zwracana
    "as is", czyli jako big endian), to co za różnica? Dalej i tak ktoś
    robił sobie ntohla na własną rękę, bo przecież wcześniej dostawał
    network order a potrzebował "native order".

    >> Tak czy owak, zaletą C++ jest to, że jakby co, to można tego rozwiązania
    >> użyć, ale znacznie ładniej zapakowanego.
    >
    > Ale "ładiuej zapakowane" w tym momencie przekłada się właśnie na "nadaje
    > się do".

    W tym momencie nie przekłada się. Przekłada się na poziomie całego
    projektu. W TYM MOMENCIE, czyli dokładnie w tym, o którym mówimy,
    grzebiesz po bajtach i musisz uważać w każdym języku. Nawet jak masz
    język, w którym opisujesz pakiet w XMLu, możesz zapomnieć o tym, o czym
    pisałeś wyżej, to znaczy nie uwzględnić, że dana jest w big endian.

    > Na przykład - bez żadnej straty wydajności - powoduje, że
    > trudniej wprowadzić błędy, w szczególności w zmianach dokonywanych wiele
    > miesięcy po napisaniu pierwotnego kodu.

    Ogólnie się zgadzam, ale zwróć uwagę, że podany wyżej przykład jest
    bardzo konkretny i bardzo statyczny - dotyczy TYLKO odczytania jakiegoś
    bufora, a nie operacji na nim, w dodatku w przypadku, kiedy dane mają
    bardzo dobrze określony format - dane wysyłane przez sprzęt zwykle nie
    zmieniają się razem z widzimisię klienta. Zwykle.

    > Albo że można to samo zrobić
    > przenośnie - co z kolei oznacza, że zamiast pisać kod do
    > obsługi/parsowania pakietów na swoją implementację, można skorzystać z
    > dobrze przetestowanej biblioteki third-party.

    Kompletnie nie rozumiem, co to ma wspólnego z tematem.

    JD


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

    On 02/02/2011 10:34 AM, Maciej Sobczak wrote:
    > On Feb 1, 10:50 pm, Marek Borowski<m...@b...com> wrote:
    >> Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
    >> narzutow ?
    >
    > Robiąc rzut wskaźnika albo overlay - to drugie jest ciekawsze, bo w
    > ogóle nie potrzeba żadnego wskaźnika.

    Brzmi dobrze. Jakiś przykład?

    JD


  • 97. Data: 2011-02-02 11:14:21
    Temat: Re: które języki 'historyczne' s? ważne
    Od: Jędrzej Dudkiewicz <j...@n...com>

    On 02/02/2011 09:22 AM, Krzysiek Kowaliczek wrote:
    > Użytkownik R. P. napisał:
    >
    >> Gadasz jak typowy teoretyk. Ten sam algorytm o złożoności np. O(n)
    >> napisany w języku wysokiego poziomu (np. w C++) może być kilkukrotnie
    >> przyspieszony, gdy się go przepisze na C. W C++ dochodzą dodatkowe
    >> narzuty (np. na funkcje wirtualne), to przecież oczywiste. Dlaczego
    >> algorytm o czasie asymptotycznym O(n) w C może być kilkukrotnie szybszy
    >> niż ten sam w C++? Wszystko rozbija się o tę magiczną stałą k. O(2n) =
    >> O(5n) = O(kn).
    >
    > Tak i dlatego kompilator Clang napisany w całości C++ jest kilka
    > razy szybszy od GCC.

    Ja bym zaczął porównywać Clang z GCC jak będą miały te same
    funkcjonalności. Obecnie GCC pewnie z samych ifów do opcji w stylu zrzut
    drzewa jest znacznie wolniejszy :)

    Czepiam się tylko przykładu, bo nie wątpię, że w C++ można pisać szybsze
    programy niż w C.

    JD


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

    On 02/02/2011 12:07 PM, Jędrzej Dudkiewicz wrote:
    > On 02/02/2011 10:34 AM, Maciej Sobczak wrote:
    >> On Feb 1, 10:50 pm, Marek Borowski<m...@b...com> wrote:
    >>> Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
    >>> narzutow ?
    >>
    >> Robiąc rzut wskaźnika albo overlay - to drugie jest ciekawsze, bo w
    >> ogóle nie potrzeba żadnego wskaźnika.
    >
    > Brzmi dobrze. Jakiś przykład?

    Patrzyłem tutaj:

    http://en.wikibooks.org/wiki/Ada_Programming/Types#O
    verlays

    Wygląda na to, że to taka unia unii i struktury i rzutowania wskaźnika,
    tylko ma fajniejszą nazwę.

    JD


  • 99. Data: 2011-02-02 13:45:33
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Maciej Sobczak <s...@g...com>

    On Feb 2, 1:00 pm, Jędrzej Dudkiewicz <jedrzej.dudkiew...@nospam-
    gmail.com> wrote:

    > >> Robi c rzut wska nika albo overlay - to drugie jest ciekawsze, bo w
    > >> og le nie potrzeba adnego wska nika.
    >
    > > Brzmi dobrze. Jaki przyk ad?
    >
    > Patrzy em tutaj:
    >
    > http://en.wikibooks.org/wiki/Ada_Programming/Types#O
    verlays
    >
    > Wygl da na to, e to taka unia unii i struktury i rzutowania wska nika,
    > tylko ma fajniejsz nazw .

    Nie chodzi tylko o nazwę. Chodzi o to, że w ten sposób bardziej
    bezpośrednio wyraża się intencje programisty - chcę mieć inny widok na
    ten sam obiekt. Po cholerę mi tu jakieś unie albo wskaźniki? Unie to
    struktury danych a wskaźniki służą do odwołań pośrednich - ani jedno
    ani drugie nie pasuje naturalnie do zamierzeń programisty.

    W C++ jest lepiej, bo można zadeklarować referencję i zainicjalizować
    ją przez reinterpret_cast - w sumie o to samo chodzi, ale nadal ciężko
    uznać, że coś jest trywialne. Trywialne jest w Adzie - chcę
    zadeklarować obiekt w miejscu innego obiektu. Proste.

    A teraz coś lepszego:

    type My_Int is new Integer;
    for My_Int'Alignment use 16;

    Mam nadzieję, że nie trzeba tłumaczyć co to robi. Poproszę o wersję w
    *standardowym* C, który ponoć jest najlepiej predysponowany do
    "programowania systemowego" (cokolwiek to znaczy).

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 100. Data: 2011-02-02 13:52:57
    Temat: Re: które języki 'historyczne' sš ważne
    Od: Andrzej Jarzabek <a...@g...com>

    On Feb 2, 11:06 am, Jędrzej Dudkiewicz <jedrzej.dudkiew...@nospam-
    gmail.com> wrote:
    > On 02/02/2011 08:46 AM, Andrzej Jarzabek wrote:
    >
    > >> __attribute__((packed)), pola struktury nie mogą być przekładane.
    >
    > > To nie jest zdaje się część standardowego języka C, tylko rozszerzenie,
    > > które twórca implementacji dodał dlatego właśnie, że C się do tego
    > > kiepsko nadaje.
    >
    > Możliwe, chociaż wydaje mi się, że akurat o paddingu standard C też nic
    > nie mówi.

    Mówi, że może być i ogólniej, że konkretny binarny layout struktury
    jest zależny od implementacji.

    > Więc tak czy inaczej jesteś w krainie konkretnego kompilatora.

    A w C++ możesz właśnie nie być.

    > > Jeśli oprócz castowania należy jeszcze rozszerzyć język i do tego
    > > jeszcze wołać funkcje, to w praktycznie każdym języku imperatywnym można
    > > mieć równie "proste i wygodne" rozwiązanie, a w wielu można to zrobić
    > > prościej, wygodniej i przenośnie.
    >
    > Pewnie, że można, ale nie wiem, czy się robi, za to każdy kompilator C
    > ma te rozszerzenia.

    NIe każdy, przynajmniej nie w takiej postaci.

    > Co to za argument o wołaniu funkcji? W C++ nie
    > musisz wołać?

    Nie musisz, znaczy możesz napisać tak, żeby się sama wołała.


    > > Nieprawda. Jeśli np. czytasz wartość tego pola tylko w co 20 pakiecie,
    > > to mniejszy narzut ma konwertowanie przy dostępie.
    >
    > Jeśli czytam przy co 20 pakiecie, to prawdopodobnie znaczy to, że wyszło
    > mi z pierwszego rzutowania, że w danym pakiecie mam dodatkowe dane w
    > innym formacie,

    Wyszło powiedzmy tyle, że w danym pakiecie masz jakieś inne pola,
    niekoniecznie w innym formacie.

    > czyli robię kolejne rzutowanie i dopiero wtedy wołam
    > funkcję.

    Jakie to proste i wygodne!

    > Możemy się tak licytować do śmierci, bo nie działamy na
    > konkretnym przykładzie.

    Przykład jest wystarczająco konkretny. W C++ w każdej takiej sytuacji
    możesz stworzyć klase opakowującą bez żadnych narzutów, a decyzje o
    tym, kiedy konwetować, czy za każdym dostępie, czy na miejscu, czy
    trzymać wynik zcache'owany osobno zostawić implementacji.

strony : 1 ... 9 . [ 10 ] . 11 . 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: