Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why multiple namespaces?

What is the rationale behind the design decision to have separate namespaces for values and functions in Common Lisp? What are the arguments for and against it?

like image 581
Vijay Mathew Avatar asked Jul 25 '10 08:07

Vijay Mathew


People also ask

What is the benefit of having multiple namespaces?

You can have multiple namespaces inside a single Kubernetes cluster, and they are all logically isolated from each other. They can help you and your teams with organization, security, and even performance!

What is multiple namespace?

A namespace is a logical container in which all the names are unique; that is, a name can appear in multiple namespaces but cannot appear twice in the same namespace. A namespace is, literally, a space in which to store some names.

Can you have multiple namespaces?

Namespaces organize the objects defined in an assembly. Assemblies can contain multiple namespaces, which can in turn contain other namespaces.

Why do you need multiple clusters?

Multiple clusters have far better scaling capabilities, which will reduce scaling impediments for developers. On the other hand, managing multiple Kubernetes clusters does introduce additional management overhead in a number of areas.


2 Answers

Common Lisp is basically a descendant from the original Lisp 1.5, or rather, a unification of its diverging dialects. The original Lisp 1.5 was what is nowadays called a Lisp-2. Because it was back in the sixties and the fact that you could pass functions to other functions was weird enough. No one would even think of letting them share the same namespace. Almost any language invented today with support for higher order functions and anonymous functions chooses the single-namespace approach. Including Clojure, which is otherwise closer to Common Lisp than to Scheme.

Scheme, like Clojure, wasn't originally a divergent dialect from Lisp 1.5, and for their purposes it makes sense.

Of course, in Clojure, vectors, hash maps, sets and all that can also be applied to arguments, so in a sense a vector in Clojure could be seen as a function that takes a natural number and produces a value from that.

like image 185
Zorf Avatar answered Sep 19 '22 03:09

Zorf


Though there may be plenty of arguments each way in theory, I'd bet that it is largely philosophical in origin. Scheme, a Lisp-1, prefers elegance over practicality, and chose the same define syntax for variables and functions, which makes a single namespace feel natural (and encourages a functional style of programming). Common Lisp tends to prefer practicality and power over elegance, and was an attempt at consensus-building, so seeing an existing two-namespace solution broadly accepted and working well, accepted it.

In practice, however, it mostly means three things:

  • In Common Lisp (and other Lisp-2's), you have to use funcall a lot
  • In Scheme (and other Lisp-1's), you have to be careful not to override needed function names with variables; e.g. function arguments like lst instead of list
  • On the Internet, there will be arguments

It is one major factor in why some people prefer one Lisp to another, however.

like image 41
JasonFruit Avatar answered Sep 21 '22 03:09

JasonFruit