🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215550

Re: Ada Tutorial - w Instytucie Lotnictwa

#215550
From: heby
Date: Thu, 09 May 2019 16:19
78 lines
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-mail
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>

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