2 ms·
Was bewildered when reading this message. How come? Python and TypeScript by definition don't have a concept of const generics the way it applies to C++ templat
by neonsunset 3y ago
Was bewildered when reading this message. How come? Python and TypeScript by definition don't have a concept of const generics the way it applies to C++ templates or Rust.
Nor "matching over algebraic datatypes" made any sense - sure sounds slightly below average fancy but comes down to just using C# pattern matching effectively, which the author may have never done. But then it struck me "structural interfaces sure sounds familiar", I go check the pinned repositories in the github profile and it all made sense immediately - the pinned ones are written in Go, which explains the author's woes with confidently navigating something more sophisticated.
- jakewins 3y agoSorry - can you put the snark aside and answer the question then, it seems given my lack of understanding here as a mere Go simpleton it should be trivial for you. The question I responded to said: "Better static analysis, for one." I asked: "What is something you can express in the C# type system that MyPy cannot statically check?" Can you provide some examples where C#'s type system can express something that modern well-typed Python cannot type-check?
- jakewins 3y ago> Python and TypeScript by definition don't have a concept of const generics the way it applies to C++ templates or Rust. Can you help guide me where I'm misunderstanding the type system aspect of const generics that's missing in Python? What I meant was that in Python I can say something like this: import typing as t class FooEater[NUM_FOOS: int]: def eat_foo(self, num_foos: NUM_FOOS): print("nomnom") one_foo = FooEater[t.Literal[1]]() one_foo.eat_foo(2) # type error, NUM_FOOs for one_foo only allows literal '1' And a PEP695-compatible typechecker will error at build time, saying I can't call `eat_foo` with `2`, because it's constrained to only allow the value `1`. I admit to not being a type system specialist, but at least as I understand Rust's "const generics" the type system feature is: "Things can be generic over constant values". Isn't that the same as what Python supports?