News for hackers. Stuff that matters.
Re:Java string interpolation feature has been cancelled by kaba0 on Thursday June 20, 2024 @07:51AM (#40737606)
Can you give an example for streams not terminating when they should?

As for that cancel method, why is it a problem if it doesn’t use a variable? Like, there are also no-op methods inside standard libraries, these are very different to how you write ordinary code.

Also, Futures and green threads are not something to pivot between, they are different abstractions. And virtual threads locking up is pretty overblown of an issue, and always happened under some stupid workload, where normal threads would have locked up just as well.

Does java ship bugs? Of course, there is zero chance of shipping such a large project without bugs. But I do think that they have a tendency to re-think and wait for new features, before committing to them, and they actually commit to such decisions, remarkably so.

Re:Java string interpolation feature has been cancelled by mrkeen on Thursday June 20, 2024 @08:10AM (#40737765)
Re:Java string interpolation feature has been cancelled by MeetingsBrowser on Thursday June 20, 2024 @02:45PM (#40741859)
maybe I misunderstood

> so far I've been able to produce an infinite-loop or stack/heap space problem

The linked issue was resolved 5 years ago

Re:Java string interpolation feature has been cancelled by mrkeen on Tuesday June 25, 2024 @05:53AM (#40786471)
Haha I bet it was! "Java great" according to Java.

Anyway, it's a been a while, so, I downloaded the latest Adoptium - that's the one you don't get sued for using right?

  ./javac --version
  javac 21.0.3
Full source code for pulling the first number out of a big stream:

  import java.util.stream.Stream;

  public class Main {
      public static void main(String[] args) {
          Stream.iterate(0, a -> a + 1)
                .flatMap(b -> Stream.iterate(b, c -> c + 1)
                                    .flatMap(d -> Stream.iterate(d, e -> e + 1)))
                .limit(1L)
                .findFirst()
                .get();
      }
  }
Run it:

  ./javac Main.java && time ./java Main

  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Integer.valueOf(Integer.java:1073)
    at Main.lambda$main$2(Main.java:7)
    {...}
    at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
    at Main.main(Main.java:9)

  real 0m9,911s
  user 1m31,992s
  sys 0m1,423s