eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDziwny problem z kodem w C (gcc mips/pic32) › Re: Dziwny problem z kodem w C (gcc mips/pic32)
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!eternal-september.org!
    news.eternal-september.org!.POSTED!not-for-mail
    From: heby <h...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Dziwny problem z kodem w C (gcc mips/pic32)
    Date: Wed, 24 May 2023 11:53:48 +0200
    Organization: A noiseless patient Spider
    Lines: 122
    Message-ID: <u4kmro$2ufqq$1@dont-email.me>
    References: <u44i3o$css$1$Janusz@news.chmurka.net>
    <1n7r9mmnvljlx$.1jfideb1i3wtk.dlg@40tude.net>
    <u4844m$ltg$1$Janusz@news.chmurka.net>
    <rtiszuef0xpp$.15wa1gq4oc00s$.dlg@40tude.net>
    <u48fof$sii$1$Janusz@news.chmurka.net>
    <a...@n...icm.edu.pl>
    <u49s6u$q89$1$Janusz@news.chmurka.net>
    <a...@n...icm.edu.pl>
    <u4a34r$tmk$1$Janusz@news.chmurka.net>
    <u4a9ch$10h$1$grzegorz@news.chmurka.net>
    <u4ab0s$1t2$1$Janusz@news.chmurka.net>
    <u4afc0$4ad$1$grzegorz@news.chmurka.net> <u4b7p6$1j7m6$3@news.icm.edu.pl>
    <90dql20u82tc.fnrqd8gmq8nh$.dlg@40tude.net>
    <u4fjtn$25f5e$1@dont-email.me> <d2a2opi2cqx.dpbk606pibnh$.dlg@40tude.net>
    <u4fmll$25qd5$1@dont-email.me>
    <13gsg2icl2peg.ptxnu29vcxr9$.dlg@40tude.net>
    <u4fsru$26eq7$1@dont-email.me>
    <mwxft3rl50ae$.ikk8r2nn1eah$.dlg@40tude.net>
    <u4g59l$27b12$1@dont-email.me>
    <1wqspnfzcove6.972kq4b2otw1$.dlg@40tude.net>
    <u4gjcj$28pp7$1@dont-email.me> <u4kklq$23acj$1@news.icm.edu.pl>
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Wed, 24 May 2023 09:54:00 -0000 (UTC)
    Injection-Info: dont-email.me; posting-host="e7b4422bf5638cf95dcdc4a947a66852";
    logging-data="3096410";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX1+wpHNvDGfKi1qRE5YteZnO"
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101
    Thunderbird/102.11.0
    Cancel-Lock: sha1:OALq8frO2+PRVGEXHZhPLIhvNAU=
    In-Reply-To: <u4kklq$23acj$1@news.icm.edu.pl>
    Content-Language: en-US
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:780846
    [ ukryj nagłówki ]

    On 24/05/2023 11:16, io wrote:
    >> I dlatego możesz wybrać Qt, które używa natywnie UTF-16 i potrafi,
    >> jesli potrzebujesz, policzyć ile jest tam *znaków* jak również
    >> przemieszczać się między UTF-8. Tylko że od razu mówię, że policzenie
    >> ilosci znaków w UTF to zagadnienie na habilitację. Nie bez powodu jest
    >> skomplikowane a zdaje się że w kilku wypadkach (bodaj Koreański) mocno
    >> mętne. QTextBoundaryFinder.
    >> Innymi słowy, jeśli masz zagadnienia związane z tekstem UTF, to masz
    >> zagadnienia związane z jego wyświetlaniem, a to jest cecha biblitek
    >> graificznych, nie C++. C++ nie posiada w standardzie nic [G]UIowego.
    > Zagadnienie analizy tekstu nie ma nic do jego prezentacji. Możesz mieć
    > urządzenie embeeded, które niczego nie wyświetla a tylko umie parsować
    > łańcuchy znaków.

    Interesujace to musi być urządzenie.

    Szkoda, że nie pomyśleli o tym twórcy standardu C++. I o gotowych
    funkcjach do sterowania prodziżem. Też by się przydały.

    A nie, czekaj, to dojdziemy do C#...

    >>> A to moze być np program do komunikacji z czytnikiem kart bankowych.
    >> Wtedy masz połaczenie z hardware i wtedy piszesz translator z
    >> hardwarowego true na softwareowy true.
    >> Reszta algorytmini nie powinna nic wiedzieć o jakims hardware, a
    >> prawidłowo napisana powinna dać się uruchmić i przetestować bez hardware.
    > true/false to wartości logiki jaką wyraża język a nie kwestia sprzętu.

    Istnieje miejsce, gdzie stan bitu, rejestru, przerwania może określać
    stan logiczny w kodzie. To miejsce zazwyczaj posiada adapter
    hardware<>software. Ten adapter jest niskopziomowy, mający pojcie o
    detalach implementacyjnych hardware. Pozostałą część kodu już nie musi
    go widzieć. To tak działa w każdym jezyku, ale C++ ma w ręku asa: dzięki
    templates (statyczny polimorfizm) to może być *bezkosztowe* dla
    generowanego kodu, produkcyjnego.

    >> Prawie każda przenośna bibliteka, z korzeniami w C, redefiniuje
    >> wszstko. To świadczy o tym, jak kiepski to język, skoro nawet
    >> podstawowe typy nie mają sensownie okreśonych sizeof i trzeba to łatać
    >> ręcznie.
    > Nie bardzo. To jest kwestia właśnie tego, że język programowania
    > niekoniecznie musi cokolwiek wiedzieć o konkretnych typach danych.

    A jednak prawie wszystkie języki wysokopoziomowe, poza C, mają ściśle
    zdefiniowane typy. Nawe super-uniwersalna Java ma ściśle zdefiniowane typy.

    Jedyny inny jaki kojarzę, z defektem braku ścisłych typów, to BCPL.

    To artefakt tego, że C to tak naprawdę asembler, tylko o nieco innej
    składni. I jak każdy asembler - nie był wymyślony do bycia przenośnym
    bez pewnego wysiłku. Jego typy danych nei tylko zależą od architektury,
    ale nawet od flag kompilatora (w gcc-avr można zmienić inta aby miał 8
    bitów jedną flagą kompilatora, co nie jest standardowe, ale widocznie
    komuś potrzebne).

    > Bo w
    > środowisku embedded może nie być żadnych łańcuchów znaków i bibliotek do
    > ich prezentacji.

    Dzięki magicznym właściwościom C++ nigdy ich w takim embedded nie
    zobaczysz, bo C++ ma zerowy narzut na kod i produkuje tylko to, co
    niezbędne. Innymi słowy mamy balans: co prawda język zawiera w
    standardzie jakieś gotowce do strigów, bo tego potrzebuje 99% ludzi, ale
    dla tego 1% jest dobra wiadomość: nic to ich w kodzie wynikowym nie
    kosztuje.

    Co innego ze sterowaniem prodziża. Potrzbuje go 1%, wiec dostarczany
    jest w postaci biblioteki, wiec ten 1% ma trochę więcej roboty.

    > A w środowisku systemu operacyjnego raczej na pewno
    > będą. Raczej nie ma sensu by język nie mógł wyrażać logiki. No ale to
    > może tyle, że nie jest to kwestia jaką wartość numeryczną przypisujemy.

    Problemem jest, że w C nie wiadomo ile bitów ma char.

    Zabawne, nie?

    https://stackoverflow.com/questions/437470/type-to-u
    se-to-represent-a-byte-in-ansi-c89-90-c/437640#43764
    0

    I to jest używane w embedded, do grzebanai w rejestrach o ścisłych
    szerokościach. Nazwał bym to kipeskim żartem, gdyby nie to że to
    standard przemysłowy.

    >> Jak chcesz świadomie, to w boost jest tribool. On ma trzecią wartość,
    >> niezdefiniowaną.
    > Ale to każdy typ danych może mieć niezdefiniowaną wartość.

    Nie. W C typy integer są zawsze zdefiniowane, mogą posiadać wartości w
    pełnej przestrzeni permutacji bitów. Istnieją stany niedozwolone w
    wartościach zmiennoprzecinkowych, ale to nie to samo co niezdefiniowane.

    Są jezyki, gdzie mogą być niezdefiniowane (None w pythone), ale to
    wymaga dodatkowej informacji w postaci flagi. Przestrzeń każdego typu
    integer w C jest wypełniona w 100% poprawnymi wartościami.

    Stąd programistów w C czesto przyłapiesz na:

    #define UNKNOWN -1

    Ale to tylko workaround wymagający zgody wszystkich w obrębie danego
    programu. To jest znowu nieprzenośne: taki kod jest niekompatybilny z
    kodem, gdzie inny aparat napisał #define UNKNOWN -127.

    To jedna z przyczyn, dla któej powstał boost::optional<>. W tym
    przypadku wszyscy się zgadzamy co to jest niezdefiniowana wartość, bez
    nadeptywania sobie na palce.

    > Z językowego
    > puntu widzenia są odpowiednie konstrukcje językowe co raczej nie mapuje
    > się automatycznie do sprzętu.

    Dlatego pisanie w C++ (w C też, tylko nikt nie stosuje) robi to
    warstwami. Logika "biznesowa" jest pisana na abstrakcjach, a do sprzetu
    masz adaptery.

    W ten sposób nieprzenośne jest tylko kilka procent typowego kodu. W
    dodatku kod jest unit testowalny z definicji.

    C++ daje gotowce do tego (np. statyczny polimorfizm). W C nie ma nic, a
    jeśli ktoś jest super-hackerem to potrafi zrobić "link time
    polymorphism" jako nie tyle workaround, co bardziej samobójstwo.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: