ilyash
I think it's about alignment of the project and how you think.
If it won't be it this time, I'm working on the user interface of Next Generation Shell now and I would like to encourage you to revisit the project once that is done.
Plan:
https://github.com/ngs-lang/ngs/wiki/UI-Design
https://github.com/ngs-lang/ngs/wiki/UI-Chain-Design
Tldr: interactive objects on the screen, each interaction results "interaction record" (structured data about what happened), semantic understanding of what's happening, record/replay facility.
I did hear an opinion (somewhere else) that a shell shouldn't have associative arrays either and it was a mistake...
> Nushell
Nushell is a candidate and some people use it and like it. I personally disagree with the design. Then again, I'm not objective. I created Next Generation Shell. It's a fully fledged programming language with domain specific facilities (for running external programs for example). I like this approach more than trying to improve over a shell. It fits my brain better.
More at "jq is a symptom" - https://ilya-sher.org/2018/09/10/jq-is-a-symptom/
Related and might be interesting - "JSON tools for command line" - https://ilya-sher.org/2018/04/10/list-of-json-tools-for-comm...
> I've actually already written a lot of the functionality I see here as bash (and other) functions
That's exactly the reason these are part of stdlib. No reason for everybody to reimplemnt these with slight variations and copy it around.
The biggest difference between NGS and other shells is the UI. It's work in progress. Ideas are at https://github.com/ngs-lang/ngs/wiki/UI-Design
Another big difference is that NGS is a language designed ground up for DevOps-y tasks. The result, in my subjective opinion, is clear and concise scripting. That's due to better fit between the language and problems being solved.
Edit: Python for example "doesn't like" functional programming, while NGS supports it and using map() and filter() is idiomatic.
Edit 2: explanation why UI takes so long. That's because it is being implemented mostly in NGS itself so the language must be in shape (and now it is but it took time).
The part that I think is not working is that managers neglect one of the basic behaviors they should be engaging in. Weekly one-on-ones done properly. That's the place for information to go from directs to managers.
I started working on Next Generation Shell in 2013. I have the programming language in quite a good shape and we use it at work.
I'm working on the UI now. The main idea of the UI is to get rid of telegraph-style communication paradigm of sending text and receiving text. We can actually use the whole screen now. We have text editing using full screen since 1976 (vi) but classical shells are ignoring this capability till this day. It's time to stop treating outputs of programs as if they are still printed on paper, allowing zero interactivity.
https://github.com/ngs-lang/ngs/wiki/UI-Design
https://github.com/ngs-lang/ngs/wiki/UI-Chain-Design
Have a nice day!
Terminals introduced cursor movement feature in the 1970s. Bill Joy responded with releasing vi in 1976. Text editing as we know it today was born. It used ... the whole screen! How the shell responded to this new feature? It largely didn't.
Back to NGS. The programming language is in a good shape. Working on the UI.
Ananlysis of what's wrong with current shells' UIs and how to fix it - https://blog.ngs-lang.org/2023/09/30/ui-in-ngs/
Project - https://github.com/ngs-lang/ngs
Any help would be appreciated of course :)
Closest implemented thing that I know of that implements the solution to the stated problem: Raku's Capture - https://docs.raku.org/type/Capture
Maybe Python can go in that direction.
Subjectively, it doesn't feel right to mix positional and named containers in Python.
https://ilya-sher.org/2022/12/31/telegraph-and-the-unix-shel...
The language doesn't "understand" it's a section (no opportunities listed in the original comment).
In Next Generation Shell I've experimented by adding
section "arbitrary comment" {
code here
}
and this is staying in the language. It looks good. That's instead of # blah section - start
code here
# blah section - end
Later, since NGS knows about sections, I can potentially add section info to stack traces (also maybe logging and debugging messages). At the moment, it's just an aesthetic comments and (I think) easily skip-able code section when reading.Symbols
I've decided not to have symbols in NGS. My opinion (I assume not popular) is that all symbols together is one big enum, instead of having multiple enums which would convey which values are acceptable at each point.
Particularly annoying in Python is running external programs (yes, I know there are libraries) and manipulating structured data (list comprehension is not aligned with how I think, which is map() and filter() and lambdas not limited to single expression).
Just curious. Why?
UFCS - https://en.m.wikipedia.org/wiki/Uniform_Function_Call_Syntax
Defining a type: type MyType.
At any point one can declare method: F myMethod(..., mt:MyType, ...) some_code()
Anything defined by F is automatically a multimethod. When invoked, all methods in the multimethod are searched bottom up. The first one where the call arguments match the parameters (by type, with inheritance) is invoked.
That's roughly it.
https://piumarta.com/software/peg/
https://github.com/ngs-lang/ngs/blob/bdfb2fd70162cd7183ac8d4...
tldr: better programming language (syntax, error handling, data structures - full blown but still domain specific programming language), better interactive mode (at least that's what I think).
Disclosure: I'm the author.