6 ms·
Owl Lisp – A functional Scheme for world domination
- rurban 2y agotests/theorem-rand.scm is beautiful! e.g. theorem vec-zip ∀ v ∊ (Vector-of Short) (vector-zip + v v) = (vector-map (λ (x) (* x 2)) v)
- psiconaut 2y agoI knew that name (author, and lisp) was familiar: https://issues.chromium.org/issues/40054453 https://issues.chromium.org/issues/40054453
- psiconaut 2y agoFor additional context (I think some was lost on a bug tracker migration), he's the author of https://gitlab.com/akihe/radamsa https://gitlab.com/akihe/radamsa, a fuzzer implemented in owl, that was quite popular finding vulns in the chrome codebase some time ago... I just found out there's a rust port: https://github.com/microsoft/rusty-radamsa https://github.com/microsoft/rusty-radamsa
- medo-bear 2y agoIm curious, how many people comenting here program in lisp/scheme?
- LanternLight83 2y agoI thought hackernews sounded like an akward poll platform, so (just for fun) anyone who would like to vote can contribute here: https://www.rkursem.com/poll/view.php?id=e954c5a89f228a3e1 https://www.rkursem.com/poll/view.php?id=e954c5a89f228a3e1
- djaouen 2y ago> $ echo '(λ (args) (print "Hello, world!"))' | ol -x c | gcc -x c -o hello - && ./hello This is frightening, yet awesome.
- fithisux 2y agoI thought the project was dead.
- ianbicking 2y agoThe repo doesn't say much... I thought maybe the docs would justify "world domination" in some fashion, but they are rather dry: https://haltp.org/posts/owl.html https://haltp.org/posts/owl.html Is there something that describes what is notable about this Lisp dialect?
- vincent-manis 2y agoI haven't looked at it, but it's purely functional (so no destructive operations such as set!). It can't be called Scheme, because it's a subset of RnRS Scheme; that's why Racket isn't called PLT-Scheme any more. I can imagine this as a teaching tool (though the FAQ says the error messages aren't good), or perhaps usable as an extension language. I'm going to look at it as a scripting tool that compiles to C. I used to work for a company whose internal communication often claimed “world domination” as its ultimate goal. I just looked at revenue estimates for its market sector, this company isn't in the top 5, and is far behind the leader. Let's just leave Owl's world domination goal as aspirational.
- tonyg 2y agoIt's the other way around for Racket, where R5RS and R6RS are subsets :-) IIUC Racket's new name came about from, basically, brand confusion: to avoid being (mis)understood as "yet another implementation of Scheme" rather than as the thing-in-itself it had become.
- foundry27 2y agoThe big-picture view is here: https://gitlab.com/owl-lisp/owl/-/blob/master/doc/manual.md https://gitlab.com/owl-lisp/owl/-/blob/master/doc/manual.md Key points include: - 100% immutable datastructures - Immutability is leveraged to make a lot of core operations concurrent - Continuation-based threading model and Actor-based concurrency - Fun little VM implemented behind the scenes That being said, the documentation strongly contradicts the title! > The goal has not at any point been to become an ultimate Lisp and take over the world
- ValentinA23 2y agoI'm wondering if a language could optimize immutable data structures to use mutable, in place semantics instead of duplication or structural sharing when it is possible. When an immutable data structure only has one consumer (only has one descendant in the flow graph), then it can easily be turned into a mutable version. Generalizing, any linear subgraph in the program's flow graph could be made to use in place semantics on the same mutable variable. The challenge I guess is figuring out how variables captures by lambdas should be dealt with.
- coldtea 2y ago>I'm wondering if a language could optimize immutable data structures to use mutable, in place semantics instead of duplication or structural sharing when it is possible. Yes, many languages (and libs, e.g. for JS) do that.
- masijo 2y agoThis is how Clojure does it, take a look at this: https://clojure.org/reference/transients https://clojure.org/reference/transients It's great, one of the many awesome features Clojure has.
- zvrba 2y agoI implemented an academic paper (join tree) in C# here https://github.com/zvrba/Pfm https://github.com/zvrba/Pfm It provides the opposite: a mutable CoW data structure that is extremely cheap to "fork" so that all subsequent updates occur only on the new "fork" and are invisible to the old "fork".
- tmtvl 2y agoI wonder why it's called 'Owl Lisp' instead of 'Owl Scheme'. Could make a funny parallel to Chicken Scheme.
- binary132 2y agoI suppose because it is not a Scheme and is a Lisp. :)
- drweevil 2y agoIndeed. And even if it was a Scheme, it would be a Lisp. All Schemes are Lisps, not all Lisps are Schemes.
- Pet_Ant 2y agoIt is a Scheme: > Owl Lisp is a functional dialect of the Scheme programming language. It is mainly based on the applicative subset of the R7RS standard.
- binary132 2y agoIf it implements a subset of a scheme standard then it is not an implementation of a scheme standard. Is that not obvious?
- Pet_Ant 2y agoI can't tell if you are joking or not. If a platypus lays eggs, but it meets other criteria of being a mammal, it's still called a mammal. Owl may not be a full conforming Scheme implementation, but it seems to be member of the Scheme sub-family. I'd say if you are a Lisp-1 (ie one namespace for variables and functions) and generally use the function names used by the Scheme standard then you are a Scheme (or Scheme-like-Lisp if you are very taxonomically retentive). However, if you are a Lisp-2 and use the function names of Common Lisp you're a Lisp. Maybe if one were doing a deep dive on the history of Lisp and are into S-expressions vs M-expressions then it might be too loose, but I believe what is above is what most people would agree with in this context.
- dark-star 2y ago"Scheme for world domination", yet it has no Windows builds ;-) Also, from the examples it looks like it requires (or at least recommends) an APL keyboard, or around a dozen macros for characters like λ, ∀, ∊, etc. Still, this has to be one of the most practically useful Scheme (or Lisp) implementations that I've seen in a while.... Although it probably needs some getting used to for a Schemer who is used to having set! and friends....
- agambrahma 2y agoOr, consider Yuriy's fork, *Otus* Lisp https://github.com/yuriy-chumak/ol https://github.com/yuriy-chumak/ol [more features, works in browsers vis webassembly too]