The main reason for using a stack was reducing verbosity because for short scripts using variables felt unnecessary when the type-prefix of the command already communicates the variable contents. But it could still be a good idea to have a shorter syntax for assigned variables.
Accessing a variables works like this at the moment:
<selection-set-text $text="varname">
Keeping the dollar syntax, setting the return value to a named variable could look like this:
Command languages are underrated, and being able to add a Bash-like REPL for agents and users alike is something I want to see more of.
Feather solves the "rest of the Owl" problem: agents/users get loops, conditionals, online help for free from Feather, as the embedder you only need to add application-specific commands.
Feather itself has no GC (uses the host's), no own data structures (uses the host's, e.g. JavaScript arrays for lists in the js version), and no I/O.
> Are you doing a mostly one-to-one port, or something more novel?
Step 1 is a one-to-one port of all the non-I/O, non-OO stuff. I've got it down to a single skill for Opus 4.5 and now it's just a matter of turning the crank and keeping an eye on it.
Step 2: add more functionality for interactive use for humans/agents. Things like defining the syntax of commands, a completion engine, a help system. Essentially all the things you'd expect from a modern shell experience, but with a bring-your-own-UI approach.
> but man is reference counting a pain in the neck or what.
Maybe this is a bit more novel: since the only use case is embedding, and the host language already has dicts, lists, and other data structures, I'm just leveraging those. In the Go version of Feather, dicts are Go maps; in the JavaScript version they are backed by lists of pairs (to preserve insertion order)
Huh, that's interesting, does that mean you can use Go's garbage collection? I can imagine that makes it a lot simpler to track objects that way (and probably gets you some performance to boot).
Wrt step 2, that's really interesting, are you thinking of it as almost a modern bash in that way? It reminds me a little bit of Jimtcl, though I think Jim only has simple autocomplete.
Also, what was the rationale for a pound before an upvar amount?
The `source` builtin searches through all directories on PATH, not quite a library system, but useable with a bit of discipline in the to-be-sourced shellscripts.
Since coding is cheap now, I'm building a web framework for myself, using reasonable defaults: built around the transaction log, single binary deploys, sqlite3 for everything, runtime introspection tools to make ops easier.
I want the framework to "compile itself out of the project", so that projects don't have devtime dependencies and can be easily edited by Cursor et al. It should still stick around in the form of a high-level CLI that an AI agent can leverage to fulfill common tasks (e.g. add a new UI component, query, command, etc).
Modash is an end-to-end influencer marketing platform for Shopify stores.
We help every creator earn a living.
Headquartered in Tallinn, Estonia, with engineering distributed across Europe.
60 person team, raised $12M in Series A funding, ARR growing 2x YoY.
We're on the hunt for Senior Product Engineers who love working with AWS, Vue, NodeJS, Typescript and a passion for product: you are eager to talk to customers and anticipate their needs.
If you're all about remote work, and can't wait to make a real impact, we'd love to chat!
For example:
Appends a new dict to the list held in the variable responses, creating the variable if necessary.I can see that being an attribute: