"Are We There Yet?" (w/ slides) - Rich Hickey (2009)

แชร์
ฝัง
  • เผยแพร่เมื่อ 16 ต.ค. 2024

ความคิดเห็น • 18

  • @ericnormand4210
    @ericnormand4210 5 ปีที่แล้ว +11

    Thanks Bobby for putting this together.

  • @williamwesner4268
    @williamwesner4268 5 ปีที่แล้ว +2

    Buddhism goes into extreme detail on this topic, for anyone willing to put the time and effort to learn the unique language it uses.

  • @bmillare
    @bmillare 11 หลายเดือนก่อน +1

    RH predicted the issues of concurrency will cause a major shift in lang design but in my experience, concurrency capabilities of software remain largely untapped. Most code is just single threaded. Only a few specialized libaries utilize parallelism. We've simply avoided concurrency as much as possible.
    I haven't seen good concurrent first implementations in the small, only something larger like building a microservice from the start.

  • @CalvaTV
    @CalvaTV 3 ปีที่แล้ว +1

    After some days of intense problem solving I feel like I have been rubbing my brain directly all over everything I have come across that day. Maybe that's what I am doing wrong. 😀

  •  5 ปีที่แล้ว

    Is the Value type Java will introduce, it's attemp to "Reconciliate Epochal Time Modle with OO"?

  • @1210divs
    @1210divs 4 ปีที่แล้ว +2

    Don't rub your brain on Fred, kids.

  • @mathildemarger5105
    @mathildemarger5105 6 ปีที่แล้ว

    thank you very much :)

  • @willmcpherson2
    @willmcpherson2 5 ปีที่แล้ว

    1:08:23 Simon Peyton Jones?

  • @KevinBeal
    @KevinBeal 6 ปีที่แล้ว +1

    Observables in Javascript solve many of these problems and model state and time well.

    • @ManuelMontoyaRdz
      @ManuelMontoyaRdz 5 ปีที่แล้ว +1

      So bad JS is a horrible language.

    • @sergeysmyshlyaev9716
      @sergeysmyshlyaev9716 5 ปีที่แล้ว +1

      I think this video describes the differences between reactive programming and epochal time model somewhere towards the end.

  • @UnicornLaunching
    @UnicornLaunching 6 ปีที่แล้ว

    18:01

  • @johnhabib289
    @johnhabib289 5 ปีที่แล้ว +1

    About halfway through the talk it falls apart... he so grossly underestimates how much practical programs rely on individual states, and how much of a problem copying everything each time you had to "perceive" something or change a value would cost. Parallelism isn't "saved" by having multiple copies, it's made that much worse because instead of one logic which could be wrong, you now have N things all coming to different conclusions! It's good practice to make your reads and writes as small and non-distributed as possible, but if you're going parallel, functional is fundamentally broken.

    • @acobster
      @acobster 5 ปีที่แล้ว +7

      I'd guess that you're talking about the performance comparisons he makes around 44:20 and the slides leading up to that? I don't think he underestimates anything. I think you're misunderstanding the "path copying" step he describes around 41:47 - we're not "copying everything," we're just making a new reference to some new state, plus most of the old state. We're using references the way they're supposed to be used. The concurrency primitives in Clojure provide exactly the semantics (immutable values, discrete states, no in-between state that "could be wrong" as long your application logic is actually sound) he's talking about, _and they're really fast._

    • @fredoverflow
      @fredoverflow 5 ปีที่แล้ว +2

      How do you have "N things all coming to different conclusions"? The whole point of Clojure's reference types is to *prevent* that from happening.

    • @matthiasschuster9505
      @matthiasschuster9505 5 ปีที่แล้ว +3

      You have no idea what you are talking about. Functional programming is superior especially when it comes to parallel and distributed programming and you have no idea how "copying" is implemented in functional languages, see persistent data structures.

    • @fredoverflow
      @fredoverflow 2 ปีที่แล้ว

      @Pa Ka But you're not supposed to do that according to 28:09 ;)

    • @PatternShift
      @PatternShift ปีที่แล้ว

      it doesn't seem like you paid attention to the persistent data structure model in the talk. it is, however, true that you do have to reconcile divergent outcomes, but with time-aware history-preserving programming and transactional reconciliation you have much better tools for doing this. there is some overhead, so this kind of programming works best when you're io bound, in a situated system -- not when you eg need things to go as fast as possible on one machine and your rate limiting step is data structure memory layout. But almost everything else Rich says still applies in that context, re: object skepticism. If you look at people like mike acton, casey muratori, jonathan blow w/jai, etc who write high performance interactive code in games, or what ML frameworks like jax aim for (a good example that links the two worlds -- immutable data structures, referentially transparent pure functions, w/a built-for-purpose jit compilation path that produces the correct device specific memory layout for high perf code), you will see that the shortcomings of OO and principles of pure functions on plain data structures apply broadly, even if persistent data structures and transactions are only the optimal solution in a few domains.