Leo,

R is implemented in C and FORTRAN plus R on top of that. SAS is in C (and
some Go here and there) plus the SAS language in top of that. Mathematica
is implemented in C/C++ with the "Wolfram Language" on top of that. PARI/GP
is implemented in C plus some GP-language code. Macsyma, Maple, Octave,
Python,... follow this pattern too:

3 [glue-like meta-tools that combine various "full stack" tools]: Sage
  :
2 [interactive exploration environment with scripting]: many and various,
including R, SAS, MMA, GP, Macsyma, Axciom, Maple, Python, ...
  :
1 [performant heavy duty computation in compiled language]: C/C++
  :
0 [ultra-performant kernels in C/Assembler/..]: GMP, LAPACK, BLAS, ATLAS,
...

You say Data Science is an application domain where Level 2 features make
sense, where they facilitate understanding by providing an interactive
environment. The evidence supports you, though understand that none of your
examples (or in my expanded set) actually do much at that level: this is
where the "convolve a with b" is specified, but the actual doing is lower,
in Level 0 and 1, where Go-like compiled software in C, C++, or FORTRAN
does the heavy lifting. (I make this point only to clarify what some people
seem not to understand in blogs where they write "my Python giant matrix
solver is just as fast as C/C++/Go, I don't see why C/C++/Go is not faster"
or "I don't see advantage in compiled languages.")

If Go has a place in interactive, interpretive data science it seems to me
that it would be as the substrate language (Levels 0 and 1). Go certainly
has a place in statistics, applied mathematics, and other realms related to
data science if you want to include apps that do work and act on
results--control systems, analysis tools, etc. But to create an interactive
"play" space I'd (again, just me) be inclined to follow the PARI/GP model
with a Go kind of PARI and a domain-friendly GP.

The high-level GP (Mathematica, Maple, GP, SAS, ...) in the existing
systems often seems to me to be weak, not designed as a first-class
programming language but more like an endless accretion of script enabling
fixes and patches. I feel this especially in the way local variables are
defined which often feels brutish and awkward, but that extends to many
subtleties. It is natural that it tends this way--developers were focused
on the core and just needed "a way" to bind it all together. The successful
projects span decades and unanticipated new application domains so have
accumulated the most duct tape.

Another goodness of this two-level scheme is that the top language can be
"faulty" in ways that are comfortable. For example, think how many scalar
variables you see in C/C++/FORTRAN/Go: "i:= 3" is the bulk of variables.
But in R, there are (at least when I last looked) no scalar variables(!),
but you can get by with vectors of length 1. This would not do, generally,
but for R, it may be perfect. The two-level strata design of which PARI/GP
is one of the best implementations, makes this kind of field-of-use
tailoring work fine in practice. That's important, it is matching the
language's exposed concepts to the problem domain.

I don't see any of this as a weakness or strength of Go, or as something to
address in the case of a REPL, because it's not Go that you'd want a REPL
for, instead something that knows about data, or Diophantine equations, or
moon rocks, or whatever the domain may be and its natural forms of notation.

Michael

On Tue, Jul 16, 2019 at 10:18 AM Slonik Az <slonik...@gmail.com> wrote:

> Hi Gophers!
> I was thinking to start a Go project in the area of Data Science that
> would allow for convenient and easy concurrent data processing but at the
> end decided against it mainly because of two reasons:
>
> (1) Almost all data science projects start with a data exploratory
> analysis of some sort. Unfortunately, Go does not have REPL. Go Playground
> is not a substitute, for it does not preserve state. On every iteration
> Playground recompiles and relaunches the entire program, reads all the data
> anew, performs all the calculations. Not good for an interactive "rapid
> fire".
> REPL in a static AOT compiled language is hard, yet Swift somehow managed
> to implement it.
>
> (2) Even if somebody implements incremental Go compiler and provides a
> proper REPL, people will be longing for data analysis "at your fingertips",
> missing rich pandas-like API, overloaded operators (python style) and
> dynamical scoping (like in R). Minimalistic design of Go is unlikely to
> accommodate all of these "convenience" constructs and for a good reason.
>
> I think Go has a place in highly performant concurrent data pipelines and
> transformations but I am less optimistic it would ever play in the field
> dominated currently by Python and R and possibly by Julia in the future. I
> am curious of what am I missing in this line of thinking?
>
> Thanks,
> --Leo
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/6009a15f-d944-449e-8bd7-e167b5e7d84d%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/6009a15f-d944-449e-8bd7-e167b5e7d84d%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>


-- 

*Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>*

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CALoEmQxdt5qkj6GxfOMHXoWvpxv6x%3DkECLOp0Y7zDBZScuJnxQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to