That's what latency looks like when you unleash Netty's full power! Repeat with me:
I will never use netty threads to execute application code
I will never use netty threads to execute application code
I've finally released Kyo at
@FunScalaConf
today!💥🚀
It's a new encoding of monads that leverages Scala's powerful type system and the JVM's JIT for usability and unparalleled performance. The benchmarks are 🤯
The video should be out at some point but here are the slides
@danielPMERJ
@UOLNoticias
@laurasito
A implicação da frase é que um povo é escravizado por falta de virtude, o que é obviamente falso. A falta de virtude é de quem escraviza 😉
I’d say the odds of Java 21 becoming the most consequential release of the decade are high. Loom is a game changer, our early ZGC gen test results are 🤯, records + pat matching will make the lang much more expressive, the vector API is finally closing an important gap 🔥🔥
⚡️A bit of personal news: I've decided to take my first funemployment ever! I'll be working on open source with a focus on LLMs. Expect a lot of Scala, Kyo, LLMs, and participation in performance challenges 😎
I had such a blast at Nubank! Met many bright people, tackled complex
#Scala
3 is shaping up as the most powerful and flexible language available: it's amazing for building higher-level abstractions, provides features to emit highly-optimized bytecode, and now can be used not only on the JVM, not only in JS, not only in Scala Native, not only in
🚀 Scala meets Wasm! Discover how Scala now compiles to Wasm, opening new possibilities. Learn about the implementation, benchmarks, and future implications in our latest blog post by
@tanishiking25
:
#Scala
#WebAssembly
#Wasm
Imagine working for free on something you’re passionate about and then having competitors announce every bug they find on a megaphone. This isn’t healthy for the community, please stop
@zioscala
For ZIO users doing interop with Cats Effect 3, please do not upgrade to version 3.2.4. The new implementation of the Cats Effect scheduler can throw a null pointer exception, which in our opinion is a significant risk to production code. The Cats Effect team is working on a fix.
I've been reflecting on how
@propensive
was deeply affected by the cancellation years ago and decided to meet him to see if we could discuss my concerns since the information recently shared doesn't directly address some important allegations, particularly regarding safety for
Scala 3 is so good 😍 awesome macros, type lambdas, polymorphic functions, reliable inlining, extension methods and more! It's a dream come true for library authors
I’ve been reflecting on my trajectory working as a Principal engineer and helping to establish a new team. Something that works quite well for me:
1. Make sure to listen to people, especially their ideas and concerns
2. Find ways to help or guide them on what they’re working on
“Update your JVM” is probably one of the best perf advices nowadays. It’s simply amazing the amount of innovation and optimization the runtime has been delivering. G1 keeps getting better, ZGC and Shenandoah seem promising, Loom, Vector API, Panama, Valhalla, Lilliput, 🚀🚀
🗒️A bit of reflection on Kyo's design:
For years, I thought to make high-performance libraries in Scala you had to resort to things like while loops, mutability, and nulls.
Working on Twitter's libraries, I often changed perfectly type-safe code to use Any to cut down on
My planned "funemployment" time is coming to an end. A few months ago, I made the unnerving decision to leave a high-paying job to focus on my family, health, and my passion for innovation. Definitely the best time I've had in many years! 😊
The unexpected highlight? Traveling
Working on performance is fun. You try many things, implement optimizations that no one will ever see, start from scratch several times, and sometimes the final optimization is a single line change
I made the decision to drop Scala 2 in Kyo a bit afraid that I could regret it later. I couldn't have been more wrong. Scala 3 is simply the perfect language for building lightweight and powerful abstractions. Opaque types, compile-time inlining, union/intersection/match/lambda
#Kyo
0.10.0 is out and is packed with goodies! ✨ High-performance tags, ZIO integration, Kyo's scheduler as an alternative for ZExecutor, Java Future integration, more reliable flat checks, and a "top" command-line utility to observe Kyo's scheduler 😎🔥
@Marcel_ezc
@eusouomatt
@recruitadora
Aposto que se fosse um grupo de executivos jogando golfe e discutindo negócios seria 100% ok mas duas mulheres… na piscina!! Daí já é demais né 😅
Loom will likely be the most impactful JVM optimization in a long time. Is it the next high-performance frontier? Probably not. Suspension via heap objects + atomic ops seems much cheaper than suspending virtual threads
Great engineers being dragged into management without proper mentoring is one of the saddest things in tech. It's a very different skill set and, given that they are put in such position in the first place, it's likely that they don't have good managers around to learn from.
#Kyo
is getting a new scheduler! Work stealing, preemption, adaptive concurrency, CPU throttling avoidance, admission control, automatic handling of blocking, Loom integration, and superb performance — all in just 1k lines of code 🙌🏽
I'm honestly in complete awe of
#Scala
3 some days, its type system never ceases to amaze me ✨ We haven't recommended users create
#Kyo
effects yet due to type safety issues in effect handling but I've found a way to make it fully type-safe! The next release will be pure 🔥
Top 2 most annoying excuses people use to avoid thinking about performance:
1. Premature optimization is the root of all evil
2. It doesn’t matter because IO is slow
I'm in awe. Scala 3 has some amazing things: convenient and principled macros, opaque types + extension methods that allow cost-free abstraction, etc. But I'd say Tasty at the top of the most amazing features. Using Scala 3 code from Scala 2 seems to work well 🤯🤯🤯
Fact: Scala could improve a lot without all these community silos
Scalaz: just dump OO and everyone that does OO
Typelevel: it’s all good, Scala 3 is god-given. Kumbaya 🎶
Lightbend: go do Haskell if you want to do FP
Me: I guess it’s time to find another language to do OSS
Lately some people have been asking why I don't do OSS in Scala anymore. After a long history of harsh criticism, stolen ideas, mocking, dunking, etc, this comment was the last straw. It's lovely how pedantic pure FP folks are 🙄
I'd like to offer a big
#thankyou
to the
#Scala
3 compiler developers. It's been truly amazing to see the language evolve in major ways with each release. I'd say Kyo is almost a stress test of the compiler, but everything just keeps working across versions 😍
After ~6 years without doing OSS in
#Scala
, I'm finally releasing Kyo in a couple of weeks.
Almost every time I released a new project in the past, a certain part of the community would immediately argument that the solution had something fundamentally broken and even imply
Lately some people have been asking why I don't do OSS in Scala anymore. After a long history of harsh criticism, stolen ideas, mocking, dunking, etc, this comment was the last straw. It's lovely how pedantic pure FP folks are 🙄
Scala's "optimization" for small maps (Map1, Map2, etc) is a good example of how benchmarks can be harmful. It looks great if you benchmark in isolation but in real apps they make call sites become polymorphic unecessarily
I'm completing 5 years working at Twitter 😮 it's nice to think that some of the code I wrote and/or optimized is executed probably thousands of times for each tweet you see
Meet Kyo at
#FunctionalScala2023
, introduced by
@fbrasisil
! Kyo is a next-generation effect system for
#Scala
, designed for both power and ease of use. See the first public release of the project, and get a glimpse into benchmark results that showcase Kyo's unparalleled
The L(a)st Monad
I've been exploring a new approach to compose effects. It's still a prototype but I'm looking for feedback to validate the approach before investing more time in it:
I had a bad interaction with
@alexelcu
last weekend and later regretted my stance. He has always been fair and respectful to me over the years. When I asked for help, he also tried to mediate things with Typelevel's leadership.
I've realized that it's not fair on my part to put
⚡️📢 Announcing
#Kyo
Bounties 💵✨
I've decided to make an initial personal donation to the project and assigned bounties via
@algoraio
! The goal? Take Kyo to 1.0 within the next months!
I imagine people might wonder if I'm trying to build a business with it but no, the goal is
I've just published Kyo's announcement on Scala's reddit. Please upvote, maybe the moderators will think twice before removing it if other people are paying attention
Trouble with overloaded systems? CPU throttling? Our new adaptive threading model for the
#JVM
has answers! Discover this new technology powering
#Nubank
's platform at
#StrangeLoop
's finale this September
My submission with
@fbrasisil
to
@strangeloop_stl
was accepted! \o/ I went to the Strange Loop in 2013, and it's a dream to return 10 year later as a speaker! This event is amazing, I couldn't be happier!
Woohoo!!!
#Kyo
now has an allocationless Duration by
@adamhearn_
👏🏽 It's amazing to see how this methodical focus on performance and ergonomics is accumulating into a solid set of primitives with little overhead. High-performance FP is becoming a reality!! 😍
Yes,
#Scala
still has tooling issues but it's amazing how well incremental compilation works and how sbt can use all available cores. Kyo's build isn't very small but a clean compilation + test takes only 53s for me. Incremental compilation even of core files is instantaneous 🤯
I took some time between jobs to work on a new OSS library and I'm putting some finishing touches this weekend. It's an encoding of arrows + algebraic effects in Scala 3 with next-level perf. I'm looking for early feedback before I throw it to the wolves. DM if you're interested!
A final thought: Java is slowly "becoming" Scala. More and more we see applications using composable APIs like CompletableFuture and RxJava. Eventually Java codebases will face the same kind of performance challenges
Definitely the best case for effect systems I’ve seen so far. No “look at how pure and beautiful this code is”. Just down-to-earth pros and cons. Congrats
@jdegoes
!
JDK vs ZIO, great closing keynote of
@FunScalaConf
from
@jdegoes
.
Functional effect systems still will bring many benefits, even after Loom.
Values rather than statements, strong types and immutable structures ftw 💪
I'm in 🥰 with
#Kyo
's new core design! Besides cleaner and safer effect handling, it unlocks new patterns to implement effects. Here's a purely functional Coroutine implementation with it 🤓
📢 If you're at
@ScalaMatsuri
and want to know:
- How the JVM optimizes your code
- The performance challenges of Scala applications
- How Twitter is optimizing the JVM
- What I'm talking about in this thread
Come to my talk
🔥Today at 4pm in Room A🔥
Understanding when to build or use imperfect solutions is an underappreciated software engineering skill - it’s often the catalyst for innovation and learning
Nice business model: aggressively push a solution to the community for years, dominate talks at Scala confs, encourage people to contribute, and then make it a commercial-only product. All those legacy systems using Akka out there are getting a “bit more” expensive
It's 🤯 how Kyo's mini core makes it easier to discuss and explore different designs.
@kitlangton
not only decoded Kyo's impl and Frank's paper but also came up with a new design that made the codebase simpler and safer. Behold the new Langton Encoding 🧙🏽♂️✨👏🏽
Working with gurus, legends, and thought leaders is one of least productive things one can do. They never acknowledge contributions. I guess that’s how they get that status
I'll be giving a talk at Func Prog Sweden entitled Algebraic Effects from Scratch.
Limited Time Offer: For each person who RSVPs, I'll become more stressed and frantically add more animations to my slideshow.☝️😬
Do you know about Caliban, the leading GraphQL library for Scala with 🤯 performance?
#Kyo
now has a new integration with it, directly from Caliban's author! I can't wait to build something with it 😍👨🏽💻
Caliban integration was just merged into Kyo!
You can now use Kyo effects in your resolvers, and there's a new `Resolvers` Kyo effect to easily get an API up and running.
See
I can't believe I've finished documenting kyo-core! Felt like a marathon 🏃🏽♂️ Now I just have to do kyo-direct, kyo-zio, kyo-sttp, kyo-chatgpt, kyo-bench, review everything, document internals, write tutorials, example apps🤦🏽♂️
Tapir is gaining speed! Some improvements are already merged, more are coming (thx
@fbrasisil
!)
@kpciesielski
's writes not only about tapir, but also on benchmarking in general - not everything was perfect on the first run ;)
This is probably the first time Stitch Arrows appear in the wild. It's basically a form of partial evaluation to reduce the overhead of monads in Scala
That strange feeling when you have your access at work revoked. Am I being fired? Nope, I'm changing teams! After three amazing years with the
#TwitterVMTeam
, I'm joining Strato, Twitter's internal function-as-a-service solution
#Quill
evolved a lot over the years thanks to our great maintainer's team! It's probably the most complete and advanced LINQ available in any language :)
It's time for me to take a hiatus to work on other things.
@deusaquilus
will step up as lead maintainer! Thank you, Alex!
Stop making fun of older kids who still believe in Santa Claus, there are grown men who still believe they're better than 99.999% of the devs in the world because they write Haskell-like Scala
I'm pleasantly surprised that I've been able to interact more with the Scala community the past few days and no one offended me yet. Hopefully this trend continues 😊
I had to optimize Kyo's scheduler to offset a regression after the Loom integration. The scheduler is now more lightweight and has zero allocations after the initialization of workers and queues 🥳
Years ago the plan for Scala 3 was to have no macros or very limited support. It’s now likely the best macro system out there. Quill was one of the main motivators for that and
@deusaquilus
’ visionary work on ProtoQuill was crucial to mature the impl
Curious about Kyo and what’s next? 🌟 Tune into the latest Happy Path Podcast episode for insights on current challenges and collaboration opportunities! 🎧🤝
Spent some time this week exploring Kyo,
@fbrasisil
's new Algebraic Effects library for Scala and just had him on the Happy Path Programming podcast to dive deeper. Check out the episode:
Nice post by
@deusaquilus
about Quill and Scala 3. After a long winter of uncertainty around Scala 3 and macros, it turns out that the new macro system is a good improvement
I should have embraced this funemployment thing earlier. Here’s my office for the week. No meetings, no messages to reply, no documents to write. The power and internet even went down and I just kept happily coding ☺️
I'll give a talk with about the optimizations we've been working on in May at QCon Sao Paulo (in Portuguese), and at Scala Matsuri in June (in English, not Japanese 😄)
Kyo Layers can now automatically wire your dependency graph! The result of a pleasant macro adventure with
@kitlangton
.
Looking forward to putting this to use!
Scala in a few years if the funding for Caprese were redirected to enhancing tooling, eliminating redundant ways of expressing the same things, and building a strong and fair community
monorepo (noun)
/mänōˈrēpō/
A large source repository with anything anyone writes in a company. Examples:
"It takes 15 min load the intellij project for a monorepo module"
"With a monorepo, git takes only 2 mins to switch branches"
"Git is not atomic in our monorepo"
📣
#funcprogsweden
is starting now! You won't want to miss
@kitlangton
's presentation building algebraic effects **from scratch** 😱🔥 (It's the second talk of the event)
Seeing someone reasonable and fair like
@propensive
leaving the stage is so sad. I wonder if people like Travis and his enablers use social justice only as a mechanism of power and control. Sometimes it looks like just another way for white men to assert their “superiority”
It feels like Twitter's become an MMO argumentation game, and my participation here is no longer contributing to Scala in the ways I'd like. I'll keep this account for announcements only, but no commentary. I hope all the friends I've known over the years will keep in touch.