6 ms·
Ferret: A functional, lazy language for realtime embedded control systems
- Syonyk 4y agoNeat, but ferret? It's going to run off with your variables and stash them in a cache in the corner. Every time I've moved, I've found little hoards of something or another from various ferrets I've had. In broadly chronological order: - Eowyn stole computer parts in anti-static bags and kept them in the cage. I gave up trying to keep SATA cables anywhere but her stash, because she was better at finding them in boxes than I was. Wouldn't bother other stuff, but if it was in an anti-static bag, it was hers. - Feromir and Eowyn just disagreed on where the scarf went - downstairs, or up under the couch. Unfortunately for Eowyn, mass matters for traction, so when the game got less fun, it went under the couch. - Blanco... stole potpourri. Not even sure where he found some of it, but we found a couple little stashes of it when we moved. - Frodo had a thing for stuffed animals, and would either relocate them under a corner table if they were small enough, or to a different corner if they were too large. It's really quite funny watching a ferret struggle with a stuffed animal several times their size. They're wonderfully quirky little animals, but definitely not a name I'd use for a realtime language. If it involved finding and hiding things, though, totally a suitable name!
- MoscMob 4y agoThe problem with these alternative programming environments is that the developers push off everything other than compiling code. Then the community is left to struggle for years with: 1. How to debug in the language that they write in. 2. How to write unit tests. 3. How to debug unit tests. 4. Common IDE and code-editor integration for 1, 2 and 3. 5. What's the package management story? For example, the newer programming environment that's released in most recent history that attempts to do an excellent job at this, Deno, still struggles with basics such as IDE integration for debugging unit tests. It's a struggle. I've heard the creator of Clojure all but say he has put no thought into package management. Nice language, but it's not worth the cost of having to change how the rest of us work when there's existing environments that address the very basics that a developer needs.
- runetech 4y ago> I've heard the creator of Clojure all but say he has put no thought into package management. Nice language, but it's not worth the cost of having to change how the rest of us work when there's existing environments that address the very basics that a developer needs. Clojure relies on maven for this. Maven is a pretty accomplished package manager in the Java ecosystem. If Rich Hickey said that I assume he meant that he did not _have_ to invent a package manager as it comes for free from the underlying system.
- fulafel 4y agoTo add, on Clojure you can also easily use git repos and local directories specified in deps.edn - these tend to get used mostly for private/internal deps. ClojureScript side mostly uses the Maven mechanism for getting ClojureScript deps from Clojars (a Maven repo), but can also import Node modules for interop.
- askonomm 4y agoI'm confused. Is Ferret a Clojure compiler? Because the code is Clojure, and the file extensions are CLJ, but it's able to compile Clojure into C++? Why is it called a language?
- stolen_biscuit 4y ago> Ferret is a functional, lazy language designed to be used in real time embedded control systems. It is heavily inspired by Clojure both syntactically and semantically. Functions / Macros that are present in both Ferret and Clojure should mimic their Clojure counter parts. If they don't it is considered a bug. (or not possible to implement with the current implementation.) > This document is not intended to be a full lisp tutorial. It is a specification of the subset of lisp implemented by Ferret, and the particular workings of the Runtime and Core library. Any getting started guide for Clojure should get you upto speed on Ferret. From the outline on the site: https://ferret-lang.org/#outline-container-sec-2 https://ferret-lang.org/#outline-container-sec-2
- nerdponx 4y agoI remember reading about this years ago but I don't remember the "realtime" aspect. I remembered it just being a general Clojure-to-C++ compiler. I wonder if the authors "pivoted"?
- bmitc 4y agoI'm curious about the real-time aspect as well, especially for a lazy language. I didn't know that that was possible.
- agentultra 4y agoI couldn't find any documentation in its runtime about how it plans to handle interrupts so I would wager it's probably "soft" real-time. Also not sure if the generated code can throw exceptions but if it can then hard realtime is out.
- jablala 4y agoNuru, the developer for this is an absolute 10x god.
- yewenjie 4y agoSeems like there has been no development since 2020 - https://github.com/nakkaya/ferret https://github.com/nakkaya/ferret
- rcarmo 4y agoThat means it’s stable, not dead.
- throw__away7391 4y agoMaybe, though I'd say this is definitely the exception rather than the rule by a wide margin. Last issue opened was over a year ago. It is still open, no replies.
- vincnetas 4y agocheck roadmap section. if someone was trying to follow that road map there should be at least minimal activity.
- vcdimension 4y agoDoes anyone know how it compares to ulisp? http://www.ulisp.com/ http://www.ulisp.com/
- haskellandchill 4y agoLooks like memory pooling is the interesting feature it has over ulisp. But Ferret is compiled while ulisp is interpreted.
- medo-bear 4y agofor something similar with same RAM requirements see ulisp but using common lisp as a reference subset www.ulisp.com
- sushimako 4y agoFerret is a literate program! Check out the source/manual, it's quite a trip: - https://github.com/nakkaya/ferret/blob/master/ferret.org https://github.com/nakkaya/ferret/blob/master/ferret.org - https://en.wikipedia.org/wiki/Literate_programming https://en.wikipedia.org/wiki/Literate_programming
- nine_k 4y agoWhen I see "lazy" and "real-time" together, I have a cognitive dissonance. Laziness is often unpredictable. How does Ferret address that?
- phyrex 4y agoClojure is evaluated eagerly but has lazy data structures. That means you can reason about performance, but you get to work with data in a more functional way than you otherwise could. I imagine ferret follows that example.
- bmacho 4y agoWhy would laziness be "unpredictable"? Also I'm pretty sure Ferret is strict, since it is not mentioned on their web page. edit: it's mentioned in the "overview" section, probably the OP link pointed there[0]. [0] : https://ferret-lang.org/#outline-container-sec-2 https://ferret-lang.org/#outline-container-sec-2
- nine_k 4y agoIt's not "unpredictable" as in "stochastic", but rather as in "hard to reason about". This may be compiler-specific. Say, Haskell does not give you much heads-up on laziness: whether stream fusion actually kicks in where you expect it to, or are you encountering quadratic behavior due to laziness [1]. If Ferret dives you decent visibility into issues like these, laziness may be usable even in hard-realtime setting, because it would become obvious and predictable for the developer. [1]: https://accidentallyquadratic.tumblr.com/post/114149142587/revisiting-haskell-network-http https://accidentallyquadratic.tumblr.com/post/114149142587/r...
- dllthomas 4y ago> whether stream fusion actually kicks in where you expect it to An aside, but I remembered seeing something that let you test for that, likely https://hackage.haskell.org/package/inspection-testing https://hackage.haskell.org/package/inspection-testing
- 4y ago