Article View: pl.comp.programming
Article #215550Re: Ada Tutorial - w Instytucie Lotnictwa
From: heby
Date: Thu, 09 May 2019 16:19
Date: Thu, 09 May 2019 16:19
78 lines
5867 bytes
5867 bytes
On 09/05/2019 08:04, Maciej Sobczak wrote: > Myślałem, że narzekamy na standard kodowania. 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. > Zakaz używania wyjątków jest dosyć uniwersalny, niezależny od języka. >>> Często sprowadza się to do pokazania użytkownikowi komunikatu o błędzie. >> Nie wiem co to znaczy "często", ale u mnie raczej nie.> > Interesujące. Ale to może (!) oznaczać, że obsługujesz wyjątki relatywnie blisko ich wystąpienia. Może, ale może też oznaczać że nie mam wyświetlacza i wiem po co je rzucam. >> return a() && b() && c() && d() ... ; >> To jest emulacja wyjątku w środowisku gdzie wyjątków ma nie być. Wyszło >> jak zwykle. Parcie na systemy ograniczone wcale nie generuje lepszego >> jakościowo kodu, co najwyżej generuje kod który lepiej ogarnia się >> formalną weryfikacją a i to jest mocno naciągane. > 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. Ba, wymaga się pokrycia nie tylko ściezki wykonywania kodu, ale np. zbioru wartości danych zmiennych. Jeśli masz kilkaset tyś lini kodu to nie jest mozliwe pokrycie go w 100% bo bywa że liczba stanów wejściwych i ich kobinacji przekracza zdrowy rozsądek. Ludzie robiący systemy krytyczne używają specjalistycznych narzędzie do oceny czy dany kod spełnia warunki czy nie, często są to zabawki oparte o randomizacje. I prawie nigdy to nie jest 100%. 100% to można sobie osiągnąć w kodzie do migania diodą czy przedsionkiem serca. > Jeżeli są wyjątki, to tych ścieżek nawet nie widać Mało kto patzy na kod. Do testowania pokrycia stosuje się automatykę. Ona widzi wyjątki tak samo jak logjmp. > a rozstrzygnięcie automatyczne ile ich jest i gdzie może wymagać dostępu do całego kodu i nawet wtedy może być nierealne. Zmartwie Cie. Zazwyczaj dostep do całego kodu nie jest potrzebny jeśli *formalnie* coś udowodnisz w module w środku. To że przez funkcję generyczną przelatują wyjąki i robią bałagan ze stanem czegośtam nie jest absolutnie problemem funkcji generycznej tylko kodu na zewnątrz. O to tu chodzi: przedstawiony przykład przez Wojtka jest kompletnie pozbawiony sensu, funkcje generyczne nigdy, przenigdy, nie powinny zajmować się sytuacjami zwiazanymi ze światem zewnątrznym a już na pewno nie obsługiwać cudze sideeffecty. Nie stosuje wyjątków w praktyce. Ale stosuje dość intensywne testowanie w praktyce. Gdybym miał tam dorzucić wyjątki jakoś niespecjalnie by mnie to zmartwiło, co najwyżej powiększyło zbiór testów. > Natomiast użycie iloczynu logicznego tak jak powyżej, chociaż wątpliwe stylistycznie, jest jednak lokalne >- tzn. analizę wszystkich ścieżek da się zrobić w ramach tylko tego wyrażenia. Wtedy znacznie łatwiej spełnić wymaganie pokrycia testami. Znowu Cie zmartwie: możesz pokryć tą generyczną funkcję testami w 100% a i tak ktoś rzuci wyjątkiem który przez nią przeleci inną ścieżką, podobnie scheduler preemptive może zmienić stan globalny albo meteoryt z Neptuna puknąć w serwer. Ogólnie można zbadać *wszystkie* ściezki, ale obawiam się że w praktyce to jest tylko akademicki pogląd, w przemyśle nawet w aplikacjach do latania stosuje się śmiesze liczby w rodzaju 99% itp. które mają związek z realnym poglądem na świat i doświadczeniem z faktycznymi możliwościami ogarniania kodu przez białko. Zleceniodwaca może oczywiście chcieć 100% ale wtedy będzie czekał na software przez 10 lat. 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. > Dlatego nie zgadzam się z określeniem "wyszło jak zwykle". Ten przykład da się obronić. Stylistycznie słaby (subiektywnie), ale broni się na poziomie procesu. Oczywiscie że da się obronić, w końcu skoro nie można uzywać normalnych technik programowania, jak wyjątki, to przeciez lepiej je koślawo zaemulować. Tak samo jak miszczofie C żałośnie emulują RAII i uważają to za punkt honoru.
Technical Details
Message-ID:
<qb1ju2$hsi$1@dont-email.me>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!news.uzoreto.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mailReferences:
<c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com> <qasr5t$7i2$1@dont-email.me> <b177541d-5a3c-4d33-bf62-b05209ff7d12@googlegroups.com> <qav3qi$qv$1@dont-email.me> <0f4d8931-97a9-458d-9f80-49c2e268f195@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!news.uzoreto.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: heby <heby@poczta.onet.pl> Newsgroups: pl.comp.programming Subject: Re: Ada Tutorial - w Instytucie Lotnictwa Date: Thu, 9 May 2019 18:19:11 +0200 Organization: A noiseless patient Spider Lines: 78 Message-ID: <qb1ju2$hsi$1@dont-email.me> References: <c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com> <qasr5t$7i2$1@dont-email.me> <b177541d-5a3c-4d33-bf62-b05209ff7d12@googlegroups.com> <qav3qi$qv$1@dont-email.me> <0f4d8931-97a9-458d-9f80-49c2e268f195@googlegroups.com> Mime-Version: 1.0 Injection-Date: Thu, 9 May 2019 16:19:15 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="f9c00375ae06f823f8c4741b596fb57c"; logging-data="18322"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19XMRJ5xcys19AQsldY0XWB" User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cancel-Lock: sha1:lnhWrftqfigtevQkEP0PAfICHv4= In-Reply-To: <0f4d8931-97a9-458d-9f80-49c2e268f195@googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit