Most active commenters

    ←back to thread

    296 points gyre007 | 17 comments | | HN request time: 1.039s | source | bottom
    Show context
    _han ◴[] No.21281004[source]
    The top comment on YouTube raises a valid point:

    > I've programmed both functional and non-functional (not necessarily OO) programming languages for ~2 decades now. This misses the point. Even if functional programming helps you reason about ADTs and data flow, monads, etc, it has the opposite effect for helping you reason about what the machine is doing. You have no control over execution, memory layout, garbage collection, you name it. FP will always occupy a niche because of where it sits in the abstraction hierarchy. I'm a real time graphics programmer and if I can't mentally map (in rough terms, specific if necessary) what assembly my code is going to generate, the language is a non-starter. This is true for any company at scale. FP can be used at the fringe or the edge, but the core part demands efficiency.

    replies(29): >>21281094 #>>21281291 #>>21281346 #>>21281363 #>>21281366 #>>21281483 #>>21281490 #>>21281516 #>>21281702 #>>21282026 #>>21282130 #>>21282232 #>>21283002 #>>21283041 #>>21283257 #>>21283351 #>>21283424 #>>21283461 #>>21285789 #>>21285877 #>>21285892 #>>21285914 #>>21286539 #>>21286651 #>>21287177 #>>21287195 #>>21288087 #>>21288669 #>>21347699 #
    bryanphe ◴[] No.21283041[source]
    In terms of performance, the way we build applications today is such a low bar that IMO it opens the door for functional programming. Even if it is not as fast as C or raw assembly - if it is significantly faster than Electron, but preserves the developer ergonomics... it can be a win for the end user!

    I created an Electron (TypeScript/React) desktop application called Onivim [1] and then re-built it for a v2 in OCaml / ReasonML [2] - compiled to native machine code. (And we built a UI/Application framework called Revery [3] to support it)

    There were very significant, tangible improvements in performance:

    - Order of magnitude improvement in startup time (time to interactive, Windows 10, warm start: from 5s -> 0.5s)

    - Less memory usage (from ~180MB to <50MB). And 50MB still seems too high!

    The tooling for building cross-platform apps on this tech is still raw & a work-in-progress - but I believe there is much untapped potential in taking the 'React' idea and applying it to a functional, compile-to-native language like ReasonML/OCaml for building UI applications. Performance is one obvious dimension; but we also get benefits in terms of correctness - for example, compile-time validation of the 'rules of hooks'.

    - [1] Onivim v1 (Electron) https://github.com/onivim/oni

    - [2] Onivim v2 (ReasonML/OCaml) https://v2.onivim.io

    - [3] Revery: https://www.outrunlabs.com/revery/

    - [4] Flambda: https://caml.inria.fr/pub/docs/manual-ocaml/flambda.html

    replies(6): >>21283323 #>>21283373 #>>21286241 #>>21293953 #>>21296672 #>>21303464 #
    1. tick_tock_tick ◴[] No.21283323[source]
    They already said they were working in games. None of what you said applies to that field.
    replies(4): >>21283706 #>>21285424 #>>21285426 #>>21306369 #
    2. Scarbutt ◴[] No.21283706[source]
    I would say "real time graphics" is one of the niches FP is not well suited for, most business software doesn't need to work at the level of the machine.
    replies(2): >>21284177 #>>21289436 #
    3. grumpyprole ◴[] No.21284177[source]
    There is certainly prior art for complex games running smoothly in Haskell: https://wiki.haskell.org/Frag

    This particular solution used functional reactive programming, essentially a composition of signal/event processing functions/automatons.

    replies(2): >>21284933 #>>21289469 #
    4. ansible ◴[] No.21284933{3}[source]
    Ten years ago, that was the only substantial game written in Haskell. That you're citing that same game now is a bit telling.

    Note the upload date:

    https://www.youtube.com/watch?v=0jYdu2u8gAU

    replies(1): >>21286712 #
    5. shadowgovt ◴[] No.21285424[source]
    I have a suspicion this is only semi-true.

    For controlling what the CPU and RAM are doing? Yes. The graphics shader, on the other hand, is a pipeline architecture with extremely tight constraints on side-effects. The fact the shader languages are procedural seems mostly accident of history or association to me than optimal utility, and the most common error I see new shader developers make is thinking that C-style syntax implies C-style behaviors (like static variables or a way to have a global accumulator) that just aren't there.

    The way the C-style semantics interface to the behavior of the shader (such as shader output generated by mutating specifically-named variables) seems very hacky, and smells like abstraction mismatch.

    replies(2): >>21288545 #>>21289595 #
    6. yogthos ◴[] No.21285426[source]
    Here's a talk on making real world commercial games with Clojure on top of Unity.

    https://www.youtube.com/watch?v=LbS45w_aSCU

    replies(2): >>21286119 #>>21289022 #
    7. jcelerier ◴[] No.21286119[source]
    come on, the "games" showcased here have the complexity level of a 2003-like game and they barely achieve 200 fps on modern hardware. When I look at similar trivial things ran with no vsync on my machine, it's >10000 fps
    replies(1): >>21286960 #
    8. willtim ◴[] No.21286712{4}[source]
    Ok here's a talk about making Haskell games that took place last week: https://keera.co.uk/blog/2019/09/16/maintainable-mobile-hask... I don't deny that making games in Haskell is niche, but it's certainly possible. Frag was just an example I remembered (ten years is recent for an old git like me).
    9. yogthos ◴[] No.21286960{3}[source]
    That's just moving goalposts. The games showcased are the same complexity as plenty real world commercial games that are making good money in 2019. If you're doing triple-A game development, maybe you need to get down to the metal, but for tons of games you'll be perfectly fine with FP.

    Also worth noting that the idea is to use FP around stuff like the actual game logic, and then handle rendering details imperatively.

    replies(2): >>21289072 #>>21289271 #
    10. Const-me ◴[] No.21288545[source]
    > is a pipeline architecture with extremely tight constraints on side-effects

    That was true 10 years ago. Now they're just tight constraints but not extremely so: there're append buffers, random access writeable resources, group shared memory, etc.

    > The way the C-style semantics interface to the behavior of the shader seems very hacky

    I agree about GLSL, but HLSL and CUDA are better in that regard, IMO.

    11. thowfaraway ◴[] No.21289022[source]
    I think you are seriously overselling the talk, and what Arcadia is ready for.

    you: Here's a talk on making real world commercial games with Clojure

    video: dozens of game jam games have been made

    12. thowfaraway ◴[] No.21289072{4}[source]
    The Poker prototype could be from 30 years ago, and drops to 15FPS on any game action! Arcadia is a neat toy at this point, but run far away if you are looking to do real world commercial development.
    13. jcelerier ◴[] No.21289271{4}[source]
    > The games showcased are the same complexity as plenty real world commercial games that are making good money in 2019

    I mean, fucking todo apps are making "good money" in 2019, it does not mean that they are good examples. These kind of presentations should improve on the state of the art, not content themselves with something that was already possible a few decades ago. No one gets into game dev to make money, the point is to make better things than what is existing - be it gameplay wise, story wise, graphics wise...

    14. pjmlp ◴[] No.21289436[source]
    Ironically the first CAD workstations were developed in Lisp, and Naughty Dog is famous for their Lisp/Scheme based engines.
    15. jstimpfle ◴[] No.21289469{3}[source]
    If I remember correctly, in that thesis the author mentioned explicitly that the game didn't run very fast. If you watch the video from 2008, the in-game stats list framerates >60fps but the game itself is very laggy. Maybe there is a separate renderer thread?
    16. vbarrielle ◴[] No.21289595[source]
    Not exactly shaders, but for GPGPU stuff, futhark [0] seems to show that a functional paradigm can be very good to produce performant and readable code.

    [0] https://futhark-lang.org/index.html

    17. dllthomas ◴[] No.21306369[source]
    Even assuming that that's true (and it very well may be), the general topicwasn't games, and there are many places where "the norm" in programming as a whole differs from the norm in performance sensitive areas.