-
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.
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Taśma LED
- Jak odróżnić myjki wibrujące od ultradźwiękowych.
- Ledy na wyłączniku czasowym błyskają
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- RCD wybija
- Re: Kompensacja mocy biernej przy 230VAC
- Łożysko ślizgowe - jaki olej
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- Współczesny falomierz
- Zasilacz 7V na szynę DIN
- Waga z legalizacją
- Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- Pendrive zdycha, czy coś jeszcze innego? Problem z plikami.
Najnowsze wątki
- 2025-04-05 Dziwny wymiar wyroku
- 2025-04-05 Prunt z dachu
- 2025-04-05 Taśma LED
- 2025-04-05 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2025-04-05 Warszawa => Strategic Account Manager <=
- 2025-04-05 co w Anglii dziś w Polsce za 30 lat
- 2025-04-05 Wrocław => SOC Tech Lead <=
- 2025-04-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-04-05 Wyrok dożywocia dla Polki
- 2025-04-04 Prezydium Sejmu Tuskiego orzekło: Poseł KO mecenas Roman Giertych NIE jest mordercą (w żadnym sensie tego słowa?)
- 2025-04-04 Reset komóry
- 2025-04-04 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-04-04 Zielonka => Key Account Manager IT <=
- 2025-04-04 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2025-04-04 Warszawa => Mid/Senior IT Recruiter <=