aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc_src/design.hdr
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-04-13 23:11:34 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-04-13 23:13:18 -0700
commit3d7ff9f758247a5d27b2712aeb4ee19d723fa74f (patch)
tree8edff280b3132a813f80049f80b610f57b9fe048 /doc_src/design.hdr
parenta81e70350bfa559de2b0fdd0af4824b83ac8cfb1 (diff)
Remove "law of minimalism" since echo is now a builtin and we're pretty clearly prioritizing performance over modularity.
Diffstat (limited to 'doc_src/design.hdr')
-rw-r--r--doc_src/design.hdr31
1 files changed, 5 insertions, 26 deletions
diff --git a/doc_src/design.hdr b/doc_src/design.hdr
index c6fea80a..2edfefd0 100644
--- a/doc_src/design.hdr
+++ b/doc_src/design.hdr
@@ -37,39 +37,18 @@ Examples:
- Having both aliases and functions is confusing, especially since both of them have limitations and problems. \c fish functions have none of the drawbacks of either syntax.
- The many Posix quoting styles are silly, especially \$''.
+\section sep The law of responsiveness
-\section sep The law of minimalism
-
-The shell should only contain features that cannot be implemented in
-a reasonable way outside of the shell. A large performance decrease,
-as well as some program complexity increase is acceptable in order to
-improve separation.
+The shell should attempt to remain responsive to the user at all times, even in the face of contended or unresponsive filesystems. It is only acceptable to block in response to a user initiated action, such as running a command.
Rationale:
-A modular project is easier to maintain since smaller programs are far
-easier to understand than larger ones. A modular project is also more
-future proof since the modules can be individually
-replaced. Modularity also decreases the severity of bugs, since there
-is good hope that a bug, even a serious one, in one module, does not
-take the whole system down.
+Bad performance increases user-facing complexity, because it trains users to recognize and route around slow use cases. It is also incredibly frustrating.
Examples:
-- Builtin commands should only be created when it cannot be
-avoided. \c echo, \c kill, \c printf and \c time are among the commands
-that fish does not implement internally since they can be provided as
-external commands. Several other commands that are commonly implemented
-as builtins and can not be implemented as external commands,
-including \c type, \c vared, \c pushd and \c popd are implemented as shellscript
-functions in fish.
-- Mathematical calculations, regex matching, generating lists of numbers
-and many other funtions can easily be done in external programs. They
-should not be supported internally by the shell.
-
-The law of minimalism does not imply that a large feature set is
-bad. So long as a feature is not part of the shell itself, but a
-separate command or at least a shellscript function, bloat is fine.
+- Features like syntax highlighting and autosuggestions must perform all of their disk I/O asynchronously.
+- Startup should minimize forks and disk I/O, so that fish can be started even if the system is under load.
\section conf Configurability is the root of all evil