Goto page Previous 1, 2, 3 ... 14, 15, 16 ... 22, 23, 24 Next
heby
Guest
Tue Jul 19, 2022 7:09 pm
On 19/07/2022 20:54, Piotr Gałka wrote:
Quote:
On 19/07/2022 20:08, Piotr Gałka wrote:
albo, co najważniejsze:
ModBusProtocol< UartMock > modbus;
Nie rozumiem dlaczego napisałeś, że najważniejsze.
Bo testowanie własnego kodu invitro, unittestami, jest waznym etapem
pisania jakiegokolwiek kodu, z miganiem diodą włacznie.
A w jaki sposób z tego co napisałeś wynika, że to dotyczy testowania
własnego kodu.
Ze słowa "Mock" uzytego w nazwie klasy.
https://en.wikipedia.org/wiki/Mock_object
Quote:
Dla mnie to były po prostu trzy wersje użycia tego
template dla trzech różnych klas. Co takiego szczególnego ma w sobie ta
trzecia nazwa?
Magiczne zaklęcie znane każdemu, kto kiedykolwiek słyszał o unit
testach. Zawsze podaje taki przykład, aby każdy sobie uzmysłowił, że
*zawsze* masz co najmniej dwie klasy do takiego szablonu: rzeczywistą i
testujacą.
Quote:
W templates "nie muszą być pochodne". Zgodnośc interfejsu badana jest
podczas wypełniania szablonu. Jeśli tylko jakaś klasa ma metodę foo()
i ktoś chce ją zawołać w momencie specjalizacji szablonem, to
zadziała. W dynamicznym polimorfizmie musisz dodawać wartwę interfejsu
z metodami wirtualnymi. W statycznym nie. Można by powiedzieć, że
statyczny polimorfizm bazuje na "opóźnionej kompilacji, do ostatniej
chwili, kiedy już wszystki wiadomo"
Czyli to co jest wymagane to aby każda z tych klas miała te funkcje
które zostaną użyte w template.
To nie jest takie trywialne. Powiedzmy, że mniej więcej.
Quote:
Poza tym każda może mieć dodatkowo inny zestaw funkcji - to nie robi.
Może. Tak samo w dynamicznym może.
Quote:
Jesteś ograniczony i tak Builderem oraz bratem używającym z niechęcią C.
Niechęć to była lata temu. Teraz już lubi C.
Można pisac w C jak w asemblerze

To może było złudzenie z tym
lubieniem :P
Quote:
On po prostu uważał, że ważny jest algorytm, a zapisać go już można w
dowolnym języku.
Tak też kiedyś myślano. Obecnie mysli się inaczej: ważne jest wyrażenie,
co chcesz uzyskać, aby kompilator dobrał optymalny kod.
Tak właśnie działa C++: tam bardziej określasz co chcesz, a nie jak chcesz.
Quote:
Wątpie, aby cokolwiek z C++11 miało jakąkolwiek wartość przed RAII czy
szablonami. Nie warto. No może dla "auto" warto.
Właśnie "auto" mi się podobało i nie wiem jak się to nazywa, ale takie
tworzenie w locie (w jednej linijce) klasy z jakąś jedną funkcją (może
konstruktorem) co się okazało z jakiegoś powodu było często potrzebne i
wprowadzono nowy sposób zapisu tego w kodzie źródłowym.
Lambda. Niestety lambda w embedded, w restrykcjch związanych ze stosem,
może być lekko nieciekawa, jesli użyjesz jej bezmyslnie. Choć bardzo
często kompilator usuwa lambdę i generuje kod optymalnie. Ogólnie należy
byc ostrożnym. Pod spodem dzieje się sporo dziwnych rzeczy.
Quote:
A statyczny polimorfizm jest w temacie embedded a tam są środowiska
dostarczane przez producentów procków więc pewnie bardziej aktualne.
Nie widuję.
A myślałem, że jak dostarczają środowisko to tam z definicji będzie
można pisać w C++.
Raczej nie. C++ w embedded musi się rozpychać w lasie ignorancji.
Naprawdę dużo dobrego zrobiło Arduino, że tylnymi drzwiami wprowadzono
C++. Okaząło się że nie gryzie, działa i to na 8-bit procesorach. Magia.
A miało wybuchać.
Quote:
Nie. Za późno. Jesli mysli asemblerem, to nie przekonasz. Nie próbuj
nawet. Jesli robi dobrze to, co robi, to niech robi, to co robi.
Kiedy Ty od czasu do czasu piszesz o zabetonowanych środowiskach
siedzących w swoim grajdołku z ubiegłego wieku.
Jesli ktoś ma warsztat który działa, to bym go nie zmieniał.
Rzecz nie w tym, aby zrobić rewolucję, rzecz w tym, aby sobie zdawać
sprawę, że można lepiej. I być może kiedyś małymi krokami dojśc do tego
"lepiej" w praktyce.
Problemem jest postrzeganie "lepiej" jako "gorzej" bo jest poza strefą
komfortu. I z tym walczę. Również u siebie.
Janusz
Guest
Tue Jul 19, 2022 7:18 pm
W dniu 2022-07-19 o 20:56, heby pisze:
Quote:
Ale zadaniem tych przykładów jest, abyś odszczekał debilizmy o
Harvardzie z problemem z metodami wirtualnymi.
Było o polimorfizmie, coś ci się mykeci w główce. Templaty to inna
historia i też przydatne w embeded jak tornia w nodze.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 7:20 pm
W dniu 2022-07-19 o 20:59, heby pisze:
Quote:
On 19/07/2022 20:43, Janusz wrote:
bez tego znika Ci kod, to robisz coś bardzo, bardzo źle?
Znowu nie masz pojęcia, tak voiltale powoduje że kod pracuje tak jak
ja chcę a nie jak kompilator myśli że ma pracować.
vialtile używane jest tylk ow sytuacji, kiedy *coś* może zmienić
zawartość zmiennej *nieoczekiwanie*.
Takie sytuacje to:
Inny wątek.
Przerwanie.
Rejestr sprzętowy.
Tylko w jednej sytuacji z tej listy używamy volatile. W dwóch używamy
barier. Istnieją mikroskopije architektury, w których nie ma barier, ale
teraz nawet miganie diodami robi się na ARMach.
Jeśli wyoptymalizowało Ci kod, który korzysta ze zmiennej i "naprawiłeś"
to przez delklarację volatile, to masz naprawdę nikłe pojęcie o tym, jak
pracuje kompilator i gdzie jest przyczyna niedziałania.
Współczuję.
Mylisz się, używa się jako informację żeby kompilator nie optymalizował
tej zmiennej, widzisz wydaje ci się że wszystko wiesz a jednak nie,
trafiony, zatopiony.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 7:22 pm
W dniu 2022-07-19 o 19:13, Piotr Gałka pisze:
Quote:
W dniu 2022-07-19 o 18:39, Janusz pisze:
W dniu 2022-07-19 o 17:45, Piotr Gałka pisze:
I jeszcze chyba trochę brakuje KiCadowi do Protela 3 pochodzącego z
1997r.
Mi tam nic nie brakuje,a to co ostatnio zrobili z rozsuwaniem ścieszek
to bajka. No i za to go też cenię że jest szybki i łatwy w obsłudze,
protel to kobyła która jest potwornie przeładowana i trzeba wiedzieć
gdzie co zmienić bo jak sie nie wie to mozna długo szukać.
Co do Protela to wydawało mi się, że Protel3 który mamy nie był aż tak
Tego nie znam.
przeładowany jak Protel 98 bo coś tam bardzo pozmieniali z plikami
wtedy, ale Protela 98 praktycznie nie znam.
No to właśnie o nim pisałem, później jak wszedł DX to sobie z nimi dałem
spokój,
tym bardziej że używałem amatorsko a DX już się nie dało tak używać.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 7:25 pm
W dniu 2022-07-19 o 20:21, heby pisze:
Quote:
Jak by powiedział, to od razu by się obrazili, jak Janusz.
Możesz się odstosunkować ode mnie?
--
Janusz
Grzegorz Niemirowski
Guest
Tue Jul 19, 2022 7:27 pm
Janusz <janusz_kk@o2.pl> napisał(a):
Quote:
Nie przejmuj się, mnie też nie przekonał ani on ani poprzednicy, jak
pracujesz sam nad kodem to i sam sobie panujesz nad kolejnymi wersjami.
Nie panujesz, bo po latach zapominasz dlaczego tą lub tamtą linijkę
napisałeś właśnie tak. Albo kiedy wprowadziłeś daną zmianę. Kontrola wersji
świetnie to rozwiązuje, szczególnie jeśli pisze się sensowne komentarze do
commitów. Znika też problem zmian wprowadzanych "na chwilę" i wycofywania
ich.
Quote:
Co innego praca zespołowa i chyba głównie w takiej pracy sie to uzywa, ale
dla np mnie jest strasznie upierdliwe.
Praca zespołowa jest praktycznie niemożliwa bez systemu kontroli wersji.
Poza tym kłania się wspomniana już integracja z CI/CD.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
Janusz
Guest
Tue Jul 19, 2022 7:32 pm
W dniu 2022-07-19 o 21:27, Grzegorz Niemirowski pisze:
Quote:
Janusz <janusz_kk@o2.pl> napisał(a):
Nie przejmuj się, mnie też nie przekonał ani on ani poprzednicy, jak
pracujesz sam nad kodem to i sam sobie panujesz nad kolejnymi wersjami.
Nie panujesz, bo po latach zapominasz dlaczego tą lub tamtą linijkę
napisałeś właśnie tak. Albo kiedy wprowadziłeś daną zmianę. Kontrola
Przecież to samo mogę napisać w komentarzu i skopiować na początek pliku
gdzie opisuję wszystkie zmiany albo mieć osobnym pliku opisowym bez
całych ceregieli z SVN-em.
--
Janusz
Piotr GaĹka
Guest
Tue Jul 19, 2022 7:38 pm
W dniu 2022-07-19 o 21:09, heby pisze:
Quote:
Ze słowa "Mock" uzytego w nazwie klasy.
Acha.
Quote:
Tak też kiedyś myślano. Obecnie mysli się inaczej: ważne jest wyrażenie,
co chcesz uzyskać, aby kompilator dobrał optymalny kod.
To mi zakrawa na Lisp czy Prolog.
Assembler 8051 najpierw próbowałem napisać w Prologu :)
Quote:
Lambda. Niestety lambda w embedded, w restrykcjch związanych ze stosem,
może być lekko nieciekawa, jesli użyjesz jej bezmyslnie.
Cały czas mieszasz to co ja chciałbym popróbować pisząc na komputer z
embedded nie związanym ze mną tylko z moim bratem.
P.G.
Grzegorz Niemirowski
Guest
Tue Jul 19, 2022 7:47 pm
Janusz <janusz_kk@o2.pl> napisał(a):
Quote:
Przecież to samo mogę napisać w komentarzu i skopiować na początek pliku
gdzie opisuję wszystkie zmiany albo mieć osobnym pliku opisowym bez
całych ceregieli z SVN-em.
To nie jest to samo. W systemie kontroli wersji masz opis do zmiany
(commita) obejmującej różne linie w różnych plikach. Widzisz, że w zmianie z
dnia tego i tego, o komentarzu takim a takim, w pliku a.c wstawiłeś te
linijki a te zmodyfikowałeś, a w pliku b.c takie linijki skasowałeś. Każda
lininijka kodu ma opis (powiązanie ze zmianą, która jej dotknęła). Opisy w
treści pliku nijak tego nie zapewniają. Nie mówiąc już o historii linii, w
tym tych usuniętych. Piszesz jakbyś nigdy nie używał systemu kontroli
wersji.
https://docs.github.com/assets/cb-135736/images/help/repository/git_blame.png
--
Grzegorz Niemirowski
https://www.grzegorz.net/
heby
Guest
Tue Jul 19, 2022 8:04 pm
On 19/07/2022 21:18, Janusz wrote:
Quote:
Ale zadaniem tych przykładów jest, abyś odszczekał debilizmy o
Harvardzie z problemem z metodami wirtualnymi.
Było o polimorfizmie
Oba przykłądy pokazują polimorfizm. Jedne dynamiczny (z metodami
wirtualnymi), drugi statyczny.
Quote:
, coś ci się mykeci w główce.
Nie, teraz się wycofujesz z debilizmów. Popkoru mam jeszcze trochę,
dawaj dalej.
Quote:
Templaty to inna
historia i też przydatne w embeded jak tornia w nodze.
Z faktu, ze ich nie pojmujesz, nic nie wynika dla faktów.
heby
Guest
Tue Jul 19, 2022 8:05 pm
On 19/07/2022 21:20, Janusz wrote:
Quote:
Mylisz się, używa się jako informację żeby kompilator nie optymalizował
tej zmiennej
Jesli kompilator wyoptymzliował Ci tą zmienną, a nie powinien, to masz
buga w kodzie, który załatałeś nieprawidłowym volatile.
Nie masz pojęcia o programowaniu.
heby
Guest
Tue Jul 19, 2022 8:07 pm
On 19/07/2022 21:25, Janusz wrote:
Quote:
Jak by powiedział, to od razu by się obrazili, jak Janusz.
Możesz się odstosunkować ode mnie?
Nie mogę. Łżesz z powodu ignoracji. Jesli ktoś to robi, to nie można
pozostać bezczynnym, nalezy rozgniatać w miejscu.
heby
Guest
Tue Jul 19, 2022 8:09 pm
On 19/07/2022 21:32, Janusz wrote:
Quote:
Przecież to samo mogę napisać w komentarzu i skopiować na początek pliku
I kto gwarantuje że to co napisano w komentarzu ma jakiekolwiek
powiązanie z tym co znajdzie w reszcie pliku?
heby
Guest
Tue Jul 19, 2022 8:15 pm
On 19/07/2022 22:08, Dawid Rutkowski wrote:
Quote:
Ciekawe jakie różnice w skompilowanym kodzie.
Nie ma sensu porównywać. Statyczny polimorfizm ma większe szanse za
zerowe obciązenie, dynamiczny prawie na pewno będzie fizycznie wołał
metody wirtualne. Ale sprawdzę, jak znajdę chwię, w środowisku Arduino
jeszcze nie robiłem objdumpa.
Quote:
AVR ma rozkaz call register?
ijmp i icall?
http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf
Grzegorz Niemirowski
Guest
Tue Jul 19, 2022 8:15 pm
heby <heby@poczta.onet.pl> napisał(a):
Quote:
Jesli kompilator wyoptymzliował Ci tą zmienną, a nie powinien, to masz
buga w kodzie, który załatałeś nieprawidłowym volatile.
Co to znaczy, że nie powinien? Jakie to jest nieprawidłowe volatile? Janusz
podał 3 poprawne przykłady użycia volatile.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
Goto page Previous 1, 2, 3 ... 14, 15, 16 ... 22, 23, 24 Next