This seems to be more a simple programming language than a shell. A shell is first and foremost a UI, only secondarily a scripting language... That is the point, that you can easily take a series of commands you'd do manually and put them in a script.
> This seems to be more a simple programming language than a shell.
Currently it's only a programming language. The interactive part will be implemented in the NGS language itself.
> simple programming language
Since simple is relative: NGS is simpler than Java and more complex than awk I would say. NGS has exceptions, types with inheritance, multiple dispatch, guards (additional conditions to invoke a method), basic functional programming support, patterns, (new, in progress) facility for deeply nested data manipulation, automatic parsing of command line arguments when invoking the optional main(), threads, domain-specific syntax and facilities for running external programs and file manipulation.
Simplicity is one of the language goals but not over expressive power.
> A shell is first and foremost a UI, only secondarily a scripting language...
I'm having hard time to agree or disagree. There is a lot of interactive usage but there are also a lot of scripts in bash. When I see the scripts I wish bash was "more of a programming language".
> foremost a UI
... where surprisingly little innovation happened over the last decades. It's like in the movies when there is an object in the center of the screen and the whole world is rapidly changing around it. That object is the shell. My plans for UI are at https://github.com/ngs-lang/ngs/wiki/UI-Design .
> easily take a series of commands you'd do manually and put them in a script
You can do it in NGS and even in this simplest use case it will be better than bash - in case of an error the execution will stop (like with -e in bash) and NGS will print stack trace (which I don't know how to do in bash and not sure it can be done in a sane manner).
Edit: $a will expand to exactly one argument (as opposed to zero or more), rm -rf "$mydir/" will throw exception if mydir is undefined. Typical things which are expected from modern programming languages.
NGS uses small subset of syntax from bash so running external programs in the simple forms looks the same.
It still misses the ability to call shared libraries entry points or interoperate via OS IPC (UNIX, D-BUS,...), if I am reading the documentation correctly.
I don't have an opinion on the particular product. But I don't understand people who call a product something starting with "Next Generation". Such a name isn't really going to age well no matter how clever you are.
> but doesn't the nice object system fall apart once you use that portability
no
e.g., directory listing returns handle to the object with IEnumerable interface. This is what would be passed through the pipe, not bunch of strings, such that next command (object) will iterate over files and do something specific.
This will work on Windows/Linux/Mac the same way
> only NT uses objects over bytes
Modules. There are generic portable modules as well as NT specific stuff.
I avoid the rather uesless "Why not?" comment as it will naturally spark answers like immutable data structures, sane type model etc.
Whole and profitable empires have been built with C. C compilers are darn good in optimizing code. There is a large workforce proficient in C.
I would bet anytime on C rather on Rust. If Firefox will die it's because some overly eager (but certainly smart) people thought a rewrite will solve business problems.
> If Firefox will die it's because some overly eager (but certainly smart) people thought a rewrite will solve business problems.
Rust is probably the least terrible business decision to come out of Mozilla in those past 5 years. If Firefox dies it will be because of the executive's rent-seeking behavior.
> I would bet anytime on C rather on Rust. If Firefox will die it's because some overly eager (but certainly smart) people thought a rewrite will solve business problems.
That would be ironic given that a massive rewrite is what tanked Netscape, and gave rise to Mozilla, and eventually Firefox.
Here is a bit of history which might shed some light on the decision.
First and very partial implementation - JavaScript. It was a prototype which I knew I will be throwing away... and I did.
Second attempt, also very partial - Lisp. I used SBCL. Skipping the details here but the result was as follows: got stuck with two different unrelated issues. I did not know would I be stuck with additional issues even if I somehow solve these two.
Third attempt - found a language in which I will never be stuck unable to solve something. C. Also, looked around: bash, Python, Ruby - they are all C. At the time I thought I might be "borrowing" some code from. It didn't happen. I did look though.