[HN Gopher] Beyond Functional Programming: The Verse Programming... ___________________________________________________________________ Beyond Functional Programming: The Verse Programming Language [pdf] Author : WillPostForFood Score : 141 points Date : 2022-12-11 20:08 UTC (2 hours ago) (HTM) web link (simon.peytonjones.org) (TXT) w3m dump (simon.peytonjones.org) | Smaug123 wrote: | This language is cyuuuute! The multi-valuedness making "if (x | | y) then..." work is so neat, and having `x : int` be a thing of | exactly the same nature as `x = 3` is cool to see; even in a | fully dependently-typed language, those things are not of the | same kind. This looks super mind-expanding to try out! | | (My first reaction is some slight aversion to what the "flexible" | and "rigid" stuff is doing in the conditional scrutinee body, but | maybe that'll feel natural after playing with the formal | specification a bit.) | davidw wrote: | I'm not sure about the "learn it as a first language" bit. | x:=(1|2); y:=(7|8); (x,y) | | This stuff just doesn't seem intuitive to me. It's not verbose | enough to be obvious to someone who doesn't know what's going on. | | Looks interesting though; that's a really bright group of people. | Be curious to see where their project ends up. | tinco wrote: | I'll be the first to hate on C++, but the only reason C++ might | be considered a "don't learn it as a first language" language, | is because it's huge. It's got 40 years worth of baggage, and | it's "standard" libraries are an absolute mess. Javascript has | a super simple syntax, and it's standard libraries though | sometimes a bit idiosyncratic are comparatively clean and | pragmatic. | | If you just removed like 90% of C++'s useless standard library, | and restricted the syntax to purely what's in Strousup's "Tour | of C++" book, then I'm pretty sure that would be a pretty | acceptable "learn it as a first language" language. Of course | in that imaginary world C++ would also not have been deprecated | by Rust. | sicp-enjoyer wrote: | > 90% of C++'s useless standard library, | | The Python library is even larger and doesn't seem to be a | barrier. If you know `std::vector`, `<<`, and `std::sort` it | seems you're set to contribute to most code bases. | | > C++ would also not have been deprecated by Rust. | | That's an overstatement, to say the least. | qayxc wrote: | > I'm not sure about the "learn it as a first language" bit. | | I think this is very subjective. Our minds have been "poisoned" | - or rather trained over years - into a very specific way of | thinking about expressions like in the example. | | A first programming language, however, assumes that learner | hasn't been preconditioned in any way into a certain paradigm. | So just keeping the two rules in mind that 1) evaluation is | strictly from left to right and 2) an expression evaluates to a | sequence of zero or more values immediately makes sense of the | example. | | Unfortunately it's incredibly hard to "reset" your mind into a | state that doesn't know about variable assignments and thinking | of variables as singular slots as is the case in Haskell and | most other programming languages. | | That's why "intuition" is a very subjective thing - your | intuition changes with knowledge and experience and both are | hard to suppress. | yzsh wrote: | This looks like Erlang for game design. | | I've done some game programming software and a large number of | their decisions make sense in that environment. In particular, | expression evaluation and a lack of booleans. | chrisbaker98 wrote: | I have no experience with game programming. Why would you not | want booleans when developing games? | davedx wrote: | I mean it's either genius, madness, or both. | | Most programming languages I can least understand the general | gist, the core motivation, whatever. | | I have a lot of respect for Epic Games so I read through most of | it but I have to say I'm still non the wiser. | | If forced to summarize I'd say.. it's some kind of Haskell-ish | language where the types themselves are defined by ... runtime | functions? With some attempt at also being a prolog-ish logic | language? | | But why? | lambdatronics wrote: | Yeah. Super interesting concepts I hadn't come across before, | but it's hard to see the motivation for the design choices, in | light of the stated goal (which is itself a bit 'out there'). | OTOH, it's in general a hard problem to predict the emergent | characteristics of the ecosystem of a programming language just | from the underlying design choices. | thelazydogsback wrote: | Some of this reminds of me a combination Icon and Mozart. (And | happened to just come across my old Icon book a few days ago.) | | Maybe the backtracking concepts are "too built in?" - e.g., (1|2) | is not a first-class/reified "amb" object, right? - so if I want | to introduce a different search than depth-first backtracking | (breadth, dependency-directed), etc., I couldn't directly. | | Seems like there could be some confusion between multiple, | backtracked values and actual sequences -- this often leads to | sub-optimal/confusing Prolog code as well, deciding when you have | an explicit control structure vs. backtrack, when to "harden" | results using setOf/bagOf/findAll, etc. | st3fan wrote: | This looks like a language designed for language designers and | not for language users. | typon wrote: | This is sadly the problem with most new languages. | julik wrote: | I know people will throw stones, but dynamic-oop-folks likely | remember https://en.wikipedia.org/wiki/Croquet_OS | phtrivier wrote: | I honestly fail to see what properties of the language has | anything to do with the metaverse, or millions of devs, etc... | | At first I though the "choice" construct would be a way to | distribute code execution among multiple computers (using the | fact that in a grandiose metaverse, everything would be a | connected computer with lots of compute time to spare ?) but | there is not much detail. | | Also it's not obvious from the slide if there is already a | compiler / execution env at the moment, or how far they are from | it. | | Now, the names behind this aren't exactly bozos, so I suppose | we'll get to know soon. | | Wait and see, I guess ? | Avshalom wrote: | I mean logic languages have a history of... trying to be | distributed but it's never really worked out. | qayxc wrote: | My guess would be that it's the usual case of trying to solve | a non-technical issue by throwing new technology at it. | | I honestly cannot wrap my head around how a programming | language of all things should solve the "millions of | programmers working on a thing"-issue. | pizza wrote: | I guess I sort of see where it's coming from - the context is | that hundreds of devs have to write code that has to | preemptively cooperate with other code. So I think the lenient | evaluation might be key for this. | | Suppose you wander into a new environment, it contains some | object x, and it has some capability f(x). Suppose your avatar | or whatever has some code that already integrates with this | f(x). You could just call f(x) in advance, and once you enter | that environment, it lazily executes f(x). Or maybe I'm way off | base here. | WillPostForFood wrote: | _Also it 's not obvious from the slide if there is already a | compiler / execution env at the moment, or how far they are | from it._ | | It is expected to release in January as part of Fortnight | Creative (delayed from this month). | jasonhansel wrote: | No offense, but: does this actually relate the metaverse, or was | that part added in so Epic Games would fund it? I don't see any | first-class features that would be specific to that use case. | mncharity wrote: | Verse reminds me of Mozart/Oz[1][2]. | | I really liked Oz, and thought it had a lot of potential. But its | documentation was a big adoption barrier (scattered mess plus | expensive textbook), and Oz failed to escape being a turn-of-the- | century European research and intro-CS language. The intro-CS | role perhaps lends plausibility to Verse's "a first language" | objective, despite the off-mainstream computation model. Explicit | `amb` though. | | [1] https://en.wikipedia.org/wiki/Oz_(programming_language) [2] | http://mozart2.org/mozart-v1/doc-1.4.0/tutorial/index.html | leetrout wrote: | Off topic but wow cannot believe someone used comic sans. | dan-robertson wrote: | He has used that PowerPoint style for years if not decades. | kryptiskt wrote: | He used it in the "Tackling the Awkward Squad" talk from | 2001[0], so it's been a long time. | | [0] https://www.microsoft.com/en- | us/research/publication/tacklin... | Smaug123 wrote: | It's just because SPJ likes it. He uses it for presentations a | lot. | tokamak-teapot wrote: | I like it. It's easy to read. | rowanG077 wrote: | Why not? Comic sans is the most inclusive font. | d_tr wrote: | Fun fact: Comic Sans is supposed to be easier to read for | dyslexic people. | jasonhansel wrote: | IIRC fonts specifically made for dyslexic people (e.g. | OpenDyslexic) tend to be even better in that regard; if the | goal is accessibility, one of those would be a better choice. | hakanderyal wrote: | That's a wise move from Epic. | | If we somehow happen to have a few competing metaverses, the one | with the biggest developer mind share will likely come out ahead. | | Just reading the PDF energized me about the possibilities. | WillPostForFood wrote: | Text from the "10,000 Foot View" slide: | | -- | | Verse is a functional logic language (like Curry or Mercury). | | Verse is a declarative language: a variable names a single value, | not a cell whose value changes over time. | | Verse is lenient but not strict: | | Like strict:, everything gets evaluated in the end | | Like lazy: functions can be called before the argument has a | value | | Verse has an unusual static type system: types are firstclass | values. | | Verse has an effect system, rather than using monads. | mncharity wrote: | I'll add text from the "Take-aways" slide: | | -- | | Verse is extremely ambitious | | Kick functional logic programming out the lab and into the | mainstream | | Stretches from end users to professional developers | | Transactional memory at scale | | Very strong stability guarantees | | A radical new approach to types [me: predicate functions] | | Verse is open | | Open spec, open-source compiler, published papers (I hope!) | | Before long: a conversation to which you can contribute | [deleted] | pastrami_panda wrote: | Reading half of it I'm struggling to see why they chose the | semantic 'false?'. How do you read it? It sounds like a question, | why not just 'false'? | AstixAndBelix wrote: | The metaverse is a collection of 3D environments just like web2 | is collection of documents. | | A webserver serves document while a metaverse server is basically | a multiplayer videogame host. | | Your browser opens a metaverse site by downloading a game engine | and running it through JS and fetches the resources from the | server to load the 3D environments. | | All this to say: what has this functional programming language | actually to do with the metaverse? | AstixAndBelix wrote: | ugh, so many downvotes and not a single person to explain why | this is "a language for the metaverse" as opposed to being just | "a new language" | myrryr wrote: | The short answer is Innate parallelism at a far higher degree | than most languages. | | The longer answer is pure functions applied to immutable | objects (or objects held in a transition) can be applied in | parallel. | | The language is designed in a way to give you that, in a way | where it is by default rather than in special cases. | | The second part is, it being at a mid point between lazy and | not - things will be evaluated as there is processor to do | so. So things which can be delayed will be, but if something | can be done now, for later, it will be. | | The combo of this means you can handle more interactions with | entities per second, using the cores available. | grumpyprole wrote: | Most mainstream programming languages are designed as if we | are all targeting 70s von Neumann machines. When applying | these languages to e.g. highly distributed or concurrent | architectures, they are no longer a good fit. It's great to | see at least an attempt at innovation rather than just a Java | clone, which is all Google and Microsoft have ever offered so | far. | astrange wrote: | I've never seen a program that would magically be better on | a distributed architecture if it was written in a different | language. Programs run on a single core because they have a | single core's worth of work to do. Autoparallelization, | like autovectorization, doesn't work. | eddsh1994 wrote: | I don't believe the metaverse will be a browser app; even | Decentraland now pushes to a download because it has to do so | many real-time operations. | | That said, I've worked with a few of the Haskell OG team (not | directly SPJ though) and if you bring in a functional | language designer to work on a project you can bet it'll | start with a new language (I've worked on two domain specific | languages due to this). | | Some of the constraints right now with this sort of program | are CPU/GPU bound, so if we they're building a new I suspect | it's going to focus on concurrency across threads/GPUs to | support the high rendering requirements etc and make it | easier to work with networking and C/C++ FFI GPU drivers. | This is speculation on my part though :) | WillPostForFood wrote: | They are designing and creating Verse to be the scripting | language for the Unreal engine, and the game Fortnight. So it | is purpose built to drive 3d multiplayer worlds. It will be | fun to see how it works out. I think it is cool to see a | functional language around a game engine. | charcircuit wrote: | >Kick functional logic programming out the lab and into the | mainstream | | Yet this presentation did none of that. There were no montivating | examples on practical usage. The language does not map cleanly to | webassembly, it instead reduces to a prolog like graph based | execution model. In order to go mainstream you need to be solving | more problems that existing languages have than you are creating | by having someone use your new language. | mncharity wrote: | The TFA slides live on [1], along with the paper[2]. | | [1] https://simon.peytonjones.org/verse-calculus/ [2] | https://simon.peytonjones.org/assets/pdfs/verse-conf.pdf | sweetsocks21 wrote: | It's cool to finally get some more details on this language. They | showed some slides of it being used in Fortnite last year: | | https://mobile.twitter.com/saji8k/status/1339709691564179464... | | I believe it has roots in (but quite different from) | Skookumscript | | https://skookumscript.com/about/look/ | tinco wrote: | For those wondering if there's actually something relevant to the | Epic's approach to the metaverse: there's not beyond slide 3. | Everything after slide 3 is a description of the semantics of a | novel functional logic programming language, the sort of which | you'd expect you'd get if you paid the world's premier Haskell | core contributor a large sum to design a new language. Of course | its intended audience is Haskell programmers, so perhaps it would | be weird to expect anything else. | | Slide 61 and 63 hint at things that might actually be of | consequence to real programmers making real software for a | potentially real metaverse, such as the effect system for I/O, | transactional memory and code organisation through classes and | inheritance, but it gives no detail. | | If you're interested how elegantly functions like head, tail, | cons, snoc, append and map might be implemented, this | presentation is for you. If you're more interested in how you | might unpack a message from bytestring, model a state machine or | coordinate a group of actors in a distributed system, then I | guess you'll have to wait for the next presentation. | benji-york wrote: | I'm sure they know a lot more about language design than I do, | but the use of what is essentially SQL's NULL for boolean false | doesn't feel like a good idea at first blush. | gliptic wrote: | This looks a lot like a functional version of Icon | https://en.wikipedia.org/wiki/Icon_(programming_language) | giveexamples wrote: | I dunno about slide 39 - where calling f(x) may or may not give x | a value. From a code readability standpoint, a reader of the | codebase needs to be wary of every function. | | I see the issue is that iff you explicitly marked it as inout, it | would limit the code from a logic unification point of view. I | guess this is already explored in prolog, which I have little | experience with - but it feels like it would inherently limit the | ability to scale a codebase to huge sizes. Maybe a combination of | convention and naming would solve the problem. | dan-robertson wrote: | The metaverse angle doesn't make much sense to me but whatever. | | The big idea I see is that prolog-style backtracking logic | becomes a first class notion in the language - every expression | denotes a sequence of values reached through backtracking-like | behaviour - which allows mixing logic-programming with a more | familiar kind of functional programming. Though perhaps there are | other ideas too. | | I think it will be interesting to see where this goes. Perhaps | this will be another Fortress but SPJ is well regarded, has | written a bunch of interesting papers, and has a bunch of | experience managing a programming language project from haskell | which will hopefully carry over. | travisjungroth wrote: | See slides 2 and 4. He has an idea of what a metaverse would | look like and the technical challenges that will bring up. The | language is meant to help solve them. | Findecanor wrote: | I'd think the real interesting stuff would have been the | transactional parts and the effects system. Unfortunately, | these slides don't describe them; they just mention that they | exist. | qayxc wrote: | The paper also stops before going into these. These were | the bits that actually interested me, but alas, guess we'll | have to wait for that. | dan-robertson wrote: | Thanks. I re-read them but the metaverse angle still doesn't | make much sense to me. I don't think that's super relevant to | the PLT stuff though. | travisjungroth wrote: | I think it makes more sense if you don't think of it as an | angle but a motivation. We've all been attacked with stuff | like "shopping lists but on the blockchain!" for so long. | This isn't like that. It's that they're foreseeing a | technical problem of a shitload of concurrency and extra | pain of API changes (metaverse) and this is meant to help. | smcl wrote: | > Like the metaverse vision, Verse itself is open | | Aren't these companies pursuing a "metaverse" product because | they can lock it down, control it and make money on it? Otherwise | rather than FB and Epic etc making their own, you'd have | something developers could work with and use _right now_ | | I wonder if maybe Simon Peyton-Jones has to play along with the | whole metaverse fad just to do something he wants to do. | charcircuit wrote: | The strategy is more about getting a first mover's advantage. | Companies believe the metaverse is inevitable and they believe | that it will become a big part of the everyday person's life. | These companies want to be key players in this space. | | Look at the open ecosystem of the web and think about how much | money ICANN and Verisign make from their DNS. Anyone can make | their own independent DNS (see projects like namecoin), but | ICANN's has a big first mover's advantage that makes it hard to | compete with them. | smcl wrote: | Oh I get it, but they're aiming for first-mover's advantage | with the goal of being in control of something, not about | implementing a lovely open ecosystem. | ogogmad wrote: | The choice stuff might make vector and GPU programming more | natural, assuming it can be made efficient enough. The syntax it | provides is certainly convenient for that. Might even be an | advance over array programming in some ways, by being more | flexible and opening up more forms of expression. Has this been | considered? | wayeq wrote: | Every time someone gives a programming language a name that needs | disambiguation terms for a decent google search, a puppy dies. | crotho wrote: | xwx wrote: | These look like they might be the slides from SPJ's talk at | Haskell eXchange this year. | | I'm hoping they'll upload a video soon, which'll probably be a | lot more fun than slides. They've only got the recording up for | one of this year's talks so far. | | https://skillsmatter.com/conferences/13688-haskell-exchange-... | smcl wrote: | Yeah Simon Peyton-Jones is quite good at talking, these slides | are interesting but I think the full video will turn out to be | much easier to digest | AndrewPGameDev wrote: | As a programming language - I mean it seems cool but it doesn't | seem like much of an innovation when things like Granule, Idris, | Unison, Erlang, and more already exist. | | I want to take a moment to look at the Metaverse angle. If there | is going to be a unique programming language for the metaverse, I | think it's not going to be textual but instead is going to | primarily be a 3D language. This poses a big challenge for a VR | language because _text is great[1]_. The point of making it 3D | would be that you are somehow capable of transmitting more | information via the higher-bandwidth channel of the human visual | cortex than you are through text. | | If you aren't making a 3D programming language, well then it | might be a cool programming language but I don't know what it has | to do with the metaverse. | | [1] https://graydon2.dreamwidth.org/193447.html | rileyphone wrote: | Jaron Lanier developed a language in VR in the 80s much like | you describe (apparently). Unfortunately, there is little | evidence of it beyond some of his later testimony. | rkrzr wrote: | This looks incredibly ambitious: | | - There are no booleans in the language! Conditionals can still | succeed or fail, but failure is defined as returning zero values | and success is defined as returning one or more values. | | - Verse uses a so-called 'lenient' evaluation strategy which is | neither strict nor lazy, but somewhere in-between ("Everything is | eventually evaluated, but only when it is ready") | | - an expression does not evaluate to a value (like in Haskell), | but instead to a sequence of zero or more values | | - tries to bring functional logic programming into the mainstream | | - Verse uses an effect system for I/O instead of monads | | - A type in Verse is "simply a function". E.g. int is the | identity function on integers, and fails otherwise | | This all looks very mind-bending to me (in a good way). Perhaps | Verse will one day be as influential for PL design as Haskell has | been. | stefano_c wrote: | > - There are no booleans in the language! Conditionals can | still succeed or fail, but failure is defined as returning zero | values and success is defined as returning one or more values. | | This is similar to how Icon works: | https://en.m.wikipedia.org/wiki/Icon_(programming_language) | truculent wrote: | Sounds like it's not a million miles away from how Clojure | treats `nil` values, either | tuukkah wrote: | Or the List monad. | fulltimeloser wrote: | I guess someone will refrain using Verse | 8f2ab37a-ed6c wrote: | It's riveting to follow the evolution of Tim Sweeney's dream of a | more Haskell-like programming language for games since his 2005 | talk: https://www.st.cs.uni- | saarland.de/edu/seminare/2005/advanced... | bibanez wrote: | Very interesting slides. As someone not very acquainted with | game programming it helped me better understand the logic | behind it. | | As a sidenote, I found funny his predictions for 2009, because | they're not far off from what we currently are aiming for: - | 20+ cores - 80+ hardware threads - GPU's with general computing | capabilities ___________________________________________________________________ (page generated 2022-12-11 23:00 UTC)