Typový system versus unittesty

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #915 kdy: 25. 10. 2018, 13:02:03 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí.
https://en.wikipedia.org/wiki/Virtual_method_table
A co s tím? Virtuální metody nijak nesouvisí s tím, jestli má jazyk (statické) typy nebo ne. Ten odkaz by klidně mohl být na Kozinovu větu a vyšlo by to nastejno.
Statické typy umožňují určit už v době kompilace, která metoda bude použita. Virtuální metoda se musí vybírat ze seznamu před každým voláním.
Tak C++ má statické typy i virtuální metody. Proč asi?
Dědičnost?
Protože C++ není schopen zajistit v době kompilace objektu (třídy) A, která bude volat metodu m instance b, zda to bude přímo té instance, nebo z jejího předka?


Bacsa

Re:Typový system versus unittesty
« Odpověď #916 kdy: 25. 10. 2018, 13:42:24 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí.
https://en.wikipedia.org/wiki/Virtual_method_table
A co s tím? Virtuální metody nijak nesouvisí s tím, jestli má jazyk (statické) typy nebo ne. Ten odkaz by klidně mohl být na Kozinovu větu a vyšlo by to nastejno.
Statické typy umožňují určit už v době kompilace, která metoda bude použita. Virtuální metoda se musí vybírat ze seznamu před každým voláním.
Tak C++ má statické typy i virtuální metody. Proč asi?
Dědičnost?
Protože C++ není schopen zajistit v době kompilace objektu (třídy) A, která bude volat metodu m instance b, zda to bude přímo té instance, nebo z jejího předka?
Samozřejmě, to byl příklad pro Kita.

Kit

Re:Typový system versus unittesty
« Odpověď #917 kdy: 25. 10. 2018, 14:03:45 »
Nejde tedy jen o to, jak moc je daný jazyk kvalitní, ale také jak jednoduché či složité je jeho používání.
Ano, slozitost je potreba posuzovat na nekolika urovnich. Jak jednoduse je v jazyce mozno vyjadrit myslenku, kolik tomu klade formalnich prekazek.  Jak prehledny a citelny/pochopitelny je zapis. Jak bohate a uzitecne jsou standardni knihovny a odladene knihovny tretich stran. Jak je jazyk intuitivni/logicky a chova se dle ocekavani, tj. jak snadno se da naucit a na kolik se musi myslet speku. Jak dobre je zdokumentovany. Jakou ma podporu v produkci, kvalitni ide, podporu pro debugovani, testovani, psani vlastni dokumentace. Jakou ma podporu u vyrobce nebo komunity, kdyz se vyskytne nejaky zapeklity problem - chyba ve vlatnim programovacim jazyce, at kompileru nebo behovem prostredi nebo systemovych knihovnach. A dalsi me asi hned nenapadly.

Významnou roli hraje také křivka učení. XSLT je jednodušší než Haskell (nepracuje s typy) ale pro objektové programátory má poměrně vysokou vstupní bariéru, než se dostaví aha-efekt. Haskel sice má jednodušší zápis, ale o to víc musí začátečník zápolit s typy. Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.

Takový Lisp je na pochopení mnohem jednodušší. Typy má jen jako atributy. Pokud mi nějaký jazykový konstrukt chybí, tak si ho prostě dodělám.

Kiwi

Re:Typový system versus unittesty
« Odpověď #918 kdy: 25. 10. 2018, 14:06:37 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí. Jeden blud za druhým, ach jo, to už na těch VŠ nic kloudného neučí?
OMG! Zjisti si laskavě nejdřív něco o historii zavedení datových typů než začneš z neznalostí osočovat jiné. Protože nyní sis dal čistou ránu do vlastní brány. Prozradím ti, že historický důvod byl pouze - to podtrhuji! - pouze efektivní kod!

Bacsa

Re:Typový system versus unittesty
« Odpověď #919 kdy: 25. 10. 2018, 14:11:19 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
Takhle přímo se tu ještě nikdo neptal. Na slušnou otázku by dostal slušnou odpověď.


Bacsa

Re:Typový system versus unittesty
« Odpověď #920 kdy: 25. 10. 2018, 14:13:00 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
I skladník ve šroubárně si může přečíst Eilenberga a Mac Lana v originále ;)

Bacsa

Re:Typový system versus unittesty
« Odpověď #921 kdy: 25. 10. 2018, 14:15:11 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí.
Prozradím ti, že historický důvod byl pouze - to podtrhuji! - pouze efektivní kod!
Jistě to můžeš doložit  ;)

Re:Typový system versus unittesty
« Odpověď #922 kdy: 25. 10. 2018, 14:18:36 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
I skladník ve šroubárně si může přečíst Eilenberga a Mac Lana v originále ;)

To je od teba konečne niečo z praxe? To je to, čo robíš? Snažíš sa vyhrabať zo skladu? Ale na to ti citovanie úryvkov prác matematikoch nepomôže, tam pomôže jedine že tomu budeš aj rozumieť. Len či to nie je za hranicou mentálnych schopnosti nejakého čehúňa s maďarským nickom ;)

Bacsa

Re:Typový system versus unittesty
« Odpověď #923 kdy: 25. 10. 2018, 14:24:24 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
I skladník ve šroubárně si může přečíst Eilenberga a Mac Lana v originále ;)
To je od teba konečne niečo z praxe? To je to, čo robíš? Snažíš sa vyhrabať zo skladu? Ale na to ti citovanie úryvkov prác matematikoch nepomôže, tam pomôže jedine že tomu budeš aj rozumieť. Len či to nie je za hranicou mentálnych schopnosti nejakého čehúňa s maďarským nickom ;)
Si opět koleduješ o smazání moderátorem. Slibovals, že se budeš chovat slušně. Moc dlouho ti to nevydrželo.

Re:Typový system versus unittesty
« Odpověď #924 kdy: 25. 10. 2018, 14:38:32 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
I skladník ve šroubárně si může přečíst Eilenberga a Mac Lana v originále ;)
To je od teba konečne niečo z praxe? To je to, čo robíš? Snažíš sa vyhrabať zo skladu? Ale na to ti citovanie úryvkov prác matematikoch nepomôže, tam pomôže jedine že tomu budeš aj rozumieť. Len či to nie je za hranicou mentálnych schopnosti nejakého čehúňa s maďarským nickom ;)
Si opět koleduješ o smazání moderátorem. Slibovals, že se budeš chovat slušně. Moc dlouho ti to nevydrželo.

Ale keď s tebou sa tak dobre háda... No tak jo, no tak idem pokračovať v slušnom správaní :/

Bacsa

Re:Typový system versus unittesty
« Odpověď #925 kdy: 25. 10. 2018, 15:03:10 »
Když se tady zeptá, co je to monáda, tak dostane jen drzou odpověď, že si má nastudovat Teorii kategorií, nejlépe v originále.
I skladník ve šroubárně si může přečíst Eilenberga a Mac Lana v originále ;)
To je od teba konečne niečo z praxe? To je to, čo robíš? Snažíš sa vyhrabať zo skladu? Ale na to ti citovanie úryvkov prác matematikoch nepomôže, tam pomôže jedine že tomu budeš aj rozumieť. Len či to nie je za hranicou mentálnych schopnosti nejakého čehúňa s maďarským nickom ;)
Si opět koleduješ o smazání moderátorem. Slibovals, že se budeš chovat slušně. Moc dlouho ti to nevydrželo.
Ale keď s tebou sa tak dobre háda... No tak jo, no tak idem pokračovať v slušnom správaní :/
Köszönöm.

Kiwi

Re:Typový system versus unittesty
« Odpověď #926 kdy: 26. 10. 2018, 00:15:20 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí.
Prozradím ti, že historický důvod byl pouze - to podtrhuji! - pouze efektivní kod!
Jistě to můžeš doložit  ;)
Viz poznámky Johna Backuse k návrhu FORTRANu. Bez datových typů by byl generovaný kód zbytečně dlouhý - kompilátor by musel vložit kód pro všechny možné podporované typy a konverze mezi nimi v dané operaci - a pomalý - rozhodovalo by se až za běhu, rutina pro který typ se má vlastně zavolat. Proměnné s deklarovanými datovými typy daly překladači potřebnou informaci v době kompilace, ale i tak to bylo chápáno jako nutné zlo, technikálie, proto se to snažili nějak eliminovat aspoň implicitním typováním (které převzal např. BASIC a částečně i původní C dle K&R ještě 10 let po FORTRANu).

Je dobré si uvědomit, že tenkrát se kolem počítačů pohybovala úplně jiná sorta lidí než dnes. Byly to čestné pozice pro ty nejlepší z nejlepších. Kdybych použil příměr - bývaly doby, kdy člověk, který by v rukopisu normostrany textu při diktátu šel pod 240 úhozů za minutu a udělal víc jak 1,5 promile chyb, nemohl dělat písaře. Raději by vybrali někoho zdatnějšího. Dnes je třeba zapisovat takové množství textů, že se vymýšlejí nástroje, které umožní zaměstnat jako písaře i cvičenou opici. Co tu řešíte okolo těch typů je přesně na této úrovni - považuješ za nevzdělance lidi, kteří tě upozorňují, že textový editor byl v první řadě vymyšlen jako nástroj pro rychlé pořizování a editace textů. Už jsi z toho tak zblbnul (myšleno v dobrém), že tvrdíš, že to s tím nijak nesouvisí, že hlavní funkcí editoru je automatická oprava pravopisu a doplňování slov.

P.S. - jeden takový příhodný citáteček na popíchnutí:
I’m not against types, but I don’t know of any type systems that aren’t a complete pain, so I still like dynamic typing.

Bacsa

Re:Typový system versus unittesty
« Odpověď #927 kdy: 26. 10. 2018, 00:52:52 »
P.S. - jeden takový příhodný citáteček na popíchnutí:
I’m not against types, but I don’t know of any type systems that aren’t a complete pain, so I still like dynamic typing.
To by chtělo rozvést, udělal to Kay nebo to je jen věta vytržená z kontextu? Jinak obecně absence of evidence ain’t evidence of absence.

Jinak nemá smysl a je hloupé prosazovat extremistické názory, ať už na jedné nebo druhé straně. Já třeba spoustu let dělal v ObjC a tamní způsob posílání zpráv mi vyhovoval (doteď ho považuju za takřka geniální), ale taky je jasné, že typová kontrola při překladu (typy místo prostého id všude) je užitečná, i když za běhu se s typy nepracuje. Na druhou stranu dokážu ocenit i typový systém Haskellu nebo podobných jazyků s “typovým našeptáváním”.

.

Re:Typový system versus unittesty
« Odpověď #928 kdy: 26. 10. 2018, 01:23:58 »
Souhlasim. Neslo mi o jazyky s dynamickou syntaxi, o jejichz realne prakticnosti mam pochyby,  ale uvidime, co prinese budoucnost. Slo mi o fenomen slozitosti, ktery se tu prehlizi a je imho vyznamne podstatnejsi ohledne kvality a spolehlivosti vysledne aplikace. Chci-li vysokou spolehlivost, nevyresim to typovym systemem, ale a) vhodnou metodou vyvoje software, zalozenou na dukladnych testech, viz treba extremni programovani, b) kvalitnim testovacim prostredim a c) zvolenám prostredku, ktere mi rozumne snizi druhotnou slozitost, jenz je vyznamnym zdrojem chyb (proto typicky neprogramujeme ve strojovem kodu nebo asm a proto se vyvoj nezastavil ani u jejich nastupcu C, C++, Java /C# nebo dnes popularni JS a Python, kde Python je nejpokrocilejsi, ale take nejmene vykonny). Ony ty testy take zvysuji druhotnou slozitost, ale maji vyhodu, ze nejsou soucasti produkcni aplikace a nezasahuji do ni, ale to uz se ale opakuji. Typovy system slozitost programu zvysuje a to primo umerne se svou silou. Tedy cim dukladneji resi jeden zdroj chyb, tim posiluje jiny zdroj chyb, druhotnou slozitost. Argument kvality a spolehlivosti je u staticky typu proto falesny. Jejich opodstatneni je jine, v moznosti lepsi optimalizace a vyssiho vykonu aplikace. Ale k tomu neni potreba, hadam, vyssi typovy system, staci k tomu datove typy na urovni architektury.
Jen pro doplnění. Kdysi jsem četl jeden zajímavý článek (bohužel už ho teď nedohledám), kde autor považoval za velice důležitý parametr jazyka konzistentní hustotu informací (to je moje parafráze, jak to nazval on už si nepamatuji).  Šlo o to, aby nebylo na 3 řádcích "prázdno" a pak na jednom řádku složitá konstrukce. Tímhle nešvarem dle mého názoru trpí třeba Perl nebo Python, naopak jazyky jako Lua nebo Go jsou skoro až řídké (alespoň dle mých zkušeností). Nejzajímavější na tom je to, že ve výsledku nevidím, že by program v Go  nebo Lue byl delší než odpovídající program v v Perlu nebo Pythonu, skoro naopak.

Tahle ta konzistentní hustota je podle autora článku klíčová pro snadnou čitelnost/udržitelnost kódu.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #929 kdy: 26. 10. 2018, 02:00:58 »
Jen pro doplnění. Kdysi jsem četl jeden zajímavý článek (bohužel už ho teď nedohledám), kde autor považoval za velice důležitý parametr jazyka konzistentní hustotu informací (to je moje parafráze, jak to nazval on už si nepamatuji).  Šlo o to, aby nebylo na 3 řádcích "prázdno" a pak na jednom řádku složitá konstrukce. Tímhle nešvarem dle mého názoru trpí třeba Perl nebo Python, naopak jazyky jako Lua nebo Go jsou skoro až řídké (alespoň dle mých zkušeností). Nejzajímavější na tom je to, že ve výsledku nevidím, že by program v Go  nebo Lue byl delší než odpovídající program v v Perlu nebo Pythonu, skoro naopak.

Tahle ta konzistentní hustota je podle autora článku klíčová pro snadnou čitelnost/udržitelnost kódu.

Moc pěkné. Děkuji.