Java Language Futures - Fall 2024 Edition
51:51
Java's Cyclic Object Graphs Challenges
50:02
Serialization - A New Hope
50:53
21 күн бұрын
Loom - Where Are We? #JVMLS
46:26
28 күн бұрын
Project Leyden Update #JVMLS
45:52
Valhalla - Where Are We? #JVMLS
51:07
Java in 2024 - #JVMLS keynote
27:16
Пікірлер
@gsestream
@gsestream 8 сағат бұрын
so what about that Thread.sleep(16) being 32ms sleep, ie double time of the stated, running in a dedicated separate timer Thread class run() function.
@ninja_nadir
@ninja_nadir 8 сағат бұрын
The coding language is just laggy shit
@ДмитрийД-к3п2п
@ДмитрийД-к3п2п 9 сағат бұрын
Where can i buy this mug with Java logo?
@lukeusherwood2525
@lukeusherwood2525 9 сағат бұрын
That may have been the original intent, but after taking notes (probably from Scala & others) Java 9 realised it should ALSO be thought of as a container with max size 1. (It makes its methods like stream and filter make more sense when looked at this way.) It is a shame OptionalInt etc were not consistently rationalized in the same way.
23 сағат бұрын
29:50 I suffered this for more than a year
@simonmassey8850
@simonmassey8850 Күн бұрын
I watched his talk, it thoroughly explained the “year three” stage of complexity I am seeing at the office 😂 I now understand why I am nervous about the peak complexity we aim to ship in Q1 🫣At least I now know we need a complexity collapse 😅!
@kokosensei5231
@kokosensei5231 Күн бұрын
Thank you for share!
@中本聪-d9k
@中本聪-d9k Күн бұрын
The great José Paumard!!!
@gudenau
@gudenau Күн бұрын
I'm not familiar with the pattern keyword.
@PauldeVrieze
@PauldeVrieze Күн бұрын
You mean to say that developing these features is like a computer science PhD (except more people and more time)
@shadeblackwolf1508
@shadeblackwolf1508 Күн бұрын
My team shipped the peak of complexity 8 years ago, and progress to develop has been slow ever since. We're making the investment now to cut the worst of it. We've taken the most overcomplex part of de domain, wrote our wish interface for it, wrote an adapter from the old peak of complexity interface to the wish interface, and are now migrating a lot of code to use the wish interface at the cost of performance. Once that's done, we can lose the complexity by reimplementing the wish interface cleanly. Yes, we had to fold more complexity in to get here, but when release + 2 ships, the customers will notice dev time decreases and performance gains. How do we know it's the right path? All code migrated to the wish interface, (which has fewer bells and whistles than legacy) has become simpler as a result, and we know the same holds for the new implementation, and the underlying data. So, at the cost of work, we had to invest complexity, but have a clear path to shed complexity in the data (without losing information), the peak of complexity solution, and every part of the system interacting with it. Sometimes you must navigate up to go down, cause you settled in a local minimum, like a little crater at the peak of a vulcano.
@codeZarathustra
@codeZarathustra 2 күн бұрын
Great conference Mr. Paumard.
@user-gx3ve5iu1p
@user-gx3ve5iu1p 2 күн бұрын
You allowed million libraries to crop up over 25 years to finally reach here. REST in peace, JACKSON, GSON, JAXB
@josealonso7321
@josealonso7321 2 күн бұрын
Can I use the builder pattern with records ?
@edwardharman1153
@edwardharman1153 2 күн бұрын
There's an annotation processor out there called "record-builder". It generates builders for you.
@josealonso7321
@josealonso7321 2 күн бұрын
@edwardharman1153 Thanks, but I have Lombok already.
@edwardharman1153
@edwardharman1153 2 күн бұрын
@@josealonso7321 I'm not sure why you asked the question then.
@josealonso7321
@josealonso7321 2 күн бұрын
@@edwardharman1153 I'm sorry I did not express myself properly. What I wanted to know is if I can create objects using a fluent API, like the builder pattern does; but using a record type and without libraries.
@edwardharman1153
@edwardharman1153 Күн бұрын
@@josealonso7321 I see. There isn't any built-in support in the JDK. Just constructors.
@peterfirmstone1372
@peterfirmstone1372 2 күн бұрын
We reimplemented Java Serialization to address its shortcomings, we didn't implement support for circular object graphs, which allowed us to use constructors and provide tools to assist developers using it to validate invariants, such as class types contained in collections. We also flatten collections into array types that are read only, developers are expected to defensively copy and validate collections anyway, so this made a lot of sense to us. In essence we found that circular object graphs are not needed and usually indicate the presence of poor design.
@CraccaHacka
@CraccaHacka 3 күн бұрын
And ending up like JDK 8? Naaah, nah thanks
@korbendallasmultipass1524
@korbendallasmultipass1524 3 күн бұрын
After 8 years of being in Scala projects I started by my own SaaS with Java and actually I am impressed. I can have a similar developer experience now.
@srki22
@srki22 3 күн бұрын
What a great presentation. Thank you!
@bboystrek4489
@bboystrek4489 3 күн бұрын
am wrong today if im still using java 😢
@MarkJaeger
@MarkJaeger 2 күн бұрын
Nope
@joaopedrogoncalves3783
@joaopedrogoncalves3783 Күн бұрын
Java has evolved so much and has so many libraries that are easy to use. It’s definitely an advantage to know how to use it.
@AmirSina.R
@AmirSina.R 4 сағат бұрын
No you are a legend
@veganaiZe
@veganaiZe 3 күн бұрын
Goetz is the GOAT.
@bboystrek4489
@bboystrek4489 3 күн бұрын
procedure that return void ??
@Hello_34566
@Hello_34566 3 күн бұрын
👍
@DavidDLee
@DavidDLee 3 күн бұрын
Hard to follow
@user-gx3ve5iu1p
@user-gx3ve5iu1p 3 күн бұрын
There could be places where we want data from a parent thread to trickle down to child threads. InheritableThreadLocals gives you that power. How is this handled in ScopedValues? My 2nd question is more about design. Let's think from first principles. A software program is data + functions. Here you have segregated them (data/functions :: scopedValue/scopedTask). I understand single responsibility here (if the intention is to keep them separate and allow developers to get creative). However, it would be great, if we could have something like a ScopedVirtualContainer.(which accepts scoped values and tasks in pairs and executes and produces results in some order if specified) . Like we have CompletableFuture.allOf(Cfs...) From my experience, Completable futures are hard to understand for devs not having prior experience of Functional Style of programming. Also, a lot of people do not know how to close a ExecutorService (though there is a clear class level javadoc example on how to close ExecutorService. who reads all that? right? ) Biggest problem is ThreadLocals and InheritableThreadLocals and making junior devs understand their scope. With the old java version, we had to hand code utilities so that not everybody has to reinvent the sensitive parts. Now with VirtualThreads coming in, it helps us remove a lot of our utility code since those features have become native. Thank you for this talk! I watch all your videos on Jep cafe. Big fan! Please continue sharing your knowledge with us. Thanks,
@sergios6794
@sergios6794 3 күн бұрын
What's the difference between ByteBuffer.allocate() and ByteBuffer.allocateDirect()?
@Quinteger
@Quinteger 16 сағат бұрын
The second one allocates off-heap memory, the first one simply backs itself by a regular array in the heap
@redcrafterlppa303
@redcrafterlppa303 3 күн бұрын
The new memory api is incredibly versatile. It's just not something you are likely to use directly but indirectly through some library using it for performance and low level operations
@DmitriyYankin
@DmitriyYankin 3 күн бұрын
So, how will I know dependency is a release with tail paradigm.
@TrishulBudanurShivalingappa
@TrishulBudanurShivalingappa 3 күн бұрын
nice explanation
@adiankunda204
@adiankunda204 4 күн бұрын
200 sips of coffee 😂😂😂
@jean-jayvester1358
@jean-jayvester1358 4 күн бұрын
Thanks so much for the great videos and sharing your knowledge. If I could offer one piece of advice, try speak a bit slower, you talk a bit too fast and as such your points blur into one another making it hard to pinpoint critical statements. Thanks again!
@Lucario2405
@Lucario2405 4 күн бұрын
He's one of few YTers that I have to turn 1.25x speed off to understand.
@KangoV
@KangoV 4 күн бұрын
I wonder if at some point an implementation could output protobuf wire format by reading a .proto file? That would be so good.
@rafaeltorres3549
@rafaeltorres3549 4 күн бұрын
Eyyy!! Its Viktor Klang. Met him in 2016 as a cs student volunteering at scala days. Sat down with me after his talk to explain a concurrency concept further. Motovated and inspired me to keep at it with Scala. Great guy!!
@elton-j5m
@elton-j5m 4 күн бұрын
The title of the video should have been "Java Language Features" not "Java Language Futures"
4 күн бұрын
These shorts are great and you release rate perfect! Thank you so much!!!
@johnknight7293
@johnknight7293 4 күн бұрын
How is it that your examples don't do any of the things that seemed to be needed before, like "SymbolLookup.libraryLookup(<library name>" then the ".find(<method name>).get" then the "Linker.nativeLinker().downcallHandle(" etc. It used to be loads of boilerplate and now it looks much cleaner. Where can I find a "cookbook" for the library I want to use?
@ammbra1508
@ammbra1508 4 күн бұрын
That's a great question. jextract generates those. For example, when I ran `jextract --output src -t org.unix -I $C_INCLUDE_PATH $C_INCLUDE_PATH/time.h` I got `time_h.java`, a Java class that has all Java bindings to the native linker and can help with the downcall handle. In the video description is a link to a jextract tutorial and that one contains a reference to the entire guide for jextract.
@sblantipodi
@sblantipodi 4 күн бұрын
Java isn't able to correcly create a TrayIcon in Linux because it uses a 20+ years old API. Notifications in Windows are broken because they use a 20+ years old API. Is there any interest in making Java a language usable for projects that has a UI?
@VuLinhAssassin
@VuLinhAssassin 4 күн бұрын
@@sblantipodi It is rare to see Java build desktop applications, so I guess it is low on priority right now. Did JavaFX suffer the same, may I ask?
@sblantipodi
@sblantipodi 4 күн бұрын
Java FX isn't able to call OS APIs so it isn't able to create a tray icon or to launch an OS notification
@forKotlinsky
@forKotlinsky 4 күн бұрын
Looking at other languages, java's priorities aren't quite clear :))))
@VuLinhAssassin
@VuLinhAssassin 4 күн бұрын
@@forKotlinsky Java now needs to reduce startup time and memory overhead, as well as making the language more friendly to the new beginners, and improve overall performance with Valhalla (lol, I'll wait for next 10 years)
@thiagohenriquehupner1164
@thiagohenriquehupner1164 4 күн бұрын
Now with FFM API you can call the OS API directly
@BartolomeoSorrentino
@BartolomeoSorrentino 4 күн бұрын
I’d want more on data oriented programming
@VuLinhAssassin
@VuLinhAssassin 4 күн бұрын
We are going to have another JavaZone's Game of Codes trailer Nicolai? 😂😂😂😂
@HelmiJ11
@HelmiJ11 4 күн бұрын
2nd..
@VIKASROYv
@VIKASROYv 4 күн бұрын
First commit on new project 😂
@RidvanOzaydin
@RidvanOzaydin 4 күн бұрын
This is an amazing talk. Records look very promising. The only thing I am wondering is how well they will integrate the JSON into Java. Would it come close to how Node.js handles JSON?
@edwardharman1153
@edwardharman1153 2 күн бұрын
The popular JSON libraries for Java handle Records fine. You can write Records to represent the structure of a JSON document quickly, and use a library to serialize and deserialize it.
@npexception
@npexception 5 күн бұрын
Please correct me if I misunderstand the subject at 44:16. But isn't the only reason that we see "MyApp.java:78" in the stacktrace that this example doesn't use "someService::readImages" as a method reference, unlike the example with the platform threads executor?
@amallkrishna
@amallkrishna 5 күн бұрын
Is a method call that returns void also an expression?
@xtay2287
@xtay2287 5 күн бұрын
Nope. Everything that can be on the right side of the = operator.
@stretcher777
@stretcher777 4 күн бұрын
Right side
@xtay2287
@xtay2287 Күн бұрын
@@stretcher777 I don't know my lefts and rights. Fixed it, lol
@markepshtein3735
@markepshtein3735 5 күн бұрын
kotlin lazy provides ability to control how many times lambda can be invoked. Also delegate feature makes it easy to use. StableValue came after kotlin lazy but looks uglier.
@DanielAlvesPinheiro
@DanielAlvesPinheiro 5 күн бұрын
Show
@Nick-yd3rc
@Nick-yd3rc 5 күн бұрын
I just realized that so many JEPs are still in preview, in discussion or not even being worked on, that lots of Java devs will retire before Java becomes a bit more like Scala and Kotlin, or C# today.
@gavin6630
@gavin6630 5 күн бұрын
Not sure that is true. If you look at the grid, you'll see we have finalized 8 features in 6 years. We are hoping a whole bunch of others will finalise shortly. We all want everything to move faster...
@Nick-yd3rc
@Nick-yd3rc 5 күн бұрын
It’s nice to see Java evolve. I genuinely appreciate all the effort Oracle and the OpenJDK folks have been stemming. But it’s an elephant - slow, huge, and clumsy. Lots of changes have been long overdue, it’s great they’re being introduced. But it’s all about retrofitting with backward compatibility in mind. You’re now bridging the legacy cruft along with the great core of Java now with the “modern” features. I understand that having a clear cut like in Python or in Scala would fracture the ecosystem. But there’s really so many bad design choices in Java to this day that working in Java is just not making a team agile at all. There’s so many unfortunate inconsistencies and untold caveats, Java has become hard. To every new feature, there’s always attached a list of caveats and gotchas being uncovered within a year or two. That’s the cost of retrofitting. Improvements are great but they aren’t “free” for the language users. Feels a bit like the retrofitting evolution of C++. Just for example, slide 51 at 25:30 showcases an algebraic data type implementation for a type enumeration, as used in Scala or Rust. Avoiding coloring functions with async that example colors the result types. It’s great if most logic can reside in the type system, but Java’s is far from adequate for functional modeling. Now you impose existential types for the sake of inheritance. Not the best choice for type inference. What Java needs are properly typed enums like in Scala. It feels like a lot of words and hype is being stirred up around something so natural and so well known - for decades - too much for something so obvious. You’ve had all that and so much more in Scala, I just wonder why it’s being presented in the narrower Java community as anything novel or important. And it’s still mostly experimental or in preview. The Java developer experience has struggled.
@ikbo
@ikbo 5 күн бұрын
Scala had all of these features 15 years ago 😮
@darshangaikwad2343
@darshangaikwad2343 5 күн бұрын
Please do something in UI side..fucckd with Javascript
@LeeDanielCrocker
@LeeDanielCrocker 5 күн бұрын
Good content. Just a note about English: Native speakers would say "How does the reduce() function work?" That's an artifact of Celtic language influence. "How is <x> working?" is also a valid question, but it asks about immediate state. For example, "how does this car work" asks how to turn it on, where the controls are, etc. "How is the car working" asks whether it is currently running, out of gas, etc.