Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Idris

Stran: 1 ... 51 52 [53] 54 55 ... 153
781
Vývoj / Re:Investor pro C++ IDE
« kdy: 19. 09. 2021, 10:34:00 »
Testy dělají to, co typy nesvedou. Typy obvykle nezabrání abych do proměnné měsíc nevložil hodnotu 14, aby se do indexu nedostala hodnota mimo rozsah pole.
Na to jsou enumy a závislostní typy. Důležité jsou typy i testy, vzájemně se doplňují a pokrývají jiná rizika (typy symbolicky, testy ošetřením typických případů).

To s tím indexem mě zaujalo. Zkusil jsem se zamyslet, a uvažovat jak by se dal řešit nějaký jednoduchý příklad s kolekcí.

Postavil jsem to na jednom reálném zadání z práce:

U položky evidujeme 0, 1 nebo 2 záznamy, přičemž buď může být jeden záznam draft, nebo jeden accepted, nebo jeden draft a jeden accepted. Budeme to řešit jako kolekci/pole.

Takže celkem přímočaře si z toho udělám čtyři varianty (pseudokód):

Kód: [Vybrat]
type State = Draft | Accepted

type Choices
= []
| [(State)]
| [(Draft), (Accepted)]

-- Funkce pro přidání:
add :: Choices -> State -> Choices
add xs@[] x = [x]
add xs@[Draft] x@Accepted = [xs : x]
add xs@[Accepted] x@Draft = [xs : x]

Je to trochu humpolácky napsané, příklad je ne úplně reprezentativní, ale berme to jako výhodu.

V podobném duchu si dokážu snadno představit třeba pole o maximální velikosti 42 prvků. Ale už by to asi chtělo nějaký cukr, nebo něco, aby to bylo příjemné.
Zajímavý příklad. U takovýchto zadání je vždy otázka, co ještě řešit v době překladu. Někdy je lepší nechat kontrolu na runtime, než učit juniory závislostní typy.

782
Vývoj / Re:Investor pro C++ IDE
« kdy: 19. 09. 2021, 10:24:39 »
Linter odhali stejny typ chyb jako kompiler.
Odvážné tvrzení. Ale budiž, nebudem se o tom přít.
Ak by linter odhalil rovnaky typ chyb ako kompiler, tak by bol tak trocha zbytocny, nie?
Zásadní rozdíl mezi linterem a kompilerem (staticky typovaného jazyka) je v tom, že linter lze nepoužít. (Plus je tam ta historická souvislost, že linter se používá na jazyky, které nebyly navrženy se statickými typy - Python, JS například.)
Původní linter vznikl pro C :)

783
Vývoj / Re:Investor pro C++ IDE
« kdy: 19. 09. 2021, 09:59:27 »
Linter odhali stejny typ chyb jako kompiler.
Odvážné tvrzení. Ale budiž, nebudem se o tom přít.
Pokud jde o typovou kontrolu, tak existují algoritmy, které u “dynamicky” typovaného jazyka doplní typy. Ovšem příslušný type checker musí podporovat generické typy včetně unifikace, aby eliminoval false negatives (hlášení typové chyby u korektního kódu).

Ten algoritmus musí ale pochopitelně mít přístup ke zdrojákům všech použitých knihoven, a pokud existují zabudované typy nebo funkce, musí k nim být typová informace.

784
Vývoj / Re:Investor pro C++ IDE
« kdy: 19. 09. 2021, 00:23:06 »
Testy dělají to, co typy nesvedou. Typy obvykle nezabrání abych do proměnné měsíc nevložil hodnotu 14, aby se do indexu nedostala hodnota mimo rozsah pole.
Na to jsou enumy a závislostní typy. Důležité jsou typy i testy, vzájemně se doplňují a pokrývají jiná rizika (typy symbolicky, testy ošetřením typických případů).

785
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 23:22:14 »
naviac poukazujes na to ze idris znamena prorok...
[facepalm]
Ještě větší retard, než jsme se obávali, hejže?  ::)
Tak si zadaj do google Idris, co ti najde. Na kolkej strane vysledkov by ta uzastna info mala byt? 10k a nejake drobne?
https://www.root.cz/zpravicky/vysla-nova-verze-jazyka-idris-2/
Dřív si ta tupá část společnosti všechno googlila. Teď už máme ještě nižší “kastu”, která neumí ani googlit.

786
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 23:20:30 »
Hele já nevím. Mě přijde, že je to dobou. Já takovýho kluka měl doma (na návštěvě). On je hodnej, což o to. Ale jako nějaká rozvaha, logické uvažování, přehled ale třeba i pud sebezáchovy jako vůbec. Přece nepudu do sporu, kde tuším, že mohu prohrát?! A ještě s takovým křikem. A oni tito lidé snad opravdu věří, že když budou hodně, ale fakt hodně křičet, tak že si tu pravdu vykřičí. Moc netuším v co doufají, že dosáhnou.
Hmm. Jestli to tak opravdu je, tak je to dost smutné.
Usilovně makám na tom, abych to moje děti nechytli :)
Nápodobně. Tak ať se daří (nám oběma).

787
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 23:12:08 »
naviac poukazujes na to ze idris znamena prorok...
[facepalm]
Ještě větší retard, než jsme se obávali, hejže?  ::)
Hele já nevím. Mě přijde, že je to dobou. Já takovýho kluka měl doma (na návštěvě). On je hodnej, což o to. Ale jako nějaká rozvaha, logické uvažování, přehled ale třeba i pud sebezáchovy jako vůbec. Přece nepudu do sporu, kde tuším, že mohu prohrát?! A ještě s takovým křikem. A oni tito lidé snad opravdu věří, že když budou hodně, ale fakt hodně křičet, tak že si tu pravdu vykřičí. Moc netuším v co doufají, že dosáhnou.
Hmm. Jestli to tak opravdu je, tak je to dost smutné.

788
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 22:49:46 »
naviac poukazujes na to ze idris znamena prorok...
[facepalm]
Ještě větší retard, než jsme se obávali, hejže?  ::)

789
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 19:00:55 »
Teď se mi zatajil dech, bojím se, co se dozvím nového.
Není nad to se dovzdělat :)

790
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 16:45:05 »
Smalltalk místo na typové kontroly vsadil na testy, které je mohou bez problémů nahradit. Typová kontrola je dnes už i v PHP v takové míře, která vývojářům vyhovuje. Tzn. že není vyžadována, ale je podporována.
Tak ale testy ti neohalia fakt ze scitas jablka a hrusky, ak jablka a hrusky su odvodene od integer. Jedine ze by si si definoval operator ktory ti pri scitani typu jablka a typu hrusky, vratil typ malvice. Toto ti moze odhalit len prekladac.

Jak tedy C++ rozliší mezi jablky a hruškami, pokud jsou odvozeny od int? Zabrání jejich sečtení?
myslis nieco taketo?
Kód: [Vybrat]
#include <iostream>
using namespace std;

typedef int apple;
typedef int pear;

int main() {
   apple a1 = 10;
   pear p1 = 20;
   int n = a1 + p1;
   cout << "Result : " << n << endl;
   return 0;
}

ani len pri tom nezanadava. Typovo silny jazyk by ti vynadal ze nepozna operator scitania pre apple a pear...

Ako tento nedostatok jazyka zachranis testami?

v dynamickem jazyku ten kod spadne, pokud ho spustis

Což dokazuje co?

ze to na to prijdes pri testu

Ale ty testy musím napsat, že? A musím je napsat správně, že?
To nevadí, prostě potřebuješ testy na testy. Stačí spočetně mnoho úrovní testů a metatestů ;)

791
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 13:16:11 »
nepoznaju rozdiel medzi typedf a using...
Nauč se anglicky a pak si přečti standard, čeká tě překvápko, somárik.
Cože, on že by měl něco šprtat? Vždyť stačí znát úplné základy angličtiny a vědět, že C++ je zkažené C.
Jo, on zná standard určitě nazpaměť, I kid you not :)

792
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 12:58:58 »
nepoznaju rozdiel medzi typedf a using...
Nauč se anglicky a pak si přečti standard, čeká tě překvápko, somárik.

793
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 11:56:33 »
Sémantika typů závisí na konkrétním jazyce, Go má taky něco jako typedef, ale ekvivalence to není.

BTW souhlasím s tím, že Braindead walker není troll. Je jen extrémně tupý lopatoid.
Jsem rád, že jsme dosáhli shody.  ;) Ten rozdíl v Go je každopádně zajímavý.
Jo, je, umožní jim to přidávat metody k existujícím typům. Ty sice umělo dávno třeba ObjC bez aliasů, nicméně Go má trochu jinou filosofii (a nemá klasický enum, takže tímto se to obchází).

P.S. Z mainstreamových jazyků má stejně nejsilnější typový systém Rust :) A reifikované lifetimy k tomu. 

794
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 11:41:27 »
myslis nieco taketo?
Kód: [Vybrat]
#include <iostream>
using namespace std;

typedef int apple;
typedef int pear;

int main() {
   apple a1 = 10;
   pear p1 = 20;
   int n = a1 + p1;
   cout << "Result : " << n << endl;
   return 0;
}

ani len pri tom nezanadava. Typovo silny jazyk by ti vynadal ze nepozna operator scitania pre apple a pear...

Ako tento nedostatok jazyka zachranis testami?
v dynamickem jazyku ten kod spadne, pokud ho spustis
Což dokazuje co?
Hlavně jen blb řekne, že jabko nebo hruška jsou int. Typový alias v C++ je ekvivalence. Takhle to vypadá, když někdo nezná jazyk, vymyslí si nějaký přiblblý pseudoproblém a pak jej vysvětluje na retardovaném kódu. Oh boy...
Super, tak teď konečně možná zjistíme, co je typ a co ne. A možná si sem tam někdo uvědomí, jaký je rozdíl mezi "nedostatkem jazyka" a nedostatečným vlastním pochopením. Třikrát sláva!
Sémantika typů závisí na konkrétním jazyce, Go má taky něco jako typedef, ale ekvivalence to není.

BTW souhlasím s tím, že Braindead walker není troll. Je jen extrémně tupý lopatoid.

795
Vývoj / Re:Investor pro C++ IDE
« kdy: 18. 09. 2021, 10:31:07 »
Smalltalk místo na typové kontroly vsadil na testy, které je mohou bez problémů nahradit. Typová kontrola je dnes už i v PHP v takové míře, která vývojářům vyhovuje. Tzn. že není vyžadována, ale je podporována.
Tak ale testy ti neohalia fakt ze scitas jablka a hrusky, ak jablka a hrusky su odvodene od integer. Jedine ze by si si definoval operator ktory ti pri scitani typu jablka a typu hrusky, vratil typ malvice. Toto ti moze odhalit len prekladac.

Jak tedy C++ rozliší mezi jablky a hruškami, pokud jsou odvozeny od int? Zabrání jejich sečtení?
myslis nieco taketo?
Kód: [Vybrat]
#include <iostream>
using namespace std;

typedef int apple;
typedef int pear;

int main() {
   apple a1 = 10;
   pear p1 = 20;
   int n = a1 + p1;
   cout << "Result : " << n << endl;
   return 0;
}

ani len pri tom nezanadava. Typovo silny jazyk by ti vynadal ze nepozna operator scitania pre apple a pear...

Ako tento nedostatok jazyka zachranis testami?
v dynamickem jazyku ten kod spadne, pokud ho spustis
Což dokazuje co?
Hlavně jen blb řekne, že jabko nebo hruška jsou int. Typový alias v C++ je ekvivalence. Takhle to vypadá, když někdo nezná jazyk, vymyslí si nějaký přiblblý pseudoproblém a pak jej vysvětluje na retardovaném kódu. Oh boy...

Stran: 1 ... 51 52 [53] 54 55 ... 153