Det er mandag, mine bekendte. Inspireret af https://feddit.dk/post/257712
På hedengangne dailyrush havde vi et par populære tråde, en hvor man kunne skrive, hvad man lige havde set af film og serier, og en anden med hvad man lige havde læst, og endnu en til spil man lige havde spillet.
Én ugentlig tråd med titlen “jeg har lige læst/set/spillet/hørt”, og så kunne man ellers give sin uforbeholdne mening om alt fra film og spil til podcasts og bøger.
Denne stickytråd oprettes automatisk af botten hver mandag kl. 7. Eventuelle ændringer kan forkomme.
Jaer, C# er mere eller mindre mit modersmål. Er dog begyndt at eksperimentere med idéen om at bruge Go noget mere. Dertil gad jeg også godt lære Rust for at forstå dets borrowing koncept
Personligt kan jeg ikke lide Go og jeg kan ikke anbefale det. Det er kun populært fordi Google promoverede det. Det havde aldrig været stort hvis ikke de gjorde det.
Rust er dog fantastisk. Man skal lige lære det men når man forstår det, så er det sindssygt godt. Langt det bedste sprog hvis du spørger mig.
Hmm, det har du måske ret i. Jeg finder deres implicitte interfaces meget interessante. Men du har nok ret i at det ikke havde fungeret hvis google ikke havde opreklameret det sådan.
Må hellere se på Rust så. Har også overvejet at lære Zig, men det er vidst lidt niche
>implicitte interfaces
Synes selv det er en meget mærkelig feature. Især fordi man potentielt kan implementere et interface ved en fejl. Jeg er generelt imod implicitte ting.
Mener du traits? Jeg har ikke selv brugt Rust, men har kodet en del Haskell, og så vidt jeg kan forstå er traits nogenlunde samme koncept som type classes i Haskell. Jeg synes selv at det er en langt overlegent måde at definere interfaces på sammenlignet med interfaces defineret ved subtypning som i de fleste objektorierentede sprog (Java, C#). OO-interfaces kan være OK til typer som repræsenterer objekter (services og ressourcer med en livscyklus som f.eks. en web service eller en netværksport), men til typer som repræsenterer data (lister, maps, vektorer, etc.) der er type classes den rigtige abstraktion, og OO-interfaces fører kun til hovedpiner.
I Haskell er der som udgangspunkt også en begrænsning der tvinger dig til at definere dine type classes samme sted som datatypen hvilket begrænser risikoen for at komme til at definere en instans “ved en fejl”.
Nej altså implicitte interfaces er en feature i Go, ikke i Rust.
Og ja, Rust traits er dybest set det samme som Haskell type classes. Der er dog visse ting du kan i Haskell som du ikke kan i Rust (noget avanceret higher order ting). Men det er meget sjældent et problem.
I Rust kan du implementere traits hvor du har lyst, men du skal have defineret enten traitet eller datatypen (eller begge dele) for at implementere det. Du kan ikke implementere et fremmed trait på en fremmed type. Kan ikke lige huske om Haskell har en lignende restriktion.
Ah, så læste jeg bare tråden forkert, beklager :).
Jo, det er samme restriktion i Haskell. Den kan slås fra hvis man virkelig har brug for det, f.eks. hvis et 3. parts bibliotek kræver at en anden 3. parts type er en instans af en given typeklasse, og man ikke har mulighed for at bruge en
newtype
.