Provided by: elvish_0.13+ds1-2ubuntu0.1_amd64 bug

The language

       • Elvish should be a real, expressive programming language.

         Shells  are  often  considered  domain-specific languages (DSL), but Elvish does not restrict itself to
         this notion.  It embraces such concepts as namespaces, first-class functions and exceptions.   Whatever
         you may find in a modern general-purpose programming language is likely to be found in Elvish.

         Elvish   is   not   alone   in   this   respect.    There  are  multiple  ongoing  efforts;  this  page
         (https://github.com/oilshell/oil/wiki/ExternalResources) on the wiki of oilshell (which is one  of  the
         efforts) is a good reference.

       • Elvish  should  try  to  preserve  and extend traditional shell programming techniques, as long as they
         don't conflict with the previous tenet.  Some examples are:

         • Barewords are simply strings.

         • Prefix notation dominates, like Lisp.  For example, arithmetics is done like + 10 (/ 105 5).

         • Pipeline is the main tool for function composition.  To make  pipelines  suitable  for  complex  data
           manipulation, Elvish extends them to be able to carry structured data (as opposed to just bytes).

         • Output capture is the auxiliary tool for function composition.  Elvish functions may write structured
           data directly to the output, and capturing the output yields the same structured data.

The user interface

       • The user interface should be usable without any customizations.  It should be simple and consistent  by
         default:

         • Prefer  to  extend  well-known  functionalities  in  other  shell  to  inventing brand new ones.  For
           instance, in Elvish Ctrl-R summons the "history listing" for searching history, akin  to  how  Ctrl-R
           works in bash, but more powerful.

         • When  a  useful  feature has no prior art in other shells, borrow from other programs.  For instance,
           the navigation mode  (../learn/cookbook.html#navigation-mode),  summoned  by  Ctrl-N,  mimics  Ranger
           (http://ranger.nongnu.org);  while  the  "location  mode"  used for quickly changing location, mimics
           location bars in GUI browsers (and is summoned by the same key combination Ctrl-L).

       • Customizability should be achieved via progammability,  not  an  enormous  inventory  of  options  that
         interact with each other in obscure ways.