Comments by "" (@jboss1073) on "ThePrimeTime" channel.

  1. 95
  2. 61
  3. 38
  4. 25
  5. 25
  6. 19
  7. 17
  8. 12
  9. 10
  10. 10
  11. 9
  12. 9
  13. 8
  14. 7
  15. 7
  16. 7
  17. 7
  18.  @sk-sm9sh  One thing at a time. You said: "so what I think about "algebraic type system" is type system that allows expressions such as X = Y | Z In this regard C lang type system is not "algebraic" as in that it doesn't allow to do any any kind of operations on top of type system." This is all correct. However, this is also the same thing that I said. Now, hold on. I know you're talking about type algebra and I was talking about code algebra. But they are actually the same. This was proven in 1935 when Gentzen and Church's work were shown to complement each other - one though code, the other through the types. Now on to the second thing. You are conflating the notion of "algebraic types" with the notion of "turing-complete types". A turing-complete type-system does not necessarily result in an algebraic type system - Zig and Rust are not algebraic, although typescript is (I believe, from last time I checked; I'm not a js coder). For example, Zig's type system is not algebraic just because it is turing-complete, although being turing-complete makes it capable of being algebraic; however once made algebraic, that portion of the code will be "narrower" and "stricter" than the rest of Zig's type system. Hence algebraization is a formalization, an assurance that all the terms work together compatibly, and can be computed by reduction. Then you said: "So I get it that it may make some sense to describe your typesystem as algebraic. But I fail to see how it makes sense to describe a feature in your language as "algebraic effect". If your effects are compatible with your language's typesystem and if your typesystem is algebraic then by deduction I already know that it's "algebraic". " But this is wrong: Monads are NOT algebraic (they famously cannot be composed, needing a monad transformer to do so, which is essentially writing the glue code manually - the opposite of algebraic composition), hence not every effect system is algebraic. That's the wonderful thing about algebraic effects: they're finally algebraic, which means no more monad stacks, monad transformers, or even monads for that matter - they all have become obsolete because Algebraic Effects (well, handlers and prompts, technically the things behind Algebraic Effects) were proven to be the composable mathematical dual of a Monad - meaning they're just as powerful as Monads, but they're actually composable - algebraic - on top of that. Finally we have an algebraic way to deal with effects. If we had ever had that before, Monads would never have been invented. Hence the tremendous importance in naming it "algebraic effects" so as to communicate that the solution to this enormous problem of modeling side effects algebraically - composably - has finally been found.
    7
  19. 7
  20. 6
  21. 6
  22. 6
  23. 5
  24. 5
  25. 5
  26. 5
  27. 5
  28. 5
  29. 5
  30. 5
  31. 4
  32. 4
  33. 4
  34. 4
  35. 4
  36. 4
  37. 3
  38. 3
  39. 3
  40. 3
  41. 3
  42. 3
  43. 3
  44. 3
  45. 3
  46. 2
  47. 2
  48. 2
  49. 2
  50.  @curlyfryactual  " like I said, a global is just a poorly implemented object. " But it's not, and no serious Computer Scientist would say that. A global is just a variable - an address in memory with some room for you to store some bytes. An object is a closure over methods and attributes plus a virtual table. In no way can you say that "a global is just a poorly implemented object" as those two things have nothing in common with each other. Globals are not objects. Not even poorly implemented ones. They're just not objects at all. "because a global is already the enemy of concurrency. " WRONG. If it is a Mutable Transactional Variable made global then it is concurrency-safe and parallelism-safe. You are having this newbie mindset that "globals" are just what you learned, but that's not true. Many things can be global, including concurrently-safe transactional variables. In fact, that is how it is done in the industry. "I work with enough "procedural with globals" architecture these days, and it's simply a pain. It is no easier to parallelize the execution of it; in fact, far worse." That is because you are ignorant of the existence of transactional variables. You shouldn't just make a value globally available in a global variable without putting it in a Software-Transactional-Memory box. Look into Clojure, all the globals are parallel-safe and concurrent-safe. "I love declarative code as much as the next guy. Plopping in a global is certainly not that." This discussion is not about "declarative code". But even if it were, Haskell is transactional and they have concurrent-safe globals too just like Clojure. It may be only the stinky language you're using making you believe globals cannot be concurrent-safe. Not true. "May as well do it right." Throughout your answer you have demonstrated you do not have the sufficient Computer Science knowledge to do anything right. God help your clients.
    2