I basically agree with Kevin, with various additions and quibbles:

Personal taste in languages and frameworks is much more important in
an open source project than in a proprietary venture.  If I'm looking
for free help in experimenting with notions about distributed NuPIC,
I'd want to pick a language and framework that makes it easy and fun.
For me, this would be Elixir, Erlang, OTP, etc.

However, I recognize that others have different tastes.  More to the
point, many enterprises and projects have already made irreversible
(at least in the short run) implementation decisions.  However, if you
look inside these operations, you will often find components written
in "non-standard" languages and frameworks.  CouchDB and Riak, for
example, for example, are both written in Erlang:

  http://couchdb.apache.org
  https://www.erlang-solutions.com/products/riak-nosql-database
  
This software is typically connected to the rest of the code base via
network-friendly communication protocols (eg, messages, REST).  This
is why I am arguing for an interoperable, message-based interface (eg,
Cap’n Proto), along with any desired language-specific bindings.  A
substantial, open-ended test suite that uses this interface is also
critical, as it keeps the implementation options open.


On Feb 6, 2015, at 07:42, cogmission1 . <[email protected]> wrote:
> How does Elixir/Erlang speak to the network issue?
> What about state monitoring across network nodes?
> What about debugging nodes on a network?
> What about ease of setup and distribution?
> What about interoperation on heterogenous architectures?
> We're talking about ease and maintainability here...

Erlang was developed a few decades ago at the Ericsson Computer Science
Laboratory.  It is used worldwide to support telephone switches.  These
systems run 24/7, with extremely high reliability.  So, for example, it
isn't generally OK to reboot a switch handling bazillions of calls.

Consequently, Erlang and OTP have some unusual approaches and tools.
Developers can log into a running system and edit the code.  The new
version will be brought into play in a controlled manner.  Servers
can be added (or removed) "on the fly"; application code does not need
to be written in a special manner to take advantage of this.  A system
of supervisors and monitors provides support for fail-soft designs.

Erlang runs on most Unix and Unix-like systems and on the currently
popular flavors of Windows.  Many people run Erlang on many different
types of embedded systems such as mobile telephones, telecommunication
switching equipment, and in-car electronics.  For more details, see:

  http://www.erlang.org/faq/implementations


Elixir is a recent addition to the Erlang universe.  It borrows ideas
from Clojure, syntax from Python and Ruby, etc.  It provides the usual
sorts of tools that (say) a Ruby on Rails programmer would want (eg, a
REPL, a build tool, integrated support for documentation and testing).

Elixir is a pragmatic, impure functional programming language.  It is
dynamically typed, with optional static typing.  Storage locations are
immutable (with structural sharing), but variables can be re-assigned.
There is no shared mutable state; lightweight processes replace threads.

Unlike JVM languages, Erlang's VM supports tail-call optimization for
efficient recursion.  However, the common practice is to use list
comprehensions, lazy data streams, pattern matching, etc.

I have been working on a page that shows Elixir's intellectual history:

  http://wiki.cfcl.com/Projects/Elixir/Provenance


> The JVM's appropriateness for this task is as apparent as gravity...
> I don't see how this can be disputed?  We want to take advantage of
> the wealth of development talent, and time-to-market ease of
> developing in Java - not introduce another level of obscurity? 

I am NOT suggesting that the NuPIC community leap into Elixir, Erlang,
and OTP.  I just want the ability to use them myself (along with anyone
else who likes the idea).

 -- 
http://www.cfcl.com/rdm           Rich Morin           [email protected]
http://www.cfcl.com/rdm/resume    San Bruno, CA, USA   +1 650-873-7841

Software system design, development, and documentation



Reply via email to