Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #32516 > unrolled thread

Ada Tutorial - w Instytucie Lotnictwa

Started byMaciej Sobczak <see.my.homepage@gmail.com>
First post2019-04-17 10:41 -0700
Last post2019-05-09 10:29 -0700
Articles 20 on this page of 40 — 11 participants

Back to article view | Back to pl.comp.programming


Contents

  Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-04-17 10:41 -0700
    Re: Ada Tutorial - w Instytucie Lotnictwa Szyk Cech <szykcech@spoko.pl> - 2019-04-17 20:43 +0200
      Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-04-18 06:01 -0700
        Re: Ada Tutorial - w Instytucie Lotnictwa Sebastian Biały <heby@poczta.onet.pl> - 2019-04-19 19:24 +0200
          Re: Ada Tutorial - w Instytucie Lotnictwa Szyk Cech <szykcech@spoko.pl> - 2019-04-20 13:46 +0200
            Re: Ada Tutorial - w Instytucie Lotnictwa Sebastian Biały <heby@poczta.onet.pl> - 2019-04-20 15:02 +0200
              Re: Ada Tutorial - w Instytucie Lotnictwa Szyk Cech <szykcech@spoko.pl> - 2019-04-20 16:20 +0200
                Re: Ada Tutorial - w Instytucie Lotnictwa slawek <x.y@org.org> - 2019-04-23 21:27 +0200
                  Re: Ada Tutorial - w Instytucie Lotnictwa godek.maciek@gmail.com - 2019-04-24 00:11 -0700
              Re: Ada Tutorial - w Instytucie Lotnictwa Borneq <borneq@antyspam.hidden.pl> - 2019-08-04 18:11 +0200
        Re: Ada Tutorial - w Instytucie Lotnictwa Szyk Cech <szykcech@spoko.pl> - 2019-04-20 13:43 +0200
          Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-04-22 11:51 -0700
      Re: Ada Tutorial - w Instytucie Lotnictwa Wojciech Muła <wojtek.mula@gmail.com> - 2019-05-07 12:15 -0700
        Re: Ada Tutorial - w Instytucie Lotnictwa Szyk Cech <szykcech@spoko.pl> - 2019-05-07 21:38 +0200
        Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-07 22:52 +0200
          Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-07 22:54 -0700
            Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-08 19:31 +0200
              Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-08 23:04 -0700
                Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-09 18:19 +0200
                  Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-09 23:03 -0700
                    Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-10 20:33 +0200
                      Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-12 23:29 -0700
          Re: Ada Tutorial - w Instytucie Lotnictwa Wojciech Muła <wojtek.mula@gmail.com> - 2019-05-08 06:32 -0700
            Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-08 19:51 +0200
              Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-08 23:21 -0700
                Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-09 18:34 +0200
                  Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-09 23:21 -0700
                    Re: Ada Tutorial - w Instytucie Lotnictwa heby <heby@poczta.onet.pl> - 2019-05-10 21:00 +0200
                      Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-12 23:40 -0700
                        Re: Ada Tutorial - w Instytucie Lotnictwa AK <nobody@nowhere.net> - 2019-05-13 09:27 +0200
                          Re: Ada Tutorial - w Instytucie Lotnictwa godek.maciek@gmail.com - 2019-05-13 03:05 -0700
                            Re: Ada Tutorial - w Instytucie Lotnictwa AK <nobody@nowhere.net> - 2019-05-14 00:53 +0200
                              Re: Ada Tutorial - w Instytucie Lotnictwa godek.maciek@gmail.com - 2019-05-13 23:51 -0700
                                Re: Ada Tutorial - w Instytucie Lotnictwa AK <nobody@nowhere.net> - 2019-05-15 21:25 +0200
                                  Re: Ada Tutorial - w Instytucie Lotnictwa godek.maciek@gmail.com - 2019-05-15 23:55 -0700
                          Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-14 00:55 -0700
                            Re: Ada Tutorial - w Instytucie Lotnictwa Adam M <amorawski@magna-power.com> - 2019-05-14 06:25 -0700
                              Re: Ada Tutorial - w Instytucie Lotnictwa Maciej Sobczak <see.my.homepage@gmail.com> - 2019-05-14 23:09 -0700
        Re: Ada Tutorial - w Instytucie Lotnictwa Roman Tyczka <noemail@because.no> - 2019-05-09 11:32 +0200
          Re: Ada Tutorial - w Instytucie Lotnictwa Wojciech Muła <wojtek.mula@gmail.com> - 2019-05-09 10:29 -0700

Page 2 of 2 — ← Prev page 1 [2]


#32551

Fromheby <heby@poczta.onet.pl>
Date2019-05-10 20:33 +0200
Message-ID<qb4g5e$4s8$1@dont-email.me>
In reply to#32549
On 10/05/2019 08:03, Maciej Sobczak wrote:
>> Nie, tu padło jakieś hasło "C++ zachęca do pisania w stylu "write
>> once, debug endlessly"". Problem w tym że to jest walidne w każdym
>> języku a w c++ z roku na rok o dziwo coraz mniej.
> Tak. Oczywiście potrzeba, żeby programiści z roku na rok też robili postępy w tym, jak korzystają z tego języka.

O tym piszę od początku jako elemencie niezbędnym obok bezpiecznego języka.

>>> Niezupełnie. W takich systemach może być wymaganie na pokrycie testami każdej ścieżki.
>> Nie. W typowym systemie nie wymaga się pokrycia *każdej* ścieżki, wymaga
>> się pokrycia określonego procentu.
> Co to jest "typowy system"?

Taki który jest na tyle typowy że produkuje się do niego bardzo, ale to 
bardzo drogie narzędzia do kontrolowania procesu produkcji. Zacznij od 
pojęcia "test plan".

https://en.wikipedia.org/wiki/Test_plan

> Bo w konteście całej ludzkiej aktywności programistycznej, w ogóle wymaganie weryfikacji czegokolwiek jest niszowe.

Jeśli to coś miga diodą to masz rację. Ale jak już steruje czymkolwiek 
to przegapiłeś rewolucję. Nie wejdziesz na rynek aplikacji krytycznych 
bez bardzo rozbudowanego mechanizmu weryfikacji który sam podlega 
regorystycznej weryfikacji.

> A jak jesteśmy w niszach, to trudno mówić o "typowym systemie".

Typowy system critical safe. Nikt tu nie mówi o pisaniu migania diodą i 
narzekania że wyjątki są do tego kiepskie.

> W niszach są standardy i procesy. Nie spotkałem wymagań w procentach pokrycia.

Poczytaj o testplanach w okolicy pojęcia IpCore i programowania hardware.

>> Ba, wymaga się pokrycia nie tylko
>> ściezki wykonywania kodu, ale np. zbioru wartości danych zmiennych.
> Też w procentach?

Tak. Np. ze wszystkich 2^32 adresów IP przetestowaliśmy 5% i wydają się 
działać w duperelowatym kawałku kodu do migania diodą jak przyjdzie 
pakiet broadcast.

>> Jeśli masz kilkaset tyś lini kodu to nie jest mozliwe pokrycie go w 100%
> No to może za dużo jest tych linii? Albo ktoś je napisał a dopiero potem zorientował się, że warto by zrobić jakąś weryfikację. To niedobrze.

Nie, weryfikacja powstaje *zanim* napiszesz kod. Tylko że ludzie piszący 
wymagania wiedzą że coś jest nierealne do osiągnięcia jak 100% pokrycia 
itd itp. Zarządza się ryzykiem.

> Trochę się motasz. Przedsionek serca to system krytyczny. Miganie diodą też nim może być, zależy co to za dioda.
> A jeśli masz system, w którym ktoś napisał kilkaset tyś. linii a potem się zorientował, że nie może ich pokryć

Zorientował się przed napisaniem kodu. Oszacował ryzyko, w każdym 
punkcie systemu inaczej. Ryzyko mikrokernela jest wysokie i tam stopień 
pokrycia i wymagania co do jakosci są wyższe. Dla sterownika wentylatora 
nie są tak wyśrubowane a do sterownika poświetlenia klawiatury są niskie.

>, to może jednak ten system od samego początku nie był tak bardzo krytyczny i tylko ludzie sobie dodają fasonu twierdząc, że jest.

Nie dalej nie czaisz. Obecnie pisanie systemów krytycznych podlega pod 
bardzo restrykcyjne zasady. W nich samego pisania jest mało, znacznie 
więcej jest dokumentowania wymagań, śledzenia zmian, akceptacji, 
odpowiedzialności itp itd tylko że w przeciwieństwie do banków tutaj 
całosć procesu jest automatyzowana w miarę możliwości w całości.

>> Do testowania pokrycia stosuje się automatykę.
>> Ona widzi wyjątki tak samo jak logjmp.
> Nie. Nie widzi.
> Cytat ze standardu do F-35 (bo tam zaczęliśmy):
> "
> AV Rule 208:
> C++ exceptions shall not be used (i.e. throw, catch and try shall not be used.)
> Rationale: Tool support is not adequate at this time.

To trzeba zmienić tool.

> Problem w tym, że nadal jest "not adequate". I bardzo możliwe, że zawsze tak będzie.

Mało porawdopodobne. Standardy tego typu powstają kiedy obecni 
użytkownicy szczali jeszcze w pieluchy. Wystarczy zauważyć że w ciągu 10 
lat projkekt LLVM z pomysłu stał się praktycznie kombajnem do 
weryfikacji i to zaskakującej jakości jak na projekt "akademicki".

> Zmartwię Cię. Wymaganie pokrycia dotyczy kodu obiektowego a nie źródłowego. Na tym poziome nie ma już wiedzy o tym, który kawałek kodu był generyczny a który nie.

I źródłowego, i wynikowego i każdego innego który ma wpływ na 
bezpieczeństwo.

Przykładowo narzędzia do weryfikacji potrafią powiązać dowolną linijkę 
kodu źródłowego z wymaganiem formalnym i śledzić zmiany.

>> Znowu Cie zmartwie: możesz pokryć tą generyczną funkcję testami w 100% a
>> i tak ktoś rzuci wyjątkiem
> Nie rzuci, bo jest zakaz. Właśnie po to.

Przypuszczam że Ariane miała zakaz przepełniania zmiennych. Nawet może 
ktoś pogroził paluszkiem.

>> w przemyśle
>> nawet w aplikacjach do latania stosuje się śmiesze liczby w rodzaju 99%
> A dlaczego nie dało się pokryć tego brakującego 1%?

Bo wymaga to 99% czasu więcej? Szacujący ryzyko ocenia na ile chce mieć 
system działający vs system w wiecznej fazie produkcji.

>> System w którym lata milion wyjątków jest do dupy. Ale narzekanie że
>> funkcja generyczna jest do dupy bo może przez nią przelecieć wyjątek
>> jest absurdalne.
> A kod obiektowy, w którym jest milion nieprzetestowanych rozgałęzień jest OK?

Ale co to ma wspólnego z fukcją generyczną?

Kod obiektowy w którym jest milion nieprzetestowancyh rozgałęzień ma 
milion miejsc do poprawienia na weryfikacji. Zakasujesz rękawy i 
pokrywasz albo masz w zespole człowieka który nie dopuści do takiego 
dziadostwa. Ale spokojnie, autoamty do weryfikacji też nie odpuszczą a 
na samym końcu ktoś się pod tym podpisuje i to jego złapią za jaja w 
razie wypadku.

[toc] | [prev] | [next] | [standalone]


#32553

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-12 23:29 -0700
Message-ID<c5a598fe-5ad5-48d4-831c-6854e0b758e4@googlegroups.com>
In reply to#32551
> > Co to jest "typowy system"?
> 
> Taki który jest na tyle typowy że produkuje się do niego bardzo, ale to 
> bardzo drogie narzędzia

Ciekawy pogląd, z którym się nie zgodzam. Typowy system (ogólnie: produkt) to taki, który przez swoją typowość znajduje się w mainstreamie, gdzie akurat podaż narzędzi jest największa. W rzeczywistości tak duża, że można z góry założyć jako normę, że wszystkie narzędzia są darmowe. Od edytorów przez kompilatory po systemy kontroli wersji aż po narzędzia do zarządzania zespołem. Wszystko za friko. To jest teraz typowe.

Drogie narzędzia robi się wtedy, gdy ktoś nie ma wyjścia i musi je kupić. Bo w szczególności nikomu nie chce się ich robić. To są z natury nietypowe (niszowe) rzeczy.

> Zacznij od 
> pojęcia "test plan".
> 
> https://en.wikipedia.org/wiki/Test_plan

No i co z nim? Na tej stronie ani razu nie pojawia się słowo "expensive". Ba, nawet słowo "tool" się nie pojawia, więc chyba w ogóle żadnych narzędzi nie trzeba mieć.

> Nie wejdziesz na rynek aplikacji krytycznych 
> bez bardzo rozbudowanego mechanizmu weryfikacji który sam podlega 
> regorystycznej weryfikacji.

Tak.

> > A jak jesteśmy w niszach, to trudno mówić o "typowym systemie".
> 
> Typowy system critical safe.

Właśnie o to pytam. Bo w moim rozumieniu nie ma czegoś takiego. Każdy jest nietypowy.

> Poczytaj o testplanach w okolicy pojęcia IpCore i programowania hardware.

Gdzie mogę o tym poczytać?

> Tylko że ludzie piszący 
> wymagania wiedzą że coś jest nierealne do osiągnięcia jak 100% pokrycia 
> itd itp. Zarządza się ryzykiem.

Nie w sotfwarze. W HW chyba obowiązuje kultura myślenia w procentach, bo tak się zarządza ryzykiem w odniesieniu do systemów fizycznych (np. mechanicznych), gdzie występują przypadkowe błędy produkcji, degradacja (zmęczenie) materiału, itd. Tak można też liczyć hardware w sensie hardware. Natomiast software nie ma takich zjawisk i dlatego zarządzanie ryzykiem w ten sam sposób nie ma sensu. Ludzie, którzy projektują hardware jadą jeszcze na tej kulturze wyniesionej z systemów fizycznych, ale w branży pojawiło się już zrozumienie, że VHDL czy inny Verilog to software a nie hardware i pojwinno się to robić według procesów software'owych a nie hardware'owych.
Czyli programowanie hardware'u przy użyciu procentów to ściema.

Bo alternatywą jest konsekwentne przeniesienie myślenia procentowego na software a to by był koniec systemów krytycznych w ogóle.

> Zorientował się przed napisaniem kodu. Oszacował ryzyko, w każdym 
> punkcie systemu inaczej.

A na jakiej podstawie oszacował?

> Nie dalej nie czaisz. Obecnie pisanie systemów krytycznych podlega pod 
> bardzo restrykcyjne zasady.

W procentach? To się nie rozumiemy.

> W nich samego pisania jest mało, znacznie 
> więcej jest dokumentowania wymagań, śledzenia zmian, akceptacji, 
> odpowiedzialności itp itd tylko że w przeciwieństwie do banków tutaj 
> całosć procesu jest automatyzowana w miarę możliwości w całości.

Niestety nie. Bo te restrykcyjne zasady dotyczą też narzędzi i w wielu przypadkach nie opłaca się automatyzować (!), bo weryfikacja automatu też jest kosztem, w dodatku przez management traktowanym jako uboczny - co jest zrozumiałe, klient płaci za produkt, a nie za automat użyty przy tworzeniu tego produktu.
I to właśnie dlatego pisania jest mało. Bo gdyby dało się wszystko zautomatyzować, to programiści by tylko pisali a cała reszta by się działa automatycznie. Mała ilość pisania jest właśnie miarą tego, jak bardzo ta branża jest niezautomatyzowana.

> > Cytat ze standardu do F-35 (bo tam zaczęliśmy):
> > "
> > AV Rule 208:
> > C++ exceptions shall not be used (i.e. throw, catch and try shall not be used.)
> > Rationale: Tool support is not adequate at this time.
> 
> To trzeba zmienić tool.

Na jaki? Może tam w Ameryce nie wiedzą?

> > Problem w tym, że nadal jest "not adequate". I bardzo możliwe, że zawsze tak będzie.
> 
> Mało porawdopodobne. Standardy tego typu powstają kiedy obecni 
> użytkownicy szczali jeszcze w pieluchy. Wystarczy zauważyć że w ciągu 10 
> lat projkekt LLVM z pomysłu stał się praktycznie kombajnem do 
> weryfikacji i to zaskakującej jakości jak na projekt "akademicki".

I nadal jest to "not adequate". Bo kombajnem to on sobie może być, ale restrykjcyjne reguły, o których sam wspomniałeś, wykluczają go z użycia.

> Przypuszczam że Ariane miała zakaz przepełniania zmiennych. Nawet może 
> ktoś pogroził paluszkiem.

Zapewne. Ale zakaz rzucania wyjątków jest łatwiejszy, bo można to sprawdzić grepem.

> > A dlaczego nie dało się pokryć tego brakującego 1%?
> 
> Bo wymaga to 99% czasu więcej?

Własnie pytam, dlaczego. Cóż takiego tam jest, że wymaga 99% czasu więcej?

> Szacujący ryzyko ocenia na ile chce mieć 
> system działający vs system w wiecznej fazie produkcji.

Ale regulacje prawne nie określają, na ile działający ma być system. Zwłaszcza software'owy, gdzie nie można się tłumaczyć wadami materiałowymi, albo zmęczeniem struktury.

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

[toc] | [prev] | [next] | [standalone]


#32539

FromWojciech Muła <wojtek.mula@gmail.com>
Date2019-05-08 06:32 -0700
Message-ID<0eb77d44-3b22-41cb-8339-2346fe0b6c4d@googlegroups.com>
In reply to#32537
On Tuesday, May 7, 2019 at 10:52:14 PM UTC+2, heby wrote:
> On 07/05/2019 21:15, Wojciech Muła wrote:
> > Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?
> > Type1 i Type2 to jakieś klasy dostarczone przez użytkownika,
> > nic o nich nie wiemy.
> > 
> > Type1 fun(Type2 a, Type2 b)
> > {
> >     if (a.get_value() > b.get_value()) {
> >        return a.get_foo();
> >     }
> >     
> >     return a.get_bar() + b.get_foo();
> > }
> 
> Skoro nic o nich nie wiemy to obsługa tego wyjątku ma znaleźć się w 
> kodzie który coś o Type1 i Type2 wie czyli pewnie poziom niżej. Inaczej 
> kończysz na try {} catch(...) to jest jeszcze gorsze.
> 
> Wyjątki nie łapie się po każdym dodawaniu. Łapie się tam gdzie wiadomo 
> co z nimi zrobić.

Ale łapanie wyjątku to jest połowiczne rozwiązanie problemu. W szczególności,
jeśli wyjątek może pójść w dowolnym miejscu kodu (w tym przykładzie jest co
najmniej 13 miejsc, skąd może coś polecieć), to jaki będzie stan obiektu na
rzecz którego wołano metodę? Czy np. taki obiekt można bezpiecznie używać
dalej (stan wewnętrzny pozostał spójny)? Albo chociaż wywołać destruktor?
A co jeśli wyjątek leci z miejsca, o którym wierzyłeś, że nigdy nie poleci
i jednak dostajesz terminate?

w.

[toc] | [prev] | [next] | [standalone]


#32541

Fromheby <heby@poczta.onet.pl>
Date2019-05-08 19:51 +0200
Message-ID<qav4vb$87q$1@dont-email.me>
In reply to#32539
On 08/05/2019 15:32, Wojciech Muła wrote:
> Ale łapanie wyjątku to jest połowiczne rozwiązanie problemu. W szczególności,
> jeśli wyjątek może pójść w dowolnym miejscu kodu (w tym przykładzie jest co
> najmniej 13 miejsc, skąd może coś polecieć), to jaki będzie stan obiektu na
> rzecz którego wołano metodę?

Taki w jakim paradygmacie napisałeś kod. Mogłeś napisać pure function, 
mogłeś napisać kod z oparciem o transakcje z RAII, mogłeś totalnie sp... 
i napisać kod bazujacy na sideeffectach globalnych. Przecież jest wybór 
i akurat C++ pozwala napisać kod cholernie bezpiecznie i cholernie 
niebezpiecznie na raz. Ba, lisp też i ada też. To się załatwia code 
review i kilkoma developerami w zespole którzy potrafią zrozumieć na 
pisać kod aby nie trzeba było go debugować "endlessly" a to czy to C++ 
nie jest jakoś specjalnie istotne bo każdy język jest Turing-complete 
wiec poziom spieprzenia można osiągnąć identyczny.

Przedstawiona funkcja jest generyczna. Jeśli by ta funkcja miała 
dodatkowo zajmować się ogarnianiem stanu swoich argumentów wejściowych i 
łapaniem bilionów detalicznych exceptionów a nastepnie szukaniem w 
szklanej kuli co z nimi zrobić to niestety ale taki programista nie ma 
racji bytu w dowolnej branży bo to najzwyczajniej spieprzony kod jest i 
to w najgorszy możliwy sposób.

> Czy np. taki obiekt można bezpiecznie używać
> dalej (stan wewnętrzny pozostał spójny)?

Nigdy tego nie wiesz. Ale AKURAT ten znienawidzony C++ ma całkiem 
przyzwoite metody ograniczania działania sideeefectów jak scope i RAII. 
Po ich uzyciu jestem w stanie kontrolować sideeefecty znacząco wygodniej 
niż w innych językach imperatywnych, w sytuacjach krytycznych. Tylko że 
można też pisać kod funkcyjnie i tego nie robić. Masz wybór.

No tak, zapomniałem że standarny produkcji automatyki do dildo 
zabraniają używania RAII, pętli while, tabulacji i nieparzystych 
wartości inta.

Ariane pokazało że wybranie Ady nie powoduje że ludzie piszą kod 
bezpiecznie, dalej pisali w asemblerze. Nie wybór języka jest istotny 
tylko programisty. Wybrali hackerów, mają kupę a nie bezpieczny kod bez 
względu na koszerność języka.

> Albo chociaż wywołać destruktor?

Zawsze wywoła destruktor, *ZAWSZE* za wyjątkiem przypadku buga w 
kompilatorze. Chyba że lubisz longjmp. Widziałem już w "krytycznie 
bezpiecznym kodzie" wiec idiotów nie brakuje.

> A co jeśli wyjątek leci z miejsca, o którym wierzyłeś, że nigdy nie poleci
> i jednak dostajesz terminate?

To wykrywam to w unit testach i poprawiam buga. Ostatecznie ktos umiera 
bo mu rozrusznik nie zadziałał. Boeing nie ma z tym dzisiaj jak widać 
problemu, Toyota nie miała ze swoim pedłem gazu itd itp. Najzwyczajniej 
nie da się ogarnąć systemu mającego kilka tyś lini kodu formalnie a 
pojedyncze przypadki kiedy się to udało, jak L4, są raczej 
potwierdzeniem że wymaga to nadludzkiego wysiłku. A zakładanie że pisze 
się kod bez bugów jest absurdem. Jesteśmy zbudowani z białka i nic na to 
nie poradzimy choć potrafimy to znacząco poprawiać używając inżynierii 
(o)programowania znanej od lat co najmniej 60. Ani Toyota ani Ariane nie 
są przykładem używania tych technik bo w obu wypadkach można było je 
zasymulować wcześniej invitro.

A co sie stanie jak w ten kod trafi meteoryt z Neptuna? Jesteś na to 
przygotowany?

[toc] | [prev] | [next] | [standalone]


#32544

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-08 23:21 -0700
Message-ID<dccdf13d-3ee3-4cf0-a99e-da8828579160@googlegroups.com>
In reply to#32541
> Ariane pokazało że wybranie Ady nie powoduje że ludzie piszą kod 
> bezpiecznie, dalej pisali w asemblerze. Nie wybór języka jest istotny 
> tylko programisty.

Też nie. Tzn. programiści lubią wierzyć w swoją wyjątkowość, ale przedstawione przez Ciebie przykłady (Ariane, Toyota, Boeing) akurat wskazują na błędy w zarządzaniu i w wymaganiach. Programista może być perfekcjonistą, ale perfekcyjnie zaimplementowane złe wymagania albo system złożony do kupy z niewłaściwych komponentów i tak będą się rozpadać i zabijać.
Procesy jakościowe (o ile są przestrzegane) w ogóle nie zakładają, że programista będzie perfekcyjny. Wręcz przeciwnie - założenie jest właśnie takie, że programista spieprzy wszystko, co się da. Jakość wynika z procesów integralnych (z weryfikacji) a nie z deweloperskich. Pytanie, czy takie procesy integralne są. Problem w tym, że łatwo z nich zrezygnować.

> Wybrali hackerów, mają kupę a nie bezpieczny kod bez 
> względu na koszerność języka.

Wybór języka wpływa na to, jak łatwo jest coś spieprzyć. A ponieważ zakładamy, że programista spieprzy wszystko co może, to wybór języka jest ważny. Żeby mógł spieprzyć jak najmniej.

> > A co jeśli wyjątek leci z miejsca, o którym wierzyłeś, że nigdy nie poleci
> > i jednak dostajesz terminate?
> 
> To wykrywam to w unit testach i poprawiam buga.

Unit testy nie wykrywają wyjątków. Chyba że mamy inne rozumienie tego terminu.

> A co sie stanie jak w ten kod trafi meteoryt z Neptuna? Jesteś na to 
> przygotowany?

Jeśli takie są wymagania, to powinien być.

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

[toc] | [prev] | [next] | [standalone]


#32547

Fromheby <heby@poczta.onet.pl>
Date2019-05-09 18:34 +0200
Message-ID<qb1kr4$nqn$1@dont-email.me>
In reply to#32544
On 09/05/2019 08:21, Maciej Sobczak wrote:
>> Ariane pokazało że wybranie Ady nie powoduje że ludzie piszą kod
>> bezpiecznie, dalej pisali w asemblerze. Nie wybór języka jest istotny
>> tylko programisty.
> 
> Też nie. Tzn. programiści lubią wierzyć w swoją wyjątkowość, ale przedstawione przez Ciebie przykłady (Ariane, Toyota, Boeing)
> akurat wskazują na błędy w zarządzaniu i w wymaganiach.

Oczywiście, ja tylko odczarowuje durny pogląd "weźmy Adę, będzie 
bezpiecznie". Bez ludzi majcych pojęcie o bezpieczeństwie nigdzie się z 
tym nie dojdzie a w spełnianiu wymogów akurat hackerzy są bardzo dobrzy 
na co przykłądem jest to że jednak dali radę w Ariane spełnic wymogi.

> Procesy jakościowe (o ile są przestrzegane) w ogóle nie zakładają, że programista będzie perfekcyjny.
> Wręcz przeciwnie - założenie jest właśnie takie, że programista spieprzy wszystko, co się da.

Ciesze się że się zgadzamy.

> Jakość wynika z procesów integralnych (z weryfikacji) a nie z deweloperskich. Pytanie, czy takie procesy integralne są. Problem w tym, że łatwo z nich zrezygnować.

Tu się nie zgadzam. Można poprawnie zweryfikować dowolną kupę. Jakośc 
developerki nie ma wpływu wprost na magiczne 100% ale ma duży wpływ na 
obniżanie tego 100% do "no, szefie, nie damy rady 80%, mozemy ze 70% i 
tyle bo Steve spier... i nikt nie wie jak to działa". Wymogi nie są z 
betonu i dziwnym trafem potrafią sobie pływać w trakcie procesu produkcji.

>> Wybrali hackerów, mają kupę a nie bezpieczny kod bez
>> względu na koszerność języka.
> Wybór języka wpływa na to, jak łatwo jest coś spieprzyć.

Więc w C++ z roku na rok coraz trudniej spieprzyć. Oczywiście za 
wyjątkiem reszty świata która używa MISRA i dalej uważa że nie wymyślono 
nic bezpieczniejszego niż ręczną emulacje C++ w C.

> A ponieważ zakładamy, że programista spieprzy wszystko co może, to wybór języka jest ważny. Żeby mógł spieprzyć jak najmniej.

A mimo to spieprzył. Ariane zdetonowała z powodu używania bezpiecznego 
języka w niebezpieczny sposób. Czekamy na nastepny język o śmiesznej 
nazwie gdzie będzie jeszcze więćej bezstanowości, korutyn, monad i całej 
masy innych niezwykle przydatnych rzeczy do pisania niebezpiecznego kodu 
w asemblerze. Go, Dart, Kotlin, TypeScript. Co tam ostatnio wymyślili 
bezpieczniejszego bo od tygodnia nie zaglądałem na weba?

>>> A co jeśli wyjątek leci z miejsca, o którym wierzyłeś, że nigdy nie poleci
>>> i jednak dostajesz terminate?
>> To wykrywam to w unit testach i poprawiam buga.
> Unit testy nie wykrywają wyjątków. Chyba że mamy inne rozumienie tego terminu.

ASSERT_THROW. ASSERT_NO_THROW. Całkiem fajnie wykrywają.

>> A co sie stanie jak w ten kod trafi meteoryt z Neptuna? Jesteś na to
>> przygotowany?
> Jeśli takie są wymagania, to powinien być.

Więc jesli mógłbym prosić, przygotuj swoją funkcję na obsługę wyjątków. 
We wszystkich nastu miejscach. Zabawmy się w taki wymóg. Potem łatwo 
udowodnimy że std::vector pisali dyletanci bo przecież nie uwględnili że 
z konstruktora kopiującego element może wylecieć wyjątek i zamkniemy 
narzekanie o C++ konkluzją że jest do dupy i dlatego uzywa się MISRA-C 
gdzie wszystko jest do dupy ale weryfikowalnej formalnie dupy a taka 
jest znacząco lepsza.

[toc] | [prev] | [next] | [standalone]


#32550

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-09 23:21 -0700
Message-ID<c5cd80a1-d0a2-4fc5-810d-30ff996a9d03@googlegroups.com>
In reply to#32547
> Oczywiście, ja tylko odczarowuje durny pogląd "weźmy Adę, będzie 
> bezpiecznie".

Ale nie ma takiego poglądu. Jest inny: potrzeba, żeby było jak najbezpieczniej, więc na każdym kroku podejmijmy takie decyzje, które zwiększają nasze szanse na bezpieczny efekt. Wybór języka jest jednym z wymiarów, w którym można się do tego efektu zbliżyć lub oddalić.

To trochę jak z zapinaniem pasów w samochodzie. Albo z wyborem rodzaju pieca gazowego. Itd.

> > Jakość wynika z procesów integralnych (z weryfikacji) a nie z deweloperskich. Pytanie, czy takie procesy integralne są. Problem w tym, że łatwo z nich zrezygnować.
> 
> Tu się nie zgadzam. Można poprawnie zweryfikować dowolną kupę.

Można, ale jeśli terminy gonią...

> Jakośc 
> developerki nie ma wpływu wprost na magiczne 100% ale ma duży wpływ na 
> obniżanie tego 100% do "no, szefie, nie damy rady 80%, mozemy ze 70% i 
> tyle bo Steve spier... i nikt nie wie jak to działa".

Z innej perspektywy można powiedzieć, że ma wpływ na *koszt* osiągnięcia tych 100%, jeśli i tak trzeba, żeby było 100%. Lepsza deweloperka to niższy koszt weryfikacji.

Bo są (co najmniej) dwa sposoby robienia projektów: przy założonej z góry jakości i przy założonym z góry budżecie.

> Wymogi nie są z 
> betonu i dziwnym trafem potrafią sobie pływać w trakcie procesu produkcji.

Tak. Ale wymogi jakościowe mogą być narzucone regulacjami, np. prawnymi albo certyfikacyjnymi. Wtedy nie pływają.

> Więc w C++ z roku na rok coraz trudniej spieprzyć. Oczywiście za 
> wyjątkiem reszty świata która używa MISRA i dalej uważa że nie wymyślono 
> nic bezpieczniejszego niż ręczną emulacje C++ w C.

A co jest złego w MISRA-C++?

> > A ponieważ zakładamy, że programista spieprzy wszystko co może, to wybór języka jest ważny. Żeby mógł spieprzyć jak najmniej.
> 
> A mimo to spieprzył.

Może spieprzył mniej? Może gdyby spieprzył więcej, to rakietę by szlag trafił jeszcze przed startem?

> Ariane zdetonowała z powodu używania bezpiecznego 
> języka w niebezpieczny sposób.

Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.

> Czekamy na nastepny język o śmiesznej 
> nazwie gdzie będzie jeszcze więćej bezstanowości, korutyn, monad i całej 
> masy innych niezwykle przydatnych rzeczy

Tu się zgadzam. Ciekawe, czy Godek to czyta. :-)
Ale akurat Ada nie ma związku z żadną z tych rzeczy.

> Co tam ostatnio wymyślili 
> bezpieczniejszego bo od tygodnia nie zaglądałem na weba?

Właśnie wygląda na to, że te wszystkie wynalazki są zwykle odgrzebywane z 30-letnich letargów. W ogóle nie ma niczego nowego, to są kombinatoryczne złożenia starych rzeczy.

> > Unit testy nie wykrywają wyjątków. Chyba że mamy inne rozumienie tego terminu.
> 
> ASSERT_THROW. ASSERT_NO_THROW. Całkiem fajnie wykrywają.

Ale to nie są unit testy.

> Więc jesli mógłbym prosić, przygotuj swoją funkcję na obsługę wyjątków. 

Jest zakaz wyjątków. Właśnie po to, żebym nie musiał przygotowywać.

> Potem łatwo 
> udowodnimy że std::vector pisali dyletanci

Nie zgadzam się. std::vector to bardzo dobra klasa. Po prostu nie dla tej niszy.

> i zamkniemy 
> narzekanie o C++ konkluzją że jest do dupy i dlatego uzywa się MISRA-C 
> gdzie wszystko jest do dupy ale weryfikowalnej formalnie dupy a taka 
> jest znacząco lepsza.

Zależnie od potrzeb, może tak właśnie być. I nie widzę w tym nic złego. Tzn. wolałbym, żeby było jeszcze lepiej, ale jeśli jest tylko tak jak może być, to niech tak będzie.

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

[toc] | [prev] | [next] | [standalone]


#32552

Fromheby <heby@poczta.onet.pl>
Date2019-05-10 21:00 +0200
Message-ID<qb4hnr$eqn$1@dont-email.me>
In reply to#32550
On 10/05/2019 08:21, Maciej Sobczak wrote:
> A co jest złego w MISRA-C++?

Nikt go nie używa. Zacytuje jednego z developerów MICRA-C: "Znowu te 
pedały coś wymyśliły". Po prostu jest niekoszerny. Najbardziej widać to 
w automatyce przemysłowej i kontrolerach. Mimo że nawet 8-bitowy 
procesor skorzystał by z kodu pisanego w C++ to typowy developer uC 
nawet go kijem nie ruszy bo jednak nic lepszego niż void* nie wymyślono.

>>> A ponieważ zakładamy, że programista spieprzy wszystko co może, to wybór języka jest ważny. Żeby mógł spieprzyć jak najmniej.
>> A mimo to spieprzył.
> Może spieprzył mniej? Może gdyby spieprzył więcej, to rakietę by szlag trafił jeszcze przed startem?

Może. Problem w tym że to nie ma znaczenia. Ktoś napisał w języku z 
silnym typowaniem i fikuśnymi wyjątkami kod w asemblerze który przedarł 
się przez code review, weryfikację i był sterowany przez księgowych.

Zaznaczam że gdyby ktokolwiek obecnie zapytał mnie jak to zrobic to w 
przypływie mojej ignorancji napisałbym klasę do obsługi arytmetyki z 
saturacją, być może z możliwością wymiany jej na bezpośrednie wsparcie 
hardware co przecież dziwne nie jest.

Tutaj nadziubdziali żałosny asm.

Albo core review składał się z takich samych hackerów jak ten miszczu 
albo też code review nie było i cała ta Ada to pic na wodę. I nie 
mówiłbym tego gdyby nie to że przez te ostatnie naście lat widziałem 
troszkę kodu "bezpiecznego" i funta kłaków bym za wiele kawałków nie 
dał, to po prostu dobrze udokumentowane i przetestowane g...

>> Ariane zdetonowała z powodu używania bezpiecznego
>> języka w niebezpieczny sposób.
> Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.

Tak. Na przykład Verilog. Język z wbudowaną wadą projektową i 
najbardziej rozbudowanym systemem weryfikacji do zastosowań krytycznych. 
Dzień jak codzień w IT.

>> Czekamy na nastepny język o śmiesznej
>> nazwie gdzie będzie jeszcze więćej bezstanowości, korutyn, monad i całej
>> masy innych niezwykle przydatnych rzeczy
> Tu się zgadzam. Ciekawe, czy Godek to czyta. :-)
> Ale akurat Ada nie ma związku z żadną z tych rzeczy.

Na codzień mam do czynienia z VHDL. To taka ada + troche ekstra składni. 
Pisanie bezpieczne w tym języku polega głównie na obchodzeniu przez 
programistów silnego typowania chałupniczymi workaroundami. Stąd 
popularnośc Veriloga, można tam pisać co się chce a i tak sie jakoś 
skompiluje. Ludzie nie potrzebują bezpicznych jezyków i ograniczeń. 
Ludzie są leniwi i potrzebują dodawać inta do stringa a wynik ma być 
taki jak ma być i już.

>>> Unit testy nie wykrywają wyjątków. Chyba że mamy inne rozumienie tego terminu.
>> ASSERT_THROW. ASSERT_NO_THROW. Całkiem fajnie wykrywają.
> Ale to nie są unit testy.

To są narzędzia do wykrywania wyjątków w unit testach co oznacza że za 
ich pomocą można pisać unit testy testujące wyjątki.

>> Więc jesli mógłbym prosić, przygotuj swoją funkcję na obsługę wyjątków.
> Jest zakaz wyjątków. Właśnie po to, żebym nie musiał przygotowywać.

No ale to nie udowania tezy że rzucanie wyjątku przez generyka jest 
bezpieczne czy niebezpieczne. To tylko chowanie głowy w piasek z braku 
argumentacji.

Powtarzam, wyjątek czy nie, nie jest kwestią funkcji generycznych jego 
obsługa. Jakiekolwiek kombinowanie w tym temacie to błąd projektowy.

[toc] | [prev] | [next] | [standalone]


#32554

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-12 23:40 -0700
Message-ID<3e300e66-45f8-4df2-ae7e-6a95a687bd1a@googlegroups.com>
In reply to#32552
> > A co jest złego w MISRA-C++?
> 
> Nikt go nie używa.

Właśnie pytam, dlaczego.

> Po prostu jest niekoszerny.

Ciekawa obserwacja. Ale w takim razie ogólnie jesteśmy w lesie, bo to nie powinno być kryterium wyboru metod albo technologii.
Niemniej, jeśli nikt nie używa C++, to po co dyskutujemy o wyjątkach w C++?

> Ktoś napisał w języku z 
> silnym typowaniem i fikuśnymi wyjątkami kod w asemblerze który przedarł 
> się przez code review, weryfikację i był sterowany przez księgowych.

Co trzeba poprawić?

> Zaznaczam że gdyby ktokolwiek obecnie zapytał mnie jak to zrobic to w 
> przypływie mojej ignorancji napisałbym klasę do obsługi arytmetyki z 
> saturacją, być może z możliwością wymiany jej na bezpośrednie wsparcie 
> hardware co przecież dziwne nie jest.

I w jaki sposób by to pomogło rakiecie Ariane?
Ona rozwaliła się nie przez to, że ktoś napisał brzydki kod, tylko przez to, że bezrefleksyjnie złożono do kupy moduły z nowej i starej rakiety.
Twoja klasa nie pomogłaby dokładnie tak samo, jak Ada nie pomogła. Przez tych samych księgowych.
Tu widać, że programiści, nawet jeśli czasem są problemem, to zwykle nie są rozwiazaniem. Sorry.

> > Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.
> 
> Tak. Na przykład Verilog.

No właśnie. Czemu nie VHDL?

> Na codzień mam do czynienia z VHDL. To taka ada + troche ekstra składni. 
> Pisanie bezpieczne w tym języku polega głównie na obchodzeniu przez 
> programistów silnego typowania chałupniczymi workaroundami. Stąd 
> popularnośc Veriloga, można tam pisać co się chce a i tak sie jakoś 
> skompiluje. Ludzie nie potrzebują bezpicznych jezyków i ograniczeń. 
> Ludzie są leniwi i potrzebują dodawać inta do stringa a wynik ma być 
> taki jak ma być i już.

Bardzo ciekawa obserwacja.
I jak to można naprawić?

Tylko nie pisz, że "gdyby zatrudnili porządnych programistów...", bo to jest argument od czapy.

> >>> Unit testy nie wykrywają wyjątków. Chyba że mamy inne rozumienie tego terminu.
> >> ASSERT_THROW. ASSERT_NO_THROW. Całkiem fajnie wykrywają.
> > Ale to nie są unit testy.
> 
> To są narzędzia do wykrywania wyjątków w unit testach co oznacza że za 
> ich pomocą można pisać unit testy testujące wyjątki.

Nie, bo unit testy nie testują wyjątków. Chyba że mamy inne rozumienie tego terminu.

> Powtarzam, wyjątek czy nie, nie jest kwestią funkcji generycznych jego 
> obsługa.

Ale one nie muszą go obsługiwać (pojęcie "obsługi wyjątków" jest w ogóle słabe, bo nie wskazuje, co się do tej obsługi zalicza; zwijanie stosu i omijanie istniejącego kodu to obsługa czy nie?). Ważne, żeby te wszystkie rozgałęzienia były pokryte testami. A nie są. Więc jest źle.

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

[toc] | [prev] | [next] | [standalone]


#32555

FromAK <nobody@nowhere.net>
Date2019-05-13 09:27 +0200
Message-ID<qbb69q$ef6$1@gioia.aioe.org>
In reply to#32554
On 2019-05-13 08:40, Maciej Sobczak wrote:
>>> Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.
>>
>> Tak. Na przykład Verilog.
> 
> No właśnie. Czemu nie VHDL?
> 
>> Na codzień mam do czynienia z VHDL. To taka ada + troche ekstra składni.
>> Pisanie bezpieczne w tym języku polega głównie na obchodzeniu przez
>> programistów silnego typowania chałupniczymi workaroundami. Stąd
>> popularnośc Veriloga, można tam pisać co się chce a i tak sie jakoś
>> skompiluje. Ludzie nie potrzebują bezpicznych jezyków i ograniczeń.uktu dec
>> Ludzie są leniwi i potrzebują dodawać inta do stringa a wynik ma być
>> taki jak ma być i już.
> 
> Bardzo ciekawa obserwacja.
> I jak to można naprawić?
> 
> Tylko nie pisz, że "gdyby zatrudnili porządnych programistów....",
>  bo to jest argument od czapy.

Nie od czapy, ale sedno sprawy.
Jak w każdym rzemiośle oprócz materiału, narzędzi, maszyn itp..
o końcowej jakości produktu *w dużej mierze* decyduje właśnie dobry
fachowiec.
To, że branża IT o tym dawno zapomniała i wciąż udaje (wzorem prof. 
Marciniaka), że każdego dobrego fachowca można zastąpić skonczoną
liczbą studentów, to jej problem główny. Jeśli tego nie zmieni
(nie wróci do korzeni) to tysiace MISR czy auto-weryfikatorów nie
pomoże.
Branża IT zapomniałą nawet jak sie "tworzy" fachowca:
Wpierw uczeń (dobrych kilka lat), czeladnik (dobrych kilka lat),
potem pracownik (ale bez możliwości spieprzenia - tam gdzie można
zepsuć wciaż dzała i wykonuje mistrz), dopiero z czasem (wciąż
pod nadzorem i przyzwoleniem mistrza - bo to on wie co jest
"krytyczne" a co nie) roboty "rynkowe". Po wielu latach dopiero
można założyć "własną kużnię".
A w IT? nawet uC?
Dwa lata po studiach to już Experienced Senior Developer ;)

AK

[toc] | [prev] | [next] | [standalone]


#32556

Fromgodek.maciek@gmail.com
Date2019-05-13 03:05 -0700
Message-ID<d705a932-77b5-4e79-b934-ca2f242dd7df@googlegroups.com>
In reply to#32555
W dniu poniedziałek, 13 maja 2019 09:27:56 UTC+2 użytkownik AK napisał:
> On 2019-05-13 08:40, Maciej Sobczak wrote:
> >>> Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.
> >>
> >> Tak. Na przykład Verilog.
> > 
> > No właśnie. Czemu nie VHDL?
> > 
> >> Na codzień mam do czynienia z VHDL. To taka ada + troche ekstra składni.
> >> Pisanie bezpieczne w tym języku polega głównie na obchodzeniu przez
> >> programistów silnego typowania chałupniczymi workaroundami. Stąd
> >> popularnośc Veriloga, można tam pisać co się chce a i tak sie jakoś
> >> skompiluje. Ludzie nie potrzebują bezpicznych jezyków i ograniczeń.uktu dec
> >> Ludzie są leniwi i potrzebują dodawać inta do stringa a wynik ma być
> >> taki jak ma być i już.
> > 
> > Bardzo ciekawa obserwacja.
> > I jak to można naprawić?
> > 
> > Tylko nie pisz, że "gdyby zatrudnili porządnych programistów....",
> >  bo to jest argument od czapy.
> 
> Nie od czapy, ale sedno sprawy.
> Jak w każdym rzemiośle oprócz materiału, narzędzi, maszyn itp..
> o końcowej jakości produktu *w dużej mierze* decyduje właśnie dobry
> fachowiec.
> To, że branża IT o tym dawno zapomniała i wciąż udaje (wzorem prof. 
> Marciniaka), że każdego dobrego fachowca można zastąpić skonczoną
> liczbą studentów, to jej problem główny. Jeśli tego nie zmieni
> (nie wróci do korzeni) to tysiace MISR czy auto-weryfikatorów nie
> pomoże.
> Branża IT zapomniałą nawet jak sie "tworzy" fachowca:
> Wpierw uczeń (dobrych kilka lat), czeladnik (dobrych kilka lat),
> potem pracownik (ale bez możliwości spieprzenia - tam gdzie można
> zepsuć wciaż dzała i wykonuje mistrz), dopiero z czasem (wciąż
> pod nadzorem i przyzwoleniem mistrza - bo to on wie co jest
> "krytyczne" a co nie) roboty "rynkowe". Po wielu latach dopiero
> można założyć "własną kużnię".
> A w IT? nawet uC?
> Dwa lata po studiach to już Experienced Senior Developer ;)

Mogę w tym kontekście polecić esej Paula Grahama:
http://www.paulgraham.com/re.html

Znam programistów, którzy mimo ponad 10 lat doświadczenia
wciąż umieją mniej, niż ogarnięci studenci 1-go roku informatyki.

Ale ogólnie branża wydaje się na tyle złożona, że proste maksymy nie mają tu prostego zastosowania. Może z czasem się to ustabilizuje.

[toc] | [prev] | [next] | [standalone]


#32557

FromAK <nobody@nowhere.net>
Date2019-05-14 00:53 +0200
Message-ID<qbcsgs$fbn$1@gioia.aioe.org>
In reply to#32556
On 2019-05-13 12:05, godek.maciek@gmail.com wrote:
> W dniu poniedziałek, 13 maja 2019 09:27:56 UTC+2 użytkownik AK napisał:
>> On 2019-05-13 08:40, Maciej Sobczak wrote:
>>>>> Są też systemy pisane w niebezpiecznych językach w niebezpieczny sposób.
>>>>
>>>> Tak. Na przykład Verilog.
>>>
>>> No właśnie. Czemu nie VHDL?
>>>
>>>> Na codzień mam do czynienia z VHDL. To taka ada + troche ekstra składni.
>>>> Pisanie bezpieczne w tym języku polega głównie na obchodzeniu przez
>>>> programistów silnego typowania chałupniczymi workaroundami. Stąd
>>>> popularnośc Veriloga, można tam pisać co się chce a i tak sie jakoś
>>>> skompiluje. Ludzie nie potrzebują bezpicznych jezyków i ograniczeń.uktu dec
>>>> Ludzie są leniwi i potrzebują dodawać inta do stringa a wynik ma być
>>>> taki jak ma być i już.
>>>
>>> Bardzo ciekawa obserwacja.
>>> I jak to można naprawić?
>>>
>>> Tylko nie pisz, że "gdyby zatrudnili porządnych programistów....",
>>>   bo to jest argument od czapy.
>>
>> Nie od czapy, ale sedno sprawy.
>> Jak w każdym rzemiośle oprócz materiału, narzędzi, maszyn itp..
>> o końcowej jakości produktu *w dużej mierze* decyduje właśnie dobry
>> fachowiec.
>> To, że branża IT o tym dawno zapomniała i wciąż udaje (wzorem prof.
>> Marciniaka), że każdego dobrego fachowca można zastąpić skonczoną
>> liczbą studentów, to jej problem główny. Jeśli tego nie zmieni
>> (nie wróci do korzeni) to tysiace MISR czy auto-weryfikatorów nie
>> pomoże.
>> Branża IT zapomniałą nawet jak sie "tworzy" fachowca:
>> Wpierw uczeń (dobrych kilka lat), czeladnik (dobrych kilka lat),
>> potem pracownik (ale bez możliwości spieprzenia - tam gdzie można
>> zepsuć wciaż dzała i wykonuje mistrz), dopiero z czasem (wciąż
>> pod nadzorem i przyzwoleniem mistrza - bo to on wie co jest
>> "krytyczne" a co nie) roboty "rynkowe". Po wielu latach dopiero
>> można założyć "własną kużnię".
>> A w IT? nawet uC?
>> Dwa lata po studiach to już Experienced Senior Developer ;)
> 
> Mogę w tym kontekście polecić esej Paula Grahama:
> http://www.paulgraham.com/re.html
> 
> Znam programistów, którzy mimo ponad 10 lat doświadczenia
> wciąż umieją mniej, niż ogarnięci studenci 1-go roku informatyki.

Ależ też znam.
Takich jest z 10%. Reszta to jednak zjawisko dokładnie odwrotne.
Braki pokrywane wybujałą pewnością siebie (tez typowe zjawisko
socjologiczne).

> 
> Ale ogólnie branża wydaje się na tyle złożona, że proste maksymy
nie mają tu prostego zastosowania. Może z czasem się to ustabilizuje.

Bzdury godocie. Branza jak kazda inna.
Sa o badziej zlozone branze (lotnictwo, mechanika, fizyka/numeryka,
chemia, nawet metalurgia, niektore biotechnologie).
IT psuje od lat brak "rak do pracy" co powoduje nieustanne psienie
"fachowcow" co zwieksza brak "rak do pracy" co.. i kolo sie zamyka.
Mechanizmy (w tym psychologiczno/socjologiczne) sa dokladnie
takie jak gdzie indziej.

PS: Juz w pierwszej pracy (~1990), gdy zacznalo sie "ssanie" na
fachowcow (malutkie wtedy w stosunku dzisiejszego, ale jednak) i
zaczely dzialac "mechanizmy" wywiesilem sobie na biurkiem taki
ogolny "roadmap":
1. radosne planowanie
2. chybione wykonanie
3. szukanie winnych
4. karanie niewinnych
5. nagradzanie tych co nie brali udzialu

To pozostaje aktualne i uniwersalne do dzisiaj.
O czym to swiadczy? Ano o tym ze oprocz "zlych fachowcow"
drugim "kamieniem u nogi "ciagnacym jakosc w IT w dol jest
szeroko pojety management (inna/odlegla warta elektronow).

AK

[toc] | [prev] | [next] | [standalone]


#32558

Fromgodek.maciek@gmail.com
Date2019-05-13 23:51 -0700
Message-ID<3a3ec55d-6010-4685-81f8-b9a31cd5a108@googlegroups.com>
In reply to#32557
W dniu wtorek, 14 maja 2019 00:53:20 UTC+2 użytkownik AK napisał:

> > Ale ogólnie branża wydaje się na tyle złożona, że proste maksymy
> nie mają tu prostego zastosowania. Może z czasem się to ustabilizuje.
> 
> Bzdury godocie. Branza jak kazda inna.

No widzisz.
A gdybyś w latach 90., zamiast wieszać sobie na ścianie ironiczny plan szukania kozłów ofiarnych zrobił wyszukiwarkę opierającą się na ważeniu grafu ilością odsyłaczy, które prowadzą do danej strony, mógłbyś teraz być wśród najbogatszych ludzi na świecie.

Gdybyś kilka lat później stworzył forum, w którym użytkownicy zamiast odpowiadać mogliby klikać "lubię to", byłoby Cię stać, żeby oddawać miliardy dolarów na dobroczynność.

Branże w rodzaju lotnictwa mają bardzo wysoki próg wejścia, a błędy w nich popełniane mogą kosztować ludzkie życie. Serwisy do dzielenia się zdjęciami kotków nie mają tego problemu - tu w najgorszym razie użytkownik nie zobaczy kotka. (Albo jacyś wieśniacy dokonają samosądu. Ale to nie Twój problem)

[toc] | [prev] | [next] | [standalone]


#32562

FromAK <nobody@nowhere.net>
Date2019-05-15 21:25 +0200
Message-ID<qbhp3c$eke$1@gioia.aioe.org>
In reply to#32558
On 2019-05-14 08:51, godek.maciek@gmail.com wrote:
> W dniu wtorek, 14 maja 2019 00:53:20 UTC+2 użytkownik AK napisał:
> 
>>> Ale ogólnie branża wydaje się na tyle złożona, że proste maksymy
>> nie mają tu prostego zastosowania. Może z czasem się to ustabilizuje.
>>
>> Bzdury godocie. Branza jak kazda inna.
> 
> No widzisz.
> A gdybyś w latach 90., zamiast wieszać sobie na ścianie ironiczny plan szukania kozłów ofiarnych zrobił wyszukiwarkę opierającą się na ważeniu grafu ilością odsyłaczy, które prowadzą do danej strony, mógłbyś teraz być wśród najbogatszych ludzi na świecie.

Mlokosie. Na czym wyszukiwarke?
W tych latach (1987) byl COCOM i nawet zwykle kompilatory C sciagalo
sie nielegalnie po nocach po roznych BBSach (bo Inetu _w ogole_ nie bylo 
wtedy). Te BBSy dzialaly z zawrotna szybkoscia 2400b/sec, a tu mi tu o
jakiejs wyszukiwarce. Heh

> Gdybyś kilka lat później stworzył forum, w którym użytkownicy zamiast odpowiadać mogliby klikać "lubię to", byłoby Cię stać, żeby oddawać miliardy dolarów na dobroczynność.
> 

Heh. Poczytaj sobie np. o firmie Logotec. Wyprzedzala nie tylko Polske,
ale i byla na topie w swiecie w zakresie mobilnych aplikacji (m.in.
glowna nagroda Microsoftu za tworzene srodowiska developersiego
do tworzenia aplikacji mobilnych).
I co? I nie ma firmy. Dlaczego? Bo wtedy nie bylo komorek a handheldy
z WinCE i Palm byly drogie, a siec miala raptem 9600b/sek (choc to 
ostatnie nie bylo przeszkoda).
Skutkiem firma upadla choc jej Web@DDM (jestem pomyslodawca nazwy heh :)
wyprzedzal "epoke".
Znam jeszcze inne przypadki tego typu wiec Twoje "swiatle rady" zachowaj
zarozumialy mlokosie dla siebie.

> Branże w rodzaju lotnictwa mają bardzo wysoki próg wejścia, a błędy w nich popełniane mogą kosztować ludzkie życie.

.. a tam zaczynalem w 1987. Wpierw jako tokarz, potem programista metod
numerycznych (i nie tylko).
Wiec przestan mnie mlokosie pouczac co powinienem a co nie.
Pojecia nie masz co wtedy mozna bylo, a co nie i _jak_ nalezalo dzialac.

AK

[toc] | [prev] | [next] | [standalone]


#32564

Fromgodek.maciek@gmail.com
Date2019-05-15 23:55 -0700
Message-ID<ba8e9be4-75e7-4a69-874a-d0a8e0d3253c@googlegroups.com>
In reply to#32562
W dniu środa, 15 maja 2019 21:25:35 UTC+2 użytkownik AK napisał:
iejs wyszukiwarce. Heh
> 
> > Gdybyś kilka lat później stworzył forum, w którym użytkownicy zamiast odpowiadać mogliby klikać "lubię to", byłoby Cię stać, żeby oddawać miliardy dolarów na dobroczynność.
> > 
> 
> Heh. Poczytaj sobie np. o firmie Logotec. Wyprzedzala nie tylko Polske,
> ale i byla na topie w swiecie w zakresie mobilnych aplikacji (m.in.
> glowna nagroda Microsoftu za tworzene srodowiska developersiego
> do tworzenia aplikacji mobilnych).
> I co? I nie ma firmy. Dlaczego? Bo wtedy nie bylo komorek a handheldy
> z WinCE i Palm byly drogie, a siec miala raptem 9600b/sek (choc to 
> ostatnie nie bylo przeszkoda).
> Skutkiem firma upadla choc jej Web@DDM (jestem pomyslodawca nazwy heh :)
> wyprzedzal "epoke".
> Znam jeszcze inne przypadki tego typu wiec Twoje "swiatle rady" zachowaj
> zarozumialy mlokosie dla siebie.

To Ty stwierdziłeś, że branża (IT? uC?) to "branża jak każda inna".
W latach 90. przyszli założyciele Googla uderzali do wielkiego molocha kapitałowego Yahoo!, który indeksował Internet. I co? I zostali odprawieni z kwitkiem.
Nikt wówczas nie potrafił przewidzieć, co jest naprawdę potrzebne.
(Może nie "nikt", ale bardzo nieliczni. Ale raczej "wydawało im się",
niż "naprawdę wiedzieli")

Kiedy Facebook debiutował na giełdzie, mój kolega twierdził, że to absurdalne, że jego wartość jest większa od wartości koncernu General Motors. Ale jakimś cudem doszło do tego, że Facebookowi udało się osiągnąć masę krytyczna użytkowników i zostać "portalem społecznościowym całego świata", a w rezultacie "kontrolować myśli" miliardów ludzi na świecie.

Nie znam się na tym na tyle dobrze, żeby powiedzieć, dlaczego to Facebook, a nie np. grono.net, osiągnął taki sukces. Nie wiem, czy ktokolwiek się na tym zna (może tak?)

Ale owszem, moje, jak je nazywasz, "światłe rady" można sobie otrzaskać o kant tyłka, i to jest właśnie ich sednem. Żeby odnieść sukces w tej branży, wystarczy akurat przypadkiem być we właściwym miejscu we właściwym czasie i rozumieć coś, czego nikt inny nie rozumie. Nie wiem, czy tak jest w każdej branży - ale wydaje się, że księgowi czy lekarze czy inżynierowie budownictwa nie są w podobnej sytuacji.

[toc] | [prev] | [next] | [standalone]


#32559

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-14 00:55 -0700
Message-ID<da41dda0-50a5-46a4-ac05-2e9649d7ae76@googlegroups.com>
In reply to#32555
> > Tylko nie pisz, że "gdyby zatrudnili porządnych programistów....",
> >  bo to jest argument od czapy.
> 
> Nie od czapy, ale sedno sprawy.
> Jak w każdym rzemiośle oprócz materiału, narzędzi, maszyn itp..
> o końcowej jakości produktu *w dużej mierze* decyduje właśnie dobry
> fachowiec.

I tu jest właśnie różnica pomiędzy systemami krytycznymi a "normalnymi", gdzie obowiązują reguły rzemieślnicze (używam tego słowa w pozytywnym sensie "craftmanship", żeby nie było).

Jeżeli masz firmę, która robi cokolwiek niekrytycznego, to od jakości programistów zależy jakość produktu tak samo, jak od jakości jakiegokolwiek innego rzemieślnika zależy jakość tego co tworzy. Tu jest pełna zgoda. Co więcej, od ich jakości zależy nawet to, jak bardzo możesz odpuścić temat weryfikacji. W idealnym przypadku możesz w ogóle nie robić żadnej weryfikacji, bo produkt będzie po prostu dobry i po prostu odniesie sukces. Tak samo, jak Linux odniósł sukces, chociaż jądro Linuksa w ogóle nie ma unit testów.

Powtórzę na wszelki wypadek: jądro Linuksa nie ma unit testów.

I najwyraźniej nie jest to żaden problem.

Natomiast jak robisz system krytyczny, to podlegasz regulacjom, standardom i certyfikacjom. I ciekawostka jest taka, że np. w branży lotniczej standardy jakości nie obejmują bezpośrednio rekrutacji. Tzn. rekrutacja jest pod lupą w takim samym stopniu, jak np. zakup długopisów albo żarówek.
Czyli w myśl tych standardów jakość produktu nie bierze się z genialności kodera klepiącego kod (jak ktoś się uważa za genialnego, to niech sobie Linuksa poklepie, z pożytkiem dla wszystkich). Jakość bierze się z *weryfikacji* a nie z klepania. Właściwie to w zgodzie ze standardami (!) można by generować kod losowo tak długo aż przejdzie weryfikację.

Dlatego kod napisany przez genialnego programistę sam w sobie jest *bezwartościowy*. Słyszałem określenie "there is no quality built in" w odniesieniu do naklepanego poza procesem kodu i to dobrze określa obowiązujący stan umysłu.

Jakość bierze się z weryfikacji a nie z klepania kodu. I jeśli jakości nie ma, to znaczy tylko tyle, że weryfikacja była słaba.

Dlatego mądre internetowe stwierdzenia "gdyby zatrudnili dobrych programistów" po każdym upublicznionym fakapie, w którym zginęli ludzie, są od czapy. To nie ta branża.

> To, że branża IT

Tak. Zgadzam się. Tylko że IT i systemy krytyczne to są odrębne branże.
No chyba że zaczniemy je integrować i na siłę stosować metody jednej w drugiej. Ale zgadnijcie dlaczego Google odpuścił temat autonomicznych pojazdów... Przecież nie z powodu jakości programistów.

> A w IT? nawet uC?
> Dwa lata po studiach to już Experienced Senior Developer ;)

Tak. Jest takie zjawisko. I na razie nie widać, żeby to się miało odwrócić.

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

[toc] | [prev] | [next] | [standalone]


#32560

FromAdam M <amorawski@magna-power.com>
Date2019-05-14 06:25 -0700
Message-ID<4543f511-ad04-4115-bbc2-34abd1b2d2c0@googlegroups.com>
In reply to#32559
On Tuesday, May 14, 2019 at 3:55:18 AM UTC-4, Maciej Sobczak wrote:
> > > Tylko nie pisz, że "gdyby zatrudnili porządnych programistów....",
> > >  bo to jest argument od czapy.
> > 
> > Nie od czapy, ale sedno sprawy.
> > Jak w każdym rzemiośle oprócz materiału, narzędzi, maszyn itp..
> > o końcowej jakości produktu *w dużej mierze* decyduje właśnie dobry
> > fachowiec.
> 
> I tu jest właśnie różnica pomiędzy systemami krytycznymi a "normalnymi", gdzie obowiązują reguły rzemieślnicze (używam tego słowa w pozytywnym sensie "craftmanship", żeby nie było).
> 
> Jeżeli masz firmę, która robi cokolwiek niekrytycznego, to od jakości programistów zależy jakość produktu tak samo, jak od jakości jakiegokolwiek innego rzemieślnika zależy jakość tego co tworzy. Tu jest pełna zgoda. Co więcej, od ich jakości zależy nawet to, jak bardzo możesz odpuścić temat weryfikacji. W idealnym przypadku możesz w ogóle nie robić żadnej weryfikacji, bo produkt będzie po prostu dobry i po prostu odniesie sukces. Tak samo, jak Linux odniósł sukces, chociaż jądro Linuksa w ogóle nie ma unit testów.
> 
> Powtórzę na wszelki wypadek: jądro Linuksa nie ma unit testów.
> 
> I najwyraźniej nie jest to żaden problem.
> 
> Natomiast jak robisz system krytyczny, to podlegasz regulacjom, standardom i certyfikacjom. I ciekawostka jest taka, że np. w branży lotniczej standardy jakości nie obejmują bezpośrednio rekrutacji. Tzn. rekrutacja jest pod lupą w takim samym stopniu, jak np. zakup długopisów albo żarówek.
> Czyli w myśl tych standardów jakość produktu nie bierze się z genialności kodera klepiącego kod (jak ktoś się uważa za genialnego, to niech sobie Linuksa poklepie, z pożytkiem dla wszystkich). Jakość bierze się z *weryfikacji* a nie z klepania. Właściwie to w zgodzie ze standardami (!) można by generować kod losowo tak długo aż przejdzie weryfikację.
> 
> Dlatego kod napisany przez genialnego programistę sam w sobie jest *bezwartościowy*. Słyszałem określenie "there is no quality built in" w odniesieniu do naklepanego poza procesem kodu i to dobrze określa obowiązujący stan umysłu.
> 
> Jakość bierze się z weryfikacji a nie z klepania kodu. I jeśli jakości nie ma, to znaczy tylko tyle, że weryfikacja była słaba.
> 
> Dlatego mądre internetowe stwierdzenia "gdyby zatrudnili dobrych programistów" po każdym upublicznionym fakapie, w którym zginęli ludzie, są od czapy. To nie ta branża.
> 
> > To, że branża IT
> 
> Tak. Zgadzam się. Tylko że IT i systemy krytyczne to są odrębne branże.
> No chyba że zaczniemy je integrować i na siłę stosować metody jednej w drugiej. Ale zgadnijcie dlaczego Google odpuścił temat autonomicznych pojazdów... Przecież nie z powodu jakości programistów.
> 
> > A w IT? nawet uC?
> > Dwa lata po studiach to już Experienced Senior Developer ;)
> 
> Tak. Jest takie zjawisko. I na razie nie widać, żeby to się miało odwrócić.
> 
> -- 
> Maciej Sobczak * http://www.inspirel.com

Zgadzam się z szanownym kolegą w 100% ale powoli branżą lotnicza o której kolega pisze ze ścislą weryfikacja systemów krtycznych przestaje isnieć (nie wspomnę o branży samochodowej gdzie ścisła weryfikację systmów krytycznych odpuszczono sobie już dawno na zasadzie jeśli koszty odszkodowań są niższe od zysków to robimy tak by było taniej) - przykład ostatnie fiasko Boeinga - zaczyna sie projektowanie systemów przez ksiegowych a nie przez inzynierów.

[toc] | [prev] | [next] | [standalone]


#32561

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2019-05-14 23:09 -0700
Message-ID<09394408-a7fb-4b19-a1a8-ab3dc1a5b23c@googlegroups.com>
In reply to#32560
> Zgadzam się z szanownym kolegą w 100% ale powoli branżą lotnicza o której kolega pisze ze ścislą weryfikacja systemów krtycznych przestaje isnieć (nie wspomnę o branży samochodowej gdzie ścisła weryfikację systmów krytycznych odpuszczono sobie już dawno na zasadzie jeśli koszty odszkodowań są niższe od zysków to robimy tak by było taniej) - przykład ostatnie fiasko Boeinga - zaczyna sie projektowanie systemów przez ksiegowych a nie przez inzynierów.

Tak, jest problem. Ale akurat ostatnie fiasko Boeinga nie pokazuje, że cokolwiek się zaczęło, bo zjawisko zbytniego spoufalenia wykonawców (Boeing) z certyfikatorami (FAA) wcale nie powstało skokowo i w ostatnim czasie.
I problem został rozpoznany a korekta oczywiście ma kierunek odwrotny, czyli likwidacja spoufalenia i spadek wzajemnego zaufania.
Przykładowy komentarz:

https://www.rt.com/news/454229-european-air-regulator-doesnt-trust-faa/

I zauważ, że w tym komentarzu nie ma ani słowa o wpływie księgowych na dalszy proces.
Więc jest szansa, że jednak to nie księgowi będą mieć ostatnie słowo.

Jak będzie w przyszłości - nie wiemy. Ale akurat branża lotnicza tym się różni od przykładowej moto, że jest absurdalnie czuła na ilość wypadków, w sensie pojedynczych zdarzeń, które przechylają szalę z jednego ekstremum w drugie. Jak się rozwali jeden samolot, to wszyscy udają, że to siła wyższa, na którą nikt nie miał wpływu; ale jak się rozwali drugi, to jest międzynarodowy kryzys. Dlatego kultura tworzenia systemów krytycznych w tej branży przetrwa dłużej. Tzn. dłużej, niż np. w moto.
Jak długo i co będzie po niej - nie wiemy.

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

[toc] | [prev] | [next] | [standalone]


#32545

FromRoman Tyczka <noemail@because.no>
Date2019-05-09 11:32 +0200
Message-ID<ox7zss72bzio$.dlg@tyczka.com>
In reply to#32535
On Tue, 7 May 2019 12:15:04 -0700 (PDT), Wojciech Muła wrote:

> Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?
> Type1 i Type2 to jakieś klasy dostarczone przez użytkownika,
> nic o nich nie wiemy.
> 
> Type1 fun(Type2 a, Type2 b)
> {
>    if (a.get_value() > b.get_value()) {
>       return a.get_foo();
>    }
>    
>    return a.get_bar() + b.get_foo();
> }
> 
> w.

Ja tak z ciekawości, bo napisałeś dalej, że jest tych miejsc 13, czy
mógłbyś je wskazać? Nie programuję w C++, więc widzę tylko możliwość
wysypki w wywołaniach metod (zarówno w nich samych jak i na ich braku czyli
nilu). Ale z tego i tak nie wyjdzie aż 13. Czy masz tu na myśli jeszcze
przeciążanie operatorów? Co jeszcze?

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#32548

FromWojciech Muła <wojtek.mula@gmail.com>
Date2019-05-09 10:29 -0700
Message-ID<c484a1b0-6e86-4d88-9491-76b06ce3e61d@googlegroups.com>
In reply to#32545
On Thursday, May 9, 2019 at 11:32:28 AM UTC+2, Roman Tyczka wrote:
> On Tue, 7 May 2019 12:15:04 -0700 (PDT), Wojciech Muła wrote:
> 
> > Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?
> > Type1 i Type2 to jakieś klasy dostarczone przez użytkownika,
> > nic o nich nie wiemy.
> > 
> > Type1 fun(Type2 a, Type2 b)
> > {
> >    if (a.get_value() > b.get_value()) {
> >       return a.get_foo();
> >    }
> >    
> >    return a.get_bar() + b.get_foo();
> > }
> > 
> > w.
> 
> Ja tak z ciekawości, bo napisałeś dalej, że jest tych miejsc 13, czy
> mógłbyś je wskazać? Nie programuję w C++, więc widzę tylko możliwość
> wysypki w wywołaniach metod (zarówno w nich samych jak i na ich braku czyli
> nilu). Ale z tego i tak nie wyjdzie aż 13. Czy masz tu na myśli jeszcze
> przeciążanie operatorów? Co jeszcze?

To czego nie zauważyłeś na pierwszy rzut oka to niejawne konwersje.
Np. get_bar może zwrócić instancję klasy Kotek, ale operator dodawania
jest zdefiniowany dla Pieska --- i jeśli Pieska da się utworzyć
z Kotka, to mamy dwa konstruktory konwertujące, które oczywiście mogą
rzucić wyjątki. Ponadto argumenty są przekazywane przez kopie, więc 
wołany jest konstruktor kopiujący Type1, który potencjalnie może
coś rzucić. Tak samo wyniki zwracane mogą być typów konwertowalnych 
do Type2 i przed 'return' będzie konwersja, które może się nie powieść.

C++ trochę ten problem rozwiązał przez jawne zabronienie niejawnych
konwersji :) (słówko explicit), ale to musi być wyrażone wprost
w programie.

w.

[toc] | [prev] | [standalone]


Page 2 of 2 — ← Prev page 1 [2]

Back to top | Article view | pl.comp.programming


csiph-web