-
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.PO
STED!not-for-mail
From: Jędrzej Dudkiewicz <j...@n...com>
Newsgroups: pl.comp.programming
Subject: Re: które języki 'historyczne' sš ważne
Date: Wed, 02 Feb 2011 12:06:29 +0100
Organization: http://onet.pl
Lines: 97
Message-ID: <iibdrm$7c6$1@news.onet.pl>
References: <2...@n...onet.pl>
<f...@t...askar.com.pl>
<4d470681$0$2436$65785112@news.neostrada.pl>
<r...@4...com>
<4d47519c$0$2437$65785112@news.neostrada.pl> <ii8g1j$768$1@news.onet.pl>
<4d47d675$0$2447$65785112@news.neostrada.pl> <ii8l0l$7j3$1@solani.org>
<4d47fdf5$0$2456$65785112@news.neostrada.pl> <ii90a6$hdr$1@news.onet.pl>
<4d480625$0$2456$65785112@news.neostrada.pl> <ii9256$prk$1@news.onet.pl>
<ii9v6d$vi$1@news.onet.pl> <iia75c$f2o$1@inews.gazeta.pl>
<iiaacp$8mk$1@news.onet.pl> <iib24t$5m2$1@inews.gazeta.pl>
NNTP-Posting-Host: 234-dzi-16.acn.waw.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1296644790 7558 82.210.159.234 (2 Feb 2011 11:06:30 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Wed, 2 Feb 2011 11:06:30 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209
Fedora/3.1.7-0.35.b3pre.fc14 Thunderbird/3.1.7
In-Reply-To: <iib24t$5m2$1@inews.gazeta.pl>
Xref: news-archive.icm.edu.pl pl.comp.programming:188532
[ ukryj nagłówki ]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
Następne wpisy z tego wątku
- 02.02.11 11:07 Jędrzej Dudkiewicz
- 02.02.11 11:14 Jędrzej Dudkiewicz
- 02.02.11 12:00 Jędrzej Dudkiewicz
- 02.02.11 13:45 Maciej Sobczak
- 02.02.11 13:52 Andrzej Jarzabek
- 02.02.11 14:19 Jędrzej Dudkiewicz
- 02.02.11 14:36 Jędrzej Dudkiewicz
- 02.02.11 14:41 b...@n...pl
- 02.02.11 15:02 Jędrzej Dudkiewicz
- 02.02.11 16:26 Maciej Sobczak
- 02.02.11 16:31 Jędrzej Dudkiewicz
- 02.02.11 17:22 Andrzej Jarzabek
- 02.02.11 22:07 Maciej Sobczak
- 02.02.11 22:07 Wojciech Jaczewski
- 02.02.11 23:10 A.L.
Najnowsze wątki z tej grupy
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-23 Gdańsk => Programista Delphi <=
- 2025-07-23 Gdańsk => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-23 Warszawa => Starszy inżynier DevOps (AWS) <=
- 2025-07-23 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-23 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-07-23 Wrocław => Senior Key Account Manager IT <=
- 2025-07-23 Trójmiasto => Head of Social Media <=
- 2025-07-23 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-23 Lublin => ERP Implementation Consultant (AP Module) <=
- 2025-07-23 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-23 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-23 Kraków => Kotlin Developer <=
- 2025-07-23 Żerniki => Dyspozytor Międzynarodowy <=
- 2025-07-23 Warszawa => Java Developer <=
- 2025-07-23 Wrocław => Konsultant wdrożeniowy (systemy controlingowe) <=