News for hackers. Stuff that matters.
Re:Yes, Python is Slow, and I Don’t Care by hellofunk on Friday September 08, 2017 @10:15AM (#15200286)
You are talking about a function (at runtime), not a type, verifying the range. And you can do that in any language, regardless of its stance on typing.
Re:Yes, Python is Slow, and I Don’t Care by Jtsummers on Friday September 08, 2017 @10:27AM (#15200374)
http://www.adaic.org/resources/add_content/standards/05aarm/...

Compile-time and run-time floating point numbers constrained by precision and range. It's been a long time so I'm just going to include the examples in that document:

  type Coefficient is digits 10 range -1.0 .. 1.0;
  type Real is digits 8;
  type Mass is digits 7 range 0.0 .. 1.0E35;
  subtype Probability is Real range 0.0 .. 1.0;
These will be checked (to the limits of the ability of the system) at compile-time, and by default enforced at run-time. You can disable the run-time checks if you want for the sake of performance. The compile-time checks will "fail" to detect things where computations beyond the compiler's ability to reason might produce an invalid value.
Re:Yes, Python is Slow, and I Don’t Care by hellofunk on Friday September 08, 2017 @10:32AM (#15200424)
Cool, but I don't know much about Ada, and would like to see an example for a statically-typed "range checker" in a more mainstream language used actively today. C++ templates can do a lot of magical stuff at compile time but such techniques are well beyond the reach of most developers.

I can't think of any typed language I've used or seen in active modern professional work where you could validate a value as part of a type at compile time.

Re:Yes, Python is Slow, and I Don’t Care by Too on Saturday September 09, 2017 @12:00PM (#15207659)
C# with "code contracts" allows you to annotate function arguments with valid ranges which will be statically checked at compile time. It's quite verbose though.

https://docs.microsoft.com/en-us/dotnet/framework/debug-trac...

Re:Yes, Python is Slow, and I Don’t Care by Jtsummers on Friday September 08, 2017 @10:42AM (#15200505)
Not without extra-compiler tooling like other static analysis tools, you're probably correct. I haven't had a chance to use much Ada, it's always been a pleasure for me to work in because I get to use things like the above to make my code so much clearer.
Re:Yes, Python is Slow, and I Don’t Care by Someone on Friday September 08, 2017 @12:43PM (#15201756)
I think you can get quite far in C++ with a class that has a constexpr constructor taking a double that checks for range, and (quite a few) operator overloads that allow one to do the normal operations on such quantities.
Re:Yes, Python is Slow, and I Don’t Care by mark-r on Friday September 08, 2017 @12:29PM (#15201617)
Pascal has integer range types, but Pascal hasn't been mainstream for a long time now.
Re:Yes, Python is Slow, and I Don’t Care by LeonidasXIV on Saturday September 09, 2017 @09:54AM (#15207096)
> And you can do that in any language, regardless of its stance on typing.

Yes and no, because nothing prevents you from passing the wrong kind of value in an untyped language unless, well, you check for the runtime type yourself in the function and reject that. And you can only do that at runtime, at which point you'll not be able to immediately see where you're passing in invalid data accidentally unless you hit this exact branch in your code. So actually just the type tagging is quite useful already.

Also, it looks like more powerful dependently-typed languages like Idris[0] (and probably also Agda and Coq) can encode this information in the type system.

[0]: https://stackoverflow.com/a/28436452